@@ -460,7 +460,7 @@ jobs:
460460 ${{ matrix.cling=='On' && 'cling' || '' }}
461461 key : ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten
462462
463- - name : Emscripten build of CppInterOp on Unix systems
463+ - name : Emscripten build of CppInterOp on Unix systems (shared library)
464464 if : ${{ runner.os != 'windows' }}
465465 shell : bash -l {0}
466466 run : |
@@ -609,6 +609,118 @@ jobs:
609609 emmake make -j ${{ env.ncpus }} install
610610 cd ..
611611
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+
612724 echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV
613725 echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV
614726 echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV
@@ -622,7 +734,7 @@ jobs:
622734 run : |
623735 micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root
624736
625- - name : Build and Test/Install CppInterOp on Windows systems
737+ - name : Build and Test/Install CppInterOp on Windows systems (shared library)
626738 continue-on-error : true
627739 if : ${{ runner.os == 'windows' }}
628740 shell : powershell
@@ -707,7 +819,88 @@ jobs:
707819 }
708820 emmake make -j ${{ env.ncpus }} check-cppinterop
709821 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
710836
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
711904
712905 - name : Build xeus-cpp
713906 if : ${{ runner.os != 'windows' }}
0 commit comments