@@ -460,7 +460,7 @@ jobs:
460
460
${{ matrix.cling=='On' && 'cling' || '' }}
461
461
key : ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten
462
462
463
- - name : Emscripten build of CppInterOp on Unix systems
463
+ - name : Emscripten build of CppInterOp on Unix systems (shared library)
464
464
if : ${{ runner.os != 'windows' }}
465
465
shell : bash -l {0}
466
466
run : |
@@ -609,6 +609,118 @@ jobs:
609
609
emmake make -j ${{ env.ncpus }} install
610
610
cd ..
611
611
612
+ echo "PATH=$PATH" >> $GITHUB_ENV
613
+ echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV
614
+ echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV
615
+ echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV
616
+ echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV
617
+ echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV
618
+ echo "PREFIX=$PREFIX" >> $GITHUB_ENV
619
+
620
+ - name : Emscripten build of CppInterOp on Unix systems (static library)
621
+ if : runner.os != 'Windows' && !(startsWith(matrix.os, 'ubuntu') && matrix.clang-runtime == '19' && endsWith(matrix.os, 'arm') )
622
+ shell : bash -l {0}
623
+ run : |
624
+ # FIXME: Static library builds, but tests fail to build on Github runner for Ubuntu arm llvm 19 case
625
+ # Disabled build for now
626
+ set -e
627
+ ./emsdk/emsdk activate ${{matrix.emsdk_ver}}
628
+ source ./emsdk/emsdk_env.sh
629
+ export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot
630
+ export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm
631
+ export CMAKE_PREFIX_PATH=$PREFIX
632
+ export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX
633
+
634
+ LLVM_DIR="$(pwd)/llvm-project"
635
+ LLVM_BUILD_DIR="$(pwd)/llvm-project/build"
636
+ cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
637
+ if [[ "${cling_on}" == "ON" ]]; then
638
+ CLING_DIR="$(pwd)/cling"
639
+ CLING_BUILD_DIR="$(pwd)/cling/build"
640
+ CPLUS_INCLUDE_PATH="${CLING_DIR}/tools/cling/include:${CLING_BUILD_DIR}/include:${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include"
641
+ else
642
+ CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include"
643
+ fi
644
+
645
+ # Build CppInterOp next to cling and llvm-project.
646
+ mkdir build_static
647
+ cd build_static
648
+ if [[ "${cling_on}" == "ON" ]]; then
649
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
650
+ -DCPPINTEROP_USE_CLING=ON \
651
+ -DCPPINTEROP_USE_REPL=OFF \
652
+ -DCMAKE_PREFIX_PATH=$PREFIX \
653
+ -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \
654
+ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \
655
+ -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \
656
+ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \
657
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \
658
+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
659
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \
660
+ -DLLVM_ENABLE_WERROR=On \
661
+ -DSYSROOT_PATH=$SYSROOT_PATH \
662
+ ../
663
+ else
664
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
665
+ -DCMAKE_PREFIX_PATH=$PREFIX \
666
+ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \
667
+ -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \
668
+ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \
669
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \
670
+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
671
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \
672
+ -DLLVM_ENABLE_WERROR=On \
673
+ -DSYSROOT_PATH=$SYSROOT_PATH \
674
+ ../
675
+ fi
676
+ emmake make -j ${{ env.ncpus }} check-cppinterop
677
+ cd ./unittests/CppInterOp/
678
+ # Explaination of options for emrun
679
+ # --browser (name of browser on path)
680
+ # --kill_exit makes it so that when emrun finishes,
681
+ # that the headless browser we create is killed along with it
682
+ # --timeout 60 is such that emrun is killed after 60 seconds if
683
+ # still running. emrun should have finished long before then,
684
+ # so if it is still running, something went wrong (such as a test
685
+ # which crashed the html file). This will cause the ci to fail,
686
+ # as a non 0 value of will be returned.
687
+ # In the case of Chrome we have the extra --no-sandbox flag, as on
688
+ # Ubuntu Chrome will refuse to run otherwise, as it expects to have
689
+ # been installed with admin privileges. This flag allows it to run
690
+ # in userspace.
691
+ os="${{ matrix.os }}"
692
+ if [[ "${os}" == "macos"* ]]; then
693
+ # Run tests in browsers
694
+ echo "Running CppInterOpTests in Firefox"
695
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html
696
+ echo "Running DynamicLibraryManagerTests in Firefox"
697
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html
698
+ echo "Running CppInterOpTests in Google Chrome"
699
+ emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html
700
+ echo "Running DynamicLibraryManagerTests in Google Chrome"
701
+ emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html
702
+ else
703
+ export ARCHITECHURE=$(uname -m)
704
+ if [[ "$ARCHITECHURE" != "aarch64" ]]; then
705
+ # Run tests in browsers
706
+ echo "Running CppInterOpTests in Firefox"
707
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html
708
+ echo "Running DynamicLibraryManagerTests in Firefox"
709
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html
710
+ echo "Running CppInterOpTests in Google Chrome"
711
+ emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html
712
+ echo "Running DynamicLibraryManagerTests in Google Chrome"
713
+ emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html
714
+ else
715
+ # Run tests in browsers
716
+ echo "Running CppInterOpTests in Firefox"
717
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html
718
+ echo "Running DynamicLibraryManagerTests in Firefox"
719
+ emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html
720
+ fi
721
+ fi
722
+ cd ../../..
723
+
612
724
echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV
613
725
echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV
614
726
echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV
@@ -622,7 +734,7 @@ jobs:
622
734
run : |
623
735
micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root
624
736
625
- - name : Build and Test/Install CppInterOp on Windows systems
737
+ - name : Build and Test/Install CppInterOp on Windows systems (shared library)
626
738
continue-on-error : true
627
739
if : ${{ runner.os == 'windows' }}
628
740
shell : powershell
@@ -707,7 +819,88 @@ jobs:
707
819
}
708
820
emmake make -j ${{ env.ncpus }} check-cppinterop
709
821
emmake make -j ${{ env.ncpus }} install
822
+
823
+ - name : Build and Test/Install CppInterOp on Windows systems (static library)
824
+ continue-on-error : true
825
+ if : ${{ runner.os == 'windows' }}
826
+ shell : powershell
827
+ run : |
828
+ $ErrorActionPreference = "Stop"
829
+ .\emsdk\emsdk activate ${{matrix.emsdk_ver}}
830
+ .\emsdk\emsdk_env.ps1
831
+ $env:PWD_DIR= $PWD.Path
832
+ $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot"
833
+ $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm"
834
+ $env:CMAKE_PREFIX_PATH=$env:PREFIX
835
+ $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX
710
836
837
+ $env:LLVM_DIR="$env:PWD_DIR\llvm-project"
838
+ echo "LLVM_DIR=$env:LLVM_DIR"
839
+ echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV
840
+
841
+ $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build"
842
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR"
843
+ echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV
844
+
845
+ if ( "${{ matrix.cling }}" -imatch "On" )
846
+ {
847
+ $env:CLING_DIR="$env:PWD_DIR\cling"
848
+ echo "CLING_DIR=$env:CLING_DIR"
849
+ echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV
850
+
851
+ $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build"
852
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR"
853
+ echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV
854
+
855
+ $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;"
856
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
857
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
858
+ }
859
+ else
860
+ {
861
+ $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;"
862
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH"
863
+ echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV
864
+ }
865
+
866
+ # Build CppInterOp next to cling and llvm-project.
867
+ mkdir build_static
868
+ cd build_static
869
+ $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR"
870
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR"
871
+ echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV
872
+ if ( "${{ matrix.cling }}" -imatch "On" )
873
+ {
874
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
875
+ -DCPPINTEROP_USE_CLING=ON `
876
+ -DCPPINTEROP_USE_REPL=OFF `
877
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
878
+ -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" `
879
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
880
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
881
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
882
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
883
+ -DCMAKE_INSTALL_PREFIX="$env:PREFIX" `
884
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
885
+ -DLLVM_ENABLE_WERROR=On `
886
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
887
+ ..\
888
+ }
889
+ else
890
+ {
891
+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
892
+ -DCMAKE_PREFIX_PATH="$env:PREFIX" `
893
+ -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" `
894
+ -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" `
895
+ -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" `
896
+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} `
897
+ -DCMAKE_INSTALL_PREFIX="$env:PREFIX" `
898
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON `
899
+ -DLLVM_ENABLE_WERROR=On `
900
+ -DSYSROOT_PATH="$env:SYSROOT_PATH" `
901
+ ..\
902
+ }
903
+ emmake make -j ${{ env.ncpus }} check-cppinterop
711
904
712
905
- name : Build xeus-cpp
713
906
if : ${{ runner.os != 'windows' }}
0 commit comments