diff options
| author | Alexander Hill <ahill@breadpudding.dev> | 2025-11-22 20:35:27 -0500 |
|---|---|---|
| committer | Alexander Hill <ahill@breadpudding.dev> | 2025-11-22 20:35:27 -0500 |
| commit | bca382ed7149fac158403a5fb4e64c79f7e5cc6e (patch) | |
| tree | 3e1f30bd1632c97d7aaa23e8b1701da8a68d6d15 /bootstrap.sh | |
| parent | 320a2dbb2eba45ea57681c8cfb3d5dc245748c45 (diff) | |
Updated treetap, fixed the bootstrap, and replaced ld.lld with mold
Diffstat (limited to 'bootstrap.sh')
| -rwxr-xr-x | bootstrap.sh | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/bootstrap.sh b/bootstrap.sh index 8d4be5e..1d8f2cc 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,6 +1,6 @@ #!/bin/zsh -e -MICROARCH="skylake" +MICROARCH=skylake TARGET=x86_64-maple-linux-musl # Set the environment up @@ -10,22 +10,29 @@ PROCS=$(nproc) SOURCES=$(pwd)/.treetap/sources SPEC=$(pwd)/sources export AR=llvm-ar -export CC=clang -export CFLAGS="-fuse-ld=lld -O3 -march=$MICROARCH -pipe --sysroot=$BOOTSTRAP/root -Wno-unused-command-line-argument" -export CXX=clang++ +export AS=llvm-as +if [ ! -z "$CCACHE" ]; then + export CC="$CCACHE clang" + export CXX="$CCACHE clang++" +else + export CC=clang + export CXX=clang++ +fi +export CFLAGS="-fuse-ld=mold -O3 -march=$MICROARCH -pipe --sysroot=$BOOTSTRAP/root -Wno-unused-command-line-argument" export CXXFLAGS=$CFLAGS export RANLIB=llvm-ranlib -export LD=ld.lld +export LD=mold export LDFLAGS="--sysroot=$BOOTSTRAP/root" export TREETAP=$(pwd)/treetap export TT_DIR=$(pwd)/.treetap +export TT_MICROARCH=$MICROARCH export TT_SYSROOT=$BOOTSTRAP/root export TT_TARGET=$TARGET # Fetch sources required for a bootstrap -./treetap fetch sources/linux/linux.spec -./treetap fetch sources/llvm/llvm.spec -./treetap fetch sources/musl/musl.spec +$TREETAP fetch sources/linux/linux.spec +$TREETAP fetch sources/llvm/llvm.spec +$TREETAP fetch sources/musl/musl.spec # Make sure both clang-tblgen and llvm-tblgen are in the PATH. ~ahill which clang-tblgen > /dev/null @@ -48,22 +55,31 @@ mkdir -p $BOOTSTRAP/build cd $BOOTSTRAP/build # Define the target for Maple Linux +# NOTE: We run cut on CC and CXX just in case ccache is in use. ~ahill cat << EOF > $BOOTSTRAP/$TARGET.cmake set(CMAKE_ASM_COMPILER_TARGET $TARGET) -set(CMAKE_C_COMPILER $CC) +set(CMAKE_C_COMPILER $(echo $CC | cut -d" " -f2)) set(CMAKE_C_COMPILER_TARGET $TARGET) set(CMAKE_C_FLAGS_INIT "$CFLAGS") -set(CMAKE_CXX_COMPILER $CXX) +set(CMAKE_CXX_COMPILER $(echo $CXX | cut -d" " -f2)) set(CMAKE_CXX_COMPILER_TARGET $TARGET) set(CMAKE_CXX_FLAGS_INIT "$CXXFLAGS") set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_LINKER_TYPE LLD) +set(CMAKE_LINKER_TYPE MOLD) set(CMAKE_SYSROOT "$BOOTSTRAP/root") set(CMAKE_SYSTEM_NAME Linux) EOF +# NOTE: CMake doesn't like dealing with ccache inside of CC/CXX, so we do this +# instead. ~ahill +if [ ! -z "$CCACHE" ]; then +cat << EOF >> $BOOTSTRAP/$TARGET.cmake +set(CMAKE_C_COMPILER_LAUNCHER $CCACHE) +set(CMAKE_CXX_COMPILER_LAUNCHER $CCACHE) +EOF +fi # Install headers for Linux LINUX_VERSION=$(sed -En "s/SRC_VERSION=\"?(.+)\"/\1/p" $SPEC/linux/linux.spec) @@ -83,7 +99,6 @@ cd .. # Install headers for musl MUSL_VERSION=$(sed -En "s/SRC_VERSION=\"?(.+)\"/\1/p" $SPEC/musl/musl.spec) tar xf $SOURCES/musl/$MUSL_VERSION/musl-*.tar* -./treetap fetch sources/busybox/busybox.spec cd musl-*/ # NOTE: Patch for musl 1.2.5 to prevent a character encoding vulnerability. This # should be safe to remove after the next release. ~ahill @@ -119,19 +134,12 @@ cmake --install build-builtins --parallel $PROCS cd .. # Build musl for real this time -cd musl-*/ -make clean # NOTE: LIBCC is required here because it will attempt to link with the build # system's runtime if this is not specified. ~ahill LIBCC="$BOOTSTRAP/root/lib/clang/$LLVM_MAJOR_VERSION/lib/linux/libclang_rt.builtins-x86_64.a" \ -./configure \ - --bindir=/bin \ - --includedir=/usr/include \ - --libdir=/lib \ - --prefix=/ -make -O -j $PROCS -make -O -j $PROCS install DESTDIR=$BOOTSTRAP/root -cd .. +$TREETAP build $SPEC/musl/musl.spec +$TREETAP package $SPEC/musl/musl.spec +$TREETAP install $TT_DIR/packages/$MICROARCH/musl-*.cpio.xz $BOOTSTRAP/root # Include compiler-rt and musl in our environment export CFLAGS="$CFLAGS -Qunused-arguments -rtlib=compiler-rt -Wl,--dynamic-linker=/lib/ld-musl-$ARCH.so.1" @@ -193,7 +201,7 @@ NATIVE_TOOL_DIR=$(dirname $(which llvm-tblgen) | sed -z "s/\n//g") cd llvm-project-*/ cmake -S llvm -B build-llvm \ -DCLANG_DEFAULT_CXX_STDLIB=libc++ \ - -DCLANG_DEFAULT_LINKER=lld \ + -DCLANG_DEFAULT_LINKER=mold \ -DCLANG_DEFAULT_RTLIB=compiler-rt \ -DCLANG_DEFAULT_UNWINDLIB=libunwind \ -DCLANG_TABLEGEN=$NATIVE_TOOL_DIR/clang-tblgen \ @@ -202,30 +210,29 @@ cmake -S llvm -B build-llvm \ -DCMAKE_INSTALL_PREFIX=$BOOTSTRAP/root \ -DCMAKE_TOOLCHAIN_FILE=$BOOTSTRAP/$TARGET.cmake \ -DLLVM_ENABLE_LIBCXX=ON \ - -DLLVM_ENABLE_PROJECTS="clang;lld;llvm" \ + -DLLVM_ENABLE_PROJECTS="clang;llvm" \ -DLLVM_ENABLE_ZSTD=OFF \ -DLLVM_HOST_TRIPLE=$TARGET \ -DLLVM_INSTALL_BINUTILS_SYMLINKS=ON \ -DLLVM_INSTALL_CCTOOLS_SYMLINKS=ON \ -DLLVM_NATIVE_TOOL_DIR=$NATIVE_TOOL_DIR \ -DLLVM_TABLEGEN=$NATIVE_TOOL_DIR/llvm-tblgen -cmake --build build-llvm +cmake --build build-llvm --parallel $PROCS cmake --install build-llvm --parallel $PROCS -# NOTE: LLVM doesn't add symlinks for clang/ld, so we'll make them ourselves. +# NOTE: LLVM doesn't add symlinks for clang, so we'll make them ourselves. # ~ahill ln -s clang $BOOTSTRAP/root/bin/cc ln -s clang++ $BOOTSTRAP/root/bin/c++ -ln -s ld.lld $BOOTSTRAP/root/bin/ld cd .. # Build remaining software with treetap -SOURCES=(busybox make) +SOURCES=(busybox make mold) for name in $SOURCES; do $TREETAP fetch $SPEC/$name/$name.spec $TREETAP build $SPEC/$name/$name.spec $TREETAP package $SPEC/$name/$name.spec - $TREETAP install .treetap/packages/$TARGET/$name-*.cpio.xz $BOOTSTRAP/root + $TREETAP install $TT_DIR/packages/$MICROARCH/$name-*.cpio.xz $BOOTSTRAP/root done # Install Treetap -cp $BOOTSTRAP/../treetap $BOOTSTRAP/root/bin/
\ No newline at end of file +cp $TREETAP $BOOTSTRAP/root/bin/
\ No newline at end of file |
