Skip to content

Commit 9c5eddf

Browse files
committed
Make building native llvm into reusable action
1 parent aeb6137 commit 9c5eddf

File tree

7 files changed

+203
-484
lines changed

7 files changed

+203
-484
lines changed

.github/actions/Build_LLVM/action.yml

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
name: 'Builds LLVM'
2+
description: 'This action builds LLVM for native platforms'
3+
inputs:
4+
cache-hit:
5+
required: true
6+
7+
on:
8+
workflow_call:
9+
inputs:
10+
cache-hit:
11+
required: true
12+
type: boolean
13+
14+
runs:
15+
using: composite
16+
steps:
17+
- name: Build LLVM/Cling if the cache is invalid
18+
if: ${{ inputs.cache-hit != 'true' && runner.os != 'Windows' }}
19+
shell: bash
20+
run: |
21+
cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
22+
if [[ "${cling_on}" == "ON" ]]; then
23+
git clone https://github.com/root-project/cling.git
24+
cd ./cling
25+
git checkout tags/v${{ matrix.cling-version }}
26+
git apply -v ../patches/llvm/cling1.2-LookupHelper.patch
27+
cd ..
28+
git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git
29+
else # repl
30+
git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git
31+
fi
32+
cd llvm-project
33+
# Build
34+
mkdir build
35+
if [[ "${cling_on}" == "ON" ]]; then
36+
cd build
37+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \
38+
-DLLVM_EXTERNAL_PROJECTS=cling \
39+
-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \
40+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
41+
-DCMAKE_BUILD_TYPE=Release \
42+
-DLLVM_ENABLE_ASSERTIONS=ON \
43+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
44+
-DCLANG_ENABLE_ARCMT=OFF \
45+
-DCLANG_ENABLE_FORMAT=OFF \
46+
-DCLANG_ENABLE_BOOTSTRAP=OFF \
47+
-G Ninja \
48+
../llvm
49+
ninja clang -j ${{ env.ncpus }}
50+
ninja LLVMOrcDebugging -j ${{ env.ncpus }}
51+
ninja clingInterpreter -j ${{ env.ncpus }}
52+
else
53+
# Apply patches
54+
llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]')
55+
if [[ "${llvm_vers}" == "16" ]]||[[ "${llvm_vers}" == "17" ]]; then
56+
git apply -v ../patches/llvm/clang${{ matrix.clang-runtime }}-*.patch
57+
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
58+
fi
59+
cd build
60+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" \
61+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
62+
-DCMAKE_BUILD_TYPE=Release \
63+
-DLLVM_ENABLE_ASSERTIONS=ON \
64+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
65+
-DCLANG_ENABLE_ARCMT=OFF \
66+
-DCLANG_ENABLE_FORMAT=OFF \
67+
-DCLANG_ENABLE_BOOTSTRAP=OFF \
68+
-G Ninja \
69+
-DLLVM_INCLUDE_BENCHMARKS=OFF \
70+
-DLLVM_INCLUDE_EXAMPLES=OFF \
71+
-DLLVM_INCLUDE_TESTS=OFF \
72+
../llvm
73+
ninja clang clangInterpreter clangStaticAnalyzerCore -j ${{ env.ncpus }}
74+
cd ./tools/
75+
rm -rf $(find . -maxdepth 1 ! -name "clang" ! -name ".")
76+
cd ..
77+
rm compile_commands.json build.ninja
78+
fi
79+
cd ../
80+
rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
81+
if [[ "${cling_on}" == "ON" ]]; then
82+
cd ./llvm/
83+
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
84+
cd ../clang/
85+
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
86+
cd ../../cling/
87+
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
88+
else # repl
89+
cd ./llvm/
90+
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
91+
cd ../clang/
92+
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
93+
cd ../..
94+
fi
95+
96+
97+
- name: Build LLVM/Cling on Windows systems if the cache is invalid
98+
if: ${{ inputs.cache-hit != 'true' && runner.os == 'Windows' }}
99+
shell: powershell
100+
run: |
101+
102+
if ( "${{ matrix.cling }}" -imatch "On" )
103+
{
104+
git clone https://github.com/root-project/cling.git
105+
cd ./cling
106+
git checkout tags/v${{ matrix.cling-version }}
107+
git apply -v ../patches/llvm/cling1.2-LookupHelper.patch
108+
cd ..
109+
git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git
110+
$env:PWD_DIR= $PWD.Path
111+
$env:CLING_DIR="$env:PWD_DIR\cling"
112+
echo "CLING_DIR=$env:CLING_DIR"
113+
}
114+
else
115+
{
116+
git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git
117+
}
118+
119+
cd llvm-project
120+
# Build
121+
mkdir build
122+
if ( "${{ matrix.cling }}" -imatch "On" )
123+
{
124+
cd build
125+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
126+
-DLLVM_EXTERNAL_PROJECTS=cling `
127+
-DLLVM_EXTERNAL_CLING_SOURCE_DIR="$env:CLING_DIR" `
128+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
129+
-DCMAKE_BUILD_TYPE=Release `
130+
-DLLVM_ENABLE_ASSERTIONS=ON `
131+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF `
132+
-DCLANG_ENABLE_ARCMT=OFF `
133+
-DCLANG_ENABLE_FORMAT=OFF `
134+
-DCLANG_ENABLE_BOOTSTRAP=OFF `
135+
..\llvm
136+
cmake --build . --config Release --target clang --parallel ${{ env.ncpus }}
137+
cmake --build . --config Release --target LLVMOrcDebugging --parallel ${{ env.ncpus }}
138+
cmake --build . --config Release --target clingInterpreter --parallel ${{ env.ncpus }}
139+
}
140+
else
141+
{
142+
cp -r ..\patches\llvm\clang${{ matrix.clang-runtime }}*
143+
#FIXME: Apply patches without hardcoding
144+
if ( "${{ matrix.clang-runtime }}" -imatch "16" )
145+
{
146+
git apply -v clang16-1-Value.patch
147+
git apply -v clang16-2-CUDA.patch
148+
git apply -v clang16-3-WeakRef.patch
149+
}
150+
elseif ( "${{ matrix.clang-runtime }}" -imatch "17" )
151+
{
152+
git apply -v clang17-1-NewOperator.patch
153+
}
154+
cd build
155+
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
156+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
157+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
158+
-DCMAKE_BUILD_TYPE=Release `
159+
-DLLVM_ENABLE_ASSERTIONS=ON `
160+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF `
161+
-DCLANG_ENABLE_ARCMT=OFF `
162+
-DCLANG_ENABLE_FORMAT=OFF `
163+
-DCLANG_ENABLE_BOOTSTRAP=OFF `
164+
..\llvm
165+
cmake --build . --config Release --target clang clangInterpreter clangStaticAnalyzerCore --parallel ${{ env.ncpus }}
166+
}
167+
cd ..\
168+
rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
169+
if ( "${{ matrix.cling }}" -imatch "On" )
170+
{
171+
cd .\llvm\
172+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
173+
cd ..\clang\
174+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
175+
cd ..\..\cling\
176+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
177+
}
178+
else
179+
{
180+
cd .\llvm\
181+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
182+
cd ..\clang\
183+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
184+
cd ..\..
185+
}

