diff --git a/.github/workflows/llvm.yaml b/.github/workflows/llvm.yaml index 91ec79b..54d7e4e 100644 --- a/.github/workflows/llvm.yaml +++ b/.github/workflows/llvm.yaml @@ -21,6 +21,11 @@ jobs: run: sudo apt install -yqq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Install RISC-V toolchain run: sudo apt install -yqq gcc-riscv64-linux-gnu g++-riscv64-linux-gnu binutils-riscv64-linux-gnu + - name: Setup mold + uses: rui314/setup-mold@v1 + with: + mold-version: 2.4.0 + make-default: false - name: Checkout LLVM uses: actions/checkout@v4 with: @@ -51,9 +56,18 @@ jobs: DESTDIR=$PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-libcpp ninja install-stdlib-distribution-stripped DESTDIR=$PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}} ninja install-toolchain-distribution-stripped + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-clang-tidy + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-clang-doc + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-clang-format + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-clangd + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-bolt + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-lld + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}-libcpp + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}} + ninja llvm-dwp DESTDIR=$PWD/install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}} ninja install-pstl - cp ./bin/llvm-dwp ../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}/bin + cp ./bin/llvm-dwp ../install/${{inputs.llvm_tag}}-linux-${{matrix.cpu}}/bin/ cd ../install @@ -93,6 +107,7 @@ jobs: CXXFLAGS: -w CFLAGS: -w run: | + sudo xcode-select -s /Applications/Xcode_15.1.app mkdir build && mkdir install python3 ./toolchain/scripts/configure_llvm.py --target_cpu="${{matrix.cpu}}-apple-darwin" --build_dir=$PWD/build @@ -108,9 +123,18 @@ jobs: DESTDIR=$PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-libcpp ninja install-stdlib-distribution-stripped DESTDIR=$PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}} ninja install-toolchain-distribution-stripped + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-clang-tidy + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-clang-doc + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-clang-format + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-clangd + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-bolt + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-lld + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}-libcpp + ../toolchain/scripts/flatten_usr_dirs.sh $PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}} + ninja llvm-dwp DESTDIR=$PWD/../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}} ninja install-pstl - cp ./bin/llvm-dwp ../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}/bin + cp ./bin/llvm-dwp ../install/${{inputs.llvm_tag}}-macos-${{matrix.cpu}}/bin/ cd ../install diff --git a/scripts/configure_llvm.py b/scripts/configure_llvm.py index ec3d8e2..b6c03a2 100644 --- a/scripts/configure_llvm.py +++ b/scripts/configure_llvm.py @@ -34,14 +34,18 @@ "aarch64-unknown-linux-gnu", "riscv64-unknown-linux-gnu", ] - targets_to_build = ["X86", - "AArch64", - "NVPTX", - "AMDGPU", - "RISCV"] + targets_to_build = [ + "X86", + "AArch64", + "NVPTX", + "AMDGPU", + "RISCV", + "WebAssembly", + "BPF", + ] elif platform.system() == "Darwin": runtime_targets = [args.target_cpu] - targets_to_build = ["X86", "AArch64"] + targets_to_build = ["X86", "AArch64", "WebAssembly"] cmake_args = [ "cmake", @@ -50,16 +54,18 @@ args.build_dir, "-S", "llvm/llvm", - "-DCMAKE_C_COMPILER=clang", - "-DCMAKE_CXX_COMPILER=clang++", "-DCMAKE_BUILD_TYPE=Release", - "-DCMAKE_INSTALL_PREFIX=\".\"", + "-DCMAKE_INSTALL_PREFIX=/usr/local", "-DLLVM_TARGETS_TO_BUILD={}".format(';'.join(targets_to_build)), "-DLLVM_RUNTIME_TARGETS={}".format(';'.join(runtime_targets)), "-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON", "-DLLVM_ENABLE_TERMINFO=OFF", "-DLLVM_ENABLE_ZLIB=OFF", "-DLLVM_ENABLE_ZSTD=OFF", + "-DCLANG_DEFAULT_CXX_STDLIB=libc++", + "-DCLANG_DEFAULT_RTLIB=compiler-rt", + "-DCLANG_DEFAULT_UNWINDLIB=libunwind", + "-DCLANG_DEFAULT_LINKER=lld", "-DLLVM_ENABLE_RUNTIMES=libunwind;compiler-rt;libcxx;libcxxabi;openmp", "-DLLVM_ENABLE_PROJECTS=bolt;clang;clang-tools-extra;lld;pstl", "-DLLVM_STATIC_LINK_CXX_STDLIB=ON", @@ -99,6 +105,50 @@ if not args.target_cpu.startswith("x86_64"): cmake_args.extend([ f"-DLLVM_HOST_TRIPLE={args.target_cpu}", + f"-DLLVM_TARGET_ARCH={args.target_cpu}", + f"-DLLVM_DEFAULT_TARGET_TRIPLE={args.target_cpu}", + f"-DCMAKE_ASM_COMPILER_TARGET={args.target_cpu}", + f"-DCMAKE_C_COMPILER_TARGET={args.target_cpu}", + f"-DCMAKE_CXX_COMPILER_TARGET={args.target_cpu}", + "-DCMAKE_CROSSCOMPILING=True", + ]) + if platform.system() == "Darwin": + cmake_args.extend([ + "-DCMAKE_SYSTEM_NAME=Darwin", + "-DCMAKE_SYSTEM_PROCESSOR=arm64", + "-DCMAKE_OSX_DEPLOYMENT_TARGET=14.2", + "-DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk", + "-DCMAKE_FIND_FRAMEWORK=LAST", + "-DCMAKE_FIND_APPBUNDLE=LAST", + ]) + elif platform.system() == "Linux": + gnu_prefix = args.target_cpu.replace('unknown-', '') + cmake_args.extend([ + "-DCMAKE_C_COMPILER=clang", + "-DCMAKE_CXX_COMPILER=clang++", + "-DLLVM_USE_LINKER=mold", + "-DCMAKE_LINK_FLAGS=-fuse-ld=mold", + "-DCMAKE_C_COMPILER_WORKS=1", + "-DCMAKE_CXX_COMPILER_WORKS=1", + "-DCMAKE_ASM_COMPILER_WORKS=1", + # f"-DCMAKE_AR=/usr/bin/{gnu_prefix}-ar", + # f"-DCMAKE_LINKER=/usr/bin/{gnu_prefix}-ld", + # f"-DCMAKE_RANLIB=/usr/bin/{gnu_prefix}-ranlib", + # f"-DCMAKE_STRIP=/usr/bin/{gnu_prefix}-strip", + # f"-DCMAKE_C_COMPILER_AR=/usr/bin/{gnu_prefix}-ar", + # f"-DCMAKE_C_COMPILER_RANLIB=/usr/bin/{gnu_prefix}-ranlib", + # f"-DCMAKE_CXX_COMPILER_AR=/usr/bin/{gnu_prefix}-ar", + # f"-DCMAKE_CXX_COMPILER_RANLIB=/usr/bin/{gnu_prefix}-ranlib", + # f"-DCMAKE_C_COMPILER={args.target_cpu.replace('unknown-', '')}-gcc", + # f"-DCMAKE_CXX_COMPILER={args.target_cpu.replace('unknown-', '')}-g++", + "-DCMAKE_SYSTEM_NAME=Linux", + f"-DCMAKE_SYSTEM_PROCESSOR={args.target_cpu.split('-')[0]}", + ]) +elif platform.system() == "Linux": + cmake_args.extend([ + "-DCMAKE_C_COMPILER=clang", + "-DCMAKE_CXX_COMPILER=clang++", + "-DLLVM_USE_LINKER=mold" ]) print(' '.join(cmake_args)) diff --git a/scripts/flatten_usr_dirs.sh b/scripts/flatten_usr_dirs.sh new file mode 100755 index 0000000..522f31a --- /dev/null +++ b/scripts/flatten_usr_dirs.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -eu + +if [ -d "$1/usr" ]; then + for dir in $1/usr/local/*/ + do + dir=${dir%*/} + mv $dir $1/${dir##*/} + done + + rm -r $1/usr +fi \ No newline at end of file