Commit ee5911d7 authored by jan.koester's avatar jan.koester
Browse files

teset

parent dca15740
Loading
Loading
Loading
Loading
+60 −5
Original line number Diff line number Diff line
@@ -139,6 +139,63 @@ setup_toolchain() {
        make -j\$(nproc)
        make install

        # Build libc++, libc++abi and libunwind against musl from LLVM source
        cd /tmp
        LLVM_TAG=llvmorg-${LLVM_VERSION}.1.8
        wget -q https://github.com/llvm/llvm-project/archive/refs/tags/\${LLVM_TAG}.tar.gz -O llvm-project.tar.gz
        tar xf llvm-project.tar.gz
        LLVM_SRC=/tmp/llvm-project-\${LLVM_TAG}

        # Build libunwind (no C++ deps)
        mkdir -p /tmp/build-libunwind && cd /tmp/build-libunwind
        cmake \${LLVM_SRC}/libunwind -G Ninja \
            -DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \
            -DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \
            -DCMAKE_C_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC\" \
            -DCMAKE_CXX_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC -nostdinc++\" \
            -DCMAKE_EXE_LINKER_FLAGS=\"-fuse-ld=lld --target=x86_64-linux-musl -L/usr/local/musl/lib -rtlib=compiler-rt\" \
            -DCMAKE_INSTALL_PREFIX=/usr/local/musl \
            -DLIBUNWIND_ENABLE_SHARED=OFF \
            -DLIBUNWIND_USE_COMPILER_RT=ON \
            -DLLVM_PATH=\${LLVM_SRC}/llvm
        ninja
        ninja install

        # Build libc++abi (depends on libunwind)
        mkdir -p /tmp/build-libcxxabi && cd /tmp/build-libcxxabi
        cmake \${LLVM_SRC}/libcxxabi -G Ninja \
            -DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \
            -DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \
            -DCMAKE_C_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC\" \
            -DCMAKE_CXX_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC -nostdinc++ -I\${LLVM_SRC}/libcxx/include\" \
            -DCMAKE_EXE_LINKER_FLAGS=\"-fuse-ld=lld --target=x86_64-linux-musl -L/usr/local/musl/lib -rtlib=compiler-rt -lunwind\" \
            -DCMAKE_INSTALL_PREFIX=/usr/local/musl \
            -DLIBCXXABI_ENABLE_SHARED=OFF \
            -DLIBCXXABI_USE_COMPILER_RT=ON \
            -DLIBCXXABI_USE_LLVM_UNWINDER=ON \
            -DLIBCXXABI_LIBUNWIND_PATH=\${LLVM_SRC}/libunwind \
            -DLLVM_PATH=\${LLVM_SRC}/llvm
        ninja
        ninja install

        # Build libc++ (depends on libc++abi)
        mkdir -p /tmp/build-libcxx && cd /tmp/build-libcxx
        cmake \${LLVM_SRC}/libcxx -G Ninja \
            -DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \
            -DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \
            -DCMAKE_C_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC\" \
            -DCMAKE_CXX_FLAGS=\"--target=x86_64-linux-musl --sysroot=/usr/local/musl -fPIC -nostdinc++ -I\${LLVM_SRC}/libcxx/include\" \
            -DCMAKE_EXE_LINKER_FLAGS=\"-fuse-ld=lld --target=x86_64-linux-musl -L/usr/local/musl/lib -rtlib=compiler-rt -lunwind -lc++abi\" \
            -DCMAKE_INSTALL_PREFIX=/usr/local/musl \
            -DLIBCXX_ENABLE_SHARED=OFF \
            -DLIBCXX_USE_COMPILER_RT=ON \
            -DLIBCXX_CXX_ABI=libcxxabi \
            -DLIBCXX_CXX_ABI_INCLUDE_PATHS=\${LLVM_SRC}/libcxxabi/include \
            -DLIBCXX_HAS_MUSL_LIBC=ON \
            -DLLVM_PATH=\${LLVM_SRC}/llvm
        ninja
        ninja install

        # Create musl-clang wrapper that uses libc++ and compiler-rt
        cat > /usr/local/musl/bin/musl-clang++ << 'WRAPPER'
#!/bin/sh
@@ -179,8 +236,6 @@ WRAPPER

        # Find compiler-rt lib path
        RT_PATH=\$(dirname \$(find /usr/lib/llvm-${LLVM_VERSION} -name 'libclang_rt.builtins-x86_64.a' | head -1))
        LLVM_LIB=/usr/lib/llvm-${LLVM_VERSION}/lib
        SYSTEM_LIB=/usr/lib/x86_64-linux-gnu

        cat > /usr/local/musl/share/musl-llvm-toolchain.cmake << CMAKE
set(CMAKE_SYSTEM_NAME Linux)
@@ -191,10 +246,10 @@ set(CMAKE_CXX_COMPILER clang++-${LLVM_VERSION})
set(CMAKE_LINKER lld-${LLVM_VERSION})

set(CMAKE_C_FLAGS_INIT \"--target=x86_64-linux-musl --sysroot=/usr/local/musl -isystem /usr/local/musl/include -fPIC\")
set(CMAKE_CXX_FLAGS_INIT \"--target=x86_64-linux-musl --sysroot=/usr/local/musl -isystem /usr/local/musl/include -nostdinc++ -isystem /usr/include/c++/v1 -fPIC\")
set(CMAKE_CXX_FLAGS_INIT \"--target=x86_64-linux-musl --sysroot=/usr/local/musl -isystem /usr/local/musl/include -nostdinc++ -isystem /usr/local/musl/include/c++/v1 -fPIC\")

set(CMAKE_EXE_LINKER_FLAGS_INIT \"-fuse-ld=lld -L/usr/local/musl/lib -L\${LLVM_LIB} -L\${SYSTEM_LIB} -L\${RT_PATH} -rtlib=compiler-rt --target=x86_64-linux-musl\")
set(CMAKE_SHARED_LINKER_FLAGS_INIT \"-fuse-ld=lld -L/usr/local/musl/lib -L\${LLVM_LIB} -L\${SYSTEM_LIB} -L\${RT_PATH} -rtlib=compiler-rt --target=x86_64-linux-musl\")
set(CMAKE_EXE_LINKER_FLAGS_INIT \"-fuse-ld=lld -L/usr/local/musl/lib -L\${RT_PATH} -rtlib=compiler-rt --target=x86_64-linux-musl\")
set(CMAKE_SHARED_LINKER_FLAGS_INIT \"-fuse-ld=lld -L/usr/local/musl/lib -L\${RT_PATH} -rtlib=compiler-rt --target=x86_64-linux-musl\")

set(CMAKE_CXX_STANDARD_LIBRARIES \"-lc++ -lc++abi -lunwind\")