.github/workflows/MacOS-arm.yml

Lines changed: 3 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -158,83 +158,9 @@ jobs:
158158
brew upgrade
159159
brew install ninja
160160
161-
- name: Build LLVM/Cling if the cache is invalid
162-
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
163-
run: |
164-
cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
165-
if [[ "${cling_on}" == "ON" ]]; then
166-
git clone https://github.com/root-project/cling.git
167-
cd ./cling
168-
git checkout tags/v${{ matrix.cling-version }}
169-
git apply -v ../patches/llvm/cling1.2-LookupHelper.patch
170-
cd ..
171-
git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git
172-
else # repl
173-
git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git
174-
fi
175-
cd llvm-project
176-
# Build
177-
mkdir build
178-
if [[ "${cling_on}" == "ON" ]]; then
179-
cd build
180-
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \
181-
-DLLVM_EXTERNAL_PROJECTS=cling \
182-
-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \
183-
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
184-
-DCMAKE_BUILD_TYPE=Release \
185-
-DLLVM_ENABLE_ASSERTIONS=ON \
186-
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
187-
-DCLANG_ENABLE_ARCMT=OFF \
188-
-DCLANG_ENABLE_FORMAT=OFF \
189-
-DCLANG_ENABLE_BOOTSTRAP=OFF \
190-
-G Ninja \
191-
../llvm
192-
ninja clang -j ${{ env.ncpus }}
193-
ninja LLVMOrcDebugging -j ${{ env.ncpus }}
194-
ninja clingInterpreter -j ${{ env.ncpus }}
195-
else
196-
# Apply patches
197-
llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]')
198-
if [[ "${llvm_vers}" == "16" ]]||[[ "${llvm_vers}" == "17" ]]; then
199-
git apply -v ../patches/llvm/clang${{ matrix.clang-runtime }}-*.patch
200-
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
201-
fi
202-
cd build
203-
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" \
204-
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
205-
-DCMAKE_BUILD_TYPE=Release \
206-
-DLLVM_ENABLE_ASSERTIONS=ON \
207-
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
208-
-DCLANG_ENABLE_ARCMT=OFF \
209-
-DCLANG_ENABLE_FORMAT=OFF \
210-
-DCLANG_ENABLE_BOOTSTRAP=OFF \
211-
-G Ninja \
212-
-DLLVM_INCLUDE_BENCHMARKS=OFF \
213-
-DLLVM_INCLUDE_EXAMPLES=OFF \
214-
-DLLVM_INCLUDE_TESTS=OFF \
215-
../llvm
216-
ninja clang clangInterpreter clangStaticAnalyzerCore -j ${{ env.ncpus }}
217-
cd ./tools/
218-
rm -rf $(find . -maxdepth 1 ! -name "clang" ! -name ".")
219-
cd ..
220-
rm compile_commands.json build.ninja
221-
fi
222-
cd ../
223-
rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
224-
if [[ "${cling_on}" == "ON" ]]; then
225-
cd ./llvm/
226-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
227-
cd ../clang/
228-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
229-
cd ../../cling/
230-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
231-
else # repl
232-
cd ./llvm/
233-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
234-
cd ../clang/
235-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
236-
cd ../..
237-
fi
161+
- uses: ./.github/actions/Build_LLVM
162+
with:
163+
cache-hit: ${{ steps.cache.outputs.cache-hit }}
238164

