# Native GCC 13.2.0 for Red Bear OS # Produces GCC that RUNS on x86_64-unknown-redox and TARGETS x86_64-unknown-redox. # Built via cross-compilation from the host using the existing cross-compiler in prefix/. # # This is Strategy A from BUILD-TOOLS-PORTING-PLAN.md: pre-built native toolchain # produced by cross-compilation, avoiding the multi-stage self-hosting bootstrap. # # To use: repo cook local/recipes/dev/gcc-native # The resulting gcc binary runs inside Red Bear OS. [source] same_as = "../../../../recipes/dev/gcc13" [build] template = "custom" dependencies = [ "gcc13", "gcc13.cxx", "gnu-binutils", "libgmp", "libmpfr", "mpc", ] script = """ DYNAMIC_INIT # Use the cross-compiler to produce native redox binaries export CC="${GNU_TARGET}-gcc" export CXX="${GNU_TARGET}-g++" export AR="${GNU_TARGET}-ar" export RANLIB="${GNU_TARGET}-ranlib" export LD="${GNU_TARGET}-ld" export NM="${GNU_TARGET}-nm" export STRIP="${GNU_TARGET}-strip" # Configure for native compilation: host AND target are both redox COOKBOOK_CONFIGURE_FLAGS+=( --host="${GNU_TARGET}" --target="${GNU_TARGET}" --prefix=/usr --with-sysroot="${COOKBOOK_SYSROOT}" --with-gmp="${COOKBOOK_SYSROOT}/usr" --with-mpfr="${COOKBOOK_SYSROOT}/usr" --with-mpc="${COOKBOOK_SYSROOT}/usr" --with-linker-hash-style=gnu --enable-languages=c,c++,lto --enable-initfini-array --disable-nls --disable-multilib --enable-host-shared --enable-threads=posix --enable-libstdcxx-threads --disable-bootstrap --with-bugurl="https://gitlab.redox-os.org/redox-os/gcc/-/issues" ) "${COOKBOOK_CONFIGURE}" "${COOKBOOK_CONFIGURE_FLAGS[@]}" "${COOKBOOK_MAKE}" -j "${COOKBOOK_MAKE_JOBS}" all-gcc all-target-libgcc all-target-libstdc++-v3 "${COOKBOOK_MAKE}" install-gcc install-target-libgcc install-target-libstdc++-v3 DESTDIR="${COOKBOOK_STAGE}" # Native GCC doesn't need the target prefix for tool in gcc g++ c++ cpp gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool gfortran; do if [ -f "${COOKBOOK_STAGE}/usr/bin/${GNU_TARGET}-${tool}" ]; then ln -sf "${GNU_TARGET}-${tool}" "${COOKBOOK_STAGE}/usr/bin/${tool}" fi done # Provide cc symlink ln -sf gcc "${COOKBOOK_STAGE}/usr/bin/cc" # Remove libtool archives rm -f "${COOKBOOK_STAGE}"/usr/lib/libgcc_s.so* "${COOKBOOK_STAGE}"/usr/lib/libstdc++.so* rm -f "${COOKBOOK_STAGE}"/usr/lib/*.la # Copy libgcc and libstdc++ into target lib dir mkdir -p "${COOKBOOK_STAGE}/usr/lib/${GNU_TARGET}" cp -a "${COOKBOOK_STAGE}"/usr/lib/gcc/${GNU_TARGET}/13.2.0/libgcc.a "${COOKBOOK_STAGE}/usr/lib/${GNU_TARGET}/" || true cp -a "${COOKBOOK_STAGE}"/usr/lib/gcc/${GNU_TARGET}/13.2.0/libgcc_eh.a "${COOKBOOK_STAGE}/usr/lib/${GNU_TARGET}/" || true """ [package] description = "Native GCC 13.2.0 compiler for Red Bear OS (runs on redox, targets redox)" dependencies = ["gnu-binutils"] [[optional-packages]] name = "cxx" dependencies = [] files = [ "usr/bin/*c++", "usr/bin/*g++", "usr/bin/g++", "usr/include/c++/**", "usr/lib/*c++*", "usr/libexec/gcc/**/cc1plus", "usr/share/gcc-*/python/libstdcxx/**", ]