Skip to content

Commit 20433fc

Browse files
committed
Unify build scripts
1 parent 746eb37 commit 20433fc

7 files changed

Lines changed: 204 additions & 1 deletion

File tree

.github/workflows/sysroot.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: System roots
2+
3+
on:
4+
push:
5+
branches:
6+
- '**'
7+
8+
jobs:
9+
build:
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@main
16+
with:
17+
submodules: true
18+
- name: Generate system roots
19+
run: |
20+
bash './sysroot.sh'
21+
- name: Upload artifact
22+
uses: actions/upload-artifact@main
23+
with:
24+
path: ./*.xz*
25+
- name: Create release
26+
uses: softprops/action-gh-release@master
27+
with:
28+
tag_name: sysroot
29+
name: NetBSD sysroots
30+
files: ./*.xz*
31+
draft: false
32+
prerelease: false
33+
fail_on_unmatched_files: true
34+
env:
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.diff
2+
*.patch
3+
*.orig
4+
*.rej

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This is a GCC cross-compiler targeting NetBSD. It uses the patchset from NetBSD’s [pkgsrc](https://github.com/NetBSD/pkgsrc/tree/trunk/lang/gcc15) repository, rebased on top of the latest Binutils and GCC.
44

5-
## Releases
5+
## releases
66

77
The current release is based on GCC 15 and supports cross-compiling for the `x86`, `x86_64`, and `aarch64` targets. The toolchain includes support for the C and C++ frontends.
88

sysroot.sh

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
#!/usr/bin/env bash
2+
3+
set -eu
4+
5+
declare -r workdir="${PWD}"
6+
declare -r temporary_directory='/tmp/netbsd-sysroot'
7+
8+
declare -ra targets=(
9+
# 'hpcsh'
10+
# 'vax'
11+
# 'emips'
12+
# 'evbppc'
13+
# 'hppa'
14+
'amd64'
15+
'i386'
16+
# 'alpha'
17+
# 'sparc'
18+
# 'sparc64'
19+
'evbarm-aarch64'
20+
# 'evbarm-earmv7hf'
21+
# 'evbarm-earmv6hf'
22+
)
23+
24+
[ -d "${temporary_directory}" ] || mkdir "${temporary_directory}"
25+
26+
cd "${temporary_directory}"
27+
28+
for target in "${targets[@]}"; do
29+
case "${target}" in
30+
amd64)
31+
declare triplet='x86_64-unknown-netbsd';;
32+
i386)
33+
declare triplet='i386-unknown-netbsdelf';;
34+
emips)
35+
declare triplet='mips-unknown-netbsd';;
36+
alpha)
37+
declare triplet='alpha-unknown-netbsd';;
38+
hppa)
39+
declare triplet='hppa-unknown-netbsd';;
40+
sparc)
41+
declare triplet='sparc-unknown-netbsdelf';;
42+
sparc64)
43+
declare triplet='sparc64-unknown-netbsd';;
44+
vax)
45+
declare triplet='vax-unknown-netbsdelf';;
46+
hpcsh)
47+
declare triplet='shle-unknown-netbsdelf';;
48+
evbppc)
49+
declare triplet='powerpc-unknown-netbsd';;
50+
evbarm-aarch64)
51+
declare triplet='aarch64-unknown-netbsd';;
52+
evbarm-earmv7hf)
53+
declare triplet='armv7-unknown-netbsdelf-eabihf';;
54+
evbarm-earmv6hf)
55+
declare triplet='armv6-unknown-netbsdelf-eabihf';;
56+
esac
57+
58+
declare netbsd_version='10.1'
59+
60+
declare url="https://ftp.netbsd.org/pub/NetBSD/NetBSD-${netbsd_version}/${target}/binary/sets"
61+
62+
declare extension='.tar.xz'
63+
64+
if [ "${target}" = 'i386' ]; then
65+
extension='.tgz'
66+
fi
67+
68+
declare base_url="${url}/base${extension}"
69+
declare comp_url="${url}/comp${extension}"
70+
71+
declare base_output="${temporary_directory}/$(basename "${base_url}")"
72+
declare comp_output="${temporary_directory}/$(basename "${comp_url}")"
73+
74+
declare sysroot_directory="${workdir}/${triplet}"
75+
declare tarball_filename="${sysroot_directory}.tar.xz"
76+
77+
[ -d "${sysroot_directory}" ] || mkdir "${sysroot_directory}"
78+
79+
echo "- Generating sysroot for ${triplet}"
80+
81+
if [ -f "${tarball_filename}" ]; then
82+
echo "+ Already exists. Skip"
83+
continue
84+
fi
85+
86+
echo "- Fetching data from ${base_url}"
87+
88+
curl \
89+
--url "${base_url}" \
90+
--retry '30' \
91+
--retry-all-errors \
92+
--retry-delay '0' \
93+
--retry-max-time '0' \
94+
--location \
95+
--silent \
96+
--output "${base_output}"
97+
98+
echo "- Unpacking ${base_output}"
99+
100+
tar \
101+
--directory="${sysroot_directory}" \
102+
--strip=2 \
103+
--extract \
104+
--file="${base_output}" \
105+
'./usr/lib' \
106+
'./usr/include'
107+
108+
tar \
109+
--directory="${sysroot_directory}" \
110+
--extract \
111+
--file="${base_output}" \
112+
'./lib'
113+
114+
echo "- Fetching data from ${base_url}"
115+
116+
curl \
117+
--url "${comp_url}" \
118+
--retry '30' \
119+
--retry-all-errors \
120+
--retry-delay '0' \
121+
--retry-max-time '0' \
122+
--location \
123+
--silent \
124+
--output "${comp_output}"
125+
126+
echo "- Unpacking ${comp_output}"
127+
128+
tar \
129+
--directory="${sysroot_directory}" \
130+
--strip=2 \
131+
--extract \
132+
--file="${comp_output}" \
133+
'./usr/lib' \
134+
'./usr/include'
135+
136+
# Update permissions
137+
while read name; do
138+
if [ -f "${name}" ]; then
139+
chmod 644 "${name}"
140+
elif [ -d "${name}" ]; then
141+
chmod 755 "${name}"
142+
fi
143+
done <<< "$(find "${sysroot_directory}/include" "${sysroot_directory}/lib")"
144+
145+
echo "- Creating tarball at ${tarball_filename}"
146+
147+
tar --directory="$(dirname "${sysroot_directory}")" --create --file=- "$(basename "${sysroot_directory}")" | xz --threads='0' --extreme --compress -9 --memlimit-compress='100%' > "${tarball_filename}"
148+
sha256sum "${tarball_filename}" | sed "s|$(dirname "${sysroot_directory}")/||" > "${tarball_filename}.sha256"
149+
150+
rm --force --recursive "${sysroot_directory}"
151+
rm --force --recursive "${temporary_directory}/"*
152+
done

tools/dev/cmake/aarch64-unknown-netbsd.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ endif()
1313
set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-gcc" CACHE FILEPATH "cc")
1414
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-g++" CACHE FILEPATH "c++")
1515
set(CMAKE_AR "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ar" CACHE FILEPATH "ar")
16+
set(CMAKE_C_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
17+
set(CMAKE_CXX_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
1618
set(CMAKE_RANLIB "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ranlib" CACHE FILEPATH "ranlib")
19+
set(CMAKE_C_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
20+
set(CMAKE_CXX_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
1721
set(CMAKE_STRIP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-strip" CACHE FILEPATH "strip")
1822
set(CMAKE_OBJCOPY "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objcopy" CACHE FILEPATH "objcopy")
1923
set(CMAKE_OBJDUMP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objdump" CACHE FILEPATH "objdump")

tools/dev/cmake/i386-unknown-netbsdelf.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ endif()
1313
set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-gcc" CACHE FILEPATH "cc")
1414
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-g++" CACHE FILEPATH "c++")
1515
set(CMAKE_AR "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ar" CACHE FILEPATH "ar")
16+
set(CMAKE_C_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
17+
set(CMAKE_CXX_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
1618
set(CMAKE_RANLIB "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ranlib" CACHE FILEPATH "ranlib")
19+
set(CMAKE_C_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
20+
set(CMAKE_CXX_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
1721
set(CMAKE_STRIP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-strip" CACHE FILEPATH "strip")
1822
set(CMAKE_OBJCOPY "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objcopy" CACHE FILEPATH "objcopy")
1923
set(CMAKE_OBJDUMP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objdump" CACHE FILEPATH "objdump")

tools/dev/cmake/x86_64-unknown-netbsd.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ endif()
1313
set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-gcc" CACHE FILEPATH "cc")
1414
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-g++" CACHE FILEPATH "c++")
1515
set(CMAKE_AR "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ar" CACHE FILEPATH "ar")
16+
set(CMAKE_C_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
17+
set(CMAKE_CXX_COMPILER_AR "${CMAKE_AR}" CACHE FILEPATH "ar")
1618
set(CMAKE_RANLIB "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-ranlib" CACHE FILEPATH "ranlib")
19+
set(CMAKE_C_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
20+
set(CMAKE_CXX_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE FILEPATH "ranlib")
1721
set(CMAKE_STRIP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-strip" CACHE FILEPATH "strip")
1822
set(CMAKE_OBJCOPY "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objcopy" CACHE FILEPATH "objcopy")
1923
set(CMAKE_OBJDUMP "${TOOLCHAIN_PATH}/bin/${TOOLCHAIN_PREFIX}-objdump" CACHE FILEPATH "objdump")

0 commit comments

Comments
 (0)