42
42
llvm_enable_projects : " clang;lld"
43
43
llvm_targets_to_build : " WebAssembly"
44
44
emsdk_ver : " 3.1.73"
45
+ - name : win2025-x86-clang-repl-19-emscripten
46
+ os : windows-2025
47
+ clang-runtime : ' 19'
48
+ cling : Off
49
+ llvm_enable_projects : " clang;lld"
50
+ llvm_targets_to_build : " WebAssembly"
51
+ emsdk_ver : " 3.1.73"
45
52
46
53
steps :
47
54
- uses : actions/checkout@v4
@@ -113,7 +120,7 @@ jobs:
113
120
lookup-only : true
114
121
115
122
- name : Setup emsdk
116
- if : ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }}
123
+ if : ${{ steps.cache.outputs.cache-hit != 'true' }}
117
124
run : |
118
125
git clone --depth=1 https://github.com/emscripten-core/emsdk.git
119
126
cd emsdk
@@ -136,8 +143,9 @@ jobs:
136
143
- name : Install deps on Windows
137
144
if : ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
138
145
run : |
139
- choco install findutils
146
+ choco install findutils ninja
140
147
$env:PATH="C:\Program Files (x86)\GnuWin32\bin;$env:PATH"
148
+ $env:PATH="C:\Program Files (x86)\Ninja\bin;$env:PATH"
141
149
142
150
- name : Install deps on MacOS
143
151
if : ${{ runner.os == 'macOS' && steps.cache.outputs.cache-hit != 'true' }}
@@ -258,10 +266,11 @@ jobs:
258
266
fi
259
267
260
268
261
- - name : Build LLVM/Cling on Windows systems if the cache is invalid
269
+ - name : Build LLVM/Cling on Windows systems if the cache is invalid (emscripten)
262
270
if : ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
263
271
run : |
264
-
272
+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
273
+ .\emsdk\emsdk_env.ps1
265
274
if ( "${{ matrix.cling }}" -imatch "On" )
266
275
{
267
276
git clone https://github.com/root-project/cling.git
@@ -284,54 +293,66 @@ jobs:
284
293
if ( "${{ matrix.cling }}" -imatch "On" )
285
294
{
286
295
cd build
287
- cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
288
- -DLLVM_EXTERNAL_PROJECTS=cling `
289
- -DLLVM_EXTERNAL_CLING_SOURCE_DIR="$env:CLING_DIR" `
290
- -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
291
- -DCMAKE_BUILD_TYPE=Release `
292
- -DLLVM_ENABLE_ASSERTIONS=ON `
293
- -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
294
- -DCLANG_ENABLE_ARCMT=OFF `
295
- -DCLANG_ENABLE_FORMAT=OFF `
296
- -DCLANG_ENABLE_BOOTSTRAP=OFF `
297
- -DLLVM_ENABLE_ZSTD=OFF `
298
- -DLLVM_ENABLE_TERMINFO=OFF `
299
- -DLLVM_ENABLE_LIBXML2=OFF `
296
+ emcmake cmake -DLLVM_EXTERNAL_PROJECTS=cling `
297
+ -DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling `
298
+ -DCMAKE_BUILD_TYPE=Release `
299
+ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
300
+ -DLLVM_ENABLE_ASSERTIONS=ON `
301
+ -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
302
+ -DLLVM_ENABLE_LIBEDIT=OFF `
303
+ -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
304
+ -DLLVM_ENABLE_ZSTD=OFF `
305
+ -DLLVM_ENABLE_LIBXML2=OFF `
306
+ -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
307
+ -DCLANG_ENABLE_ARCMT=OFF `
308
+ -DCLANG_ENABLE_BOOTSTRAP=OFF `
309
+ -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" `
310
+ -DLLVM_INCLUDE_BENCHMARKS=OFF `
311
+ -DLLVM_INCLUDE_EXAMPLES=OFF `
312
+ -DLLVM_INCLUDE_TESTS=OFF `
313
+ -DLLVM_ENABLE_THREADS=OFF `
314
+ -G Ninja `
315
+ -DLLVM_BUILD_TOOLS=OFF `
316
+ -DLLVM_ENABLE_LIBPFM=OFF `
317
+ -DCLANG_BUILD_TOOLS=OFF `
300
318
..\llvm
301
- cmake --build . --config Release --target clang --parallel ${{ env.ncpus }}
302
- cmake --build . --config Release --target cling --parallel ${{ env.ncpus }}
303
- # Now build gtest.a and gtest_main for CppInterOp to run its tests.
304
- cmake --build . --config Release --target gtest_main --parallel ${{ env.ncpus }}
319
+ emmake make clang cling lld gtest_main
305
320
}
306
321
else
307
322
{
308
- cp -r ..\patches\llvm\clang${{ matrix.clang-runtime }}*
323
+ cp -r ..\patches\llvm\emscripten-clang${{ matrix.clang-runtime }}*
324
+ cp -r ..\patches\llvm\Windows-emscripten-clang${{ matrix.clang-runtime }}*
309
325
#FIXME: Apply patches without hardcoding
310
- if ( "${{ matrix.clang-runtime }}" -imatch "16 " )
326
+ if ( "${{ matrix.clang-runtime }}" -imatch "19 " )
311
327
{
312
- git apply -v clang16-1-Value.patch
313
- git apply -v clang16-2-CUDA.patch
314
- git apply -v clang16-3-WeakRef.patch
315
- }
316
- elseif ( "${{ matrix.clang-runtime }}" -imatch "17" )
317
- {
318
- git apply -v clang17-1-NewOperator.patch
328
+ git apply -v Windows-emscripten-clang19-1-CrossCompile.patch
329
+ git apply -v emscripten-clang19-2-shift-temporary-files-to-tmp-dir.patch
330
+ git apply -v emscripten-clang19-3-remove-zdefs.patch
319
331
}
320
332
cd build
321
333
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
322
- cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" `
323
- -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
324
- -DCMAKE_BUILD_TYPE=Release `
325
- -DLLVM_ENABLE_ASSERTIONS=ON `
326
- -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
327
- -DCLANG_ENABLE_ARCMT=OFF `
328
- -DCLANG_ENABLE_FORMAT=OFF `
329
- -DCLANG_ENABLE_BOOTSTRAP=OFF `
330
- -DLLVM_ENABLE_ZSTD=OFF `
331
- -DLLVM_ENABLE_TERMINFO=OFF `
332
- -DLLVM_ENABLE_LIBXML2=OFF `
333
- ..\llvm
334
- cmake --build . --config Release --target clang clang-repl --parallel ${{ env.ncpus }}
334
+ emcmake cmake -DCMAKE_BUILD_TYPE=Release `
335
+ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
336
+ -DLLVM_ENABLE_ASSERTIONS=ON `
337
+ -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
338
+ -DLLVM_ENABLE_LIBEDIT=OFF `
339
+ -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
340
+ -DLLVM_ENABLE_ZSTD=OFF `
341
+ -DLLVM_ENABLE_LIBXML2=OFF `
342
+ -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
343
+ -DCLANG_ENABLE_ARCMT=OFF `
344
+ -DCLANG_ENABLE_BOOTSTRAP=OFF `
345
+ -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" `
346
+ -DLLVM_INCLUDE_BENCHMARKS=OFF `
347
+ -DLLVM_INCLUDE_EXAMPLES=OFF `
348
+ -DLLVM_INCLUDE_TESTS=OFF `
349
+ -DLLVM_ENABLE_THREADS=OFF `
350
+ -DLLVM_BUILD_TOOLS=OFF `
351
+ -DLLVM_ENABLE_LIBPFM=OFF `
352
+ -DCLANG_BUILD_TOOLS=OFF `
353
+ -G Ninja `
354
+ ..\llvm
355
+ emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
335
356
}
336
357
cd ..\
337
358
rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
@@ -352,9 +373,9 @@ jobs:
352
373
cd ..\..
353
374
}
354
375
355
- - name : Save Cache LLVM/Clang runtime build directory (Unix Systems Emscripten)
376
+ - name : Save Cache LLVM/Clang runtime build directory
356
377
uses : actions/cache/save@v4
357
- if : ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }}
378
+ if : ${{ steps.cache.outputs.cache-hit != 'true' }}
358
379
with :
359
380
path : |
360
381
llvm-project
@@ -387,6 +408,12 @@ jobs:
387
408
cling : Off
388
409
micromamba_shell_init : bash
389
410
emsdk_ver : " 3.1.73"
411
+ - name : win2025-x86-clang-repl-19-emscripten
412
+ os : windows-2025
413
+ clang-runtime : ' 19'
414
+ cling : Off
415
+ micromamba_shell_init : powershell
416
+ emsdk_ver : " 3.1.73"
390
417
391
418
steps :
392
419
- uses : actions/checkout@v4
@@ -426,6 +453,14 @@ jobs:
426
453
echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
427
454
fi
428
455
456
+ - name : Setup default Build Type on Windows
457
+ if : ${{ runner.os == 'windows' }}
458
+ run : |
459
+ echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV
460
+ echo "CODE_COVERAGE=0" >> $env:GITHUB_ENV
461
+ $env:ncpus=$([Environment]::ProcessorCount)
462
+ echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
463
+
429
464
- name : install mamba
430
465
uses : mamba-org/setup-micromamba@main
431
466
with :
@@ -517,7 +552,100 @@ jobs:
517
552
echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV
518
553
echo "PREFIX=$PREFIX" >> $GITHUB_ENV
519
554
555
+ - name : micromamba shell hook
556
+ if : ${{ runner.os == 'windows' }}
557
+ shell : powershell
558
+ run : |
559
+ micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root
560
+
561
+ - name : Build and Test/Install CppInterOp on Windows systems
562
+ continue-on-error : true
563
+ if : ${{ runner.os == 'windows' }}
564
+ shell : powershell
565
+ run : |
566
+ micromamba create -f environment-wasm.yml --platform=emscripten-wasm32
567
+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
568
+ .\emsdk\emsdk_env.ps1
569
+ $env:PWD_DIR= $PWD.Path
570
+ $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot"
571
+ $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm"
572
+ $env:CMAKE_PREFIX_PATH=$env:PREFIX
573
+ $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX
574
+
575
+ $env:LLVM_DIR="$env:PWD_DIR\llvm-project"
576
+ echo "LLVM_DIR=$env:LLVM_DIR"
577
+ echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV
578
+
579
+ $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build"
580
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR"
581
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV
582
+
583
+ if ( "${{ matrix.cling }}" -imatch "On" )
584
+ {
585
+ $env:CLING_DIR="$env:PWD_DIR\cling"
586
+ echo "CLING_DIR=$env:CLING_DIR"
587
+ echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV
588
+
589
+ $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build"
590
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR"
591
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV
592
+
593
+ $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;"
594
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
595
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
596
+ }
597
+ else
598
+ {
599
+ $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;"
600
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
601
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
602
+ }
603
+
604
+ # Build CppInterOp next to cling and llvm-project.
605
+ mkdir build
606
+ cd build
607
+ $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR"
608
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR"
609
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV
610
+ if ( "${{ matrix.cling }}" -imatch "On" )
611
+ {
612
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
613
+ -DCPPINTEROP_USE_CLING=ON `
614
+ -DCPPINTEROP_USE_REPL=OFF `
615
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
616
+ -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" `
617
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
618
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
619
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
620
+ -DBUILD_SHARED_LIBS=ON `
621
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
622
+ -DCMAKE_INSTALL_PREFIX="$env:PREFIX" `
623
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
624
+ -DLLVM_ENABLE_WERROR=On `
625
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
626
+ ..\
627
+ }
628
+ else
629
+ {
630
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
631
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
632
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
633
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
634
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
635
+ -DBUILD_SHARED_LIBS=ON `
636
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
637
+ -DCMAKE_INSTALL_PREFIX="$env:PREFIX" `
638
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
639
+ -DLLVM_ENABLE_WERROR=On `
640
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
641
+ ..\
642
+ }
643
+ emmake make -j ${{ env.ncpus }} check-cppinterop
644
+ emmake make -j ${{ env.ncpus }} install
645
+
646
+
520
647
- name : Build xeus-cpp
648
+ if : ${{ runner.os != 'windows' }}
521
649
shell : bash -l {0}
522
650
run : |
523
651
./emsdk/emsdk activate ${{matrix.emsdk_ver}}
@@ -540,9 +668,10 @@ jobs:
540
668
emmake make -j ${{ env.ncpus }} install
541
669
542
670
- name : Test xeus-cpp C++ Emscripten
671
+ if : ${{ runner.os != 'windows' }}
543
672
shell : bash -l {0}
544
673
run : |
545
674
set -e
546
675
micromamba activate CppInterOp-wasm
547
676
cd ./xeus-cpp/build/test
548
- node test_xeus_cpp.js
677
+ node test_xeus_cpp.js
0 commit comments