4242 llvm_enable_projects : " clang;lld"
4343 llvm_targets_to_build : " WebAssembly"
4444 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"
4552
4653 steps :
4754 - uses : actions/checkout@v4
@@ -113,7 +120,7 @@ jobs:
113120 lookup-only : true
114121
115122 - name : Setup emsdk
116- if : ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }}
123+ if : ${{ steps.cache.outputs.cache-hit != 'true' }}
117124 run : |
118125 git clone --depth=1 https://github.com/emscripten-core/emsdk.git
119126 cd emsdk
@@ -136,8 +143,9 @@ jobs:
136143 - name : Install deps on Windows
137144 if : ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
138145 run : |
139- choco install findutils
146+ choco install findutils ninja
140147 $env:PATH="C:\Program Files (x86)\GnuWin32\bin;$env:PATH"
148+ $env:PATH="C:\Program Files (x86)\Ninja\bin;$env:PATH"
141149
142150 - name : Install deps on MacOS
143151 if : ${{ runner.os == 'macOS' && steps.cache.outputs.cache-hit != 'true' }}
@@ -258,10 +266,11 @@ jobs:
258266 fi
259267
260268
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)
262270 if : ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
263271 run : |
264-
272+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
273+ .\emsdk\emsdk_env.ps1
265274 if ( "${{ matrix.cling }}" -imatch "On" )
266275 {
267276 git clone https://github.com/root-project/cling.git
@@ -284,54 +293,66 @@ jobs:
284293 if ( "${{ matrix.cling }}" -imatch "On" )
285294 {
286295 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 `
300318 ..\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
305320 }
306321 else
307322 {
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 }}*
309325 #FIXME: Apply patches without hardcoding
310- if ( "${{ matrix.clang-runtime }}" -imatch "16 " )
326+ if ( "${{ matrix.clang-runtime }}" -imatch "19 " )
311327 {
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
319331 }
320332 cd build
321333 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
335356 }
336357 cd ..\
337358 rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
@@ -352,9 +373,9 @@ jobs:
352373 cd ..\..
353374 }
354375
355- - name : Save Cache LLVM/Clang runtime build directory (Unix Systems Emscripten)
376+ - name : Save Cache LLVM/Clang runtime build directory
356377 uses : actions/cache/save@v4
357- if : ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }}
378+ if : ${{ steps.cache.outputs.cache-hit != 'true' }}
358379 with :
359380 path : |
360381 llvm-project
@@ -387,6 +408,12 @@ jobs:
387408 cling : Off
388409 micromamba_shell_init : bash
389410 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"
390417
391418 steps :
392419 - uses : actions/checkout@v4
@@ -426,6 +453,14 @@ jobs:
426453 echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
427454 fi
428455
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+
429464 - name : install mamba
430465 uses : mamba-org/setup-micromamba@main
431466 with :
@@ -517,7 +552,100 @@ jobs:
517552 echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV
518553 echo "PREFIX=$PREFIX" >> $GITHUB_ENV
519554
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+
520647 - name : Build xeus-cpp
648+ if : ${{ runner.os != 'windows' }}
521649 shell : bash -l {0}
522650 run : |
523651 ./emsdk/emsdk activate ${{matrix.emsdk_ver}}
@@ -540,9 +668,10 @@ jobs:
540668 emmake make -j ${{ env.ncpus }} install
541669
542670 - name : Test xeus-cpp C++ Emscripten
671+ if : ${{ runner.os != 'windows' }}
543672 shell : bash -l {0}
544673 run : |
545674 set -e
546675 micromamba activate CppInterOp-wasm
547676 cd ./xeus-cpp/build/test
548- node test_xeus_cpp.js
677+ node test_xeus_cpp.js
0 commit comments