{ "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 {}\" \\;" , "GCC_LIBDIR=\"lib/gcc/$(./bin/gcc -dumpmachine)/$(./bin/gcc -dumpfullversion -dumpversion)\"" , "mv ${GCC_LIBDIR}/include-fixed ${TMPDIR}/" , "cp -rL ${TMPDIR}/include-fixed ${GCC_LIBDIR}/. # resolve symlinks" , "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": ["."] } }