Skip to content

Commit fbcce27

Browse files
authored
llvm build (#2012)
* llvm build * test * test
1 parent 4c87c8e commit fbcce27

File tree

2 files changed

+209
-0
lines changed

2 files changed

+209
-0
lines changed

.github/workflows/build-llvm.yml

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
name: LLVM Build
2+
3+
on:
4+
workflow_dispatch:
5+
6+
env:
7+
SCCACHE_DIR: ${{ github.workspace }}/sccache
8+
9+
10+
jobs:
11+
12+
build:
13+
name: Build on ${{ matrix.config.runner }}
14+
runs-on: ${{ matrix.config.runs_on }}
15+
timeout-minutes: 240 # 4 hours
16+
17+
strategy:
18+
fail-fast: true
19+
matrix:
20+
config:
21+
- {runner: 'AlmaLinux 8', runs_on: 'linux.arm64.2xlarge', target-os: 'almalinux', arch: 'arm64'}
22+
23+
24+
steps:
25+
26+
- name: Checkout Repo
27+
uses: actions/checkout@v4
28+
with:
29+
path: llvm-build
30+
31+
- name: Fetch LLVM Commit Hash
32+
shell: bash
33+
run: |
34+
LLVM_COMMIT_HASH="$(cat llvm-build/cmake/llvm-hash.txt)"
35+
echo "Found LLVM commit hash: ${LLVM_COMMIT_HASH}"
36+
echo "llvm_commit_hash=${LLVM_COMMIT_HASH}" >> ${GITHUB_ENV}
37+
38+
SHORT_LLVM_COMMIT_HASH="${LLVM_COMMIT_HASH:0:8}"
39+
echo "Short LLVM commit hash: ${SHORT_LLVM_COMMIT_HASH}"
40+
echo "short_llvm_commit_hash=${SHORT_LLVM_COMMIT_HASH}" >> ${GITHUB_ENV}
41+
42+
INSTALL_DIR="llvm-${SHORT_LLVM_COMMIT_HASH}-${{ matrix.config.target-os }}-${{ matrix.config.arch }}"
43+
echo "LLVM installation directory name: ${INSTALL_DIR}"
44+
echo "llvm_install_dir=${INSTALL_DIR}" >> ${GITHUB_ENV}
45+
46+
- name: Checkout LLVM
47+
uses: actions/checkout@v4
48+
with:
49+
repository: llvm/llvm-project
50+
path: llvm-project
51+
ref: ${{ env.llvm_commit_hash }}
52+
53+
- name: Set up Python
54+
uses: actions/setup-python@v5
55+
with:
56+
python-version: 3.11
57+
58+
59+
- name: Install Prerequisites
60+
shell: bash
61+
run: |
62+
python3 -m pip install cmake ninja sccache
63+
mkdir -p ${{ env.SCCACHE_DIR }}
64+
rm -rf ${{ env.SCCACHE_DIR }}/*
65+
66+
- name: Enable Cache
67+
uses: actions/cache@v4
68+
with:
69+
path: ${{ env.SCCACHE_DIR }}
70+
key: ${{ matrix.config.target-os }}-${{ matrix.config.arch }}-${{ env.short_llvm_commit_hash }}
71+
restore-keys: ${{ matrix.config.target-os }}-${{ matrix.config.arch }}-
72+
73+
74+
- name: Configure, Build, and Install LLVM (ubuntu arm64)
75+
if: matrix.config.arch == 'arm64' && matrix.config.target-os == 'ubuntu'
76+
run: |
77+
python3 -m pip install -r llvm-project/mlir/python/requirements.txt
78+
mkdir arm-sysroot
79+
mkdir -p llvm-project/host-tools
80+
cd llvm-project/host-tools
81+
cmake -GNinja ../llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="mlir;llvm;clang"
82+
ninja mlir-tblgen
83+
ninja llvm-tblgen
84+
ninja clang-tblgen
85+
cd ../..
86+
mv ./llvm-project/host-tools/bin ./host-tools
87+
HOST_TOOLS="$(pwd)/host-tools"
88+
rm -rf llvm-project/host-tools
89+
sudo apt-get update
90+
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf qemu-user-static gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
91+
cp -r /usr/aarch64-linux-gnu/lib ./arm-sysroot
92+
cp -r /usr/aarch64-linux-gnu/include ./arm-sysroot
93+
LINKER=$(pwd)/arm-sysroot/lib/ld-linux-aarch64.so.1
94+
wget http://ftp.de.debian.org/debian/pool/main/g/gcc-defaults/gcc-aarch64-linux-gnu_14.1.0-2_amd64.deb
95+
dpkg-deb -x gcc-aarch64-linux-gnu_14.1.0-2_amd64.deb ./arm-sysroot
96+
export LD_LIBRARY_PATH=$(pwd)/arm-sysroot/lib:$LD_LIBRARY_PATH
97+
sudo ln -s $LINKER /lib/ld-linux-aarch64.so.1
98+
SYSROOT="$(pwd)/arm-sysroot"
99+
echo $SYSROOT
100+
echo $LINKER
101+
cmake -GNinja -Bllvm-project/build \
102+
-DCMAKE_BUILD_TYPE=Release \
103+
-DLLVM_ENABLE_PROJECTS="mlir;llvm" \
104+
-DLLVM_BUILD_UTILS=ON \
105+
-DLLVM_TABLEGEN=$HOST_TOOLS/llvm-tblgen \
106+
-DMLIR_TABLEGEN=$HOST_TOOLS/mlir-tblgen \
107+
-DCLANG_TABLEGEN=$HOST_TOOLS/clang-tblgen \
108+
-DLLVM_ENABLE_ASSERTIONS=ON \
109+
-DCMAKE_LINKER=$LINKER \
110+
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
111+
-DLLVM_ENABLE_ZSTD=OFF \
112+
-DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF \
113+
-DLLVM_INSTALL_UTILS=ON \
114+
-DCMAKE_INSTALL_PREFIX="${{ env.llvm_install_dir }}" \
115+
-DLLVM_TARGETS_TO_BUILD="AArch64;NVPTX;AMDGPU" \
116+
-DCMAKE_CROSSCOMPILING=True \
117+
-DLLVM_TARGET_ARCH=AArch64 \
118+
-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu \
119+
-DLLVM_USE_HOST_TOOLS=OFF \
120+
-DCMAKE_C_COMPILER="/usr/bin/aarch64-linux-gnu-gcc" \
121+
-DCMAKE_CXX_COMPILER="/usr/bin/aarch64-linux-gnu-g++" \
122+
-DCMAKE_ASM_COMPILER="/usr/bin/aarch64-linux-gnu-as" \
123+
-DCMAKE_AR="/usr/bin/aarch64-linux-gnu-ar" \
124+
-DCMAKE_NM="/usr/bin/aarch64-linux-gnu-nm" \
125+
-DCMAKE_OBJCOPY="/usr/bin/aarch64-linux-gnu-objcopy" \
126+
-DCMAKE_OBJDUMP="/usr/bin/aarch64-linux-gnu-objdump" \
127+
-DCMAKE_RANLIB="/usr/bin/aarch64-linux-gnu-ranlib" \
128+
-DCMAKE_STRIP="/usr/bin/aarch64-linux-gnu-strip" \
129+
-DCMAKE_SYSROOT=$SYSROOT \
130+
-DLLVM_ENABLE_TERMINFO=OFF \
131+
llvm-project/llvm
132+
ninja -C llvm-project/build install
133+
CURR_PWD="$(pwd)"
134+
cd "${{ env.llvm_install_dir }}/python_packages/mlir_core/mlir/_mlir_libs/"
135+
for file in *x86_64*; do
136+
mv "$file" "${file/x86_64/aarch64}"
137+
done
138+
cd $CURR_PWD
139+
tar czf "${{ env.llvm_install_dir }}.tar.gz" "${{ env.llvm_install_dir }}"
140+
141+
- name: Configure, Build, Test, and Install LLVM (AlmaLinux)
142+
if: matrix.config.target-os == 'almalinux'
143+
run: |
144+
# if this step crashes, it can leave behind a stale docker container
145+
docker container prune -f
146+
docker rmi -f $(docker images -q)
147+
148+
docker build --tag llvm-build --build-arg llvm_dir=llvm-project \
149+
-f llvm-build/.github/workflows/llvm-build/almalinux.Dockerfile .
150+
151+
# Create temporary container to copy cache and installed artifacts.
152+
CONTAINER_ID=$(docker create llvm-build)
153+
docker cp "${CONTAINER_ID}:/install" "${{ env.llvm_install_dir }}"
154+
tar czf "${{ env.llvm_install_dir }}.tar.gz" "${{ env.llvm_install_dir }}"
155+
156+
# We remove the existing directory, otherwise docker will
157+
# create a subdirectory inside the existing directory.
158+
rm -rf "${{ env.SCCACHE_DIR }}"
159+
docker cp "${CONTAINER_ID}:/sccache" "${{ env.SCCACHE_DIR }}"
160+
sudo chown -R "$(id -u -n):$(id -g -n)" "${{ env.SCCACHE_DIR }}"
161+
162+
docker rm "${CONTAINER_ID}"
163+
164+
- name: Upload Build Artifacts
165+
uses: actions/upload-artifact@v4
166+
with:
167+
name: llvm-${{ matrix.config.target-os }}-${{ matrix.config.arch }}
168+
path: |
169+
${{ github.workspace }}/llvm-*-${{ matrix.config.target-os }}-${{ matrix.config.arch }}.tar.gz
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM almalinux:8
2+
ARG llvm_dir=llvm-project
3+
# Add the cache artifacts and the LLVM source tree to the container
4+
ADD sccache /sccache
5+
ADD "${llvm_dir}" /source/llvm-project
6+
ENV SCCACHE_DIR="/sccache"
7+
ENV SCCACHE_CACHE_SIZE="2G"
8+
9+
RUN dnf install --assumeyes llvm-toolset
10+
RUN dnf install --assumeyes python38-pip python38-devel git
11+
12+
RUN python3 -m pip install --upgrade pip
13+
RUN python3 -m pip install --upgrade cmake ninja sccache lit
14+
15+
# Install MLIR's Python Dependencies
16+
RUN python3 -m pip install -r /source/llvm-project/mlir/python/requirements.txt
17+
18+
# Configure, Build, Test, and Install LLVM
19+
RUN cmake -GNinja -Bbuild \
20+
-DCMAKE_BUILD_TYPE=Release \
21+
-DCMAKE_C_COMPILER=clang \
22+
-DCMAKE_CXX_COMPILER=clang++ \
23+
-DCMAKE_ASM_COMPILER=clang \
24+
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
25+
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
26+
-DCMAKE_CXX_FLAGS="-Wno-everything" \
27+
-DCMAKE_LINKER=lld \
28+
-DCMAKE_INSTALL_PREFIX="/install" \
29+
-DLLVM_BUILD_UTILS=ON \
30+
-DLLVM_BUILD_TOOLS=ON \
31+
-DLLVM_ENABLE_ASSERTIONS=ON \
32+
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
33+
-DLLVM_ENABLE_PROJECTS=mlir \
34+
-DLLVM_ENABLE_TERMINFO=OFF \
35+
-DLLVM_INSTALL_UTILS=ON \
36+
-DLLVM_TARGET_ARCH=AArch64 \
37+
-DLLVM_TARGETS_TO_BUILD="host;NVPTX;AMDGPU" \
38+
/source/llvm-project/llvm
39+
40+
RUN ninja -C build install

0 commit comments

Comments
 (0)