Skip to content

Commit 303de1f

Browse files
committed
Add Windows arm Github runners
1 parent 96045bd commit 303de1f

File tree

3 files changed

+385
-1
lines changed

3 files changed

+385
-1
lines changed

.github/workflows/Windows-arm.yml

+382
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,382 @@
1+
name: Windows-arm
2+
on:
3+
pull_request:
4+
branches: [main]
5+
push:
6+
branches: [main]
7+
release:
8+
types: [published]
9+
schedule:
10+
- cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
build_cache:
18+
name: ${{ matrix.name }}
19+
runs-on: ${{ matrix.os }}
20+
strategy:
21+
fail-fast: false
22+
matrix:
23+
include:
24+
- name: win11-msvc-clang-repl-19
25+
os: windows-11-arm
26+
compiler: msvc
27+
clang-runtime: '19'
28+
cling: Off
29+
llvm_enable_projects: "clang"
30+
llvm_targets_to_build: "host;NVPTX"
31+
32+
steps:
33+
- uses: actions/checkout@v4
34+
with:
35+
fetch-depth: 0
36+
37+
- name: Set up Python
38+
uses: actions/setup-python@v5
39+
with:
40+
python-version: '3.11'
41+
42+
- name: Save PR Info on Windows systems
43+
run: |
44+
#can be found
45+
mkdir ./pr
46+
echo "${{ github.event.number }}" > ./pr/NR
47+
echo ${{ github.repository }} > ./pr/REPO
48+
49+
if ( "${{ matrix.cling }}" -imatch "On" )
50+
{
51+
$env:CLING_HASH_TEMP = ( git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} )
52+
$env:CLING_HASH = $env:CLING_HASH_TEMP -replace "\t","-"
53+
}
54+
else
55+
{
56+
$env:CLING_HASH="Repl"
57+
# May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x
58+
# which could be quite often for new releases
59+
$env:LLVM_HASH_TEMP = (git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x )
60+
$env:LLVM_HASH = $env:LLVM_HASH_TEMP -replace "\t","-"
61+
}
62+
63+
echo "CLING_HASH=$env:CLING_HASH"
64+
echo "LLVM_HASH=$env:LLVM_HASH"
65+
66+
echo "CLING_HASH=$env:CLING_HASH" >> $GITHUB_ENV
67+
echo "LLVM_HASH=$env:LLVM_HASH" >> $GITHUB_ENV
68+
69+
- name: Restore Cache LLVM/Clang runtime build directory
70+
uses: actions/cache/restore@v4
71+
id: cache
72+
with:
73+
path: |
74+
llvm-project
75+
${{ matrix.cling=='On' && 'cling' || '' }}
76+
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }}
77+
lookup-only: true
78+
79+
- name: Setup default Build Type on Windows
80+
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
81+
run: |
82+
echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV
83+
echo "CODE_COVERAGE=0" >> $env:GITHUB_ENV
84+
$env:ncpus=$([Environment]::ProcessorCount)
85+
echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
86+
87+
- name: Setup compiler on Windows
88+
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
89+
run: |
90+
if ( "${{ matrix.compiler }}" -imatch "clang" )
91+
{
92+
$ver="${{ matrix.compiler }}".split("-")[1]
93+
choco install llvm --version=$ver --no-progress -my
94+
clang --version
95+
#
96+
$env:CC="clang"
97+
$env:CXX="clang++"
98+
echo "CC=clang" >> $env:GITHUB_ENV
99+
echo "CXX=clang++" >> $env:GITHUB_ENV
100+
}
101+
elseif ( "${{ matrix.compiler }}" -imatch "msvc" )
102+
{
103+
# MSVC is builtin in container image
104+
}
105+
else
106+
{
107+
echo "Unsupported compiler - fix YAML file"
108+
}
109+
110+
- name: Install deps on Windows
111+
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
112+
run: |
113+
choco install findutils
114+
$env:PATH="C:\Program Files (x86)\GnuWin32\bin;$env:PATH"
115+
116+
- name: Build LLVM/Cling on Windows systems if the cache is invalid
117+
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
118+
run: |
119+
120+
if ( "${{ matrix.cling }}" -imatch "On" )
121+
{
122+
git clone https://github.com/root-project/cling.git
123+
cd ./cling
124+
git checkout tags/v${{ matrix.cling-version }}
125+
cd ..
126+
git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git
127+
$env:PWD_DIR= $PWD.Path
128+
$env:CLING_DIR="$env:PWD_DIR\cling"
129+
echo "CLING_DIR=$env:CLING_DIR"
130+
}
131+
else
132+
{
133+
git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git
134+
}
135+
136+
cd llvm-project
137+
# Build
138+
mkdir build
139+
if ( "${{ matrix.cling }}" -imatch "On" )
140+
{
141+
cd build
142+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
143+
-DLLVM_EXTERNAL_PROJECTS=cling `
144+
-DLLVM_EXTERNAL_CLING_SOURCE_DIR="$env:CLING_DIR" `
145+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
146+
-DCMAKE_BUILD_TYPE=Release `
147+
-DLLVM_ENABLE_ASSERTIONS=ON `
148+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF `
149+
-DCLANG_ENABLE_ARCMT=OFF `
150+
-DCLANG_ENABLE_FORMAT=OFF `
151+
-DCLANG_ENABLE_BOOTSTRAP=OFF `
152+
-DLLVM_ENABLE_ZSTD=OFF `
153+
-DLLVM_ENABLE_TERMINFO=OFF `
154+
-DLLVM_ENABLE_LIBXML2=OFF `
155+
..\llvm
156+
cmake --build . --config Release --target clang --parallel ${{ env.ncpus }}
157+
cmake --build . --config Release --target cling --parallel ${{ env.ncpus }}
158+
# Now build gtest.a and gtest_main for CppInterOp to run its tests.
159+
cmake --build . --config Release --target gtest_main --parallel ${{ env.ncpus }}
160+
}
161+
else
162+
{
163+
cp -r ..\patches\llvm\clang${{ matrix.clang-runtime }}*
164+
#FIXME: Apply patches without hardcoding
165+
if ( "${{ matrix.clang-runtime }}" -imatch "16" )
166+
{
167+
git apply -v clang16-1-Value.patch
168+
git apply -v clang16-2-CUDA.patch
169+
git apply -v clang16-3-WeakRef.patch
170+
}
171+
elseif ( "${{ matrix.clang-runtime }}" -imatch "17" )
172+
{
173+
git apply -v clang17-1-NewOperator.patch
174+
}
175+
cd build
176+
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
177+
cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
178+
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
179+
-DCMAKE_BUILD_TYPE=Release `
180+
-DLLVM_ENABLE_ASSERTIONS=ON `
181+
-DCLANG_ENABLE_STATIC_ANALYZER=OFF `
182+
-DCLANG_ENABLE_ARCMT=OFF `
183+
-DCLANG_ENABLE_FORMAT=OFF `
184+
-DCLANG_ENABLE_BOOTSTRAP=OFF `
185+
-DLLVM_ENABLE_ZSTD=OFF `
186+
-DLLVM_ENABLE_TERMINFO=OFF `
187+
-DLLVM_ENABLE_LIBXML2=OFF `
188+
..\llvm
189+
cmake --build . --config Release --target clang clangInterpreter clangStaticAnalyzerCore --parallel ${{ env.ncpus }}
190+
}
191+
cd ..\
192+
rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
193+
if ( "${{ matrix.cling }}" -imatch "On" )
194+
{
195+
cd .\llvm\
196+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
197+
cd ..\clang\
198+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".")
199+
cd ..\..\cling\
200+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
201+
}
202+
else
203+
{
204+
cd .\llvm\
205+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
206+
cd ..\clang\
207+
rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".")
208+
cd ..\..
209+
}
210+
211+
- name: Save Cache LLVM/Clang runtime build directory
212+
uses: actions/cache/save@v4
213+
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
214+
with:
215+
path: |
216+
llvm-project
217+
${{ matrix.cling=='On' && 'cling' || '' }}
218+
key: ${{ steps.cache.outputs.cache-primary-key }}
219+
220+
cppinterop_and_cppyy_build:
221+
needs: [build_cache]
222+
name: ${{ matrix.name }}
223+
runs-on: ${{ matrix.os }}
224+
strategy:
225+
fail-fast: false
226+
matrix:
227+
include:
228+
- name: win11-msvc-clang-repl-19
229+
os: windows-11-arm
230+
compiler: msvc
231+
clang-runtime: '19'
232+
cling: Off
233+
cppyy: Off
234+
235+
steps:
236+
- uses: actions/checkout@v4
237+
with:
238+
fetch-depth: 0
239+
240+
- name: Set up Python
241+
uses: actions/setup-python@v5
242+
with:
243+
python-version: '3.11'
244+
245+
- name: Save PR Info on Windows systems
246+
run: |
247+
#can be found
248+
mkdir ./pr
249+
echo "${{ github.event.number }}" > ./pr/NR
250+
echo ${{ github.repository }} > ./pr/REPO
251+
252+
if ( "${{ matrix.cling }}" -imatch "On" )
253+
{
254+
$env:CLING_HASH_TEMP = ( git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} )
255+
$env:CLING_HASH = $env:CLING_HASH_TEMP -replace "\t","-"
256+
}
257+
else
258+
{
259+
$env:CLING_HASH="Repl"
260+
# May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x
261+
# which could be quite often for new releases
262+
$env:LLVM_HASH_TEMP = (git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x )
263+
$env:LLVM_HASH = $env:LLVM_HASH_TEMP -replace "\t","-"
264+
}
265+
266+
echo "CLING_HASH=$env:CLING_HASH"
267+
echo "LLVM_HASH=$env:LLVM_HASH"
268+
269+
echo "CLING_HASH=$env:CLING_HASH" >> $GITHUB_ENV
270+
echo "LLVM_HASH=$env:LLVM_HASH" >> $GITHUB_ENV
271+
272+
- name: Setup default Build Type on Windows
273+
run: |
274+
echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV
275+
echo "CODE_COVERAGE=0" >> $env:GITHUB_ENV
276+
$env:ncpus=$([Environment]::ProcessorCount)
277+
echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
278+
279+
- name: Setup compiler on Windows
280+
run: |
281+
if ( "${{ matrix.compiler }}" -imatch "clang" )
282+
{
283+
$ver="${{ matrix.compiler }}".split("-")[1]
284+
choco install llvm --version=$ver --no-progress -my
285+
clang --version
286+
#
287+
$env:CC="clang"
288+
$env:CXX="clang++"
289+
echo "CC=clang" >> $env:GITHUB_ENV
290+
echo "CXX=clang++" >> $env:GITHUB_ENV
291+
}
292+
elseif ( "${{ matrix.compiler }}" -imatch "msvc" )
293+
{
294+
# MSVC is builtin in container image
295+
}
296+
else
297+
{
298+
echo "Unsupported compiler - fix YAML file"
299+
}
300+
301+
- name: Restore Cache LLVM/Clang runtime build directory
302+
uses: actions/cache/restore@v4
303+
id: cache
304+
with:
305+
path: |
306+
llvm-project
307+
${{ matrix.cling=='On' && 'cling' || '' }}
308+
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }}
309+
310+
- name: Build and Test/Install CppInterOp on Windows systems
311+
run: |
312+
#until https://github.com/compiler-research/CppInterOp/issues/188 is solved
313+
$env:PWD_DIR= $PWD.Path
314+
315+
$env:LLVM_DIR="$env:PWD_DIR\llvm-project"
316+
echo "LLVM_DIR=$env:LLVM_DIR"
317+
echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV
318+
319+
$env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build"
320+
echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR"
321+
echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV
322+
323+
if ( "${{ matrix.cling }}" -imatch "On" )
324+
{
325+
$env:CLING_DIR="$env:PWD_DIR\cling"
326+
echo "CLING_DIR=$env:CLING_DIR"
327+
echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV
328+
329+
$env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build"
330+
echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR"
331+
echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV
332+
333+
$env:CPLUS_INCLUDE_PATH="$env:CLING_DIR\tools\cling\include;$env:CLING_BUILD_DIR\include;$env:LLVM_DIR\llvm\include;$env:LLVM_DIR\clang\include;$env:LLVM_BUILD_DIR\include;$env:LLVM_BUILD_DIR\tools\clang\include;$env:PWD_DIR\include;"
334+
echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
335+
echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
336+
}
337+
else
338+
{
339+
$env:CPLUS_INCLUDE_PATH="$env:LLVM_DIR\llvm\include;$env:LLVM_DIR\clang\include;$env:LLVM_BUILD_DIR\include;$env:LLVM_BUILD_DIR\tools\clang\include;$env:PWD_DIR\include;"
340+
echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
341+
echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
342+
}
343+
344+
$env:CB_PYTHON_DIR="$env:PWD_DIR\cppyy-backend\python"
345+
echo "CB_PYTHON_DIR=$env:CB_PYTHON_DIR"
346+
echo "CB_PYTHON_DIR=$env:CB_PYTHON_DIR" >> $env:GITHUB_ENV
347+
348+
$env:CPPINTEROP_DIR="$env:CB_PYTHON_DIR\cppyy-backend"
349+
echo "CPPINTEROP_DIR=$env:CPPINTEROP_DIR"
350+
echo "CPPINTEROP_DIR=$env:CPPINTEROP_DIR" >> $env:GITHUB_ENV
351+
352+
# Build CppInterOp next to cling and llvm-project.
353+
mkdir build
354+
cd build
355+
$env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR"
356+
echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR"
357+
echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV
358+
if ( "${{ matrix.cling }}" -imatch "On" )
359+
{
360+
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
361+
-DCPPINTEROP_USE_CLING=ON `
362+
-DCPPINTEROP_USE_REPL=OFF `
363+
-DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" `
364+
-DLLVM_DIR="$env:LLVM_BUILD_DIR" `
365+
-DLLVM_ENABLE_WERROR=On `
366+
-DClang_DIR="$env:LLVM_BUILD_DIR" -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} -DCMAKE_INSTALL_PREFIX="$env:CPPINTEROP_DIR" ..\
367+
}
368+
else
369+
{
370+
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
371+
-DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
372+
-DLLVM_ENABLE_WERROR=On `
373+
-DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} -DCMAKE_INSTALL_PREFIX="$env:CPPINTEROP_DIR" ..\
374+
cmake --build . --config ${{ env.BUILD_TYPE }} --target googletest --parallel ${{ env.ncpus }}
375+
}
376+
cmake --build . --config ${{ env.BUILD_TYPE }} --target check-cppinterop --parallel ${{ env.ncpus }}
377+
378+
- name: Setup tmate session
379+
if: ${{ failure() && runner.debug }}
380+
uses: mxschmitt/action-tmate@v3
381+
# When debugging increase to a suitable value!
382+
timeout-minutes: 30

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ if(MSVC)
498498
set(MSVC_EXPORTLIST ${MSVC_EXPORTLIST} ??3@YAXPAX0@Z ??_V@YAXPAX0@Z)
499499
endif()
500500

501-
if(MSVC_VERSION GREATER_EQUAL 1936)
501+
if(MSVC_VERSION GREATER_EQUAL 1936 AND NOT (CMAKE_C_COMPILER MATCHES "aarch64|arm"))
502502
set(MSVC_EXPORTLIST ${MSVC_EXPORTLIST}
503503
__std_find_trivial_1
504504
__std_find_trivial_2

0 commit comments

Comments
 (0)