From e039b660465f0bc345dfe7e5acd077a6e77b77e7 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Mon, 19 Jan 2026 19:13:41 +0000 Subject: [PATCH 1/8] Expand Build_and_Test_CppInterOp action to deal with Emscripten case --- .../Build_and_Test_CppInterOp/action.yml | 524 ++++++++++++++++- .github/workflows/deploy-pages.yml | 150 +---- .github/workflows/emscripten.yml | 533 +----------------- 3 files changed, 536 insertions(+), 671 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index 4fd3a1ab9..dbc7b3541 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -5,7 +5,7 @@ runs: using: composite steps: - name: Build and Test/Install CppInterOp - if: runner.os != 'Windows' + if: ${{ runner.os != 'Windows' && !endsWith(matrix.name, '-emscripten') }} shell: bash run: | LLVM_DIR="$(pwd)/llvm-project" @@ -80,7 +80,7 @@ runs: echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - name: Build and Test/Install CppInterOp on Windows systems - if: runner.os == 'Windows' + if: ${{ runner.os == 'Windows' && !endsWith(matrix.name, '-emscripten') }} shell: powershell run: | $env:PWD_DIR= $PWD.Path @@ -146,3 +146,523 @@ runs: -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} -DCMAKE_INSTALL_PREFIX="$env:CPPINTEROP_DIR" ..\ } cmake --build . --config ${{ env.BUILD_TYPE }} --target check-cppinterop --parallel ${{ env.ncpus }} + + - name: Emscripten build of CppInterOp on Unix systems (shared library) + if: ${{ runner.os != 'Windows' && endsWith(matrix.name, '-emscripten') }} + shell: bash -l {0} + run: | + set -e + ./emsdk/emsdk activate ${{matrix.emsdk_ver}} + source ./emsdk/emsdk_env.sh + micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 + export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot + export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm + export CMAKE_PREFIX_PATH=$PREFIX + export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX + + LLVM_DIR="$(pwd)/llvm-project" + LLVM_BUILD_DIR="$(pwd)/llvm-project/build" + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "${cling_on}" == "ON" ]]; then + CLING_DIR="$(pwd)/cling" + CLING_BUILD_DIR="$(pwd)/cling/build" + 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" + else + CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" + fi + + # Build CppInterOp next to cling and llvm-project. + mkdir build + cd build + if [[ "${cling_on}" == "ON" ]]; then + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCPPINTEROP_USE_CLING=ON \ + -DCPPINTEROP_USE_REPL=OFF \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + -DLLVM_ENABLE_WERROR=On \ + -DSYSROOT_PATH=$SYSROOT_PATH \ + ../ + else + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + -DLLVM_ENABLE_WERROR=On \ + -DSYSROOT_PATH=$SYSROOT_PATH \ + ../ + fi + emmake make -j ${{ env.ncpus }} check-cppinterop + os="${{ matrix.os }}" + if [[ "${os}" != macos* ]] ; then + actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") + max_size=$((40 * 1024 * 1024)) + if [[ "$actual_size" -gt "$max_size" ]]; then + echo "Error: libclangCppInterOp.so is larger than 40 MB." + exit 1 + fi + fi + cd ./unittests/CppInterOp/ + # Fresh install browsers, and run Emscripten tests in them + # This is to match the Emscripten build instructions, where + # we run in a fresh browser, to stop any extra installed + # stuff interferring with the running of the tests + # Explaination of options for emrun + # --browser (name of browser on path) + # --kill_exit makes it so that when emrun finishes, + # that the headless browser we create is killed along with it + # --timeout 60 is such that emrun is killed after 60 seconds if + # still running. emrun should have finished long before then, + # so if it is still running, something went wrong (such as a test + # which crashed the html file). This will cause the ci to fail, + # as a non 0 value of will be returned. + # In the case of Chrome we have the extra --no-sandbox flag, as on + # Ubuntu Chrome will refuse to run otherwise, as it expects to have + # been installed with admin privileges. This flag allows it to run + # in userspace. + os="${{ matrix.os }}" + if [[ "${os}" == "macos"* ]]; then + # Install Firefox + wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg + hdiutil attach Firefox-latest.dmg + cp -r /Volumes/Firefox/Firefox.app $PWD + hdiutil detach /Volumes/Firefox + cd ./Firefox.app/Contents/MacOS/ + export PATH="$PWD:$PATH" + cd - + + # Install Google Chrome + wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg + pkgutil --expand-full googlechrome.pkg google-chrome + cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + sudo safaridriver --enable + python -m pip install selenium + echo "Running CppInterOpTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & + python ../../../scripts/browser_tests_safari.py CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & + python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html + else + export ARCHITECHURE=$(uname -m) + if [[ "$ARCHITECHURE" != "aarch64" ]]; then + # Install Google Chrome + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome + cd ./chrome/opt/google/chrome/ + export PATH="$PWD:$PATH" + cd - + + # Install Firefox + wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz + tar -xJf firefox-138.0.1.tar.xz + cd ./firefox + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + else + # Install Firefox + wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-aarch64/en-GB/firefox-138.0.1.tar.xz + tar -xJf firefox-138.0.1.tar.xz + cd ./firefox + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + fi + fi + cd ../.. + emmake make -j ${{ env.ncpus }} install + cd .. + + echo "PATH=$PATH" >> $GITHUB_ENV + echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV + echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV + echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV + echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV + echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV + echo "PREFIX=$PREFIX" >> $GITHUB_ENV + + - name: Emscripten build of CppInterOp on Unix systems (static library) + if: runner.os != 'Windows' && !(startsWith(matrix.os, 'ubuntu') && matrix.clang-runtime == '19' && endsWith(matrix.os, 'arm')) && endsWith(matrix.name, '-emscripten') && matrix.build_static_library == 'On' + shell: bash -l {0} + run: | + # FIXME: Static library builds, but tests fail to build on Github runner for Ubuntu arm llvm 19 case + # Disabled build for now + set -e + ./emsdk/emsdk activate ${{matrix.emsdk_ver}} + source ./emsdk/emsdk_env.sh + export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot + export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm + export CMAKE_PREFIX_PATH=$PREFIX + export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX + + LLVM_DIR="$(pwd)/llvm-project" + LLVM_BUILD_DIR="$(pwd)/llvm-project/build" + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "${cling_on}" == "ON" ]]; then + CLING_DIR="$(pwd)/cling" + CLING_BUILD_DIR="$(pwd)/cling/build" + 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" + else + CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" + fi + + # Build CppInterOp next to cling and llvm-project. + mkdir build_static + cd build_static + if [[ "${cling_on}" == "ON" ]]; then + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCPPINTEROP_USE_CLING=ON \ + -DCPPINTEROP_USE_REPL=OFF \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + -DLLVM_ENABLE_WERROR=On \ + -DSYSROOT_PATH=$SYSROOT_PATH \ + ../ + else + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + -DLLVM_ENABLE_WERROR=On \ + -DSYSROOT_PATH=$SYSROOT_PATH \ + ../ + fi + os="${{ matrix.os }}" + if [[ "${os}" != macos* ]] ; then + EMCC_CORES=1 emmake make -j 1 check-cppinterop + else + emmake make -j ${{ env.ncpus }} check-cppinterop + fi + cd ./unittests/CppInterOp/ + # Explaination of options for emrun + # --browser (name of browser on path) + # --kill_exit makes it so that when emrun finishes, + # that the headless browser we create is killed along with it + # --timeout 60 is such that emrun is killed after 60 seconds if + # still running. emrun should have finished long before then, + # so if it is still running, something went wrong (such as a test + # which crashed the html file). This will cause the ci to fail, + # as a non 0 value of will be returned. + # In the case of Chrome we have the extra --no-sandbox flag, as on + # Ubuntu Chrome will refuse to run otherwise, as it expects to have + # been installed with admin privileges. This flag allows it to run + # in userspace. + os="${{ matrix.os }}" + if [[ "${os}" == "macos"* ]]; then + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & + python ../../../scripts/browser_tests_safari.py CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & + python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html + else + export ARCHITECHURE=$(uname -m) + if [[ "$ARCHITECHURE" != "aarch64" ]]; then + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + else + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + fi + fi + cd ../../.. + + echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV + echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV + echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV + echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV + echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV + echo "PREFIX=$PREFIX" >> $GITHUB_ENV + + - name: Build and Test/Install CppInterOp on Windows systems (shared library) + if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') }} + shell: powershell + run: | + micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 + .\emsdk\emsdk activate ${{matrix.emsdk_ver}} + .\emsdk\emsdk_env.ps1 + $env:PWD_DIR= $PWD.Path + $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot" + echo "SYSROOT_PATH=$env:SYSROOT_PATH" + echo "SYSROOT_PATH=$env:SYSROOT_PATH" >> $env:GITHUB_ENV + + $env:PREFIX="$env:MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm" + echo "PREFIX=$env:PREFIX" + echo "PREFIX=$env:PREFIX" >> $env:GITHUB_ENV + + $env:CMAKE_PREFIX_PATH=$env:PREFIX + $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX + + $env:LLVM_DIR="$env:PWD_DIR\llvm-project" + echo "LLVM_DIR=$env:LLVM_DIR" + echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV + + $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build" + echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" + echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV + + if ( "${{ matrix.cling }}" -imatch "On" ) + { + $env:CLING_DIR="$env:PWD_DIR\cling" + echo "CLING_DIR=$env:CLING_DIR" + echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV + + $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build" + echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" + echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV + + $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;" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV + } + else + { + $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;" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV + } + + # Build CppInterOp next to cling and llvm-project. + mkdir build + cd build + $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" + echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" + echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV + if ( "${{ matrix.cling }}" -imatch "On" ) + { + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` + -DCPPINTEROP_USE_CLING=ON ` + -DCPPINTEROP_USE_REPL=OFF ` + -DCMAKE_PREFIX_PATH="$env:PREFIX" ` + -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" ` + -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` + -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` + -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DBUILD_SHARED_LIBS=ON ` + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` + -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` + -DLLVM_ENABLE_WERROR=On ` + -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + ..\ + } + else + { + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` + -DCMAKE_PREFIX_PATH="$env:PREFIX" ` + -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` + -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` + -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DBUILD_SHARED_LIBS=ON ` + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` + -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` + -DLLVM_ENABLE_WERROR=On ` + -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + ..\ + } + function Error-OnFailure { + param ( + [Parameter(Mandatory)] + [ScriptBlock]$Command + ) + + & $Command + + if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE + } + } + Error-OnFailure{ emmake make -j ${{ env.ncpus }} check-cppinterop } + cd .\unittests\CppInterOp\ + Invoke-WebRequest -Uri "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/1411573/chrome-win.zip" -OutFile "$PWD\chrome-win.zip" -Verbose + Expand-Archive -Path "$PWD\chrome-win.zip" -DestinationPath "$PWD" -Force -Verbose + Invoke-WebRequest -Uri "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=en-US" -OutFile "firefox-setup.exe" -Verbose + & "C:\Program Files\7-Zip\7z.exe" x "firefox-setup.exe" + $env:PATH="$PWD\core;$PWD\chrome-win;$env:PATH" + echo "PATH=$env:PATH" + echo "PATH=$env:PATH" >> $env:GITHUB_ENV + echo "Running CppInterOpTests in Firefox" + Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html } + echo "Running DynamicLibraryManagerTests in Firefox" + Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html } + echo "Running CppInterOpTests in Chromium" + Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html } + echo "Running DynamicLibraryManagerTests in Chromium" + Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } + cd ..\.. + Error-OnFailure { emmake make -j ${{ env.ncpus }} install } + echo "SYSROOT_PATH=$env:SYSROOT_PATH" >> $GITHUB_ENV + echo "CPPINTEROP_DIR=$env:CPPINTEROP_DIR" >> $GITHUB_ENV + echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $GITHUB_ENV + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $GITHUB_ENV + echo "PREFIX=$env:PREFIX" >> $GITHUB_ENV + + - name: Build and Test/Install CppInterOp on Windows systems (static library) + if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') && matrix.build_static_library == 'On' && matrix.build_static_library == 'On' }} + shell: powershell + run: | + .\emsdk\emsdk activate ${{matrix.emsdk_ver}} + .\emsdk\emsdk_env.ps1 + function Error-OnFailure { + param ( + [Parameter(Mandatory)] + [ScriptBlock]$Command + ) + + & $Command + + if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE + } + } + $env:PWD_DIR= $PWD.Path + $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot" + $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm" + $env:CMAKE_PREFIX_PATH=$env:PREFIX + $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX + + $env:LLVM_DIR="$env:PWD_DIR\llvm-project" + echo "LLVM_DIR=$env:LLVM_DIR" + echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV + + $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build" + echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" + echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV + + if ( "${{ matrix.cling }}" -imatch "On" ) + { + $env:CLING_DIR="$env:PWD_DIR\cling" + echo "CLING_DIR=$env:CLING_DIR" + echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV + + $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build" + echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" + echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV + + $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;" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV + } + else + { + $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;" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" + echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV + } + + # Build CppInterOp next to cling and llvm-project. + mkdir build_static + cd build_static + $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" + echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" + echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV + if ( "${{ matrix.cling }}" -imatch "On" ) + { + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` + -DCPPINTEROP_USE_CLING=ON ` + -DCPPINTEROP_USE_REPL=OFF ` + -DCMAKE_PREFIX_PATH="$env:PREFIX" ` + -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" ` + -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` + -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` + -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` + -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` + -DLLVM_ENABLE_WERROR=On ` + -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + ..\ + } + else + { + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` + -DCMAKE_PREFIX_PATH="$env:PREFIX" ` + -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` + -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` + -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` + -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` + -DLLVM_ENABLE_WERROR=On ` + -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + ..\ + } + Error-OnFailure { emmake make -j ${{ env.ncpus }} check-cppinterop } + cd .\unittests\CppInterOp\ + echo "Running CppInterOpTests in Firefox" + Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html } + echo "Running DynamicLibraryManagerTests in Firefox" + Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html } + echo "Running CppInterOpTests in Chromium" + Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html } + echo "Running DynamicLibraryManagerTests in Chromium" + Error-OnFailure{ emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index dec7acf24..bb4bb45b7 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -21,12 +21,13 @@ jobs: fail-fast: false matrix: include: - - name: osx26-arm-clang-repl-20-emscripten_wasm + - name: osx26-arm-clang-repl-20-emscripten os: macos-26 clang-runtime: '20' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" + build_static_library: Off steps: - uses: actions/checkout@v6 @@ -66,151 +67,8 @@ jobs: ${{ matrix.cling=='On' && 'cling' || '' }} key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten - - name: Emscripten build of CppInterOp on Unix systems - if: ${{ runner.os != 'windows' }} - shell: bash -l {0} - run: | - set -e - ./emsdk/emsdk activate ${{matrix.emsdk_ver}} - source ./emsdk/emsdk_env.sh - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 - export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot - export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm - export CMAKE_PREFIX_PATH=$PREFIX - export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX - - LLVM_DIR="$(pwd)/llvm-project" - LLVM_BUILD_DIR="$(pwd)/llvm-project/build" - cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') - if [[ "${cling_on}" == "ON" ]]; then - CLING_DIR="$(pwd)/cling" - CLING_BUILD_DIR="$(pwd)/cling/build" - 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" - else - CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" - fi - - # Build CppInterOp next to cling and llvm-project. - mkdir build - cd build - - if [[ "${cling_on}" == "ON" ]]; then - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCPPINTEROP_USE_CLING=ON \ - -DCPPINTEROP_USE_REPL=OFF \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - else - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - fi - emmake make -j ${{ env.ncpus }} check-cppinterop - cd ./unittests/CppInterOp/ - - # Fresh install browsers, and run Emscripten tests in them - # This is to match the Emscripten build instructions, where - # we run in a fresh browser, to stop any extra installed - # stuff interferring with the running of the tests - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - - # Install Firefox - wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg - hdiutil attach Firefox-latest.dmg - cp -r /Volumes/Firefox/Firefox.app $PWD - hdiutil detach /Volumes/Firefox - cd ./Firefox.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Install Google Chrome - wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg - pkgutil --expand-full googlechrome.pkg google-chrome - cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - sudo safaridriver --enable - python -m pip install selenium - echo "Running CppInterOpTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & - python ../../../scripts/browser_tests_safari.py CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & - python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html - - cd ../../ - emmake make -j ${{ env.ncpus }} install - - cd .. - - echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV - echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV - echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV - echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - - name: Build xeus-cpp - shell: bash -l {0} - run: | - ./emsdk/emsdk activate ${{matrix.emsdk_ver}} - source ./emsdk/emsdk_env.sh - micromamba activate CppInterOp-wasm - git clone --depth=1 https://github.com/compiler-research/xeus-cpp.git - cd ./xeus-cpp - mkdir build - pushd build - export CMAKE_PREFIX_PATH=${{ env.PREFIX }} - export CMAKE_SYSTEM_PREFIX_PATH=${{ env.PREFIX }} - emcmake cmake \ - -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} \ - -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} \ - -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DXEUS_CPP_RESOURCE_DIR=${{ env.LLVM_BUILD_DIR }}/lib/clang/${{ matrix.clang-runtime }} \ - -DSYSROOT_PATH=${{ env.SYSROOT_PATH }} \ - .. - emmake make -j ${{ env.ncpus }} install + - name: Build and test CppInterOp + uses: ./.github/actions/Build_and_Test_CppInterOp - name: Test xeus-cpp C++ Emscripten shell: bash -l {0} diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml index e7a962ed1..83b711e32 100644 --- a/.github/workflows/emscripten.yml +++ b/.github/workflows/emscripten.yml @@ -361,30 +361,34 @@ jobs: fail-fast: false matrix: include: - - name: ubu24-x86-clang-repl-20-emscripten_wasm + - name: ubu24-x86-clang-repl-20-emscripten os: ubuntu-24.04 clang-runtime: '20' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" - - name: osx26-arm-clang-repl-20-emscripten_wasm + build_static_library: On + - name: osx26-arm-clang-repl-20-emscripten os: macos-26 clang-runtime: '20' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" - - name: ubu24-arm-clang-repl-20-emscripten_wasm + build_static_library: On + - name: ubu24-arm-clang-repl-20-emscripten os: ubuntu-24.04-arm clang-runtime: '20' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" + build_static_library: On - name: win2025-x86-clang-repl-20-emscripten os: windows-2025 clang-runtime: '20' cling: Off micromamba_shell_init: powershell emsdk_ver: "4.0.9" + build_static_library: On steps: - uses: actions/checkout@v6 @@ -422,531 +426,14 @@ jobs: ${{ matrix.cling=='On' && 'cling' || '' }} key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten - - name: Emscripten build of CppInterOp on Unix systems (shared library) - if: ${{ runner.os != 'windows' }} - shell: bash -l {0} - run: | - set -e - ./emsdk/emsdk activate ${{matrix.emsdk_ver}} - source ./emsdk/emsdk_env.sh - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 - export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot - export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm - export CMAKE_PREFIX_PATH=$PREFIX - export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX - - LLVM_DIR="$(pwd)/llvm-project" - LLVM_BUILD_DIR="$(pwd)/llvm-project/build" - cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') - if [[ "${cling_on}" == "ON" ]]; then - CLING_DIR="$(pwd)/cling" - CLING_BUILD_DIR="$(pwd)/cling/build" - 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" - else - CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" - fi - - # Build CppInterOp next to cling and llvm-project. - mkdir build - cd build - if [[ "${cling_on}" == "ON" ]]; then - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCPPINTEROP_USE_CLING=ON \ - -DCPPINTEROP_USE_REPL=OFF \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - else - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - fi - emmake make -j ${{ env.ncpus }} check-cppinterop - os="${{ matrix.os }}" - if [[ "${os}" != macos* ]] ; then - actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") - max_size=$((40 * 1024 * 1024)) - if [[ "$actual_size" -gt "$max_size" ]]; then - echo "Error: libclangCppInterOp.so is larger than 40 MB." - exit 1 - fi - fi - cd ./unittests/CppInterOp/ - # Fresh install browsers, and run Emscripten tests in them - # This is to match the Emscripten build instructions, where - # we run in a fresh browser, to stop any extra installed - # stuff interferring with the running of the tests - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - # Install Firefox - wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg - hdiutil attach Firefox-latest.dmg - cp -r /Volumes/Firefox/Firefox.app $PWD - hdiutil detach /Volumes/Firefox - cd ./Firefox.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Install Google Chrome - wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg - pkgutil --expand-full googlechrome.pkg google-chrome - cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - sudo safaridriver --enable - python -m pip install selenium - echo "Running CppInterOpTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & - python ../../../scripts/browser_tests_safari.py CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & - python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html - else - export ARCHITECHURE=$(uname -m) - if [[ "$ARCHITECHURE" != "aarch64" ]]; then - # Install Google Chrome - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome - cd ./chrome/opt/google/chrome/ - export PATH="$PWD:$PATH" - cd - - - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - else - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-aarch64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - fi - fi - cd ../.. - emmake make -j ${{ env.ncpus }} install - cd .. - - echo "PATH=$PATH" >> $GITHUB_ENV - echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV - echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV - echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV - echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - - name: Emscripten build of CppInterOp on Unix systems (static library) - if: runner.os != 'Windows' && !(startsWith(matrix.os, 'ubuntu') && matrix.clang-runtime == '19' && endsWith(matrix.os, 'arm') ) - shell: bash -l {0} - run: | - # FIXME: Static library builds, but tests fail to build on Github runner for Ubuntu arm llvm 19 case - # Disabled build for now - set -e - ./emsdk/emsdk activate ${{matrix.emsdk_ver}} - source ./emsdk/emsdk_env.sh - export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot - export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm - export CMAKE_PREFIX_PATH=$PREFIX - export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX - - LLVM_DIR="$(pwd)/llvm-project" - LLVM_BUILD_DIR="$(pwd)/llvm-project/build" - cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') - if [[ "${cling_on}" == "ON" ]]; then - CLING_DIR="$(pwd)/cling" - CLING_BUILD_DIR="$(pwd)/cling/build" - 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" - else - CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" - fi - - # Build CppInterOp next to cling and llvm-project. - mkdir build_static - cd build_static - if [[ "${cling_on}" == "ON" ]]; then - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCPPINTEROP_USE_CLING=ON \ - -DCPPINTEROP_USE_REPL=OFF \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - else - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ - ../ - fi - os="${{ matrix.os }}" - if [[ "${os}" != macos* ]] ; then - EMCC_CORES=1 emmake make -j 1 check-cppinterop - else - emmake make -j ${{ env.ncpus }} check-cppinterop - fi - cd ./unittests/CppInterOp/ - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & - python ../../../scripts/browser_tests_safari.py CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & - python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html - else - export ARCHITECHURE=$(uname -m) - if [[ "$ARCHITECHURE" != "aarch64" ]]; then - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - else - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - fi - fi - cd ../../.. - - echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV - echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV - echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV - echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - name: micromamba shell hook - if: ${{ runner.os == 'windows' }} + if: runner.os == 'Windows' shell: powershell run: | micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root - - name: Build and Test/Install CppInterOp on Windows systems (shared library) - if: ${{ runner.os == 'windows' }} - shell: powershell - run: | - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 - .\emsdk\emsdk activate ${{matrix.emsdk_ver}} - .\emsdk\emsdk_env.ps1 - $env:PWD_DIR= $PWD.Path - $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot" - echo "SYSROOT_PATH=$env:SYSROOT_PATH" - echo "SYSROOT_PATH=$env:SYSROOT_PATH" >> $env:GITHUB_ENV - - $env:PREFIX="$env:MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm" - echo "PREFIX=$env:PREFIX" - echo "PREFIX=$env:PREFIX" >> $env:GITHUB_ENV - - $env:CMAKE_PREFIX_PATH=$env:PREFIX - $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX - - $env:LLVM_DIR="$env:PWD_DIR\llvm-project" - echo "LLVM_DIR=$env:LLVM_DIR" - echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV - - $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV - - if ( "${{ matrix.cling }}" -imatch "On" ) - { - $env:CLING_DIR="$env:PWD_DIR\cling" - echo "CLING_DIR=$env:CLING_DIR" - echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV - - $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV - - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } - else - { - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } - - # Build CppInterOp next to cling and llvm-project. - mkdir build - cd build - $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV - if ( "${{ matrix.cling }}" -imatch "On" ) - { - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` - -DCPPINTEROP_USE_CLING=ON ` - -DCPPINTEROP_USE_REPL=OFF ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` - -DBUILD_SHARED_LIBS=ON ` - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` - -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` - ..\ - } - else - { - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` - -DBUILD_SHARED_LIBS=ON ` - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` - -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` - ..\ - } - function Error-OnFailure { - param ( - [Parameter(Mandatory)] - [ScriptBlock]$Command - ) - - & $Command - - if ($LASTEXITCODE -ne 0) { - exit $LASTEXITCODE - } - } - Error-OnFailure{ emmake make -j ${{ env.ncpus }} check-cppinterop } - cd .\unittests\CppInterOp\ - Invoke-WebRequest -Uri "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/1411573/chrome-win.zip" -OutFile "$PWD\chrome-win.zip" -Verbose - Expand-Archive -Path "$PWD\chrome-win.zip" -DestinationPath "$PWD" -Force -Verbose - Invoke-WebRequest -Uri "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=en-US" -OutFile "firefox-setup.exe" -Verbose - & "C:\Program Files\7-Zip\7z.exe" x "firefox-setup.exe" - $env:PATH="$PWD\core;$PWD\chrome-win;$env:PATH" - echo "PATH=$env:PATH" - echo "PATH=$env:PATH" >> $env:GITHUB_ENV - echo "Running CppInterOpTests in Firefox" - Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html } - echo "Running DynamicLibraryManagerTests in Firefox" - Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html } - echo "Running CppInterOpTests in Chromium" - Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html } - echo "Running DynamicLibraryManagerTests in Chromium" - Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } - cd ..\.. - Error-OnFailure { emmake make -j ${{ env.ncpus }} install } - echo "SYSROOT_PATH=$env:SYSROOT_PATH" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$env:CPPINTEROP_DIR" >> $GITHUB_ENV - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $GITHUB_ENV - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$env:PREFIX" >> $GITHUB_ENV - - - name: Build and Test/Install CppInterOp on Windows systems (static library) - if: ${{ runner.os == 'windows' }} - shell: powershell - run: | - .\emsdk\emsdk activate ${{matrix.emsdk_ver}} - .\emsdk\emsdk_env.ps1 - function Error-OnFailure { - param ( - [Parameter(Mandatory)] - [ScriptBlock]$Command - ) - - & $Command - - if ($LASTEXITCODE -ne 0) { - exit $LASTEXITCODE - } - } - $env:PWD_DIR= $PWD.Path - $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot" - $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm" - $env:CMAKE_PREFIX_PATH=$env:PREFIX - $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX - - $env:LLVM_DIR="$env:PWD_DIR\llvm-project" - echo "LLVM_DIR=$env:LLVM_DIR" - echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV - - $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV - - if ( "${{ matrix.cling }}" -imatch "On" ) - { - $env:CLING_DIR="$env:PWD_DIR\cling" - echo "CLING_DIR=$env:CLING_DIR" - echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV - - $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV - - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } - else - { - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } - - # Build CppInterOp next to cling and llvm-project. - mkdir build_static - cd build_static - $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV - if ( "${{ matrix.cling }}" -imatch "On" ) - { - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` - -DCPPINTEROP_USE_CLING=ON ` - -DCPPINTEROP_USE_REPL=OFF ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` - -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` - ..\ - } - else - { - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` - -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` - ..\ - } - Error-OnFailure { emmake make -j ${{ env.ncpus }} check-cppinterop } - cd .\unittests\CppInterOp\ - echo "Running CppInterOpTests in Firefox" - Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html } - echo "Running DynamicLibraryManagerTests in Firefox" - Error-OnFailure { emrun.bat --browser="firefox.exe" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html } - echo "Running CppInterOpTests in Chromium" - Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html } - echo "Running DynamicLibraryManagerTests in Chromium" - Error-OnFailure{ emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } + - name: Build and test CppInterOp + uses: ./.github/actions/Build_and_Test_CppInterOp - name: Build xeus-cpp on Unix Systems if: ${{ runner.os != 'windows' }} From c82f66f955a9659e3054f3a9dd9b3d1212c01965 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Fri, 30 Jan 2026 22:35:11 +0000 Subject: [PATCH 2/8] Update action.yml --- .github/actions/Build_and_Test_CppInterOp/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index dbc7b3541..d535f25dd 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -154,7 +154,7 @@ runs: set -e ./emsdk/emsdk activate ${{matrix.emsdk_ver}} source ./emsdk/emsdk_env.sh - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 + micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 -c https://prefix.dev/emscripten-forge-4x -c https://prefix.dev/conda-forge export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm export CMAKE_PREFIX_PATH=$PREFIX @@ -446,7 +446,7 @@ runs: if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') }} shell: powershell run: | - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 + micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 -c https://prefix.dev/emscripten-forge-4x -c https://prefix.dev/conda-forge .\emsdk\emsdk activate ${{matrix.emsdk_ver}} .\emsdk\emsdk_env.ps1 $env:PWD_DIR= $PWD.Path From d7570fa007a0ecddc5136e8eec18690b0145aad7 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 14:49:52 +0000 Subject: [PATCH 3/8] Try to fix workflow --- .../Build_and_Test_CppInterOp/action.yml | 182 ++++++++++++++---- 1 file changed, 140 insertions(+), 42 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index d535f25dd..b920cc1e4 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -6,8 +6,17 @@ runs: steps: - name: Build and Test/Install CppInterOp if: ${{ runner.os != 'Windows' && !endsWith(matrix.name, '-emscripten') }} - shell: bash + shell: bash -l {0} run: | + set -e + ./emsdk/emsdk activate ${{matrix.emsdk_ver}} + source ./emsdk/emsdk_env.sh + micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 -c https://prefix.dev/emscripten-forge-4x -c https://prefix.dev/conda-forge + export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot + export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm + export CMAKE_PREFIX_PATH=$PREFIX + export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX + LLVM_DIR="$(pwd)/llvm-project" LLVM_BUILD_DIR="$(pwd)/llvm-project/build" cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') @@ -19,65 +28,154 @@ runs: CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" fi - export CB_PYTHON_DIR="$PWD/cppyy-backend/python" - export CPPINTEROP_DIR="$CB_PYTHON_DIR/cppyy_backend" - # Build CppInterOp next to cling and llvm-project. - mkdir build && cd build - export CPPINTEROP_BUILD_DIR=$PWD - cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + mkdir build + cd build if [[ "${cling_on}" == "ON" ]]; then - cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ -DCPPINTEROP_USE_CLING=ON \ -DCPPINTEROP_USE_REPL=OFF \ - -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ + -DCMAKE_PREFIX_PATH=$PREFIX \ -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ -DBUILD_SHARED_LIBS=ON \ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ - -DLLVM_ENABLE_WERROR=On \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + -DLLVM_ENABLE_WERROR=On \ + -DSYSROOT_PATH=$SYSROOT_PATH \ ../ else - cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ + emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ -DLLVM_ENABLE_WERROR=On \ - -DLLVM_BUILT_WITH_OOP_JIT=${{ matrix.oop-jit }} \ + -DSYSROOT_PATH=$SYSROOT_PATH \ ../ fi - docs_on=$(echo "${{ matrix.documentation }}" | tr '[:lower:]' '[:upper:]') - if [[ "${docs_on}" == "ON" ]]; then - cmake --build . --target doxygen-cppinterop --parallel ${{ env.ncpus }} - cmake --build . --target sphinx-cppinterop --parallel ${{ env.ncpus }} + emmake make -j ${{ env.ncpus }} check-cppinterop + os="${{ matrix.os }}" + if [[ "${os}" != macos* ]] ; then + actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") + max_size=$((50 * 1024 * 1024)) + if [[ "$actual_size" -gt "$max_size" ]]; then + echo "Error: libclangCppInterOp.so is larger than 50 MB." + exit 1 + fi + fi + cd ./unittests/CppInterOp/ + # Fresh install browsers, and run Emscripten tests in them + # This is to match the Emscripten build instructions, where + # we run in a fresh browser, to stop any extra installed + # stuff interferring with the running of the tests + # Explaination of options for emrun + # --browser (name of browser on path) + # --kill_exit makes it so that when emrun finishes, + # that the headless browser we create is killed along with it + # --timeout 60 is such that emrun is killed after 60 seconds if + # still running. emrun should have finished long before then, + # so if it is still running, something went wrong (such as a test + # which crashed the html file). This will cause the ci to fail, + # as a non 0 value of will be returned. + # In the case of Chrome we have the extra --no-sandbox flag, as on + # Ubuntu Chrome will refuse to run otherwise, as it expects to have + # been installed with admin privileges. This flag allows it to run + # in userspace. + os="${{ matrix.os }}" + if [[ "${os}" == "macos"* ]]; then + # Install Firefox + wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg + hdiutil attach Firefox-latest.dmg + cp -r /Volumes/Firefox/Firefox.app $PWD + hdiutil detach /Volumes/Firefox + cd ./Firefox.app/Contents/MacOS/ + export PATH="$PWD:$PATH" + cd - + + # Install Google Chrome + wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg + pkgutil --expand-full googlechrome.pkg google-chrome + cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + sudo safaridriver --enable + python -m pip install selenium + echo "Running CppInterOpTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & + python ../../../scripts/browser_tests_safari.py CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Safari" + emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & + python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html else - cmake --build . --target check-cppinterop --parallel ${{ env.ncpus }} - os="${{ matrix.os }}" - if [[ "${os}" != "macos"* && "${{ matrix.Valgrind }}" == "On" ]]; then - CLANG_VERSION="${{ matrix.clang-runtime }}" - if [[ "$CLANG_VERSION" == "20" && "${{ matrix.cling }}" == "Off" ]]; then - SUPPRESSION_FILE="../etc/clang${CLANG_VERSION}-valgrind.supp" - valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 \ - --show-leak-kinds=definite,possible \ - --suppressions="${SUPPRESSION_FILE}" \ - unittests/CppInterOp/bin/${{ env.BUILD_TYPE }}/CppInterOpTests - else - valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 \ - --show-leak-kinds=definite,possible \ - unittests/CppInterOp/bin/${{ env.BUILD_TYPE }}/CppInterOpTests - fi + export ARCHITECHURE=$(uname -m) + if [[ "$ARCHITECHURE" != "aarch64" ]]; then + # Install Google Chrome + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome + cd ./chrome/opt/google/chrome/ + export PATH="$PWD:$PATH" + cd - + + # Install Firefox + wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz + tar -xJf firefox-138.0.1.tar.xz + cd ./firefox + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + echo "Running CppInterOpTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Google Chrome" + emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html + else + # Install Firefox + wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-aarch64/en-GB/firefox-138.0.1.tar.xz + tar -xJf firefox-138.0.1.tar.xz + cd ./firefox + export PATH="$PWD:$PATH" + cd - + + # Run tests in browsers + echo "Running CppInterOpTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html + echo "Running DynamicLibraryManagerTests in Firefox" + emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html fi fi + cd ../.. + emmake make -j ${{ env.ncpus }} install + cd .. + + echo "PATH=$PATH" >> $GITHUB_ENV + echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV - echo "CPPINTEROP_BUILD_DIR=$CPPINTEROP_BUILD_DIR" >> $GITHUB_ENV echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV + echo "PREFIX=$PREFIX" >> $GITHUB_ENV - name: Build and Test/Install CppInterOp on Windows systems if: ${{ runner.os == 'Windows' && !endsWith(matrix.name, '-emscripten') }} @@ -440,7 +538,7 @@ runs: echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV + echo "PREFIX=$PREFIX" >> $GITHUB_ENV - name: Build and Test/Install CppInterOp on Windows systems (shared library) if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') }} @@ -570,7 +668,7 @@ runs: if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') && matrix.build_static_library == 'On' && matrix.build_static_library == 'On' }} shell: powershell run: | - .\emsdk\emsdk activate ${{matrix.emsdk_ver}} + .\emsdk\emsdk activate ${{matrix.emsdk_ver}} .\emsdk\emsdk_env.ps1 function Error-OnFailure { param ( @@ -665,4 +763,4 @@ runs: echo "Running CppInterOpTests in Chromium" Error-OnFailure { emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html } echo "Running DynamicLibraryManagerTests in Chromium" - Error-OnFailure{ emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } + Error-OnFailure{ emrun.bat --browser="chrome.exe" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html } From 48074fcbffd779424d7afaa1687abb548f439fb8 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 14:58:57 +0000 Subject: [PATCH 4/8] Try to fix action --- .../Build_and_Test_CppInterOp/action.yml | 184 ++++-------------- 1 file changed, 43 insertions(+), 141 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index b920cc1e4..f2639427b 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -4,19 +4,10 @@ description: 'This action builds and tests CppInterOp for native platforms' runs: using: composite steps: - - name: Build and Test/Install CppInterOp + - name: Build and Test/Install CppInterOp (native shared library build) if: ${{ runner.os != 'Windows' && !endsWith(matrix.name, '-emscripten') }} - shell: bash -l {0} + shell: bash run: | - set -e - ./emsdk/emsdk activate ${{matrix.emsdk_ver}} - source ./emsdk/emsdk_env.sh - micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 -c https://prefix.dev/emscripten-forge-4x -c https://prefix.dev/conda-forge - export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot - export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm - export CMAKE_PREFIX_PATH=$PREFIX - export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX - LLVM_DIR="$(pwd)/llvm-project" LLVM_BUILD_DIR="$(pwd)/llvm-project/build" cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') @@ -28,156 +19,67 @@ runs: CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" fi + export CB_PYTHON_DIR="$PWD/cppyy-backend/python" + export CPPINTEROP_DIR="$CB_PYTHON_DIR/cppyy_backend" + # Build CppInterOp next to cling and llvm-project. - mkdir build - cd build + mkdir build && cd build + export CPPINTEROP_BUILD_DIR=$PWD + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') if [[ "${cling_on}" == "ON" ]]; then - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ -DCPPINTEROP_USE_CLING=ON \ -DCPPINTEROP_USE_REPL=OFF \ - -DCMAKE_PREFIX_PATH=$PREFIX \ + -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ -DBUILD_SHARED_LIBS=ON \ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ - -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ + -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ + -DLLVM_ENABLE_WERROR=On \ ../ else - emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ - -DBUILD_SHARED_LIBS=ON \ - -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ + -DLLVM_BUILT_WITH_OOP_JIT=${{ matrix.oop-jit }} \ ../ fi - emmake make -j ${{ env.ncpus }} check-cppinterop - os="${{ matrix.os }}" - if [[ "${os}" != macos* ]] ; then - actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") - max_size=$((50 * 1024 * 1024)) - if [[ "$actual_size" -gt "$max_size" ]]; then - echo "Error: libclangCppInterOp.so is larger than 50 MB." - exit 1 - fi - fi - cd ./unittests/CppInterOp/ - # Fresh install browsers, and run Emscripten tests in them - # This is to match the Emscripten build instructions, where - # we run in a fresh browser, to stop any extra installed - # stuff interferring with the running of the tests - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. - os="${{ matrix.os }}" - if [[ "${os}" == "macos"* ]]; then - # Install Firefox - wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg - hdiutil attach Firefox-latest.dmg - cp -r /Volumes/Firefox/Firefox.app $PWD - hdiutil detach /Volumes/Firefox - cd ./Firefox.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Install Google Chrome - wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg - pkgutil --expand-full googlechrome.pkg google-chrome - cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="Google Chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - sudo safaridriver --enable - python -m pip install selenium - echo "Running CppInterOpTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html & - python ../../../scripts/browser_tests_safari.py CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Safari" - emrun --no_browser --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html & - python ../../../scripts/browser_tests_safari.py DynamicLibraryManagerTests.html + docs_on=$(echo "${{ matrix.documentation }}" | tr '[:lower:]' '[:upper:]') + if [[ "${docs_on}" == "ON" ]]; then + cmake --build . --target doxygen-cppinterop --parallel ${{ env.ncpus }} + cmake --build . --target sphinx-cppinterop --parallel ${{ env.ncpus }} else - export ARCHITECHURE=$(uname -m) - if [[ "$ARCHITECHURE" != "aarch64" ]]; then - # Install Google Chrome - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome - cd ./chrome/opt/google/chrome/ - export PATH="$PWD:$PATH" - cd - - - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html - echo "Running CppInterOpTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Google Chrome" - emrun --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" DynamicLibraryManagerTests.html - else - # Install Firefox - wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-aarch64/en-GB/firefox-138.0.1.tar.xz - tar -xJf firefox-138.0.1.tar.xz - cd ./firefox - export PATH="$PWD:$PATH" - cd - - - # Run tests in browsers - echo "Running CppInterOpTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" CppInterOpTests.html - echo "Running DynamicLibraryManagerTests in Firefox" - emrun --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" DynamicLibraryManagerTests.html + cmake --build . --target check-cppinterop --parallel ${{ env.ncpus }} + os="${{ matrix.os }}" + if [[ "${os}" != "macos"* && "${{ matrix.Valgrind }}" == "On" ]]; then + CLANG_VERSION="${{ matrix.clang-runtime }}" + if [[ "$CLANG_VERSION" == "20" && "${{ matrix.cling }}" == "Off" ]]; then + SUPPRESSION_FILE="../etc/clang${CLANG_VERSION}-valgrind.supp" + valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 \ + --show-leak-kinds=definite,possible \ + --suppressions="${SUPPRESSION_FILE}" \ + unittests/CppInterOp/bin/${{ env.BUILD_TYPE }}/CppInterOpTests + else + valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 \ + --show-leak-kinds=definite,possible \ + unittests/CppInterOp/bin/${{ env.BUILD_TYPE }}/CppInterOpTests + fi fi fi - cd ../.. - emmake make -j ${{ env.ncpus }} install - cd .. - - echo "PATH=$PATH" >> $GITHUB_ENV - echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV + echo "CPPINTEROP_BUILD_DIR=$CPPINTEROP_BUILD_DIR" >> $GITHUB_ENV echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - name: Build and Test/Install CppInterOp on Windows systems + - name: Build and Test/Install CppInterOp on Windows systems (native static library build) if: ${{ runner.os == 'Windows' && !endsWith(matrix.name, '-emscripten') }} shell: powershell run: | @@ -540,7 +442,7 @@ runs: echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - name: Build and Test/Install CppInterOp on Windows systems (shared library) + - name: Emscripten build of CppInterOp on Windows systems (shared library) if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') }} shell: powershell run: | @@ -664,7 +566,7 @@ runs: echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $GITHUB_ENV echo "PREFIX=$env:PREFIX" >> $GITHUB_ENV - - name: Build and Test/Install CppInterOp on Windows systems (static library) + - name: Emscripten build of CppInterOp on Windows systems (static library) if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') && matrix.build_static_library == 'On' && matrix.build_static_library == 'On' }} shell: powershell run: | From 049e29fd49ba29ee87aaa68cb6722cd4e0815c93 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 16:59:08 +0000 Subject: [PATCH 5/8] Update emscripten.yml --- .github/workflows/emscripten.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml index 8295db1da..b89d817c9 100644 --- a/.github/workflows/emscripten.yml +++ b/.github/workflows/emscripten.yml @@ -427,21 +427,21 @@ jobs: micromamba_shell_init: powershell emsdk_ver: "4.0.9" build_static_library: On - - name: ubu24-x86-clang-repl-21-emscripten_wasm + - name: ubu24-x86-clang-repl-21-emscripten os: ubuntu-24.04 clang-runtime: '21' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" build_static_library: On - - name: osx26-arm-clang-repl-21-emscripten_wasm + - name: osx26-arm-clang-repl-21-emscripten os: macos-26 clang-runtime: '21' cling: Off micromamba_shell_init: bash emsdk_ver: "4.0.9" build_static_library: On - - name: ubu24-arm-clang-repl-21-emscripten_wasm + - name: ubu24-arm-clang-repl-21-emscripten os: ubuntu-24.04-arm clang-runtime: '21' cling: Off From 1830cb9425d200f3029dbbbfc1edff5760a153bb Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 18:38:29 +0000 Subject: [PATCH 6/8] Reduce repetition --- .../Build_and_Test_CppInterOp/action.yml | 115 ++++-------------- 1 file changed, 26 insertions(+), 89 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index f2639427b..fe6b4c515 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -329,21 +329,6 @@ runs: set -e ./emsdk/emsdk activate ${{matrix.emsdk_ver}} source ./emsdk/emsdk_env.sh - export SYSROOT_PATH=$PWD/emsdk/upstream/emscripten/cache/sysroot - export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm - export CMAKE_PREFIX_PATH=$PREFIX - export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX - - LLVM_DIR="$(pwd)/llvm-project" - LLVM_BUILD_DIR="$(pwd)/llvm-project/build" - cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') - if [[ "${cling_on}" == "ON" ]]; then - CLING_DIR="$(pwd)/cling" - CLING_BUILD_DIR="$(pwd)/cling/build" - 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" - else - CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" - fi # Build CppInterOp next to cling and llvm-project. mkdir build_static @@ -352,28 +337,28 @@ runs: emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ -DCPPINTEROP_USE_CLING=ON \ -DCPPINTEROP_USE_REPL=OFF \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} \ + -DCling_DIR=${{ env.LLVM_BUILD_DIR }}/tools/cling \ + -DLLVM_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/llvm \ + -DLLD_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/lld \ + -DClang_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/clang \ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} \ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ + -DSYSROOT_PATH=${{ env.SYSROOT_PATH }} \ ../ else emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ - -DCMAKE_PREFIX_PATH=$PREFIX \ - -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ - -DLLD_DIR=$LLVM_BUILD_DIR/lib/cmake/lld \ - -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} \ + -DLLVM_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/llvm \ + -DLLD_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/lld \ + -DClang_DIR=${{ env.LLVM_BUILD_DIR }}/lib/cmake/clang \ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ - -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} \ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ -DLLVM_ENABLE_WERROR=On \ - -DSYSROOT_PATH=$SYSROOT_PATH \ + -DSYSROOT_PATH=${{ env.SYSROOT_PATH }} \ ../ fi os="${{ matrix.os }}" @@ -435,13 +420,6 @@ runs: fi cd ../../.. - echo "SYSROOT_PATH=$SYSROOT_PATH" >> $GITHUB_ENV - echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV - echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV - echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV - echo "PREFIX=$PREFIX" >> $GITHUB_ENV - - name: Emscripten build of CppInterOp on Windows systems (shared library) if: ${{ runner.os == 'Windows' && endsWith(matrix.name, '-emscripten') }} shell: powershell @@ -493,9 +471,6 @@ runs: # Build CppInterOp next to cling and llvm-project. mkdir build cd build - $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV if ( "${{ matrix.cling }}" -imatch "On" ) { emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` @@ -561,7 +536,6 @@ runs: cd ..\.. Error-OnFailure { emmake make -j ${{ env.ncpus }} install } echo "SYSROOT_PATH=$env:SYSROOT_PATH" >> $GITHUB_ENV - echo "CPPINTEROP_DIR=$env:CPPINTEROP_DIR" >> $GITHUB_ENV echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $GITHUB_ENV echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $GITHUB_ENV echo "PREFIX=$env:PREFIX" >> $GITHUB_ENV @@ -584,76 +558,39 @@ runs: exit $LASTEXITCODE } } - $env:PWD_DIR= $PWD.Path - $env:SYSROOT_PATH="$env:EMSDK/upstream/emscripten/cache/sysroot" - $env:PREFIX="%CONDA_PREFIX%/envs/CppInterOp-wasm" - $env:CMAKE_PREFIX_PATH=$env:PREFIX - $env:CMAKE_SYSTEM_PREFIX_PATH=$env:PREFIX - - $env:LLVM_DIR="$env:PWD_DIR\llvm-project" - echo "LLVM_DIR=$env:LLVM_DIR" - echo "LLVM_DIR=$env:LLVM_DIR" >> $env:GITHUB_ENV - - $env:LLVM_BUILD_DIR="$env:PWD_DIR\llvm-project\build" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" - echo "LLVM_BUILD_DIR=$env:LLVM_BUILD_DIR" >> $env:GITHUB_ENV - - if ( "${{ matrix.cling }}" -imatch "On" ) - { - $env:CLING_DIR="$env:PWD_DIR\cling" - echo "CLING_DIR=$env:CLING_DIR" - echo "CLING_DIR=$env:CLING_DIR" >> $env:GITHUB_ENV - - $env:CLING_BUILD_DIR="$env:PWD_DIR\cling\build" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" - echo "CLING_BUILD_DIR=$env:CLING_BUILD_DIR" >> $env:GITHUB_ENV - - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } - else - { - $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;" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" - echo "CPLUS_INCLUDE_PATH=$env:CPLUS_INCLUDE_PATH" >> $env:GITHUB_ENV - } # Build CppInterOp next to cling and llvm-project. mkdir build_static cd build_static - $env:CPPINTEROP_BUILD_DIR="$env:PWD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" - echo "CPPINTEROP_BUILD_DIR=$env:CPPINTEROP_BUILD_DIR" >> $env:GITHUB_ENV if ( "${{ matrix.cling }}" -imatch "On" ) { emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` -DCPPINTEROP_USE_CLING=ON ` -DCPPINTEROP_USE_REPL=OFF ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DCling_DIR="$env:LLVM_BUILD_DIR\tools\cling" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} ` + -DCling_DIR="${{ env.LLVM_BUILD_DIR }}\tools\cling" ` + -DLLVM_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\llvm" ` + -DLLD_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\lld" ` + -DClang_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\clang" ` -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} ` -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + -DSYSROOT_PATH=${{ env.SYSROOT_PATH }} ` ..\ } else { emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` - -DCMAKE_PREFIX_PATH="$env:PREFIX" ` - -DLLVM_DIR="$env:LLVM_BUILD_DIR\lib\cmake\llvm" ` - -DLLD_DIR="$env:LLVM_BUILD_DIR\lib\cmake\lld" ` - -DClang_DIR="$env:LLVM_BUILD_DIR\lib\cmake\clang" ` + -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} ` + -DLLVM_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\llvm" ` + -DLLD_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\lld" ` + -DClang_DIR="${{ env.LLVM_BUILD_DIR }}\lib\cmake\clang" ` -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} ` - -DCMAKE_INSTALL_PREFIX="$env:PREFIX" ` + -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} ` -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON ` -DLLVM_ENABLE_WERROR=On ` - -DSYSROOT_PATH="$env:SYSROOT_PATH" ` + -DSYSROOT_PATH=${{ env.SYSROOT_PATH }} ` ..\ } Error-OnFailure { emmake make -j ${{ env.ncpus }} check-cppinterop } From 56ff7a28e536463993b4b09f11dfc62b39addb99 Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 18:40:04 +0000 Subject: [PATCH 7/8] Reduce repetition --- .../actions/Build_and_Test_CppInterOp/action.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index fe6b4c515..0dff72291 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -368,19 +368,6 @@ runs: emmake make -j ${{ env.ncpus }} check-cppinterop fi cd ./unittests/CppInterOp/ - # Explaination of options for emrun - # --browser (name of browser on path) - # --kill_exit makes it so that when emrun finishes, - # that the headless browser we create is killed along with it - # --timeout 60 is such that emrun is killed after 60 seconds if - # still running. emrun should have finished long before then, - # so if it is still running, something went wrong (such as a test - # which crashed the html file). This will cause the ci to fail, - # as a non 0 value of will be returned. - # In the case of Chrome we have the extra --no-sandbox flag, as on - # Ubuntu Chrome will refuse to run otherwise, as it expects to have - # been installed with admin privileges. This flag allows it to run - # in userspace. os="${{ matrix.os }}" if [[ "${os}" == "macos"* ]]; then # Run tests in browsers From 0316be012a49c3b77a727f999b0c499cc59d2fed Mon Sep 17 00:00:00 2001 From: mcbarton Date: Tue, 3 Feb 2026 18:49:24 +0000 Subject: [PATCH 8/8] Fix size --- .github/actions/Build_and_Test_CppInterOp/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/Build_and_Test_CppInterOp/action.yml b/.github/actions/Build_and_Test_CppInterOp/action.yml index 0dff72291..92f44c543 100644 --- a/.github/actions/Build_and_Test_CppInterOp/action.yml +++ b/.github/actions/Build_and_Test_CppInterOp/action.yml @@ -208,9 +208,9 @@ runs: os="${{ matrix.os }}" if [[ "${os}" != macos* ]] ; then actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") - max_size=$((40 * 1024 * 1024)) + max_size=$((50 * 1024 * 1024)) if [[ "$actual_size" -gt "$max_size" ]]; then - echo "Error: libclangCppInterOp.so is larger than 40 MB." + echo "Error: libclangCppInterOp.so is larger than 50 MB." exit 1 fi fi