Skip to content

Commit 42b7e18

Browse files
authored
Reduce CppInterOp Emscripten shared library size (#655)
1 parent c849ba4 commit 42b7e18

File tree

5 files changed

+47
-10
lines changed

5 files changed

+47
-10
lines changed

.github/workflows/emscripten.yml

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ jobs:
175175
-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \
176176
-DCMAKE_BUILD_TYPE=Release \
177177
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \
178-
-DLLVM_ENABLE_ASSERTIONS=ON \
179178
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
180179
-DLLVM_ENABLE_LIBEDIT=OFF \
181180
-DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \
@@ -194,6 +193,9 @@ jobs:
194193
-DLLVM_ENABLE_LIBPFM=OFF \
195194
-DCLANG_BUILD_TOOLS=OFF \
196195
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
196+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
197+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
198+
-DLLVM_ENABLE_LTO=Full \
197199
../llvm
198200
emmake ninja clang cling lld gtest_main
199201
else
@@ -206,7 +208,6 @@ jobs:
206208
cd build
207209
emcmake cmake -DCMAKE_BUILD_TYPE=Release \
208210
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \
209-
-DLLVM_ENABLE_ASSERTIONS=ON \
210211
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \
211212
-DLLVM_ENABLE_LIBEDIT=OFF \
212213
-DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \
@@ -225,6 +226,9 @@ jobs:
225226
-DCLANG_BUILD_TOOLS=OFF \
226227
-G Ninja \
227228
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
229+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
230+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
231+
-DLLVM_ENABLE_LTO=Full \
228232
../llvm
229233
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
230234
fi
@@ -284,7 +288,6 @@ jobs:
284288
-DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling `
285289
-DCMAKE_BUILD_TYPE=Release `
286290
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
287-
-DLLVM_ENABLE_ASSERTIONS=ON `
288291
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
289292
-DLLVM_ENABLE_LIBEDIT=OFF `
290293
-DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
@@ -302,6 +305,9 @@ jobs:
302305
-DLLVM_BUILD_TOOLS=OFF `
303306
-DLLVM_ENABLE_LIBPFM=OFF `
304307
-DCLANG_BUILD_TOOLS=OFF `
308+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
309+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
310+
-DLLVM_ENABLE_LTO=Full `
305311
-DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" `
306312
..\llvm
307313
emmake make clang cling lld gtest_main
@@ -325,7 +331,6 @@ jobs:
325331
echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:"
326332
emcmake cmake -DCMAKE_BUILD_TYPE=Release `
327333
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
328-
-DLLVM_ENABLE_ASSERTIONS=ON `
329334
-DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" `
330335
-DLLVM_ENABLE_LIBEDIT=OFF `
331336
-DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" `
@@ -342,6 +347,9 @@ jobs:
342347
-DLLVM_BUILD_TOOLS=OFF `
343348
-DLLVM_ENABLE_LIBPFM=OFF `
344349
-DCLANG_BUILD_TOOLS=OFF `
350+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
351+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
352+
-DLLVM_ENABLE_LTO=Full `
345353
-G Ninja `
346354
-DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" `
347355
..\llvm
@@ -527,6 +535,15 @@ jobs:
527535
fi
528536
529537
emmake make -j ${{ env.ncpus }} check-cppinterop
538+
os="${{ matrix.os }}"
539+
if [[ "${os}" != macos* ]] ; then
540+
actual_size=$(stat -c%s "./lib/libclangCppInterOp.so")
541+
max_size=$((40 * 1024 * 1024))
542+
if [[ "$actual_size" -gt "$max_size" ]]; then
543+
echo "Error: libclangCppInterOp.so is larger than 40 MB."
544+
exit 1
545+
fi
546+
fi
530547
cd ./unittests/CppInterOp/
531548
# Fresh install browsers, and run Emscripten tests in them
532549
# This is to match the Emscripten build instructions, where
@@ -689,7 +706,12 @@ jobs:
689706
-DSYSROOT_PATH=$SYSROOT_PATH \
690707
../
691708
fi
692-
emmake make -j ${{ env.ncpus }} check-cppinterop
709+
os="${{ matrix.os }}"
710+
if [[ "${os}" != macos* ]] ; then
711+
EMCC_CORES=1 emmake make -j 1 check-cppinterop
712+
else
713+
EMCC_CORES=2 emmake make -j 2 check-cppinterop
714+
fi
693715
cd ./unittests/CppInterOp/
694716
# Explaination of options for emrun
695717
# --browser (name of browser on path)

Emscripten-build-instructions.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ mkdir build
8080
cd build
8181
emcmake cmake -DCMAKE_BUILD_TYPE=Release \
8282
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \
83-
-DLLVM_ENABLE_ASSERTIONS=ON \
8483
-DLLVM_TARGETS_TO_BUILD="WebAssembly" \
8584
-DLLVM_ENABLE_LIBEDIT=OFF \
8685
-DLLVM_ENABLE_PROJECTS="clang;lld" \
@@ -98,6 +97,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release \
9897
-DLLVM_ENABLE_LIBPFM=OFF \
9998
-DCLANG_BUILD_TOOLS=OFF \
10099
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
100+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
101+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
102+
-DLLVM_ENABLE_LTO=Full \
101103
../llvm
102104
emmake make libclang -j $(nproc --all)
103105
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)
@@ -118,7 +120,6 @@ mkdir build
118120
cd build
119121
emcmake cmake -DCMAKE_BUILD_TYPE=Release `
120122
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
121-
-DLLVM_ENABLE_ASSERTIONS=ON `
122123
-DLLVM_TARGETS_TO_BUILD="WebAssembly" `
123124
-DLLVM_ENABLE_LIBEDIT=OFF `
124125
-DLLVM_ENABLE_PROJECTS="clang;lld" `
@@ -137,6 +138,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release `
137138
-DCLANG_BUILD_TOOLS=OFF `
138139
-DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" `
139140
-G Ninja `
141+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
142+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
143+
-DLLVM_ENABLE_LTO=Full `
140144
..\llvm
141145
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
142146
```

docs/Emscripten-build-instructions.rst

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ and osx
100100
cd build
101101
emcmake cmake -DCMAKE_BUILD_TYPE=Release \
102102
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \
103-
-DLLVM_ENABLE_ASSERTIONS=ON \
104103
-DLLVM_TARGETS_TO_BUILD="WebAssembly" \
105104
-DLLVM_ENABLE_LIBEDIT=OFF \
106105
-DLLVM_ENABLE_PROJECTS="clang;lld" \
@@ -118,6 +117,9 @@ and osx
118117
-DLLVM_ENABLE_LIBPFM=OFF \
119118
-DCLANG_BUILD_TOOLS=OFF \
120119
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
120+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
121+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" \
122+
-DLLVM_ENABLE_LTO=Full \
121123
../llvm
122124
emmake make libclang -j $(nproc --all)
123125
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)
@@ -138,7 +140,6 @@ or executing
138140
cd build
139141
emcmake cmake -DCMAKE_BUILD_TYPE=Release `
140142
-DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten `
141-
-DLLVM_ENABLE_ASSERTIONS=ON `
142143
-DLLVM_TARGETS_TO_BUILD="WebAssembly" `
143144
-DLLVM_ENABLE_LIBEDIT=OFF `
144145
-DLLVM_ENABLE_PROJECTS="clang;lld" `
@@ -157,6 +158,9 @@ or executing
157158
-DCLANG_BUILD_TOOLS=OFF `
158159
-DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" `
159160
-G Ninja `
161+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
162+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" `
163+
-DLLVM_ENABLE_LTO=Full `
160164
..\llvm
161165
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
162166

lib/CppInterOp/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,16 @@ if(EMSCRIPTEN)
127127
set_target_properties(clangCppInterOp
128128
PROPERTIES NO_SONAME 1
129129
)
130+
target_compile_options(clangCppInterOp
131+
PRIVATE "SHELL: -Oz"
132+
PRIVATE "SHELL: -flto"
133+
)
130134
target_link_options(clangCppInterOp
131135
PRIVATE "SHELL: -s WASM_BIGINT"
132136
PRIVATE "SHELL: -s SIDE_MODULE=1"
133137
PRIVATE "SHELL: ${SYMBOLS_LIST}"
138+
PRIVATE "SHELL: -Oz"
139+
PRIVATE "SHELL: -flto"
134140
)
135141
else()
136142
target_link_options(clangCppInterOp

lib/CppInterOp/exports.ld

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@
5050
-Wl,--export=_ZNK5clang4Type14isFloatingTypeEv
5151
-Wl,--export=_ZNK5clang12FunctionDecl12getNumParamsEv
5252
-Wl,--export=__clang_Interpreter_SetValueNoAlloc
53-
-Wl,--export=__clang_Interpreter_SetValueWithAlloc
53+
-Wl,--export=__clang_Interpreter_SetValueWithAlloc
54+
-Wl,--export=_ZN4llvm15SmallVectorBaseIjE8set_sizeEm

0 commit comments

Comments
 (0)