239165
- name: Save Cache LLVM/Clang runtime build directory
240166
uses: actions/cache/save@v4

.github/workflows/MacOS.yml

Lines changed: 3 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -142,83 +142,9 @@ jobs:
142142
brew upgrade
143143
brew install ninja
144144
145-
- name: Build LLVM/Cling if the cache is invalid
146-
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
147-
run: |
148-
cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
149-
if [[ "${cling_on}" == "ON" ]]; then
150-
git clone https://github.com/root-project/cling.git
151-
cd ./cling
152-
git checkout tags/v${{ matrix.cling-version }}
153-
git apply -v ../patches/llvm/cling1.2-LookupHelper.patch
154-
cd ..
155-
git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git
156-
else # repl
157-
git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git
158-
fi
159-
cd llvm-project
160-
# Build
161-
mkdir build
162-
if [[ "${cling_on}" == "ON" ]]; then
163-
cd build
164-
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \
165-
-DLLVM_EXTERNAL_PROJECTS=cling \
166-
-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \
167-
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
168-
-DCMAKE_BUILD_TYPE=Release \
169-
-DLLVM_ENABLE_ASSERTIONS=ON \
170-
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
171-
-DCLANG_ENABLE_ARCMT=OFF \
172-
-DCLANG_ENABLE_FORMAT=OFF \
173-
-DCLANG_ENABLE_BOOTSTRAP=OFF \
174-
-G Ninja \
175-
../llvm
176-
ninja clang -j ${{ env.ncpus }}
177-
ninja LLVMOrcDebugging -j ${{ env.ncpus }}
178-
ninja clingInterpreter -j ${{ env.ncpus }}
179-
else
180-
# Apply patches
181-
llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]')
182-
if [[ "${llvm_vers}" == "16" ]]||[[ "${llvm_vers}" == "17" ]]; then
183-
git apply -v ../patches/llvm/clang${{ matrix.clang-runtime }}-*.patch
184-
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
185-
fi
186-
cd build
187-
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" \
188-
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
189-
-DCMAKE_BUILD_TYPE=Release \
190-
-DLLVM_ENABLE_ASSERTIONS=ON \
191-
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
192-
-DCLANG_ENABLE_ARCMT=OFF \
193-
-DCLANG_ENABLE_FORMAT=OFF \
194-
-DCLANG_ENABLE_BOOTSTRAP=OFF \
195-
-G Ninja \
196-
-DLLVM_INCLUDE_BENCHMARKS=OFF \
197-
-DLLVM_INCLUDE_EXAMPLES=OFF \
198-
-DLLVM_INCLUDE_TESTS=OFF \
199-
../llvm
200-
ninja clang clangInterpreter clangStaticAnalyzerCore -j ${{ env.ncpus }}
201-
cd ./tools/
202-
rm -rf $(find . -maxdepth 1 ! -name "clang" ! -name ".")
203-
cd ..
204-
rm compile_commands.json build.ninja
205-
fi
206-
cd ../
207-
rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
208-
if [[ "${cling_on}" == "ON" ]]; then
209-
cd ./llvm/
210-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
211-
cd ../clang/
212-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
213-
cd ../../cling/
214-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
215-
else # repl
216-
cd ./llvm/
217-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
218-
cd ../clang/
219-
rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
220-
cd ../..
221-
fi
145+
- uses: ./.github/actions/Build_LLVM
146+
with:
147+
cache-hit: ${{ steps.cache.outputs.cache-hit }}
222148

223149
- name: Save Cache LLVM/Clang runtime build directory
224150
uses: actions/cache/save@v4

0 commit comments

Comments
 (0)