#!/usr/bin/env bash set -e source $(dirname $0)/setup-env.sh cd $LUNA_ROOT if [ ! -x $(command -v $LUNA_ARCH-luna-as) ] then echo Binutils should be cross-built before GCC. exit 1 fi tools/install-headers.sh # install the LibC headers before building GCC mkdir -p toolchain/tarballs mkdir -p toolchain/build if [ ! -f toolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz ]; then echo Downloading GCC... wget -Otoolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz https://ftp.gnu.org/gnu/gcc/gcc-$LUNA_GCC_VERSION_REQUIRED/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz fi rm -rf toolchain/build/gcc-$LUNA_ARCH rm -rf toolchain/build/gcc-$LUNA_GCC_VERSION_REQUIRED echo Extracting GCC... tar xf toolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz -C toolchain/build/ echo Patching GCC... cd toolchain patch -u -i $LUNA_ROOT/tools/gcc.patch -p 1 -d build cd - cd toolchain/build/gcc-$LUNA_GCC_VERSION_REQUIRED/libstdc++-v3 autoconf cd - echo Configuring GCC... mkdir -p toolchain/build/gcc-$LUNA_ARCH cd toolchain/build/gcc-$LUNA_ARCH unset CC unset CXX unset LD unset AR ../gcc-$LUNA_GCC_VERSION_REQUIRED/configure --prefix="$BUILD_PREFIX" --target=$BUILD_TARGET --disable-nls --with-sysroot=$BUILD_SYSROOT --enable-languages=c,c++ --enable-initfini-array echo Building GCC... make all-gcc -j$(nproc) make all-target-libgcc -j$(nproc) CFLAGS_FOR_TARGET='-g -O2 -mcmodel=large -mno-red-zone' echo Installing GCC... make install-gcc make install-target-libgcc mkdir -p $LUNA_BUILD_DIR cmake -S $LUNA_ROOT -B $LUNA_BUILD_DIR -G "$LUNA_CMAKE_GENERATOR_NAME" -DLIBC_BOOTSTRAP=1 cmake --build $LUNA_BUILD_DIR --target libc make all-target-libstdc++-v3 CXXFLAGS_FOR_TARGET="-fno-exceptions" -j$(nproc) make install-target-libstdc++-v3