Skip to content

Commit f7ac5b0

Browse files
authored
General improvements to Emscripten build and ci (#533)
1 parent b9256d7 commit f7ac5b0

File tree

3 files changed

+23
-113
lines changed

3 files changed

+23
-113
lines changed

.github/workflows/emscripten.yml

Lines changed: 17 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,22 @@ jobs:
2121
fail-fast: false
2222
matrix:
2323
include:
24-
- name: ubu24-arm-gcc12-clang-repl-19-emscripten
24+
- name: ubu24-arm-clang-repl-19-emscripten
2525
os: ubuntu-24.04-arm
26-
compiler: gcc-12
2726
clang-runtime: '19'
2827
cling: Off
2928
llvm_enable_projects: "clang;lld"
3029
llvm_targets_to_build: "WebAssembly"
3130
emsdk_ver: "3.1.73"
32-
- name: osx15-arm-clang-clang-repl-19-emscripten
31+
- name: osx15-arm-clang-repl-19-emscripten
3332
os: macos-15
34-
compiler: clang
3533
clang-runtime: '19'
3634
cling: Off
3735
llvm_enable_projects: "clang;lld"
3836
llvm_targets_to_build: "WebAssembly"
3937
emsdk_ver: "3.1.73"
40-
- name: ubu24-x86-gcc12-clang-repl-19-emscripten
38+
- name: ubu24-x86-clang-repl-19-emscripten
4139
os: ubuntu-24.04
42-
compiler: gcc-12
4340
clang-runtime: '19'
4441
cling: Off
4542
llvm_enable_projects: "clang;lld"
@@ -112,7 +109,7 @@ jobs:
112109
path: |
113110
llvm-project
114111
${{ matrix.cling=='On' && 'cling' || '' }}
115-
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-emscripten
112+
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten
116113
lookup-only: true
117114

118115
- name: Setup emsdk
@@ -127,12 +124,6 @@ jobs:
127124
run: |
128125
echo "BUILD_TYPE=Release" >> $GITHUB_ENV
129126
echo "CODE_COVERAGE=0" >> $GITHUB_ENV
130-
os="${{ matrix.os }}"
131-
if [[ "${os}" == "macos"* ]]; then
132-
echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
133-
else
134-
echo "ncpus=$(nproc --all)" >> $GITHUB_ENV
135-
fi
136127
137128
- name: Setup default Build Type on Windows
138129
if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
@@ -142,92 +133,6 @@ jobs:
142133
$env:ncpus=$([Environment]::ProcessorCount)
143134
echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV
144135
145-
- name: Setup compiler on Linux
146-
if: ${{ runner.os == 'Linux' && steps.cache.outputs.cache-hit != 'true' }}
147-
run: |
148-
# https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
149-
vers="${compiler#*-}"
150-
os_codename="`cat /etc/os-release | grep UBUNTU_CODENAME | cut -d = -f 2`"
151-
##sudo apt update
152-
if [[ "${{ matrix.compiler }}" == *"gcc"* ]]; then
153-
sudo apt install -y gcc-${vers} g++-${vers} lld
154-
echo "CC=gcc-${vers}" >> $GITHUB_ENV
155-
echo "CXX=g++-${vers}" >> $GITHUB_ENV
156-
else
157-
if ! sudo apt install -y clang-${vers}; then
158-
curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
159-
echo "deb https://apt.llvm.org/${os_codename}/ llvm-toolchain-${os_codename}-${vers} main" | sudo tee -a /etc/apt/sources.list
160-
sudo apt-get update
161-
sudo apt-get install -y clang-${vers}
162-
fi
163-
echo "CC=clang-${vers}" >> $GITHUB_ENV
164-
echo "CXX=clang++-${vers}" >> $GITHUB_ENV
165-
fi
166-
env:
167-
compiler: ${{ matrix.compiler }}
168-
169-
- name: Setup compiler on macOS
170-
if: ${{ runner.os == 'macOS' && steps.cache.outputs.cache-hit != 'true' }}
171-
run: |
172-
vers="${compiler#*-}"
173-
if [[ "${{ matrix.compiler }}" == *"gcc"* ]]; then
174-
brew install "gcc@$vers"
175-
echo "CC=gcc-${vers}" >> $GITHUB_ENV
176-
echo "CXX=g++-${vers}" >> $GITHUB_ENV
177-
else
178-
export ARCHITECHURE=$(uname -m)
179-
if [[ "$ARCHITECHURE" == "arm64" ]]; then
180-
cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]')
181-
if [[ "${cling_on}" == "ON" ]]; then
182-
brew install llvm@15
183-
brew remove llvm@18
184-
brew cleanup
185-
#FIXME: Do not believe setting all these environment variables are necessary
186-
# They were set to avoid using Xcodes libc++ and to stop CppInterOp using llvm@18 in tests
187-
echo 'LDFLAGS="-L/opt/homebrew/opt/llvm@15/lib/ -L/opt/homebrew/opt/llvm@15/c++/"' >> $GITHUB_ENV
188-
echo 'CPPFLAGS="-I/opt/homebrew/opt/llvm@15/include"' >> $GITHUB_ENV
189-
echo 'CPATH="/opt/homebrew/include/"' >> $GITHUB_ENV
190-
echo 'LIBRARY_PATH="/opt/homebrew/lib/"' >> $GITHUB_ENV
191-
echo "CC=$(brew --prefix llvm@15)/bin/clang" >> $GITHUB_ENV
192-
echo "CXX=$(brew --prefix llvm@15)/bin/clang++" >> $GITHUB_ENV
193-
else
194-
echo "CC=$(brew --prefix llvm@18)/bin/clang" >> $GITHUB_ENV
195-
echo "CXX=$(brew --prefix llvm@18)/bin/clang++" >> $GITHUB_ENV
196-
fi
197-
else
198-
echo "CC=$(brew --prefix llvm@15)/bin/clang" >> $GITHUB_ENV
199-
echo "CXX=$(brew --prefix llvm@15)/bin/clang++" >> $GITHUB_ENV
200-
fi
201-
fi
202-
echo "SDKROOT=$(xcrun --sdk macosx --show-sdk-path)" >> $GITHUB_ENV
203-
env:
204-
compiler: ${{ matrix.compiler }}
205-
206-
#Section slightly modified version of
207-
#https://github.com/vgvassilev/clad/blob/40d8bec11bde47b14a281078183a4f6147abeac5/.github/workflows/ci.yml#L510C1-L534C10
208-
- name: Setup compiler on Windows
209-
if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
210-
run: |
211-
if ( "${{ matrix.compiler }}" -imatch "clang" )
212-
{
213-
$ver="${{ matrix.compiler }}".split("-")[1]
214-
choco install llvm --version=$ver --no-progress -my
215-
clang --version
216-
#
217-
$env:CC="clang"
218-
$env:CXX="clang++"
219-
echo "CC=clang" >> $env:GITHUB_ENV
220-
echo "CXX=clang++" >> $env:GITHUB_ENV
221-
}
222-
elseif ( "${{ matrix.compiler }}" -imatch "msvc" )
223-
{
224-
# MSVC is builtin in container image
225-
}
226-
else
227-
{
228-
echo "Unsupported compiler - fix YAML file"
229-
}
230-
231136
- name: Install deps on Windows
232137
if: ${{ runner.os == 'windows' && steps.cache.outputs.cache-hit != 'true' }}
233138
run: |
@@ -299,8 +204,11 @@ jobs:
299204
-DLLVM_INCLUDE_TESTS=OFF \
300205
-DLLVM_ENABLE_THREADS=OFF \
301206
-G Ninja \
207+
-DLLVM_BUILD_TOOLS=OFF \
208+
-DLLVM_ENABLE_LIBPFM=OFF \
209+
-DCLANG_BUILD_TOOLS=OFF \
302210
../llvm
303-
emmake ninja clang cling lld gtest_main -j ${{ env.ncpus }}
211+
emmake ninja clang cling lld gtest_main
304212
else
305213
# Apply patches
306214
llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]')
@@ -325,10 +233,14 @@ jobs:
325233
-DLLVM_INCLUDE_EXAMPLES=OFF \
326234
-DLLVM_INCLUDE_TESTS=OFF \
327235
-DLLVM_ENABLE_THREADS=OFF \
236+
-DLLVM_BUILD_TOOLS=OFF \
237+
-DLLVM_ENABLE_LIBPFM=OFF \
238+
-DCLANG_BUILD_TOOLS=OFF \
328239
-G Ninja \
329240
../llvm
330-
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm -j ${{ env.ncpus }}
241+
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
331242
fi
243+
rm -rf ./NATIVE/
332244
cd ../
333245
rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".")
334246
if [[ "${cling_on}" == "ON" ]]; then
@@ -457,23 +369,20 @@ jobs:
457369
fail-fast: false
458370
matrix:
459371
include:
460-
- name: ubu24-x86-gcc12-clang-repl-19-emscripten_wasm
372+
- name: ubu24-x86-clang-repl-19-emscripten_wasm
461373
os: ubuntu-24.04
462-
compiler: gcc-12
463374
clang-runtime: '19'
464375
cling: Off
465376
micromamba_shell_init: bash
466377
emsdk_ver: "3.1.73"
467-
- name: osx15-arm-clang-clang-repl-19-emscripten_wasm
378+
- name: osx15-arm-clang-repl-19-emscripten_wasm
468379
os: macos-15
469-
compiler: clang
470380
clang-runtime: '19'
471381
cling: Off
472382
micromamba_shell_init: bash
473383
emsdk_ver: "3.1.73"
474-
- name: ubu24-arm-gcc12-clang-repl-19-emscripten_wasm
384+
- name: ubu24-arm-clang-repl-19-emscripten_wasm
475385
os: ubuntu-24.04-arm
476-
compiler: gcc-12
477386
clang-runtime: '19'
478387
cling: Off
479388
micromamba_shell_init: bash
@@ -484,11 +393,6 @@ jobs:
484393
with:
485394
fetch-depth: 0
486395

