Skip to content

Commit c5cf564

Browse files
committed
add llvm build in the ci
1 parent 5ae1aaf commit c5cf564

File tree

15 files changed

+1421
-1
lines changed

15 files changed

+1421
-1
lines changed

.github/workflows/llvm-build.yml

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
name: LLVM Build
2+
3+
on:
4+
workflow_dispatch:
5+
# for test only
6+
push:
7+
# testing only, it will be triggered via push to main with path filtering
8+
branches:
9+
- "pull-request/[0-9]+"
10+
11+
permissions:
12+
contents: read
13+
packages: write
14+
id-token: write
15+
16+
defaults:
17+
run:
18+
shell: bash
19+
20+
jobs:
21+
build:
22+
name: Build on ${{ matrix.config.arch }}
23+
runs-on: ${{ matrix.config.runs_on }}
24+
container:
25+
image: ${{ matrix.config.docker_image }}
26+
options: >-
27+
--gpus all
28+
--shm-size=1g
29+
env:
30+
LLVM_INSTALL_DIR: ${{ github.workspace }}/llvm-install-${{ matrix.config.arch }}-${{ matrix.config.target_os }}
31+
LLVM_PACKAGE_NAME: llvm-${{ matrix.config.arch }}-${{ matrix.config.target_os }}.tar.gz
32+
LLVM_TARGET_DIR: ${{ github.workspace }}/llvm-project
33+
timeout-minutes: 120
34+
strategy:
35+
fail-fast: true
36+
matrix:
37+
config:
38+
- {runs_on: 'linux-amd64-gpu-h100-latest-1', docker_image: 'ghcr.io/nvidia/tensorrt-incubator/mlir-tensorrt:cuda13.0-rockylinux8-0.1', target_os: 'rockylinux8', arch: 'x86_64'}
39+
- {runs_on: 'linux-arm64-gpu-l4-latest-1', docker_image: 'ghcr.io/nvidia/tensorrt-incubator/mlir-tensorrt:cuda13.0-rockylinux8-0.1', target_os: 'rockylinux8', arch: 'aarch64'}
40+
41+
steps:
42+
- name: Checkout Repo
43+
uses: actions/checkout@v6
44+
45+
- name: ${{ matrix.config.arch }} - Set up LLVM Build Environment
46+
run: |
47+
set -euo pipefail
48+
set -x
49+
cd mlir-tensorrt
50+
./build_tools/scripts/setup-llvm-dev.sh --target-dir ${{ env.LLVM_TARGET_DIR }}
51+
52+
- name: ${{ matrix.config.arch }} - Build and Install LLVM
53+
run: |
54+
set -euo pipefail
55+
set -x
56+
cd mlir-tensorrt-llvm-distribution-builder
57+
curl -fsSL https://pixi.sh/install.sh | bash
58+
export PATH="$HOME/.pixi/bin:$PATH"
59+
pixi install
60+
pixi shell
61+
export CMAKE_BUILD_TYPE=Release
62+
./scripts/build-llvm.sh --target-dir ${{ env.LLVM_TARGET_DIR }} --install-dir ${{ env.LLVM_INSTALL_DIR }}
63+
64+
tar czf "${{ env.LLVM_PACKAGE_NAME }}" "${{ env.LLVM_INSTALL_DIR }}"
65+
66+
- name: Upload LLVM Build Artifacts
67+
uses: actions/upload-artifact@v4
68+
with:
69+
name: ${{ env.LLVM_PACKAGE_NAME }}
70+
path: mlir-tensorrt-llvm-distribution-builder/${{ env.LLVM_PACKAGE_NAME }}
71+
retention-days: 7
72+
73+
test:
74+
name: Test LLVM Package - ${{ matrix.config.arch }}
75+
runs-on: ${{ matrix.config.runs_on }}
76+
needs: build
77+
container:
78+
image: ${{ matrix.config.docker_image }}
79+
options: >-
80+
--gpus all
81+
--shm-size=1g
82+
env:
83+
LLVM_PACKAGE_NAME: llvm-${{ matrix.config.arch }}-${{ matrix.config.target_os }}.tar.gz
84+
LLVM_INSTALL_DIR: ${{ github.workspace }}/llvm-install-${{ matrix.config.arch }}-${{ matrix.config.target_os }}
85+
LLVM_TARGET_DIR: ${{ github.workspace }}/llvm-project
86+
timeout-minutes: 120
87+
strategy:
88+
fail-fast: true
89+
matrix:
90+
config:
91+
- {runs_on: 'linux-amd64-gpu-h100-latest-1', docker_image: 'ghcr.io/nvidia/tensorrt-incubator/mlir-tensorrt:cuda13.0-rockylinux8-0.1', target_os: 'rockylinux8', arch: 'x86_64'}
92+
- {runs_on: 'linux-arm64-gpu-l4-latest-1', docker_image: 'ghcr.io/nvidia/tensorrt-incubator/mlir-tensorrt:cuda13.0-rockylinux8-0.1', target_os: 'rockylinux8', arch: 'aarch64'}
93+
94+
steps:
95+
- name: Checkout Repo
96+
uses: actions/checkout@v6
97+
98+
- name: Download LLVM Package Artifact
99+
uses: actions/download-artifact@v4
100+
with:
101+
name: ${{ env.LLVM_PACKAGE_NAME }}
102+
path: ${{ github.workspace }}/artifacts
103+
104+
- name: Extract and Verify LLVM Package
105+
run: |
106+
set -euo pipefail
107+
set -x
108+
109+
echo "==> Extracting LLVM package: ${{ env.LLVM_PACKAGE_NAME }}"
110+
mkdir -p "${{ env.LLVM_INSTALL_DIR }}"
111+
112+
# Find the tar.gz file (it might be in a subdirectory)
113+
TAR_FILE=$(find "${{ github.workspace }}/artifacts" -name "${{ env.LLVM_PACKAGE_NAME }}" -type f | head -1)
114+
115+
if [[ -z "${TAR_FILE}" ]]; then
116+
echo "Error: Could not find ${{ env.LLVM_PACKAGE_NAME }} in artifacts"
117+
find "${{ github.workspace }}/artifacts" -type f
118+
exit 1
119+
fi
120+
121+
echo "==> Found package at: ${TAR_FILE}"
122+
echo "==> Package size: $(du -h "${TAR_FILE}" | cut -f1)"
123+
124+
# Extract the package
125+
tar -xzf "${TAR_FILE}" -C "${{ env.LLVM_INSTALL_DIR }}"
126+
127+
# Display package structure
128+
echo ""
129+
echo "==> Package structure:"
130+
du -sh "${{ env.LLVM_INSTALL_DIR }}"/*
131+
echo ""
132+
echo "==> Package verification complete!"
133+
134+
- name: Build and Test MLIR TensorRT with prebuilt LLVM Package
135+
run: |
136+
set -euo pipefail
137+
cd mlir-tensorrt
138+
export MLIR_TRT_DOWNLOAD_TENSORRT_VERSION=10.13
139+
export CMAKE_PRESET=github-cicd-prebuilt-llvm
140+
export CCACHE_DIR=${{ github.workspace }}/mlir-tensorrt/ccache
141+
export CPM_SOURCE_CACHE=${{ github.workspace }}/mlir-tensorrt/.cache.cpm
142+
export CPM_LLVM_SOURCE=${{ env.LLVM_TARGET_DIR }}
143+
export MLIR_TRT_PREBUILT_LLVM_DIR=${{ env.LLVM_INSTALL_DIR }}/Release/lib/cmake/llvm
144+
export MLIR_TRT_PREBUILT_MLIR_DIR=${{ env.LLVM_INSTALL_DIR }}/Release/lib/cmake/mlir
145+
export LLVM_EXTERNAL_LIT="${{ env.LLVM_INSTALL_DIR }}/Release/bin/llvm-lit"
146+
147+
148+
concurrency:
149+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref_name }}-llvm-package-build
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# SCM syntax highlighting & preventing 3-way merges
2+
pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# pixi environments
2+
.pixi/*
3+
!.pixi/config.toml
4+
5+
/llvm-project/
6+
/build/
7+
/tmp/
8+
/install/
9+
/dist/
10+
11+
*.tar.gz
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
This repo contains configuration and scripts to build a distribution of LLVM and MLIR development binaries, headers, and CMake configuration files for use with MLIR-TRT development.
2+
3+
These are used to create packages which are posted to the internal gitlab registry so that they can be used by MLIR-TRT developers instead of having to build LLVM from source.
4+
5+
## Configuration
6+
7+
Relevant configuration is kept in `config.json`.
8+
9+
## Building
10+
11+
```shell
12+
# Install dependencies
13+
pixi install
14+
# start pixi shell environment
15+
pixi shell
16+
17+
# Clones llvm-project to `./llvm-project` subdirectory and checks out the correct branch
18+
./scripts/setup-llvm.sh
19+
20+
# Builds llvm-project
21+
export CMAKE_BUILD_TYPE=Release
22+
./scripts/build-llvm.sh
23+
24+
# Tar the install directory and upload
25+
tar -czf llvm-project-$(uname)-$(uname -m) -C install/$CMAKE_BUILD_TYPE .
26+
27+
# TODO: upload to Gitlab package registry (as a generic package).
28+
29+
```
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# This file contains CMake configuration for use when building an LLVM distribution
2+
# for MLIR-TensorRT development.
3+
4+
# CMake Global Configuration
5+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
6+
7+
# LLVM Build Configuration
8+
set(LLVM_BUILD_LLVM_DYLIB OFF CACHE BOOL "")
9+
set(LLVM_BUILD_TESTS ON CACHE BOOL "")
10+
set(LLVM_BUILD_TOOLS ON CACHE BOOL "")
11+
set(LLVM_BUILD_UTILS ON CACHE BOOL "")
12+
set(LLVM_INSTALL_GTEST ON CACHE BOOL "")
13+
set(LLVM_CCACHE_BUILD ON CACHE BOOL "")
14+
set(LLVM_ENABLE_LIBCXX OFF CACHE BOOL "")
15+
set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
16+
set(LLVM_ENABLE_PROJECTS "mlir" CACHE STRING "")
17+
set(LLVM_ENABLE_RTTI OFF CACHE BOOL "")
18+
set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
19+
set(LLVM_ENABLE_UNWIND_TABLES OFF CACHE BOOL "")
20+
set(LLVM_ENABLE_Z3_SOLVER OFF CACHE BOOL "")
21+
set(LLVM_ENABLE_ZLIB ON CACHE BOOL "")
22+
set(LLVM_ENABLE_ZSTD OFF CACHE BOOL "")
23+
set(MLIR_ENABLE_BINDINGS_PYTHON ON CACHE BOOL "")
24+
set(MLIR_INSTALL_PYTHON_PACKAGES ON CACHE BOOL "")
25+
set(LLVM_FORCE_ENABLE_STATS OFF CACHE BOOL "")
26+
set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "")
27+
set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
28+
set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
29+
set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
30+
set(LLVM_INCLUDE_GO_TESTS OFF CACHE BOOL "")
31+
set(LLVM_INSTALL_TOOLCHAIN_ONLY OFF CACHE BOOL "")
32+
set(LLVM_INSTALL_UTILS ON CACHE BOOL "")
33+
set(LLVM_LINK_LLVM_DYLIB OFF CACHE BOOL "")
34+
35+
36+
# we will build separate llvm distribution in x86 and aarch64, this is faster
37+
# the llvm distribution built for x86 won't run in aarch64 anyway
38+
#set(LLVM_TARGETS_TO_BUILD "X86;AArch64;NVPTX" CACHE STRING "")
39+
set(LLVM_TARGETS_TO_BUILD "host;NVPTX" CACHE STRING "")
40+
41+
set(MLIR_LINK_LLVM_DYLIB OFF CACHE BOOL "")
42+
set(MLIR_LINK_MLIR_DYLIB OFF CACHE BOOL "")
43+
set(LLVM_APPEND_VC_REV OFF CACHE BOOL "")
44+
45+
46+
set(LLVM_TOOLCHAIN_TOOLS
47+
llvm-addr2line
48+
llvm-ar
49+
llvm-cxxfilt
50+
llvm-dis
51+
llvm-dwarfdump
52+
llvm-lib
53+
llvm-link
54+
llvm-mc
55+
llvm-nm
56+
llvm-objcopy
57+
llvm-objdump
58+
llvm-ranlib
59+
llvm-rc
60+
llvm-readelf
61+
llvm-readobj
62+
llvm-size
63+
llvm-strip
64+
llvm-symbolizer
65+
llvm-xray
66+
mlir-lsp-server
67+
mlir-opt
68+
mlir-pdll
69+
mlir-runner
70+
mlir-tblgen
71+
mlir-translate
72+
CACHE STRING "")
73+
74+
set(LLVM_TOOLCHAIN_UTILITIES
75+
FileCheck
76+
count
77+
not
78+
CACHE STRING "")
79+
80+
set(LLVM_DISTRIBUTION_COMPONENTS
81+
${LLVM_TOOLCHAIN_TOOLS}
82+
${LLVM_TOOLCHAIN_UTILITIES}
83+
cmake-exports
84+
llvm-headers
85+
llvm-libraries
86+
mlir-cmake-exports
87+
mlir-headers
88+
mlir-libraries
89+
mlir-python-sources
90+
MLIRPythonModules
91+
CACHE STRING "")
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Toolchain for use with conda environment on macOS arm64 (Apple Silicon).
2+
set(_conda_triple "arm64-apple-darwin20.0.0")
3+
set(conda_build_sysroot "$ENV{CONDA_PREFIX}/${_conda_triple}/sysroot")
4+
5+
# Common paths
6+
set(CMAKE_FIND_ROOT_PATH "$ENV{CONDA_PREFIX};${conda_build_sysroot}")
7+
set(CMAKE_INSTALL_LIBDIR lib)
8+
set(CMAKE_INSTALL_PREFIX "$ENV{CONDA_PREFIX}")
9+
set(CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}:${conda_build_sysroot}")
10+
set(CMAKE_PROGRAM_PATH "$ENV{CONDA_PREFIX}/bin:${conda_build_sysroot}/bin")
11+
12+
# macOS: Use clang/clang++ directly (Apple toolchain)
13+
set(CMAKE_C_COMPILER "$ENV{CONDA_PREFIX}/bin/clang")
14+
set(CMAKE_CXX_COMPILER "$ENV{CONDA_PREFIX}/bin/clang++")
15+
set(CMAKE_AR "$ENV{CONDA_PREFIX}/bin/ar")
16+
set(CMAKE_RANLIB "$ENV{CONDA_PREFIX}/bin/ranlib")
17+
set(CMAKE_STRIP "$ENV{CONDA_PREFIX}/bin/strip")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Toolchain for use with conda environment on Linux aarch64.
2+
set(_conda_triple "aarch64-conda-linux-gnu")
3+
set(conda_build_sysroot "$ENV{CONDA_PREFIX}/${_conda_triple}/sysroot")
4+
5+
# Common paths
6+
set(CMAKE_FIND_ROOT_PATH "$ENV{CONDA_PREFIX};${conda_build_sysroot}")
7+
set(CMAKE_INSTALL_LIBDIR lib)
8+
set(CMAKE_INSTALL_PREFIX "$ENV{CONDA_PREFIX}")
9+
set(CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}:${conda_build_sysroot}")
10+
set(CMAKE_PROGRAM_PATH "$ENV{CONDA_PREFIX}/bin:${conda_build_sysroot}/bin")
11+
12+
set(CMAKE_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
13+
set(CMAKE_C_COMPILER "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-clang")
14+
set(CMAKE_C_COMPILER_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
15+
set(CMAKE_C_COMPILER_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
16+
set(CMAKE_CXX_COMPILER "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-clang++")
17+
set(CMAKE_CXX_COMPILER_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
18+
set(CMAKE_CXX_COMPILER_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
19+
set(CMAKE_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
20+
set(CMAKE_STRIP "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-strip")
21+
22+
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=mold")
23+
set(CMAKE_MODULE_LINKER_FLAGS "-fuse-ld=mold")
24+
set(CMAKE_SHARED_LINKER_FLAGS "-fuse-ld=mold")
25+
set(CMAKE_LINKER "$ENV{CONDA_PREFIX}/bin/mold")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Toolchain for use with conda environment on Linux x86_64.
2+
set(_conda_triple "x86_64-conda-linux-gnu")
3+
set(conda_build_sysroot "$ENV{CONDA_PREFIX}/${_conda_triple}/sysroot")
4+
5+
# Common paths
6+
set(CMAKE_FIND_ROOT_PATH "$ENV{CONDA_PREFIX};${conda_build_sysroot}")
7+
set(CMAKE_INSTALL_LIBDIR lib)
8+
set(CMAKE_INSTALL_PREFIX "$ENV{CONDA_PREFIX}")
9+
set(CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}:${conda_build_sysroot}")
10+
set(CMAKE_PROGRAM_PATH "$ENV{CONDA_PREFIX}/bin:${conda_build_sysroot}/bin")
11+
12+
set(CMAKE_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
13+
set(CMAKE_C_COMPILER "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-clang")
14+
set(CMAKE_C_COMPILER_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
15+
set(CMAKE_C_COMPILER_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
16+
set(CMAKE_CXX_COMPILER "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-clang++")
17+
set(CMAKE_CXX_COMPILER_AR "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ar")
18+
set(CMAKE_CXX_COMPILER_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
19+
set(CMAKE_RANLIB "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-ranlib")
20+
set(CMAKE_STRIP "$ENV{CONDA_PREFIX}/bin/${_conda_triple}-strip")
21+
22+
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=mold")
23+
set(CMAKE_MODULE_LINKER_FLAGS "-fuse-ld=mold")
24+
set(CMAKE_SHARED_LINKER_FLAGS "-fuse-ld=mold")
25+
set(CMAKE_LINKER "$ENV{CONDA_PREFIX}/bin/mold")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"llvm-project": {
3+
"url": "https://oauth2:${NV_GITLAB_TOKEN}@gitlab-master.nvidia.com/initialdl/llvm-project-mirror.git",
4+
"revision": "mlir-tensorrt-2025-12-18.1"
5+
}
6+
}

0 commit comments

Comments
 (0)