mirror of
https://linux.maple.camp/git/ahill/maplelinux-bootstrap.git
synced 2026-02-11 10:13:35 +00:00
Updated treetap, fixed the bootstrap, and replaced ld.lld with mold
This commit is contained in:
67
bootstrap.sh
67
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/
|
||||
cp $TREETAP $BOOTSTRAP/root/bin/
|
||||
Reference in New Issue
Block a user