Skip to content

Commit df09eac

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

File tree

7 files changed

+196
-484
lines changed

7 files changed

+196
-484
lines changed

.github/actions/Build_LLVM/action.yml

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

.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)