summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/stage-0-binutils.TARGETS74
-rw-r--r--src/bootstrap/stage-0-busybox.TARGETS63
-rw-r--r--src/bootstrap/stage-0-gcc.TARGETS150
-rw-r--r--src/bootstrap/stage-0-make.TARGETS54
-rw-r--r--src/bootstrap/stage-1-gcc.TARGETS156
-rw-r--r--src/compilers/clang-16-native.TARGETS226
-rw-r--r--src/compilers/clang-17-native.TARGETS226
-rw-r--r--src/compilers/gcc-13-musl-static.TARGETS121
-rw-r--r--src/compilers/gcc-13-musl.TARGETS161
-rw-r--r--src/compilers/gcc-13-native.TARGETS193
-rw-r--r--src/tools/busybox-1.36.TARGETS21
-rw-r--r--src/tools/cmake-3.27.TARGETS43
-rw-r--r--src/tools/make-4.4.TARGETS20
-rw-r--r--src/tools/python-3.12.TARGETS36
14 files changed, 1544 insertions, 0 deletions
diff --git a/src/bootstrap/stage-0-binutils.TARGETS b/src/bootstrap/stage-0-binutils.TARGETS
new file mode 100644
index 0000000..3a42b4a
--- /dev/null
+++ b/src/bootstrap/stage-0-binutils.TARGETS
@@ -0,0 +1,74 @@
+{ "bootstrap":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "bootstrap-ar"
+ }
+, "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "binutils"
+ }
+, "files": {"type": "install", "deps": [["TREE", null, "."]]}
+, "flag_files":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "cmds":
+ [ "echo 'int main() {int i=1; return *((char*)&i) == 1;}' > endian_test.c"
+ , "${CC} -o endian_test endian_test.c"
+ , "CFLAGS=\"-D__$(./endian_test && echo BIG || echo LITTLE)_ENDIAN__=1\""
+ , "echo \"${CFLAGS}\" > ${DESTDIR}/cflags"
+ ]
+ , "outs": ["cflags"]
+ }
+, "staged_bootstrap_sources_and_flags":
+ { "type": "install"
+ , "dirs":
+ [ ["files", "src"]
+ , ["flag_files", "flags"]
+ , [["@", "scripts", "", "bootstrap-ar"], "."]
+ ]
+ }
+, "bootstrap-ar":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["staged_bootstrap_sources_and_flags"]
+ , "localbase":
+ [["@", "busybox", "", "bootstrap"], ["@", "make", "", "bootstrap"]]
+ , "cmds":
+ [ "export LD=${CC}"
+ , "export MAKE=${LOCALBASE}/bin/make"
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export CFLAGS=\"$(cat flags/cflags)\""
+ , "./bootstrap-ar.sh src >build.log 2>&1 || (cat build.log && exit 1)"
+ , "mv ar ${DESTDIR}/bin/"
+ ]
+ , "outs": ["bin/ar"]
+ }
+, "binutils":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["staged_bootstrap_sources_and_flags"]
+ , "localbase":
+ [ ["@", "busybox", "", "bootstrap"]
+ , ["@", "make", "", "bootstrap"]
+ , "bootstrap"
+ ]
+ , "cmds":
+ [ "export LD=${CC}"
+ , "export RANLIB=true"
+ , "export AR=${LOCALBASE}/bin/ar"
+ , "export MAKE=${LOCALBASE}/bin/make"
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export CFLAGS=\"$(cat flags/cflags)\""
+ , "unset LDFLAGS"
+ , "if [ -f /lib/ld-musl-$(uname -m).so.1 ]; then"
+ , " ln -s /lib/ld-musl-$(uname -m).so.1 ${TMPDIR}/ldd"
+ , " export PATH=$PATH:${TMPDIR}"
+ , "fi"
+ , "mkdir build"
+ , "cd build"
+ , "../src/configure --prefix=/ --disable-nls --enable-gprofng=no --disable-werror --enable-deterministic-archives >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j1 MAKEINFO=true >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j1 MAKEINFO=true DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "for f in $(find ${DESTDIR} -type f -name '*.la'); do sed -i 's|'$(pwd)'|/build|g' $f; done"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/bootstrap/stage-0-busybox.TARGETS b/src/bootstrap/stage-0-busybox.TARGETS
new file mode 100644
index 0000000..3d0c315
--- /dev/null
+++ b/src/bootstrap/stage-0-busybox.TARGETS
@@ -0,0 +1,63 @@
+{ "bootstrap":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "bootstrap-essentials"
+ }
+, "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "busybox"
+ }
+, "files": {"type": "install", "deps": [["TREE", null, "."]]}
+, "staged_bootstrap_sources":
+ { "type": "install"
+ , "dirs":
+ [["files", "src"], [["@", "scripts", "", "bootstrap-busybox"], "."]]
+ }
+, "bootstrap-essentials":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["staged_bootstrap_sources"]
+ , "cmds":
+ [ "cd bootstrap-busybox"
+ , "./bootstrap.sh ../src editors awk >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src editors cmp >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src editors sed >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src editors diff >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src editors patch >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src archival tar >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src archival bzip2 >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src findutils grep >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "./bootstrap.sh ../src findutils find >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "mv awk cmp sed diff patch tar bzip2 grep find ${DESTDIR}/bin/"
+ ]
+ , "outs":
+ [ "bin/awk"
+ , "bin/cmp"
+ , "bin/sed"
+ , "bin/diff"
+ , "bin/patch"
+ , "bin/tar"
+ , "bin/bzip2"
+ , "bin/grep"
+ , "bin/find"
+ ]
+ }
+, "staged-gcc":
+ {"type": "install", "dirs": [[["@", "gcc", "", "toolchain"], "gcc"]]}
+, "busybox":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["files"]
+ , "localbase": ["bootstrap", ["@", "make", "", "bootstrap"], "staged-gcc"]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export PATH=${LOCALBASE}/bin:${LOCALBASE}/gcc/bin:$PATH"
+ , "export MAKE=${LOCALBASE}/bin/make"
+ , "export CC=${LOCALBASE}/gcc/bin/gcc"
+ , "export CXX=${LOCALBASE}/gcc/bin/g++"
+ , "${MAKE} HOSTCC=${CC} HOSTCXX=${CXX} CONFIG_EXTRA_LDLIBS=\"m resolv\" defconfig >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} HOSTCC=${CC} HOSTCXX=${CXX} CONFIG_EXTRA_LDLIBS=\"m resolv\" >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} HOSTCC=${CC} HOSTCXX=${CXX} CONFIG_EXTRA_LDLIBS=\"m resolv\" CONFIG_PREFIX=${DESTDIR} install >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/bootstrap/stage-0-gcc.TARGETS b/src/bootstrap/stage-0-gcc.TARGETS
new file mode 100644
index 0000000..8a86620
--- /dev/null
+++ b/src/bootstrap/stage-0-gcc.TARGETS
@@ -0,0 +1,150 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "gcc-4.7.4"
+ }
+, "files": {"type": "install", "deps": [["TREE", null, "."]]}
+, "separate_sources_and_patches":
+ { "type": "install"
+ , "dirs":
+ [ ["files", "gcc"]
+ , [["@", "gmp", "", "files"], "gmp"]
+ , [["@", "mpc", "", "files"], "mpc"]
+ , [["@", "mpfr", "", "files"], "mpfr"]
+ , [["@", "patches", "", "gcc-4.7.4"], "patches"]
+ ]
+ }
+, "combined_patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["separate_sources_and_patches"]
+ , "localbase": [["@", "busybox", "", "bootstrap"]]
+ , "cmds":
+ [ "export PATCH=${LOCALBASE}/bin/patch"
+ , "mv gmp mpc mpfr gcc/."
+ , "cp -r gcc/. ${DESTDIR}/. && chmod -R +w ${DESTDIR}/*"
+ , "cd ${DESTDIR}"
+ , "echo '#include <sys/ucontext.h>\nucontext_t foo;' > ${TMPDIR}/test.c"
+ , "if \"${CC}\" -c ${TMPDIR}/test.c -o ${TMPDIR}/test.o >/dev/null 2>&1; then"
+ , " ${PATCH} -p1 < ${WORKDIR}/patches/gcc-4.7.4/use-ucontext_t.patch >/dev/null"
+ , "fi"
+ , "for p in $(cat ${WORKDIR}/patches/gcc-4.7.4/various-fixes/series); do"
+ , " ${PATCH} -p1 < ${WORKDIR}/patches/gcc-4.7.4/various-fixes/$p >/dev/null"
+ , "done"
+ , "for p in $(cat ${WORKDIR}/patches/gcc-4.7.4/musl-support/series); do"
+ , " ${PATCH} -p1 < ${WORKDIR}/patches/gcc-4.7.4/musl-support/$p >/dev/null"
+ , "done"
+ , "for p in $(cat ${WORKDIR}/patches/gcc-4.7.4/reproducibility/series); do"
+ , " ${PATCH} -p1 < ${WORKDIR}/patches/gcc-4.7.4/reproducibility/$p >/dev/null"
+ , "done"
+ ]
+ , "out_dirs": ["."]
+ }
+, "staged_sources_and_binutils":
+ { "type": "install"
+ , "dirs":
+ [ ["combined_patched_sources", "src"]
+ , [["@", "binutils", "", "toolchain"], "binutils"]
+ ]
+ }
+, "gcc-4.7.4":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "arguments_config": ["TOOLCHAIN_CONFIG"]
+ , "project": ["staged_sources_and_binutils"]
+ , "localbase":
+ [["@", "busybox", "", "bootstrap"], ["@", "make", "", "bootstrap"]]
+ , "cmds":
+ [ { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_HDR_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_HDR_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_LIB_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_LIB_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_DYNAMIC_LINKER='"
+ , { "type": "lookup"
+ , "key": "HOST_DYNAMIC_LINKER"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export MAKEINFO=missing"
+ , "export MAKE=${LOCALBASE}/bin/make"
+ , "export PATH=$(pwd)/binutils/bin:${LOCALBASE}/bin:$PATH"
+ , "export BUILD_ROOT_DIR=${ACTION_DIR}"
+ , "unset CFLAGS LDFLAGS"
+ , "CONF_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_HDR_DIR\" ]; then"
+ , " CONF_ARGS=\"$CONF_ARGS --with-sysroot=/ --with-native-system-header-dir=$HOST_SYSTEM_HDR_DIR\""
+ , "fi"
+ , "LINK_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_LIB_DIR\" ]; then"
+ , " export LIBRARY_PATH=\"$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -B$HOST_SYSTEM_LIB_DIR -L$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker -rpath -Xlinker $HOST_SYSTEM_LIB_DIR\""
+ , "fi"
+ , "if [ -n \"$HOST_DYNAMIC_LINKER\" ]; then"
+ , " mv src/gcc/config src/gcc/config.orig"
+ , " cp -r src/gcc/config.orig src/gcc/config"
+ , " chmod -R +w src/gcc/config"
+ , " for h in src/gcc/config/*/*.h; do"
+ , " grep -q _DYNAMIC_LINKER \"$h\" || continue"
+ , " sed -i 's|\\(^#define [A-Z]*_DYNAMIC_LINKER[A-Z0-9]* *\"\\).*\"|\\1'$HOST_DYNAMIC_LINKER'\"|g' \"$h\""
+ , " done"
+ , "fi"
+ , "export LDFLAGS_FOR_TARGET=\"${LINK_ARGS}\""
+ , "if [ -f /lib/ld-musl-$(uname -m).so.1 ]; then"
+ , " ln -s /lib/ld-musl-$(uname -m).so.1 ${TMPDIR}/ldd"
+ , " export PATH=$PATH:${TMPDIR}"
+ , "fi"
+ , "cp -r binutils/. ${DESTDIR}/."
+ , "chmod -R +w ${DESTDIR}/*"
+ , "cd src"
+ , "export check_msgfmt=no # do not use system's msgfmt, if available"
+ , "./configure --prefix=/ --enable-languages=c,c++ --disable-multilib --disable-shared --disable-lto --disable-gcov --disable-libmudflap --disable-libgomp --disable-libssp --disable-nls --disable-libitm ${CONF_ARGS} >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "for f in $(find . -type f | grep '\\.o$'); do strip -g $f; done"
+ , "for f in $(find . -type f | grep '\\.a$'); do strip -g $f; done"
+ , "cd ${DESTDIR}/bin"
+ , "mv gcc gcc.real"
+ , "mv g++ g++.real"
+ , "printf '#!/bin/sh\\nexport PATH=\"$(dirname $0):$PATH\"\\nexec gcc.real %s \"$@\"' \"${LINK_ARGS}\" >gcc"
+ , "printf '#!/bin/sh\\nexport PATH=\"$(dirname $0):$PATH\"\\nexec g++.real %s \"$@\"' \"${LINK_ARGS}\" >g++"
+ , "chmod +x gcc g++"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/bootstrap/stage-0-make.TARGETS b/src/bootstrap/stage-0-make.TARGETS
new file mode 100644
index 0000000..3a38240
--- /dev/null
+++ b/src/bootstrap/stage-0-make.TARGETS
@@ -0,0 +1,54 @@
+{ "bootstrap":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "bootstrap-make"
+ }
+, "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "make"
+ }
+, "files": {"type": "install", "deps": [["TREE", null, "."]]}
+, "bootstrap-make":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["files"]
+ , "localbase": [["@", "busybox", "", "bootstrap"]]
+ , "cmds":
+ [ "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export LD=${CC}"
+ , "export AR=true"
+ , "export RANLIB=true"
+ , "cd ${TMPDIR}"
+ , "${WORKDIR}/configure --prefix=/ --disable-nls --disable-rpath --disable-load --disable-dependency-tracking >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "./build.sh >build.log 2>&1 || true"
+ , "${CC} -o make $(ls src/*.o lib/*.o | LC_ALL=C sort) >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "mv make ${DESTDIR}/bin/"
+ ]
+ , "outs": ["bin/make"]
+ }
+, "staged-localbase":
+ { "type": "install"
+ , "dirs":
+ [ [["@", "busybox", "", "toolchain"], "busybox"]
+ , ["bootstrap", "make"]
+ , [["@", "gcc", "", "toolchain"], "gcc"]
+ ]
+ }
+, "make":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["files"]
+ , "localbase": ["staged-localbase"]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "unset CFLAGS LDFLAGS"
+ , "export PATH=${LOCALBASE}/busybox/bin:${LOCALBASE}/busybox/usr/bin:${LOCALBASE}/make/bin:${LOCALBASE}/gcc/bin:$PATH"
+ , "export MAKE=${LOCALBASE}/make/bin/make"
+ , "export CC=${LOCALBASE}/gcc/bin/gcc"
+ , "export CXX=unused"
+ , "./configure --prefix=/ --disable-rpath --disable-load >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=missing >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=missing DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/bootstrap/stage-1-gcc.TARGETS b/src/bootstrap/stage-1-gcc.TARGETS
new file mode 100644
index 0000000..42282ca
--- /dev/null
+++ b/src/bootstrap/stage-1-gcc.TARGETS
@@ -0,0 +1,156 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "gcc-10.2.0"
+ }
+, "original_sources_and_patches":
+ { "type": "install"
+ , "dirs":
+ [[["TREE", null, "."], "src"], [["@", "patches", "", "gcc-10"], "patches"]]
+ }
+, "patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["original_sources_and_patches"]
+ , "cmds":
+ [ "cp -r src/. ${DESTDIR}/."
+ , "cd ${DESTDIR}"
+ , "chmod -R +w *"
+ , "patch -p1 < ${WORKDIR}/patches/gcc-10/detect-glibc-via-__GLIBC__.patch >/dev/null"
+ , "for p in $(cat ${WORKDIR}/patches/gcc-10/reproducibility/series); do"
+ , " patch -p1 < ${WORKDIR}/patches/gcc-10/reproducibility/$p >/dev/null"
+ , "done"
+ ]
+ , "out_dirs": ["."]
+ }
+, "patched_separate_sources":
+ { "type": "install"
+ , "dirs":
+ [ ["patched_sources", "src"]
+ , [["@", "gmp", "", "files"], "gmp"]
+ , [["@", "mpc", "", "files"], "mpc"]
+ , [["@", "mpfr", "", "files"], "mpfr"]
+ ]
+ }
+, "binutils":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["@", "binutils", "", "files"]]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "unset LDFLAGS"
+ , "if [ -f /lib/ld-musl-$(uname -m).so.1 ]; then"
+ , " ln -s /lib/ld-musl-$(uname -m).so.1 ${TMPDIR}/ldd"
+ , " export PATH=$PATH:${TMPDIR}"
+ , "fi"
+ , "mkdir build"
+ , "cd build"
+ , "../configure --prefix=/ --disable-nls --enable-gprofng=no --disable-werror --enable-deterministic-archives >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=true >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=true DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "find ${DESTDIR} -type f -name '*.la' -exec sed -i 's|'$(pwd)'|/build|g' {} \\;"
+ ]
+ , "out_dirs": ["."]
+ }
+, "gcc-10.2.0":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "arguments_config": ["TOOLCHAIN_CONFIG"]
+ , "project": ["patched_separate_sources"]
+ , "localbase": ["binutils"]
+ , "cmds":
+ [ { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_HDR_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_HDR_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_LIB_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_LIB_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_DYNAMIC_LINKER='"
+ , { "type": "lookup"
+ , "key": "HOST_DYNAMIC_LINKER"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export BUILD_ROOT_DIR=${ACTION_DIR}"
+ , "unset CFLAGS LDFLAGS"
+ , "CONF_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_HDR_DIR\" ]; then"
+ , " CONF_ARGS=\"$CONF_ARGS --with-sysroot=/ --with-native-system-header-dir=$HOST_SYSTEM_HDR_DIR\""
+ , "fi"
+ , "LINK_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_LIB_DIR\" ]; then"
+ , " export LIBRARY_PATH=\"$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -B$HOST_SYSTEM_LIB_DIR -L$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker -rpath -Xlinker $HOST_SYSTEM_LIB_DIR\""
+ , "fi"
+ , "if [ -n \"$HOST_DYNAMIC_LINKER\" ]; then"
+ , " mv src/gcc/config src/gcc/config.orig"
+ , " cp -r src/gcc/config.orig src/gcc/config"
+ , " chmod -R +w src/gcc/config"
+ , " for h in src/gcc/config/*/*.h; do"
+ , " grep -q _DYNAMIC_LINKER \"$h\" || continue"
+ , " sed -i 's|\\(^#define [A-Z]*_DYNAMIC_LINKER[A-Z0-9]* *\"\\).*\"|\\1'$HOST_DYNAMIC_LINKER'\"|g' \"$h\""
+ , " done"
+ , "fi"
+ , "export LDFLAGS_FOR_TARGET=\"${LINK_ARGS}\""
+ , "if [ -f /lib/ld-musl-$(uname -m).so.1 ]; then"
+ , " ln -s /lib/ld-musl-$(uname -m).so.1 ${TMPDIR}/ldd"
+ , " export PATH=$PATH:${TMPDIR}"
+ , "fi"
+ , "cp -r ${LOCALBASE}/. ${DESTDIR}/."
+ , "chmod -R +w ${DESTDIR}/*"
+ , "mv gmp mpc mpfr src/."
+ , "cd src"
+ , "export check_msgfmt=no # do not use system's msgfmt, if available"
+ , "./configure --prefix=/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --disable-libsanitizer ${CONF_ARGS} >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "strip ./bin/*"
+ , "find . -type f -name '*.so*' -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"strip -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"strip -g {}\" \\;"
+ , "if [ -n \"${LINK_ARGS}\" ]; then"
+ , " cd ${DESTDIR}/bin"
+ , " mv gcc gcc.real"
+ , " mv g++ g++.real"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/gcc.real %s \"$@\"' \"${LINK_ARGS}\" >gcc"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/g++.real %s \"$@\"' \"${LINK_ARGS}\" >g++"
+ , " chmod +x gcc g++"
+ , "fi"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/compilers/clang-16-native.TARGETS b/src/compilers/clang-16-native.TARGETS
new file mode 100644
index 0000000..1b256fc
--- /dev/null
+++ b/src/compilers/clang-16-native.TARGETS
@@ -0,0 +1,226 @@
+{ "toolchain":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "TARGET_ARCH", "BUILD_ARCH"]
+ , "config":
+ { "type": "if"
+ , "cond":
+ { "type": "=="
+ , "$1":
+ { "type": "var"
+ , "name": "TARGET_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ , "$2":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ }
+ , "then": {"type": "empty_map"}
+ , "else":
+ { "type": "fail"
+ , "msg": "clang-native does not support cross-compilation."
+ }
+ }
+ , "target": "toolchain_native"
+ }
+, "toolchain_native":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "clang-native"
+ }
+, "runlibs":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libstdc++"
+ }
+, "runlibs_libcxx":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libc++"
+ }
+, "original_sources_and_patches":
+ { "type": "install"
+ , "dirs":
+ [ [["TREE", null, "."], "src"]
+ , [["@", "patches", "", "clang-16"], "patches"]
+ ]
+ }
+, "patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["original_sources_and_patches"]
+ , "cmds":
+ [ "cp -r src/. ${DESTDIR}/."
+ , "cd ${DESTDIR}"
+ , "chmod -R +w *"
+ , "patch -p1 < ${WORKDIR}/patches/clang-16/libcxx-musl-support.patch >/dev/null"
+ ]
+ , "out_dirs": ["."]
+ }
+, "clang-native":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "arguments_config": ["TOOLCHAIN_CONFIG"]
+ , "project": ["patched_sources"]
+ , "localbase": [["@", "binutils", "", "binutils"]]
+ , "cmds":
+ [ { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_HDR_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_HDR_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_LIB_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_LIB_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_DYNAMIC_LINKER='"
+ , { "type": "lookup"
+ , "key": "HOST_DYNAMIC_LINKER"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , "NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "HOST_TRIPLE=$(${CC} -dumpmachine)"
+ , "GCC_TOOLCHAIN=$(dirname ${CC})/.."
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export PKG_CONFIG=false"
+ , "export LD_LIBRARY_PATH=\"${GCC_TOOLCHAIN}/lib:${GCC_TOOLCHAIN}/lib32:${GCC_TOOLCHAIN}/lib64\""
+ , "unset LDFLAGS"
+ , "CONF_ARGS="
+ , "INCL_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_HDR_DIR\" ]; then"
+ , " CONF_ARGS=\"-DC_INCLUDE_DIRS=$HOST_SYSTEM_HDR_DIR\""
+ , " INCL_ARGS=\"-I$HOST_SYSTEM_HDR_DIR\""
+ , "fi"
+ , "LINK_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_LIB_DIR\" ]; then"
+ , " export LIBRARY_PATH=\"$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -B$HOST_SYSTEM_LIB_DIR -L$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker -rpath -Xlinker $HOST_SYSTEM_LIB_DIR\""
+ , "fi"
+ , "if [ -n \"$HOST_DYNAMIC_LINKER\" ]; then"
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker --dynamic-linker -Xlinker $HOST_DYNAMIC_LINKER\""
+ , "fi"
+ , "cp -r ${LOCALBASE}/. ${DESTDIR}/."
+ , "chmod -R +w ${DESTDIR}/*"
+ , "mkdir build"
+ , "cmake -B build -S llvm ${CONF_ARGS} -DLLVM_USE_FOLDERS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON -DLLVM_ENABLE_PROJECTS=clang -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_PARALLEL_LINK_JOBS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX= -DLLVM_HOST_TRIPLE=${HOST_TRIPLE} -DLLVM_NATIVE_TARGET=ON -DLIBCXXABI_ENABLE_ASSERTIONS=OFF -DLIBUNWIND_ENABLE_ASSERTIONS=OFF >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "cmake --build build --target clang -j${NJOBS} >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "export LDFLAGS=\"--gcc-toolchain=${GCC_TOOLCHAIN} ${LINK_ARGS}\""
+ , "cmake --build build --target all -j${NJOBS} >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cmake --build build --target install -j${NJOBS} >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "strip ./bin/* 2>/dev/null || true"
+ , "find . -type f -name '*.so*' -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"strip -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"strip -g {}\" \\;"
+ , "cp -r ${GCC_TOOLCHAIN}/include ${GCC_TOOLCHAIN}/lib* ${DESTDIR}/."
+ , "cp -rl ${DESTDIR}/lib[0-9]*/* ${DESTDIR}/lib/."
+ , "if [ -n \"${INCL_ARGS}${LINK_ARGS}\" ]; then"
+ , " cd ${DESTDIR}/bin"
+ , " mv clang clang.real"
+ , " mv clang++ clang++.real"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/clang.real %s \"$@\"' \"${INCL_ARGS} ${LINK_ARGS}\" >clang"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/clang++.real %s \"$@\"' \"${INCL_ARGS} ${LINK_ARGS}\" >clang++"
+ , " chmod +x clang clang++"
+ , "fi"
+ ]
+ , "out_dirs": ["."]
+ }
+, "libstdc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libstdc++"]
+ , "lib": ["libstdc++_files"]
+ , "deps": ["libgcc_s"]
+ }
+, "libc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libc++"]
+ , "lib": ["libc++_files"]
+ , "deps": ["libgcc_s", "libatomic", "libc++abi"]
+ }
+, "libc++abi":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libc++abi"]
+ , "lib": ["libc++abi_files"]
+ }
+, "libgcc_s":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libgcc_s"]
+ , "lib": ["libgcc_s_files"]
+ }
+, "libatomic":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libatomic"]
+ , "lib": ["libatomic_files"]
+ }
+, "libstdc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libstdc++.so.6"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": ["cp lib/$(uname -m)-*/libc++.so.1 ."]
+ , "outs": ["libc++.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libc++abi_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": ["cp lib/$(uname -m)-*/libc++abi.so.1 ."]
+ , "outs": ["libc++abi.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libgcc_s_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libgcc_s.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libatomic_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libatomic.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+}
diff --git a/src/compilers/clang-17-native.TARGETS b/src/compilers/clang-17-native.TARGETS
new file mode 100644
index 0000000..64ff374
--- /dev/null
+++ b/src/compilers/clang-17-native.TARGETS
@@ -0,0 +1,226 @@
+{ "toolchain":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "TARGET_ARCH", "BUILD_ARCH"]
+ , "config":
+ { "type": "if"
+ , "cond":
+ { "type": "=="
+ , "$1":
+ { "type": "var"
+ , "name": "TARGET_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ , "$2":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ }
+ , "then": {"type": "empty_map"}
+ , "else":
+ { "type": "fail"
+ , "msg": "clang-native does not support cross-compilation."
+ }
+ }
+ , "target": "toolchain_native"
+ }
+, "toolchain_native":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "clang-native"
+ }
+, "runlibs":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libstdc++"
+ }
+, "runlibs_libcxx":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libc++"
+ }
+, "original_sources_and_patches":
+ { "type": "install"
+ , "dirs":
+ [ [["TREE", null, "."], "src"]
+ , [["@", "patches", "", "clang-17"], "patches"]
+ ]
+ }
+, "patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["original_sources_and_patches"]
+ , "cmds":
+ [ "cp -r src/. ${DESTDIR}/."
+ , "cd ${DESTDIR}"
+ , "chmod -R +w *"
+ , "patch -p1 < ${WORKDIR}/patches/clang-17/libcxx-musl-support.patch >/dev/null"
+ ]
+ , "out_dirs": ["."]
+ }
+, "clang-native":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "arguments_config": ["TOOLCHAIN_CONFIG"]
+ , "project": ["patched_sources"]
+ , "localbase": [["@", "binutils", "", "binutils"]]
+ , "cmds":
+ [ { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_HDR_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_HDR_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_LIB_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_LIB_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_DYNAMIC_LINKER='"
+ , { "type": "lookup"
+ , "key": "HOST_DYNAMIC_LINKER"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , "NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "HOST_TRIPLE=$(${CC} -dumpmachine)"
+ , "GCC_TOOLCHAIN=$(dirname ${CC})/.."
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export PKG_CONFIG=false"
+ , "export LD_LIBRARY_PATH=\"${GCC_TOOLCHAIN}/lib:${GCC_TOOLCHAIN}/lib32:${GCC_TOOLCHAIN}/lib64\""
+ , "unset LDFLAGS"
+ , "CONF_ARGS="
+ , "INCL_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_HDR_DIR\" ]; then"
+ , " CONF_ARGS=\"-DC_INCLUDE_DIRS=$HOST_SYSTEM_HDR_DIR\""
+ , " INCL_ARGS=\"-I$HOST_SYSTEM_HDR_DIR\""
+ , "fi"
+ , "LINK_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_LIB_DIR\" ]; then"
+ , " export LIBRARY_PATH=\"$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -B$HOST_SYSTEM_LIB_DIR -L$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker -rpath -Xlinker $HOST_SYSTEM_LIB_DIR\""
+ , "fi"
+ , "if [ -n \"$HOST_DYNAMIC_LINKER\" ]; then"
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker --dynamic-linker -Xlinker $HOST_DYNAMIC_LINKER\""
+ , "fi"
+ , "cp -r ${LOCALBASE}/. ${DESTDIR}/."
+ , "chmod -R +w ${DESTDIR}/*"
+ , "mkdir build"
+ , "cmake -B build -S llvm ${CONF_ARGS} -DLLVM_USE_FOLDERS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON -DLLVM_ENABLE_PROJECTS=clang -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_PARALLEL_LINK_JOBS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX= -DLLVM_HOST_TRIPLE=${HOST_TRIPLE} -DLLVM_NATIVE_TARGET=ON -DLIBCXXABI_ENABLE_ASSERTIONS=OFF -DLIBUNWIND_ENABLE_ASSERTIONS=OFF >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "cmake --build build --target clang -j${NJOBS} >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "export LDFLAGS=\"--gcc-toolchain=${GCC_TOOLCHAIN} ${LINK_ARGS}\""
+ , "cmake --build build --target all -j${NJOBS} >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cmake --build build --target install -j${NJOBS} >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "strip ./bin/* 2>/dev/null || true"
+ , "find . -type f -name '*.so*' -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"strip -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"strip -g {}\" \\;"
+ , "cp -r ${GCC_TOOLCHAIN}/include ${GCC_TOOLCHAIN}/lib* ${DESTDIR}/."
+ , "cp -rl ${DESTDIR}/lib[0-9]*/* ${DESTDIR}/lib/."
+ , "if [ -n \"${INCL_ARGS}${LINK_ARGS}\" ]; then"
+ , " cd ${DESTDIR}/bin"
+ , " mv clang clang.real"
+ , " mv clang++ clang++.real"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/clang.real %s \"$@\"' \"${INCL_ARGS} ${LINK_ARGS}\" >clang"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/clang++.real %s \"$@\"' \"${INCL_ARGS} ${LINK_ARGS}\" >clang++"
+ , " chmod +x clang clang++"
+ , "fi"
+ ]
+ , "out_dirs": ["."]
+ }
+, "libstdc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libstdc++"]
+ , "lib": ["libstdc++_files"]
+ , "deps": ["libgcc_s"]
+ }
+, "libc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libc++"]
+ , "lib": ["libc++_files"]
+ , "deps": ["libgcc_s", "libatomic", "libc++abi"]
+ }
+, "libc++abi":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libc++abi"]
+ , "lib": ["libc++abi_files"]
+ }
+, "libgcc_s":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libgcc_s"]
+ , "lib": ["libgcc_s_files"]
+ }
+, "libatomic":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libatomic"]
+ , "lib": ["libatomic_files"]
+ }
+, "libstdc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libstdc++.so.6"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": ["cp lib/$(uname -m)-*/libc++.so.1 ."]
+ , "outs": ["libc++.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libc++abi_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": ["cp lib/$(uname -m)-*/libc++abi.so.1 ."]
+ , "outs": ["libc++abi.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libgcc_s_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libgcc_s.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libatomic_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libatomic.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+}
diff --git a/src/compilers/gcc-13-musl-static.TARGETS b/src/compilers/gcc-13-musl-static.TARGETS
new file mode 100644
index 0000000..d7cefea
--- /dev/null
+++ b/src/compilers/gcc-13-musl-static.TARGETS
@@ -0,0 +1,121 @@
+{ "toolchain":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "BUILD_ARCH"]
+ , "config":
+ { "type": "singleton_map"
+ , "key": "BUILD_ARCH"
+ , "value":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default":
+ { "type": "var"
+ , "name": "ARCH"
+ , "default":
+ {"type": "fail", "msg": "ARCH is required for cross-compiler."}
+ }
+ }
+ }
+ , "target": "toolchain_cross"
+ }
+, "toolchain_cross":
+ { "type": "export"
+ , "flexible_config":
+ ["ARCH", "TARGET_ARCH", "BUILD_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "gcc-musl-static"
+ }
+, "runlibs":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libgcc_s"
+ }
+, "gcc-musl-static":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["@", "gcc-musl", "", "combined_patched_sources"]]
+ , "arguments_config": ["BUILD_ARCH"]
+ , "cmds":
+ { "type": "let*"
+ , "bindings":
+ [ [ "TARGET"
+ , { "type": "case"
+ , "expr":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default": {"type": "fail", "msg": "BUILD_ARCH is missing."}
+ }
+ , "case":
+ { "x86": "i686"
+ , "x86_64": "x86_64"
+ , "arm": "arm"
+ , "arm64": "aarch64"
+ }
+ , "default":
+ { "type": "fail"
+ , "msg":
+ ["Unsupported BUILD_ARCH", {"type": "var", "name": "BUILD_ARCH"}]
+ }
+ }
+ ]
+ ]
+ , "body":
+ [ { "type": "join"
+ , "$1": ["TARGET=", {"type": "var", "name": "TARGET"}, "-linux-musl"]
+ }
+ , "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export MAKEINFO=missing"
+ , "unset CFLAGS CXXFLAGS LDFLAGS"
+ , "printf '#!/bin/sh\\nexec \"%s\" -static \"$@\"' \"${CC}\" >${TMPDIR}/cc"
+ , "printf '#!/bin/sh\\nexec \"%s\" -static \"$@\"' \"${CXX}\" >${TMPDIR}/c++"
+ , "chmod +x ${TMPDIR}/cc ${TMPDIR}/c++"
+ , "mv musl-latest.orig musl.readonly"
+ , "cp -r musl.readonly musl-latest.orig && chmod -R +w musl-latest.orig"
+ , "export check_msgfmt=no # do not use system's msgfmt, if available"
+ , "${MAKE} -j${NJOBS} TARGET=${TARGET} CC=${TMPDIR}/cc CXX=${TMPDIR}/c++ LDFLAGS='-static' LDFLAGS_FOR_TARGET='-static' >build.log 2>&1 || (cat build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} TARGET=${TARGET} CC=${TMPDIR}/cc CXX=${TMPDIR}/c++ LDFLAGS='-static' LDFLAGS_FOR_TARGET='-static' OUTPUT= DESTDIR=${DESTDIR} install >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "TARGET_STRIP=./bin/${TARGET}-strip"
+ , "find ./bin/ ./${TARGET}/bin/ ./libexec/gcc/ -type f -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.so*' -exec sh -c \"${TARGET_STRIP} {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"${TARGET_STRIP} -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"${TARGET_STRIP} -g {}\" \\;"
+ , "for f in $(ls ./bin/${TARGET}-*); do"
+ , " cp -l $f $(echo $f | sed 's|/'${TARGET}-'|/|g')"
+ , "done"
+ , "cp -rl ./${TARGET}/lib/. ./lib/."
+ , "find . -type l ! -exec test -e {} \\; -delete"
+ ]
+ }
+ , "out_dirs": ["."]
+ }
+, "toolchain_for_target":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "TARGET_ARCH"]
+ , "config":
+ { "type": "singleton_map"
+ , "key": "BUILD_ARCH"
+ , "value":
+ { "type": "var"
+ , "name": "TARGET_ARCH"
+ , "default":
+ { "type": "var"
+ , "name": "ARCH"
+ , "default":
+ {"type": "fail", "msg": "ARCH is required for cross-compiler."}
+ }
+ }
+ }
+ , "target": "toolchain_cross"
+ }
+, "libgcc_s":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libgcc"]
+ , "lib": ["libgcc_s_files"]
+ }
+, "libgcc_s_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain_for_target"]
+ , "cmds": [":"]
+ , "outs": ["lib/libgcc_s.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+}
diff --git a/src/compilers/gcc-13-musl.TARGETS b/src/compilers/gcc-13-musl.TARGETS
new file mode 100644
index 0000000..90d7987
--- /dev/null
+++ b/src/compilers/gcc-13-musl.TARGETS
@@ -0,0 +1,161 @@
+{ "toolchain":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "BUILD_ARCH"]
+ , "config":
+ { "type": "singleton_map"
+ , "key": "BUILD_ARCH"
+ , "value":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default":
+ { "type": "var"
+ , "name": "ARCH"
+ , "default":
+ {"type": "fail", "msg": "ARCH is required for cross-compiler."}
+ }
+ }
+ }
+ , "target": "toolchain_cross"
+ }
+, "toolchain_cross":
+ { "type": "export"
+ , "flexible_config":
+ ["ARCH", "TARGET_ARCH", "BUILD_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "gcc-musl"
+ }
+, "runlibs":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libstdc++"
+ }
+, "separate_patched_sources":
+ { "type": "install"
+ , "dirs":
+ [ [["@", "musl-cross-make", "", "combined_sources_and_patches"], "src"]
+ , [["@", "binutils", "", "files"], "binutils"]
+ , [["@", "musl", "", "files"], "musl"]
+ , [["@", "gmp", "", "files"], "gmp"]
+ , [["@", "mpc", "", "files"], "mpc"]
+ , [["@", "mpfr", "", "files"], "mpfr"]
+ , [["@", "gcc", "", "patched_sources"], "gcc"]
+ ]
+ }
+, "combined_patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["separate_patched_sources"]
+ , "cmds":
+ [ "cp -r src/. ${DESTDIR}"
+ , "mv binutils ${DESTDIR}/binutils-latest.orig"
+ , "mv musl ${DESTDIR}/musl-latest.orig"
+ , "mv gmp ${DESTDIR}/gmp-latest.orig"
+ , "mv mpc ${DESTDIR}/mpc-latest.orig"
+ , "mv mpfr ${DESTDIR}/mpfr-latest.orig"
+ , "mv gcc ${DESTDIR}/gcc-13.orig"
+ , "chmod +w ${DESTDIR}/config.mak"
+ , "printf 'GCC_VER = 13\n' >> ${DESTDIR}/config.mak"
+ ]
+ , "out_dirs": ["."]
+ }
+, "gcc-musl":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["combined_patched_sources"]
+ , "arguments_config": ["BUILD_ARCH"]
+ , "cmds":
+ { "type": "let*"
+ , "bindings":
+ [ [ "TARGET"
+ , { "type": "case"
+ , "expr":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default": {"type": "fail", "msg": "BUILD_ARCH is missing."}
+ }
+ , "case":
+ { "x86": "i686"
+ , "x86_64": "x86_64"
+ , "arm": "arm"
+ , "arm64": "aarch64"
+ }
+ , "default":
+ { "type": "fail"
+ , "msg":
+ ["Unsupported BUILD_ARCH", {"type": "var", "name": "BUILD_ARCH"}]
+ }
+ }
+ ]
+ ]
+ , "body":
+ [ { "type": "join"
+ , "$1": ["TARGET=", {"type": "var", "name": "TARGET"}, "-linux-musl"]
+ }
+ , "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export MAKEINFO=missing"
+ , "export BUILD_ROOT_DIR=${ACTION_DIR}"
+ , "unset CFLAGS CXXFLAGS LDFLAGS"
+ , "mv musl-latest.orig musl.readonly"
+ , "cp -r musl.readonly musl-latest.orig && chmod -R +w musl-latest.orig"
+ , "export check_msgfmt=no # do not use system's msgfmt, if available"
+ , "${MAKE} -j${NJOBS} TARGET=${TARGET} >build.log 2>&1 || (cat build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} TARGET=${TARGET} OUTPUT= DESTDIR=${DESTDIR} install >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "TARGET_STRIP=./bin/${TARGET}-strip"
+ , "find ./bin/ ./${TARGET}/bin/ ./libexec/gcc/ -type f -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.so*' -exec sh -c \"${TARGET_STRIP} {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"${TARGET_STRIP} -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"${TARGET_STRIP} -g {}\" \\;"
+ , "for f in $(ls ./bin/${TARGET}-*); do"
+ , " cp -l $f $(echo $f | sed 's|/'${TARGET}-'|/|g')"
+ , "done"
+ , "cp -rl ./${TARGET}/lib/. ./lib/."
+ , "find . -type l ! -exec test -e {} \\; -delete"
+ ]
+ }
+ , "out_dirs": ["."]
+ }
+, "toolchain_for_target":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "TARGET_ARCH"]
+ , "config":
+ { "type": "singleton_map"
+ , "key": "BUILD_ARCH"
+ , "value":
+ { "type": "var"
+ , "name": "TARGET_ARCH"
+ , "default":
+ { "type": "var"
+ , "name": "ARCH"
+ , "default":
+ {"type": "fail", "msg": "ARCH is required for cross-compiler."}
+ }
+ }
+ }
+ , "target": "toolchain_cross"
+ }
+, "libstdc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libstdc++"]
+ , "lib": ["libstdc++_files"]
+ , "deps": ["libgcc_s"]
+ }
+, "libgcc_s":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libgcc_s"]
+ , "lib": ["libgcc_s_files"]
+ }
+, "libstdc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain_for_target"]
+ , "cmds": [":"]
+ , "outs": ["lib/libstdc++.so.6"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libgcc_s_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain_for_target"]
+ , "cmds": [":"]
+ , "outs": ["lib/libgcc_s.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+}
diff --git a/src/compilers/gcc-13-native.TARGETS b/src/compilers/gcc-13-native.TARGETS
new file mode 100644
index 0000000..3b79d36
--- /dev/null
+++ b/src/compilers/gcc-13-native.TARGETS
@@ -0,0 +1,193 @@
+{ "toolchain":
+ { "type": "configure"
+ , "arguments_config": ["ARCH", "TARGET_ARCH", "BUILD_ARCH"]
+ , "config":
+ { "type": "if"
+ , "cond":
+ { "type": "=="
+ , "$1":
+ { "type": "var"
+ , "name": "TARGET_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ , "$2":
+ { "type": "var"
+ , "name": "BUILD_ARCH"
+ , "default": {"type": "var", "name": "ARCH"}
+ }
+ }
+ , "then": {"type": "empty_map"}
+ , "else":
+ {"type": "fail", "msg": "gcc-native does not support cross-compilation."}
+ }
+ , "target": "toolchain_native"
+ }
+, "toolchain_native":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "gcc-native"
+ }
+, "runlibs":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "libstdc++"
+ }
+, "original_sources_and_patches":
+ { "type": "install"
+ , "dirs":
+ [[["TREE", null, "."], "src"], [["@", "patches", "", "gcc-13"], "patches"]]
+ }
+, "patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["original_sources_and_patches"]
+ , "cmds":
+ [ "cp -r src/. ${DESTDIR}/."
+ , "cd ${DESTDIR}"
+ , "chmod -R +w *"
+ , "for p in $(cat ${WORKDIR}/patches/gcc-13/reproducibility/series); do"
+ , " patch -p1 < ${WORKDIR}/patches/gcc-13/reproducibility/$p >/dev/null"
+ , "done"
+ ]
+ , "out_dirs": ["."]
+ }
+, "patched_separate_sources":
+ { "type": "install"
+ , "dirs":
+ [ ["patched_sources", "src"]
+ , [["@", "gmp", "", "files"], "gmp"]
+ , [["@", "mpc", "", "files"], "mpc"]
+ , [["@", "mpfr", "", "files"], "mpfr"]
+ ]
+ }
+, "gcc-native":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "arguments_config": ["TOOLCHAIN_CONFIG"]
+ , "project": ["patched_separate_sources"]
+ , "localbase": [["@", "binutils", "", "binutils"]]
+ , "cmds":
+ [ { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_HDR_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_HDR_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_SYSTEM_LIB_DIR='"
+ , { "type": "lookup"
+ , "key": "HOST_SYSTEM_LIB_DIR"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "HOST_DYNAMIC_LINKER='"
+ , { "type": "lookup"
+ , "key": "HOST_DYNAMIC_LINKER"
+ , "map":
+ { "type": "var"
+ , "name": "TOOLCHAIN_CONFIG"
+ , "default": {"type": "empty_map"}
+ }
+ , "default": ""
+ }
+ , "'"
+ ]
+ }
+ , "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export PATH=${LOCALBASE}/bin:$PATH"
+ , "export MAKEINFO=missing"
+ , "export BUILD_ROOT_DIR=${ACTION_DIR}"
+ , "unset CFLAGS CXXFLAGS LDFLAGS"
+ , "CONF_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_HDR_DIR\" ]; then"
+ , " CONF_ARGS=\"$CONF_ARGS --with-sysroot=/ --with-native-system-header-dir=$HOST_SYSTEM_HDR_DIR\""
+ , "fi"
+ , "LINK_ARGS="
+ , "if [ -n \"$HOST_SYSTEM_LIB_DIR\" ]; then"
+ , " export LIBRARY_PATH=\"$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -B$HOST_SYSTEM_LIB_DIR -L$HOST_SYSTEM_LIB_DIR\""
+ , " LINK_ARGS=\"$LINK_ARGS -Xlinker -rpath -Xlinker $HOST_SYSTEM_LIB_DIR\""
+ , "fi"
+ , "if [ -n \"$HOST_DYNAMIC_LINKER\" ]; then"
+ , " mv src/gcc/config src/gcc/config.orig"
+ , " cp -r src/gcc/config.orig src/gcc/config"
+ , " chmod -R +w src/gcc/config"
+ , " for h in src/gcc/config/*/*.h; do"
+ , " grep -q _DYNAMIC_LINKER \"$h\" || continue"
+ , " sed -i 's|\\(^#define [A-Z]*_DYNAMIC_LINKER[A-Z0-9]* *\"\\).*\"|\\1'$HOST_DYNAMIC_LINKER'\"|g' \"$h\""
+ , " done"
+ , "fi"
+ , "export LDFLAGS_FOR_TARGET=\"${LINK_ARGS}\""
+ , "if [ -f /lib/ld-musl-$(uname -m).so.1 ]; then"
+ , " ln -s /lib/ld-musl-$(uname -m).so.1 ${TMPDIR}/ldd"
+ , " export PATH=$PATH:${TMPDIR}"
+ , "fi"
+ , "cp -r ${LOCALBASE}/. ${DESTDIR}/."
+ , "chmod -R +w ${DESTDIR}/*"
+ , "mv gmp mpc mpfr src/."
+ , "cd src"
+ , "export check_msgfmt=no # do not use system's msgfmt, if available"
+ , "./configure ${CONF_ARGS} --prefix=/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --disable-libsanitizer >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} >build.log 2>&1 || (cat build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat build.log && exit 1)"
+ , "cd ${DESTDIR}"
+ , "strip ./bin/*"
+ , "find . -type f -name '*.so*' -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find . -type f -name '*.a' -exec sh -c \"strip -g {}\" \\;"
+ , "find . -type f -name '*.o' -exec sh -c \"strip -g {}\" \\;"
+ , "if [ -n \"${LINK_ARGS}\" ]; then"
+ , " cd ${DESTDIR}/bin"
+ , " mv gcc gcc.real"
+ , " mv g++ g++.real"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/gcc.real %s \"$@\"' \"${LINK_ARGS}\" >gcc"
+ , " printf '#!/bin/sh\\nexec $(dirname $0)/g++.real %s \"$@\"' \"${LINK_ARGS}\" >g++"
+ , " chmod +x gcc g++"
+ , "fi"
+ ]
+ , "out_dirs": ["."]
+ }
+, "libstdc++":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libstdc++"]
+ , "lib": ["libstdc++_files"]
+ , "deps": ["libgcc_s"]
+ }
+, "libgcc_s":
+ { "type": ["@", "rules", "CC/prebuilt", "library"]
+ , "name": ["libgcc_s"]
+ , "lib": ["libgcc_s_files"]
+ }
+, "libstdc++_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libstdc++.so.6"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+, "libgcc_s_files":
+ { "type": "generic"
+ , "arguments_config": ["ENV"]
+ , "deps": ["toolchain"]
+ , "cmds": [":"]
+ , "outs": ["lib64/libgcc_s.so.1"]
+ , "env": {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
+ }
+}
diff --git a/src/tools/busybox-1.36.TARGETS b/src/tools/busybox-1.36.TARGETS
new file mode 100644
index 0000000..ab5d90b
--- /dev/null
+++ b/src/tools/busybox-1.36.TARGETS
@@ -0,0 +1,21 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "busybox"
+ }
+, "busybox":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["TREE", null, "."]]
+ , "cmds":
+ [ "NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "GCC_TOOLCHAIN=$(dirname ${CC})/.."
+ , "unset CFLAGS CXXFLAGS"
+ , "export LDFLAGS=\"-static\""
+ , "export SOURCE_DATE_EPOCH=0"
+ , "${MAKE} HOSTCC=\"${CC} -static\" HOSTCXX=\"${CXX} -static\" defconfig >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} HOSTCC=\"${CC} -static\" HOSTCXX=\"${CXX} -static\" >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} HOSTCC=\"${CC} -static\" HOSTCXX=\"${CXX} -static\" CONFIG_PREFIX=${DESTDIR} install >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/tools/cmake-3.27.TARGETS b/src/tools/cmake-3.27.TARGETS
new file mode 100644
index 0000000..69ef77a
--- /dev/null
+++ b/src/tools/cmake-3.27.TARGETS
@@ -0,0 +1,43 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "cmake"
+ }
+, "patched_sources":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["TREE", null, "."]]
+ , "cmds":
+ [ "cp -r . ${DESTDIR}/."
+ , "cd ${DESTDIR}"
+ , "mv Utilities/cmcurl/curltest.c Utilities/cmcurl/curltest.cpp"
+ , "sed -i 's/curltest\\.c)/curltest\\.cpp)/' Utilities/cmcurl/CMakeLists.txt"
+ ]
+ , "out_dirs": ["."]
+ }
+, "libssl":
+ { "type": "configure"
+ , "config":
+ { "type": "let*"
+ , "bindings": [["ADD_CFLAGS", ["-fPIE"]], ["ADD_CXXFLAGS", ["-fPIE"]]]
+ , "body": {"type": "env", "vars": ["ADD_CFLAGS", "ADD_CXXFLAGS"]}
+ }
+ , "target": ["@", "ssl", "", "ssl"]
+ }
+, "cmake":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": ["patched_sources"]
+ , "deps": ["libssl"]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export PKG_CONFIG=false"
+ , "mkdir ${TMPDIR}/build"
+ , "cd ${TMPDIR}/build"
+ , "export LDFLAGS='-static'"
+ , "export CFLAGS='-D__FILE__=__FILE_NAME__ -Wno-builtin-macro-redefined'"
+ , "export CXXFLAGS='-D__FILE__=__FILE_NAME__ -Wno-builtin-macro-redefined'"
+ , "${WORKDIR}/bootstrap --parallel=${NJOBS} -- -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=${LOCALBASE} -DCMAKE_INSTALL_PREFIX=/ >bootstrap.log 2>&1 || (cat bootstrap.log && exit 1)"
+ , "${MAKE} -j${NJOBS} install >build.log 2>&1 || (cat bootstrap.log && cat build.log && exit 1)"
+ ]
+ , "out_dirs": ["."]
+ }
+}
diff --git a/src/tools/make-4.4.TARGETS b/src/tools/make-4.4.TARGETS
new file mode 100644
index 0000000..e35fb08
--- /dev/null
+++ b/src/tools/make-4.4.TARGETS
@@ -0,0 +1,20 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "make"
+ }
+, "make":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["TREE", null, "."]]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "unset CFLAGS"
+ , "export CXX=unused"
+ , "export LDFLAGS='-static'"
+ , "./configure --prefix=/ --disable-rpath --disable-load >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=missing >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} MAKEINFO=missing DESTDIR=${DESTDIR} install-strip >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ ]
+ , "outs": ["bin/make"]
+ }
+}
diff --git a/src/tools/python-3.12.TARGETS b/src/tools/python-3.12.TARGETS
new file mode 100644
index 0000000..625bac4
--- /dev/null
+++ b/src/tools/python-3.12.TARGETS
@@ -0,0 +1,36 @@
+{ "toolchain":
+ { "type": "export"
+ , "flexible_config": ["ARCH", "TARGET_ARCH", "TOOLCHAIN_CONFIG", "ENV"]
+ , "target": "python"
+ }
+, "python":
+ { "type": ["@", "rules", "CC/foreign/shell", "data"]
+ , "project": [["TREE", null, "."]]
+ , "localbase": [["@", "zlib", "", "zlib"]]
+ , "cmds":
+ [ "export NJOBS=$(nproc --all 2>/dev/null || echo 1)"
+ , "export CFLAGS=\"-I${LOCALBASE}/include\""
+ , "export LDFLAGS=\"-static -L${LOCALBASE}/lib\""
+ , "export SOURCE_DATE_EPOCH=0"
+ , "./configure --disable-shared --disable-test-modules --prefix=/usr --with-pkg-config=no >configure.log 2>&1 || (cat configure.log && exit 1)"
+ , "rm Modules/Setup.local"
+ , "cp Modules/Setup.stdlib Modules/Setup.local"
+ , "sed -i 's/^\\*shared\\*/\\*static\\*/' Modules/Setup.local"
+ , "sed -i 's/^nis /#nis /' Modules/Setup.local"
+ , "sed -i 's/^_lzma /#_lzma /' Modules/Setup.local"
+ , "sed -i 's/^_uuid /#_uuid /' Modules/Setup.local"
+ , "${MAKE} -j${NJOBS} LINKFORSHARED=' ' >build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "${MAKE} -j${NJOBS} LINKFORSHARED=' ' install >>build.log 2>&1 || (cat configure.log build.log && exit 1)"
+ , "cd ${DESTDIR}/usr"
+ , "find ./bin -type f -exec sh -c \"strip {} 2>/dev/null\" \\;"
+ , "find ./lib -type f -name '*.a' -exec strip -g {} \\;"
+ , "find ./lib -type f -name '*.o' -exec strip -g {} \\;"
+ , "find ./lib -depth -type d -name '__pycache__' -exec rm -rf {} \\;"
+ , "find ./bin -type f -name '*-config' -exec sh -c \"sed -i 's|${ACTION_DIR}|/build|g' {}\" \\;"
+ , "find ./lib -type f -name 'Makefile' -exec sh -c \"sed -i 's|${ACTION_DIR}|/build|g' {}\" \\;"
+ , "find ./lib -type f -name '_sysconfigdata_*' -exec sh -c \"sed -i 's|${ACTION_DIR}|/build|g' {}\" \\;"
+ , "cp -l bin/python3 bin/python"
+ ]
+ , "out_dirs": ["."]
+ }
+}