name: Build Clang P2996 on: push: branches: - automated-release jobs: build: runs-on: self-hosted container: image: node:20-bullseye env: INSTALL_PATH: ${{ github.workspace }}/install steps: - name: Checkout uses: actions/checkout@v3 - name: Install dependencies run: | apt-get update apt-get install -y \ make \ python3 \ python3-pip \ zlib1g-dev \ build-essential \ lld \ clang \ wget \ libssl-dev pip3 install PyYAML>=5.1 - name: Install CMake (from source) run: | CMAKE_VERSION=3.28.3 cd /tmp wget -q https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz tar -xzf cmake-${CMAKE_VERSION}.tar.gz cd cmake-${CMAKE_VERSION} ./bootstrap --prefix=/usr/local make -j$(nproc) make install cmake --version - name: Configure LLVM/Clang for Reflection + Runtimes run: | export CC=clang export CXX=clang++ cmake -S llvm -B build \ -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra' \ -DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi;libunwind' \ -DLLVM_TARGETS_TO_BUILD='X86' \ -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_EXAMPLES=OFF \ -DLLVM_INCLUDE_DOCS=OFF \ -DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_ENABLE_RTTI=ON \ -DLLVM_ENABLE_EH=ON \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DLLVM_ENABLE_LLD=ON \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} - name: Build Clang + clangd + libc++ run: | cmake --build build --parallel=$(nproc) - name: Install run: | cmake --install build --prefix ${INSTALL_PATH} - name: Strip binaries (safe mode — leaves symbols needed by libc++) run: | find ${INSTALL_PATH} -type f -not -name "*.a" -not -name "*.so" \ -exec strip --strip-unneeded {} + 2>/dev/null || true - name: Package artifact (Zstd) run: | apt-get update && apt-get install -y zstd tar --use-compress-program=zstd -cf clang-p2996.tar.zst -C ${INSTALL_PATH} . - name: Upload artifact uses: actions/upload-artifact@v3 with: name: clang-p2996 path: clang-p2996.tar.zst