Skip to content

Commit 917638d

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

File tree

7 files changed

+181
-484
lines changed

7 files changed

+181
-484
lines changed

.github/actions/Build_LLVM/action.yml

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

.github/workflows/MacOS-arm.yml

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -158,83 +158,7 @@ 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
238162

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

.github/workflows/MacOS.yml

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -142,83 +142,7 @@ 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
222146

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

0 commit comments

Comments
 (0)