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,13 @@ 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
+ $env:CC="clang-cl"
273
+ $env:CXX="clang-cl"
274
+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
275
+ .\emsdk\emsdk_env.ps1
265
276
if ( "${{ matrix.cling }}" -imatch "On" )
266
277
{
267
278
git clone https://github.com/root-project/cling.git
@@ -284,54 +295,66 @@ jobs:
284
295
if ( "${{ matrix.cling }}" -imatch "On" )
285
296
{
286
297
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 `
298
+ emcmake cmake -DLLVM_EXTERNAL_PROJECTS=cling `
299
+ -DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling `
300
+ -DCMAKE_BUILD_TYPE=Release `
301
+ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
302
+ -DLLVM_ENABLE_ASSERTIONS=ON `
303
+ -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
304
+ -DLLVM_ENABLE_LIBEDIT=OFF `
305
+ -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
306
+ -DLLVM_ENABLE_ZSTD=OFF `
307
+ -DLLVM_ENABLE_LIBXML2=OFF `
308
+ -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
309
+ -DCLANG_ENABLE_ARCMT=OFF `
310
+ -DCLANG_ENABLE_BOOTSTRAP=OFF `
311
+ -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" `
312
+ -DLLVM_INCLUDE_BENCHMARKS=OFF `
313
+ -DLLVM_INCLUDE_EXAMPLES=OFF `
314
+ -DLLVM_INCLUDE_TESTS=OFF `
315
+ -DLLVM_ENABLE_THREADS=OFF `
316
+ -G Ninja `
317
+ -DLLVM_BUILD_TOOLS=OFF `
318
+ -DLLVM_ENABLE_LIBPFM=OFF `
319
+ -DCLANG_BUILD_TOOLS=OFF `
300
320
..\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 }}
321
+ emmake make clang cling lld gtest_main
305
322
}
306
323
else
307
324
{
308
- cp -r ..\patches\llvm\clang${{ matrix.clang-runtime }}*
325
+ cp -r ..\patches\llvm\emscripten-clang${{ matrix.clang-runtime }}*
326
+ cp -r ..\patches\llvm\Windows-emscripten-clang${{ matrix.clang-runtime }}*
309
327
#FIXME: Apply patches without hardcoding
310
- if ( "${{ matrix.clang-runtime }}" -imatch "16 " )
328
+ if ( "${{ matrix.clang-runtime }}" -imatch "19 " )
311
329
{
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
330
+ git apply -v Windows-emscripten-clang19-1-CrossCompile.patch
331
+ git apply -v emscripten-clang19-2-shift-temporary-files-to-tmp-dir.patch
332
+ git apply -v emscripten-clang19-3-remove-zdefs.patch
319
333
}
320
334
cd build
321
335
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 }}
336
+ emcmake cmake -DCMAKE_BUILD_TYPE=Release `
337
+ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
338
+ -DLLVM_ENABLE_ASSERTIONS=ON `
339
+ -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
340
+ -DLLVM_ENABLE_LIBEDIT=OFF `
341
+ -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
342
+ -DLLVM_ENABLE_ZSTD=OFF `
343
+ -DLLVM_ENABLE_LIBXML2=OFF `
344
+ -DCLANG_ENABLE_STATIC_ANALYZER=OFF `
345
+ -DCLANG_ENABLE_ARCMT=OFF `
346
+ -DCLANG_ENABLE_BOOTSTRAP=OFF `
347
+ -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" `
348
+ -DLLVM_INCLUDE_BENCHMARKS=OFF `
349
+ -DLLVM_INCLUDE_EXAMPLES=OFF `
350
+ -DLLVM_INCLUDE_TESTS=OFF `
351
+ -DLLVM_ENABLE_THREADS=OFF `
352
+ -DLLVM_BUILD_TOOLS=OFF `
353
+ -DLLVM_ENABLE_LIBPFM=OFF `
354
+ -DCLANG_BUILD_TOOLS=OFF `
355
+ -G Ninja `
356
+ ..\llvm
357
+ emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
335
358
}
336
359
cd ..\
337
360
rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
@@ -352,9 +375,9 @@ jobs:
352
375
cd ..\..
353
376
}
354
377
355
- - name : Save Cache LLVM/Clang runtime build directory (Unix Systems Emscripten)
378
+ - name : Save Cache LLVM/Clang runtime build directory
356
379
uses : actions/cache/save@v4
357
- if : ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }}
380
+ if : ${{ steps.cache.outputs.cache-hit != 'true' }}
358
381
with :
359
382
path : |
360
383
llvm-project
@@ -387,6 +410,12 @@ jobs:
387
410
cling : Off
388
411
micromamba_shell_init : bash
389
412
emsdk_ver : " 3.1.73"
413
+ - name : win2025-x86-clang-repl-19-emscripten
414
+ os : windows-2025
415
+ clang-runtime : ' 19'
416
+ cling : Off
417
+ micromamba_shell_init : powershell
418
+ emsdk_ver : " 3.1.73"
390
419
391
420
steps :
392
421
- uses : actions/checkout@v4
@@ -426,6 +455,14 @@ jobs:
426
455
echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
427
456
fi
428
457
458
+ - name : Setup default Build Type on Windows
459
+ if : ${{ runner.os == 'windows' }}
460
+ run : |
461
+ echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV
462
+ echo "CODE_COVERAGE=0" >> $env:GITHUB_ENV
463
+ $env:ncpus=$([Environment]::ProcessorCount)
464
+ echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
465
+
429
466
- name : install mamba
430
467
uses : mamba-org/setup-micromamba@main
431
468
with :
@@ -517,7 +554,101 @@ jobs:
517
554
echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV
518
555
echo "PREFIX=$PREFIX" >> $GITHUB_ENV
519
556
557
+ - name : micromamba shell hook
558
+ if : ${{ runner.os == 'windows' }}
559
+ shell : powershell
560
+ run : |
561
+ micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root
562
+
563
+ - name : Build and Test/Install CppInterOp on Windows systems
564
+ continue-on-error : true
565
+ if : ${{ runner.os == 'windows' }}
566
+ shell : powershell
567
+ run : |
568
+ micromamba create -f environment-wasm.yml --platform=emscripten-wasm32
569
+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
570
+ .\emsdk\emsdk_env.ps1
571
+ $env:PWD_DIR= $PWD.Path
572
+
573
+ $env:SYSROOT_PATH="$env:PWD_DIR/emsdk/upstream/emscripten/cache/sysroot"
574
+ $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm"
575
+ $env:CMAKE_PREFIX_PATH=$env:PREFIX
576
+ $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX
577
+
578
+ $env:LLVM_DIR="$env:PWD_DIR\llvm-project"
579
+ echo "LLVM_DIR=$env:LLVM_DIR"
580
+ echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV
581
+
582
+ $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build"
583
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR"
584
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV
585
+
586
+ if ( "${{ matrix.cling }}" -imatch "On" )
587
+ {
588
+ $env:CLING_DIR="$env:PWD_DIR\cling"
589
+ echo "CLING_DIR=$env:CLING_DIR"
590
+ echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV
591
+
592
+ $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build"
593
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR"
594
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV
595
+
596
+ $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;"
597
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
598
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
599
+ }
600
+ else
601
+ {
602
+ $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;"
603
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
604
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
605
+ }
606
+
607
+ # Build CppInterOp next to cling and llvm-project.
608
+ mkdir build
609
+ cd build
610
+ $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR"
611
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR"
612
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV
613
+ if ( "${{ matrix.cling }}" -imatch "On" )
614
+ {
615
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
616
+ -DCPPINTEROP_USE_CLING=ON `
617
+ -DCPPINTEROP_USE_REPL=OFF `
618
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
619
+ -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" `
620
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
621
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
622
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
623
+ -DBUILD_SHARED_LIBS=ON `
624
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
625
+ -DCMAKE_INSTALL_PREFIX=$env:PREFIX `
626
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
627
+ -DLLVM_ENABLE_WERROR=On `
628
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
629
+ ..\
630
+ }
631
+ else
632
+ {
633
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
634
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
635
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
636
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
637
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
638
+ -DBUILD_SHARED_LIBS=ON `
639
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
640
+ -DCMAKE_INSTALL_PREFIX=$env:PREFIX `
641
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
642
+ -DLLVM_ENABLE_WERROR=On `
643
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
644
+ ..\
645
+ }
646
+ emmake make -j ${{ env.ncpus }} check-cppinterop
647
+ emmake make -j ${{ env.ncpus }} install
648
+
649
+
520
650
- name : Build xeus-cpp
651
+ if : ${{ runner.os != 'windows' }}
521
652
shell : bash -l {0}
522
653
run : |
523
654
./emsdk/emsdk activate ${{matrix.emsdk_ver}}
@@ -540,9 +671,10 @@ jobs:
540
671
emmake make -j ${{ env.ncpus }} install
541
672
542
673
- name : Test xeus-cpp C++ Emscripten
674
+ if : ${{ runner.os != 'windows' }}
543
675
shell : bash -l {0}
544
676
run : |
545
677
set -e
546
678
micromamba activate CppInterOp-wasm
547
679
cd ./xeus-cpp/build/test
548
- node test_xeus_cpp.js
680
+ node test_xeus_cpp.js
0 commit comments