1+ name : Build and Deploy
2+
3+ on :
4+ workflow_dispatch :
5+ push :
6+ branches :
7+ - main
8+
9+ permissions :
10+ contents : read
11+ pages : write
12+ id-token : write
13+
14+ jobs :
15+ build :
16+ runs-on : ${{ matrix.os }}
17+
18+ strategy :
19+ fail-fast : false
20+ matrix :
21+ include :
22+ - name : ubu22-x86-gcc12-clang-repl-19-emscripten_wasm
23+ os : ubuntu-22.04
24+ compiler : gcc-12
25+ clang-runtime : ' 19'
26+ cling : Off
27+ micromamba_shell_init : bash
28+ emsdk_ver : " 3.1.45"
29+
30+ steps :
31+ - uses : actions/checkout@v4
32+ with :
33+ fetch-depth : 0
34+
35+ - name : Set up Python
36+ uses : actions/setup-python@v5
37+ with :
38+ python-version : ' 3.11'
39+
40+ - name : Save PR Info on Unix systems
41+ if : ${{ runner.os != 'windows' }}
42+ run : |
43+ mkdir -p ./pr
44+ echo ${{ github.event.number }} > ./pr/NR
45+ echo ${{ github.repository }} > ./pr/REPO
46+
47+ cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
48+ if [[ "$cling_on" == "ON" ]]; then
49+ export CLING_HASH=$(git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} | tr '\t' '-')
50+ export LLVM_HASH=$(git ls-remote https://github.com/root-project/llvm-project.git cling-llvm${{ matrix.clang-runtime}} | tr '\t' '-')
51+ else
52+ export CLING_HASH="Repl"
53+ # 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
54+ # which could be quite often for new releases
55+ export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-')
56+ fi
57+
58+ echo "CLING_HASH=$CLING_HASH" >> $GITHUB_ENV
59+ echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV
60+
61+ - name : Setup default Build Type on *nux
62+ if : runner.os != 'windows'
63+ run : |
64+ echo "BUILD_TYPE=Release" >> $GITHUB_ENV
65+ echo "CODE_COVERAGE=0" >> $GITHUB_ENV
66+ echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
67+
68+ - name : install mamba
69+ uses : mamba-org/setup-micromamba@main
70+ with :
71+ environment-file : environment-wasm-build.yml
72+ init-shell : >-
73+ ${{ matrix.micromamba_shell_init }}
74+ environment-name : CppInterOp-wasm-build
75+
76+ - name : Setup emsdk
77+ shell : bash -l {0}
78+ run : |
79+ git clone https://github.com/emscripten-core/emsdk.git
80+ cd emsdk
81+ ./emsdk install ${{ matrix.emsdk_ver }}
82+
83+ - name : Restore Cache LLVM/Clang runtime build directory
84+ uses : actions/cache/restore@v4
85+ id : cache
86+ with :
87+ path : |
88+ llvm-project
89+ ${{ matrix.cling=='On' && 'cling' || '' }}
90+ key : ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }}
91+
92+ - name : Emscripten build of CppInterOp on Unix systems
93+ if : ${{ runner.os != 'windows' }}
94+ shell : bash -l {0}
95+ run : |
96+ ./emsdk/emsdk activate ${{matrix.emsdk_ver}}
97+ source ./emsdk/emsdk_env.sh
98+ micromamba create -f environment-wasm.yml --platform=emscripten-wasm32
99+
100+ export PREFIX=$MAMBA_ROOT_PREFIX/envs/CppInterOp-wasm
101+ export CMAKE_PREFIX_PATH=$PREFIX
102+ export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX
103+
104+ LLVM_DIR="$(pwd)/llvm-project"
105+ LLVM_BUILD_DIR="$(pwd)/llvm-project/build"
106+ cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
107+ if [[ "${cling_on}" == "ON" ]]; then
108+ CLING_DIR="$(pwd)/cling"
109+ CLING_BUILD_DIR="$(pwd)/cling/build"
110+ 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"
111+ else
112+ CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include"
113+ fi
114+
115+ # Build CppInterOp next to cling and llvm-project.
116+ mkdir build
117+ cd build
118+ export CPPINTEROP_BUILD_DIR=$PWD
119+
120+ if [[ "${cling_on}" == "ON" ]]; then
121+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
122+ -DUSE_CLING=ON \
123+ -DUSE_REPL=OFF \
124+ -DCMAKE_PREFIX_PATH=$PREFIX \
125+ -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \
126+ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \
127+ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \
128+ -DBUILD_SHARED_LIBS=OFF \
129+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \
130+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
131+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \
132+ -DZLIB_INCLUDE_DIR=$PREFIX/include \
133+ -DZLIB_LIBRARY=$PREFIX/lib/ \
134+ ../
135+ else
136+ emcmake cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
137+ -DUSE_CLING=OFF \
138+ -DUSE_REPL=ON \
139+ -DCMAKE_PREFIX_PATH=$PREFIX \
140+ -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \
141+ -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \
142+ -DBUILD_SHARED_LIBS=OFF \
143+ -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \
144+ -DCMAKE_INSTALL_PREFIX=$PREFIX \
145+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \
146+ -DZLIB_INCLUDE_DIR=$PREFIX/include \
147+ -DZLIB_LIBRARY=$PREFIX/lib/ \
148+ ../
149+ fi
150+
151+ emmake make -j ${{ env.ncpus }}
152+
153+ cd ..
154+
155+ echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV
156+ echo "CPPINTEROP_BUILD_DIR=$CPPINTEROP_BUILD_DIR" >> $GITHUB_ENV
157+ echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV
158+ echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV
159+ echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV
160+ echo "PREFIX=$PREFIX" >> $GITHUB_ENV
161+
162+ - name : Build xeus-cpp
163+ shell : bash -l {0}
164+ run : |
165+ ./emsdk/emsdk activate ${{matrix.emsdk_ver}}
166+ source ./emsdk/emsdk_env.sh
167+ micromamba activate CppInterOp-wasm
168+ git clone https://github.com/compiler-research/xeus-cpp.git
169+ cd ./xeus-cpp
170+ mkdir build
171+ pushd build
172+ export CMAKE_PREFIX_PATH=${{ env.PREFIX }}
173+ export CMAKE_SYSTEM_PREFIX_PATH=${{ env.PREFIX }}
174+ emcmake cmake \
175+ -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
176+ -DCMAKE_PREFIX_PATH=${{ env.PREFIX }} \
177+ -DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }} \
178+ -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \
179+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \
180+ -DCppInterOp_DIR="${{ env.CPPINTEROP_BUILD_DIR }}/lib/cmake/CppInterOp" \
181+ ..
182+ EMCC_CFLAGS='-sERROR_ON_UNDEFINED_SYMBOLS=0' emmake make -j ${{ env.ncpus }}
183+
184+ - name : Jupyter Lite integration
185+ shell : bash -l {0}
186+ run : |
187+ cd ./xeus-cpp/
188+ micromamba create -n xeus-lite-host jupyterlite-core
189+ micromamba activate xeus-lite-host
190+ python -m pip install jupyterlite-xeus
191+ jupyter lite build --XeusAddon.prefix=${{ env.PREFIX }} --output-dir dist
192+
193+ - name : Upload artifact
194+ uses : actions/upload-pages-artifact@v3
195+ with :
196+ path : ./xeus-cpp/dist/
197+
198+ deploy :
199+ needs : build
200+ permissions :
201+ pages : write
202+ id-token : write
203+ environment :
204+ name : github-pages
205+ url : ${{ steps.deployment.outputs.page_url }}
206+ runs-on : ubuntu-22.04
207+ steps :
208+ - name : Deploy to GitHub Pages
209+ id : deployment
210+ uses : actions/deploy-pages@v4
0 commit comments