llvm build (#2012) #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: LLVM Build | |
on: | |
workflow_call: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- llvm-build/* | |
- .github/workflows/build-llvm.yml | |
env: | |
SCCACHE_DIR: ${{ github.workspace }}/sccache | |
jobs: | |
build: | |
name: Build on ${{ matrix.config.runner }} | |
runs-on: ${{ matrix.config.runs_on }} | |
timeout-minutes: 240 # 4 hours | |
strategy: | |
fail-fast: true | |
matrix: | |
config: | |
- {runner: 'AlmaLinux 8', runs_on: 'linux.arm64.2xlarge', target-os: 'almalinux', arch: 'arm64'} | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
with: | |
path: llvm-build | |
- name: Fetch LLVM Commit Hash | |
shell: bash | |
run: | | |
LLVM_COMMIT_HASH="$(cat llvm-build/cmake/llvm-hash.txt)" | |
echo "Found LLVM commit hash: ${LLVM_COMMIT_HASH}" | |
echo "llvm_commit_hash=${LLVM_COMMIT_HASH}" >> ${GITHUB_ENV} | |
SHORT_LLVM_COMMIT_HASH="${LLVM_COMMIT_HASH:0:8}" | |
echo "Short LLVM commit hash: ${SHORT_LLVM_COMMIT_HASH}" | |
echo "short_llvm_commit_hash=${SHORT_LLVM_COMMIT_HASH}" >> ${GITHUB_ENV} | |
INSTALL_DIR="llvm-${SHORT_LLVM_COMMIT_HASH}-${{ matrix.config.target-os }}-${{ matrix.config.arch }}" | |
echo "LLVM installation directory name: ${INSTALL_DIR}" | |
echo "llvm_install_dir=${INSTALL_DIR}" >> ${GITHUB_ENV} | |
- name: Checkout LLVM | |
uses: actions/checkout@v4 | |
with: | |
repository: llvm/llvm-project | |
path: llvm-project | |
ref: ${{ env.llvm_commit_hash }} | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
- name: Install Prerequisites | |
shell: bash | |
run: | | |
python3 -m pip install cmake ninja sccache | |
mkdir -p ${{ env.SCCACHE_DIR }} | |
rm -rf ${{ env.SCCACHE_DIR }}/* | |
- name: Enable Cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_DIR }} | |
key: ${{ matrix.config.target-os }}-${{ matrix.config.arch }}-${{ env.short_llvm_commit_hash }} | |
restore-keys: ${{ matrix.config.target-os }}-${{ matrix.config.arch }}- | |
- name: Configure, Build, and Install LLVM (ubuntu arm64) | |
if: matrix.config.arch == 'arm64' && matrix.config.target-os == 'ubuntu' | |
run: | | |
python3 -m pip install -r llvm-project/mlir/python/requirements.txt | |
mkdir arm-sysroot | |
mkdir -p llvm-project/host-tools | |
cd llvm-project/host-tools | |
cmake -GNinja ../llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="mlir;llvm;clang" | |
ninja mlir-tblgen | |
ninja llvm-tblgen | |
ninja clang-tblgen | |
cd ../.. | |
mv ./llvm-project/host-tools/bin ./host-tools | |
HOST_TOOLS="$(pwd)/host-tools" | |
rm -rf llvm-project/host-tools | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf qemu-user-static gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
cp -r /usr/aarch64-linux-gnu/lib ./arm-sysroot | |
cp -r /usr/aarch64-linux-gnu/include ./arm-sysroot | |
LINKER=$(pwd)/arm-sysroot/lib/ld-linux-aarch64.so.1 | |
wget http://ftp.de.debian.org/debian/pool/main/g/gcc-defaults/gcc-aarch64-linux-gnu_14.1.0-2_amd64.deb | |
dpkg-deb -x gcc-aarch64-linux-gnu_14.1.0-2_amd64.deb ./arm-sysroot | |
export LD_LIBRARY_PATH=$(pwd)/arm-sysroot/lib:$LD_LIBRARY_PATH | |
sudo ln -s $LINKER /lib/ld-linux-aarch64.so.1 | |
SYSROOT="$(pwd)/arm-sysroot" | |
echo $SYSROOT | |
echo $LINKER | |
cmake -GNinja -Bllvm-project/build \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DLLVM_ENABLE_PROJECTS="mlir;llvm" \ | |
-DLLVM_BUILD_UTILS=ON \ | |
-DLLVM_TABLEGEN=$HOST_TOOLS/llvm-tblgen \ | |
-DMLIR_TABLEGEN=$HOST_TOOLS/mlir-tblgen \ | |
-DCLANG_TABLEGEN=$HOST_TOOLS/clang-tblgen \ | |
-DLLVM_ENABLE_ASSERTIONS=ON \ | |
-DCMAKE_LINKER=$LINKER \ | |
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \ | |
-DLLVM_ENABLE_ZSTD=OFF \ | |
-DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF \ | |
-DLLVM_INSTALL_UTILS=ON \ | |
-DCMAKE_INSTALL_PREFIX="${{ env.llvm_install_dir }}" \ | |
-DLLVM_TARGETS_TO_BUILD="AArch64;NVPTX;AMDGPU" \ | |
-DCMAKE_CROSSCOMPILING=True \ | |
-DLLVM_TARGET_ARCH=AArch64 \ | |
-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu \ | |
-DLLVM_USE_HOST_TOOLS=OFF \ | |
-DCMAKE_C_COMPILER="/usr/bin/aarch64-linux-gnu-gcc" \ | |
-DCMAKE_CXX_COMPILER="/usr/bin/aarch64-linux-gnu-g++" \ | |
-DCMAKE_ASM_COMPILER="/usr/bin/aarch64-linux-gnu-as" \ | |
-DCMAKE_AR="/usr/bin/aarch64-linux-gnu-ar" \ | |
-DCMAKE_NM="/usr/bin/aarch64-linux-gnu-nm" \ | |
-DCMAKE_OBJCOPY="/usr/bin/aarch64-linux-gnu-objcopy" \ | |
-DCMAKE_OBJDUMP="/usr/bin/aarch64-linux-gnu-objdump" \ | |
-DCMAKE_RANLIB="/usr/bin/aarch64-linux-gnu-ranlib" \ | |
-DCMAKE_STRIP="/usr/bin/aarch64-linux-gnu-strip" \ | |
-DCMAKE_SYSROOT=$SYSROOT \ | |
-DLLVM_ENABLE_TERMINFO=OFF \ | |
llvm-project/llvm | |
ninja -C llvm-project/build install | |
CURR_PWD="$(pwd)" | |
cd "${{ env.llvm_install_dir }}/python_packages/mlir_core/mlir/_mlir_libs/" | |
for file in *x86_64*; do | |
mv "$file" "${file/x86_64/aarch64}" | |
done | |
cd $CURR_PWD | |
tar czf "${{ env.llvm_install_dir }}.tar.gz" "${{ env.llvm_install_dir }}" | |
- name: Configure, Build, Test, and Install LLVM (AlmaLinux) | |
if: matrix.config.target-os == 'almalinux' | |
run: | | |
# if this step crashes, it can leave behind a stale docker container | |
docker container prune -f | |
docker rmi -f $(docker images -q) | |
docker build --tag llvm-build --build-arg llvm_dir=llvm-project \ | |
-f llvm-build/.github/workflows/llvm-build/almalinux.Dockerfile . | |
# Create temporary container to copy cache and installed artifacts. | |
CONTAINER_ID=$(docker create llvm-build) | |
docker cp "${CONTAINER_ID}:/install" "${{ env.llvm_install_dir }}" | |
tar czf "${{ env.llvm_install_dir }}.tar.gz" "${{ env.llvm_install_dir }}" | |
# We remove the existing directory, otherwise docker will | |
# create a subdirectory inside the existing directory. | |
rm -rf "${{ env.SCCACHE_DIR }}" | |
docker cp "${CONTAINER_ID}:/sccache" "${{ env.SCCACHE_DIR }}" | |
sudo chown -R "$(id -u -n):$(id -g -n)" "${{ env.SCCACHE_DIR }}" | |
docker rm "${CONTAINER_ID}" | |
- name: Upload Build Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: llvm-${{ matrix.config.target-os }}-${{ matrix.config.arch }} | |
path: | | |
${{ github.workspace }}/llvm-*-${{ matrix.config.target-os }}-${{ matrix.config.arch }}.tar.gz |