487-
- name: Set up Python
488-
uses: actions/setup-python@v5
489-
with:
490-
python-version: '3.11'
491-
492396
- name: Save PR Info on Unix systems
493397
if: ${{ runner.os != 'windows' }}
494398
run: |
@@ -542,7 +446,7 @@ jobs:
542446
path: |
543447
llvm-project
544448
${{ matrix.cling=='On' && 'cling' || '' }}
545-
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-emscripten
449+
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-clang-${{ matrix.clang-runtime }}.x-emscripten
546450

547451
- name: Emscripten build of CppInterOp on Unix systems
548452
if: ${{ runner.os != 'windows' }}

Emscripten-build-instructions.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release \
6969
-DLLVM_INCLUDE_EXAMPLES=OFF \
7070
-DLLVM_INCLUDE_TESTS=OFF \
7171
-DLLVM_ENABLE_THREADS=OFF \
72+
-DLLVM_BUILD_TOOLS=OFF \
73+
-DLLVM_ENABLE_LIBPFM=OFF \
74+
-DCLANG_BUILD_TOOLS=OFF \
7275
../llvm
7376
emmake make libclang -j $(nproc --all)
7477
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)

docs/Emscripten-build-instructions.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ executing the following
8585
-DLLVM_INCLUDE_EXAMPLES=OFF \
8686
-DLLVM_INCLUDE_TESTS=OFF \
8787
-DLLVM_ENABLE_THREADS=OFF \
88+
-DLLVM_BUILD_TOOLS=OFF \
89+
-DLLVM_ENABLE_LIBPFM=OFF \
90+
-DCLANG_BUILD_TOOLS=OFF \
8891
../llvm
8992
emmake make libclang -j $(nproc --all)
9093
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)

0 commit comments

Comments
 (0)