Emscripten #439
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Emscripten | |
| on: | |
| pull_request: | |
| branches: [master] | |
| push: | |
| branches: [master] | |
| release: | |
| types: [published] | |
| schedule: | |
| - cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number }} | |
| cancel-in-progress: true | |
| jobs: | |
| build_cache: | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: ubu22-x86-gcc12-clang-repl-19-emscripten | |
| os: ubuntu-22.04 | |
| compiler: gcc-12 | |
| clang-runtime: '19' | |
| cling: Off | |
| llvm_enable_projects: "clang;lld" | |
| llvm_targets_to_build: "WebAssembly" | |
| emsdk_ver: "3.1.73" | |
| - name: ubu22-arm-gcc12-clang-repl-19-emscripten | |
| os: ubuntu-22.04-arm | |
| compiler: gcc-12 | |
| clang-runtime: '19' | |
| cling: Off | |
| llvm_enable_projects: "clang;lld" | |
| llvm_targets_to_build: "WebAssembly" | |
| emsdk_ver: "3.1.73" | |
| - name: osx15-arm-clang-clang-repl-19-emscripten | |
| os: macos-15 | |
| compiler: clang | |
| clang-runtime: '19' | |
| cling: Off | |
| llvm_enable_projects: "clang;lld" | |
| llvm_targets_to_build: "WebAssembly" | |
| emsdk_ver: "3.1.73" | |
| - name: osx15-x86-clang-clang-repl-19-emscripten | |
| os: macos-15-intel | |
| compiler: clang | |
| clang-runtime: '19' | |
| cling: Off | |
| llvm_enable_projects: "clang;lld" | |
| llvm_targets_to_build: "WebAssembly" | |
| emsdk_ver: "3.1.73" | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: compiler-research/CppInterOp | |
| path: ${{ github.workspace }}/CppInterOp | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Save PR Info on Unix systems | |
| if: ${{ runner.os != 'windows' }} | |
| run: | | |
| mkdir -p ./pr | |
| echo ${{ github.event.number }} > ./pr/NR | |
| echo ${{ github.repository }} > ./pr/REPO | |
| cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') | |
| if [[ "$cling_on" == "ON" ]]; then | |
| export CLING_HASH=$(git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} | tr '\t' '-') | |
| export LLVM_HASH=$(git ls-remote https://github.com/root-project/llvm-project.git cling-llvm${{ matrix.clang-runtime}} | tr '\t' '-') | |
| else | |
| export CLING_HASH="Repl" | |
| # May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x | |
| # which could be quite often for new releases | |
| export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-') | |
| fi | |
| echo "CLING_HASH=$CLING_HASH" >> $GITHUB_ENV | |
| echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV | |
| - name: Save PR Info on Windows systems | |
| if: ${{ runner.os == 'windows' }} | |
| run: | | |
| #can be found | |
| mkdir ./pr | |
| echo "${{ github.event.number }}" > ./pr/NR | |
| echo ${{ github.repository }} > ./pr/REPO | |
| if ( "${{ matrix.cling }}" -imatch "On" ) | |
| { | |
| $env:CLING_HASH_TEMP = ( git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} ) | |
| $env:CLING_HASH = $env:CLING_HASH_TEMP -replace "\t","-" | |
| } | |
| else | |
| { | |
| $env:CLING_HASH="Repl" | |
| # May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x | |
| # which could be quite often for new releases | |
| $env:LLVM_HASH_TEMP = (git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x ) | |
| $env:LLVM_HASH = $env:LLVM_HASH_TEMP -replace "\t","-" | |
| } | |
| echo "CLING_HASH=$env:CLING_HASH" | |
| echo "LLVM_HASH=$env:LLVM_HASH" | |
| echo "CLING_HASH=$env:CLING_HASH" >> $GITHUB_ENV | |
| echo "LLVM_HASH=$env:LLVM_HASH" >> $GITHUB_ENV | |
| - name: Restore Cache LLVM/Clang runtime build directory (Unix like systems emscripten) | |
| uses: actions/cache/restore@v4 | |
| id: cache | |
| with: | |
| path: | | |
| llvm-project | |
| ${{ matrix.cling=='On' && 'cling' || '' }} | |
| key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-emscripten | |
| lookup-only: true | |
| - name: Setup emsdk | |
| if: ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| git clone --depth=1 https://github.com/emscripten-core/emsdk.git | |
| ./emsdk/emsdk install ${{ matrix.emsdk_ver }} | |
| - name: Setup default Build Type on Windows | |
| if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| echo "BUILD_TYPE=Release" >> $env:GITHUB_ENV | |
| echo "CODE_COVERAGE=0" >> $env:GITHUB_ENV | |
| $env:ncpus=$([Environment]::ProcessorCount) | |
| echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV | |
| - name: Install deps on Windows | |
| if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| choco install findutils ninja | |
| $env:PATH="C:\Program Files (x86)\GnuWin32\bin;$env:PATH" | |
| $env:PATH="C:\Program Files (x86)\Ninja\bin;$env:PATH" | |
| - name: Install deps on MacOS | |
| if: ${{ runner.os == 'macOS' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| brew update | |
| export ARCHITECHURE=$(uname -m) | |
| if [[ "$ARCHITECHURE" != "x86_64" ]]; then | |
| brew remove unxip | |
| fi | |
| # workaround for https://github.com/actions/setup-python/issues/577 | |
| for pkg in $(brew list | grep '^python@'); do | |
| brew unlink "$pkg" | |
| brew link --overwrite "$pkg" | |
| done | |
| brew install ninja | |
| - name: Install deps on Linux | |
| if: ${{ runner.os == 'Linux' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| # Install deps | |
| sudo apt-get update | |
| sudo apt-get install ninja-build | |
| sudo apt-get autoremove | |
| sudo apt-get clean | |
| - name: Build LLVM/Cling on Unix systems if the cache is invalid (emscripten) | |
| if: ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| ${{ github.workspace }}/emsdk/emsdk activate ${{matrix.emsdk_ver}} | |
| source ${{ github.workspace }}/emsdk/emsdk_env.sh | |
| cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') | |
| if [[ "${cling_on}" == "ON" ]]; then | |
| git clone https://github.com/root-project/cling.git | |
| cd ./cling | |
| git checkout tags/v${{ matrix.cling-version }} | |
| cd .. | |
| git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git | |
| else # repl | |
| git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git | |
| fi | |
| cd llvm-project | |
| # Build | |
| mkdir native_build | |
| cd native_build | |
| cmake -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_BUILD_TYPE=Release ../llvm/ | |
| cmake --build . --target llvm-tblgen clang-tblgen --parallel $(nproc --all) | |
| export NATIVE_DIR=$PWD/bin/ | |
| cd .. | |
| mkdir build | |
| if [[ "${cling_on}" == "ON" ]]; then | |
| cd build | |
| emcmake cmake -DLLVM_EXTERNAL_PROJECTS=cling \ | |
| -DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \ | |
| -DLLVM_ENABLE_ASSERTIONS=ON \ | |
| -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \ | |
| -DLLVM_ENABLE_LIBEDIT=OFF \ | |
| -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \ | |
| -DLLVM_ENABLE_ZSTD=OFF \ | |
| -DLLVM_ENABLE_LIBXML2=OFF \ | |
| -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ | |
| -DCLANG_ENABLE_ARCMT=OFF \ | |
| -DCLANG_ENABLE_BOOTSTRAP=OFF \ | |
| -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" \ | |
| -DLLVM_INCLUDE_BENCHMARKS=OFF \ | |
| -DLLVM_INCLUDE_EXAMPLES=OFF \ | |
| -DLLVM_INCLUDE_TESTS=OFF \ | |
| -DLLVM_ENABLE_THREADS=OFF \ | |
| -G Ninja \ | |
| ../llvm | |
| emmake ninja clang cling lld gtest_main -j ${{ env.ncpus }} | |
| else | |
| # Apply patches | |
| llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]') | |
| if [[ "${llvm_vers}" == "19" || "${llvm_vers}" == "20" ]]; then | |
| git apply -v ${{ github.workspace }}/CppInterOp/patches/llvm/emscripten-clang${{ matrix.clang-runtime }}-*.patch | |
| echo "Apply emscripten-clang${{ matrix.clang-runtime }}-*.patch patches:" | |
| fi | |
| cd build | |
| emcmake cmake -DCMAKE_BUILD_TYPE=Release \ | |
| -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \ | |
| -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \ | |
| -DLLVM_ENABLE_LIBEDIT=OFF \ | |
| -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \ | |
| -DLLVM_ENABLE_ZSTD=OFF \ | |
| -DLLVM_ENABLE_LIBXML2=OFF \ | |
| -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ | |
| -DCLANG_ENABLE_ARCMT=OFF \ | |
| -DCLANG_ENABLE_BOOTSTRAP=OFF \ | |
| -DCMAKE_CXX_FLAGS="-Dwait4=__syscall_wait4" \ | |
| -DLLVM_INCLUDE_BENCHMARKS=OFF \ | |
| -DLLVM_INCLUDE_EXAMPLES=OFF \ | |
| -DLLVM_INCLUDE_TESTS=OFF \ | |
| -DLLVM_ENABLE_THREADS=OFF \ | |
| -DLLVM_BUILD_TOOLS=OFF \ | |
| -DLLVM_ENABLE_LIBPFM=OFF \ | |
| -DCLANG_BUILD_TOOLS=OFF \ | |
| -G Ninja \ | |
| -DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \ | |
| -DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \ | |
| -DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \ | |
| -DLLVM_ENABLE_LTO=Full \ | |
| ../llvm | |
| emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm | |
| fi | |
| cd ../ | |
| rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".") | |
| if [[ "${cling_on}" == "ON" ]]; then | |
| cd ./llvm/ | |
| rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") | |
| cd ../clang/ | |
| rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") | |
| cd ../.. | |
| else # repl | |
| cd ./llvm/ | |
| rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") | |
| cd ../clang/ | |
| rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") | |
| cd ../.. | |
| fi | |
| - name: Build LLVM/Cling on Windows systems if the cache is invalid | |
| if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| run: | | |
| if ( "${{ matrix.cling }}" -imatch "On" ) | |
| { | |
| git clone https://github.com/root-project/cling.git | |
| cd ./cling | |
| git checkout tags/v${{ matrix.cling-version }} | |
| cd .. | |
| git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git | |
| $env:PWD_DIR= $PWD.Path | |
| $env:CLING_DIR="$env:PWD_DIR\cling" | |
| echo "CLING_DIR=$env:CLING_DIR" | |
| } | |
| else | |
| { | |
| git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git | |
| } | |
| cd llvm-project | |
| # Build | |
| mkdir build | |
| if ( "${{ matrix.cling }}" -imatch "On" ) | |
| { | |
| cd build | |
| cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" ` | |
| -DLLVM_EXTERNAL_PROJECTS=cling ` | |
| -DLLVM_EXTERNAL_CLING_SOURCE_DIR="$env:CLING_DIR" ` | |
| -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" ` | |
| -DCMAKE_BUILD_TYPE=Release ` | |
| -DLLVM_ENABLE_ASSERTIONS=ON ` | |
| -DCLANG_ENABLE_STATIC_ANALYZER=OFF ` | |
| -DCLANG_ENABLE_ARCMT=OFF ` | |
| -DCLANG_ENABLE_FORMAT=OFF ` | |
| -DCLANG_ENABLE_BOOTSTRAP=OFF ` | |
| -DLLVM_ENABLE_ZSTD=OFF ` | |
| -DLLVM_ENABLE_TERMINFO=OFF ` | |
| -DLLVM_ENABLE_LIBXML2=OFF ` | |
| ..\llvm | |
| cmake --build . --config Release --target clang --parallel ${{ env.ncpus }} | |
| cmake --build . --config Release --target cling --parallel ${{ env.ncpus }} | |
| # Now build gtest.a and gtest_main for CppInterOp to run its tests. | |
| cmake --build . --config Release --target gtest_main --parallel ${{ env.ncpus }} | |
| } | |
| else | |
| { | |
| cp -r ..\patches\llvm\clang${{ matrix.clang-runtime }}* | |
| #FIXME: Apply patches without hardcoding | |
| if ( "${{ matrix.clang-runtime }}" -imatch "16" ) | |
| { | |
| git apply -v clang16-1-Value.patch | |
| git apply -v clang16-2-CUDA.patch | |
| git apply -v clang16-3-WeakRef.patch | |
| } | |
| elseif ( "${{ matrix.clang-runtime }}" -imatch "17" ) | |
| { | |
| git apply -v clang17-1-NewOperator.patch | |
| } | |
| cd build | |
| echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:" | |
| cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" ` | |
| -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" ` | |
| -DCMAKE_BUILD_TYPE=Release ` | |
| -DLLVM_ENABLE_ASSERTIONS=ON ` | |
| -DCLANG_ENABLE_STATIC_ANALYZER=OFF ` | |
| -DCLANG_ENABLE_ARCMT=OFF ` | |
| -DCLANG_ENABLE_FORMAT=OFF ` | |
| -DCLANG_ENABLE_BOOTSTRAP=OFF ` | |
| -DLLVM_ENABLE_ZSTD=OFF ` | |
| -DLLVM_ENABLE_TERMINFO=OFF ` | |
| -DLLVM_ENABLE_LIBXML2=OFF ` | |
| ..\llvm | |
| cmake --build . --config Release --target clang clangInterpreter clangStaticAnalyzerCore --parallel ${{ env.ncpus }} | |
| } | |
| cd ..\ | |
| rm -r -force $(find.exe . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".") | |
| if ( "${{ matrix.cling }}" -imatch "On" ) | |
| { | |
| cd .\llvm\ | |
| rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") | |
| cd ..\clang\ | |
| rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") | |
| cd ..\.. | |
| } | |
| else | |
| { | |
| cd .\llvm\ | |
| rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") | |
| cd ..\clang\ | |
| rm -r -force $(find.exe . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") | |
| cd ..\.. | |
| } | |
| - name: Save Cache LLVM/Clang runtime build directory (Unix Systems Emscripten) | |
| uses: actions/cache/save@v4 | |
| if: ${{ runner.os != 'windows' && steps.cache.outputs.cache-hit != 'true' }} | |
| with: | |
| path: | | |
| llvm-project | |
| ${{ matrix.cling=='On' && 'cling' || '' }} | |
| key: ${{ steps.cache.outputs.cache-primary-key }} | |
| emscripten_wasm_CppInterOp_and_xeus_cpp: | |
| needs: [build_cache] | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: ubu22-x86-gcc12-clang-repl-19-emscripten_wasm | |
| os: ubuntu-22.04 | |
| compiler: gcc-12 | |
| clang-runtime: '19' | |
| cling: Off | |
| micromamba_shell_init: bash | |
| emsdk_ver: "3.1.73" | |
| - name: ubu22-arm-gcc12-clang-repl-19-emscripten_wasm | |
| os: ubuntu-22.04-arm | |
| compiler: gcc-12 | |
| clang-runtime: '19' | |
| cling: Off | |
| micromamba_shell_init: bash | |
| emsdk_ver: "3.1.73" | |
| - name: osx15-arm-clang-clang-repl-19-emscripten_wasm | |
| os: macos-15 | |
| compiler: clang | |
| clang-runtime: '19' | |
| cling: Off | |
| micromamba_shell_init: bash | |
| emsdk_ver: "3.1.73" | |
| - name: osx15-x86-clang-clang-repl-19-emscripten_wasm | |
| os: macos-15-intel | |
| compiler: clang | |
| clang-runtime: '19' | |
| cling: Off | |
| micromamba_shell_init: bash | |
| emsdk_ver: "3.1.73" | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: compiler-research/CppInterOp | |
| path: ${{ github.workspace }}/CppInterOp | |
| fetch-depth: 0 | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: compiler-research/xeus-cpp | |
| path: ${{ github.workspace }}/xeus-cpp | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Save PR Info on Unix systems | |
| if: ${{ runner.os != 'windows' }} | |
| run: | | |
| mkdir -p ./pr | |
| echo ${{ github.event.number }} > ./pr/NR | |
| echo ${{ github.repository }} > ./pr/REPO | |
| cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') | |
| if [[ "$cling_on" == "ON" ]]; then | |
| export CLING_HASH=$(git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} | tr '\t' '-') | |
| export LLVM_HASH=$(git ls-remote https://github.com/root-project/llvm-project.git cling-llvm${{ matrix.clang-runtime}} | tr '\t' '-') | |
| else | |
| export CLING_HASH="Repl" | |
| # May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x | |
| # which could be quite often for new releases | |
| export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-') | |
| fi | |
| echo "CLING_HASH=$CLING_HASH" >> $GITHUB_ENV | |
| echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV | |
| - name: Setup default Build Type on *nux | |
| if: runner.os != 'windows' | |
| run: | | |
| echo "BUILD_TYPE=Release" >> $GITHUB_ENV | |
| echo "CODE_COVERAGE=0" >> $GITHUB_ENV | |
| os="${{ matrix.os }}" | |
| if [[ "${os}" == "macos"* ]]; then | |
| echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV | |
| else | |
| echo "ncpus=$(nproc --all)" >> $GITHUB_ENV | |
| fi | |
| - name: install mamba | |
| uses: mamba-org/setup-micromamba@main | |
| with: | |
| init-shell: >- | |
| ${{ matrix.micromamba_shell_init }} | |
| - name: Setup emsdk | |
| shell: bash -l {0} | |
| run: | | |
| git clone --depth=1 https://github.com/emscripten-core/emsdk.git | |
| ./emsdk/emsdk install ${{ matrix.emsdk_ver }} | |
| - name: Restore Cache LLVM/Clang runtime build directory | |
| uses: actions/cache/restore@v4 | |
| id: cache | |
| with: | |
| path: | | |
| llvm-project | |
| ${{ matrix.cling=='On' && 'cling' || '' }} | |
| key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-emscripten | |
| - name: Emscripten build of CppInterOp on Unix systems | |
| if: ${{ runner.os != 'windows' }} | |
| shell: bash -l {0} | |
| run: | | |
| cd ${{ github.workspace }}/CppInterOp/ | |
| ${{ github.workspace }}/emsdk/emsdk activate ${{matrix.emsdk_ver}} | |
| source ${{ github.workspace }}/emsdk/emsdk_env.sh | |
| micromamba create -f environment-wasm.yml --platform=emscripten-wasm32 | |
| export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm | |
| export CMAKE_PREFIX_PATH=$PREFIX | |
| export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX | |
| LLVM_DIR="${{ github.workspace }}/llvm-project" | |
| LLVM_BUILD_DIR="${{ github.workspace }}/llvm-project/build" | |
| cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') | |
| if [[ "${cling_on}" == "ON" ]]; then | |
| CLING_DIR="${{ github.workspace }}/cling" | |
| CLING_BUILD_DIR="${{ github.workspace }}/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 | |
| export CPPINTEROP_BUILD_DIR=$PWD | |
| 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 \ | |
| ../ | |
| 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 \ | |
| ../ | |
| fi | |
| emmake make -j ${{ env.ncpus }} install | |
| cd .. | |
| 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 xeus-cpp | |
| shell: bash -l {0} | |
| run: | | |
| bash ${{ github.workspace }}/emsdk/emsdk activate ${{matrix.emsdk_ver}} | |
| source ${{ github.workspace }}/emsdk/emsdk_env.sh | |
| export SYSROOT_PATH=${{ github.workspace }}/emsdk/upstream/emscripten/cache/sysroot | |
| micromamba activate CppInterOp-wasm | |
| cd ${{ github.workspace }}/xeus-cpp/ | |
| mkdir build | |
| cd 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=$SYSROOT_PATH \ | |
| .. | |
| emmake make -j ${{ env.ncpus }} install |