Skip to content

Commit c6f89c0

Browse files
committed
Use Oz and flto flags to reduce Emscripten shared library size
1 parent f65f80a commit c6f89c0

File tree

5 files changed

+47
-2
lines changed

5 files changed

+47
-2
lines changed

.github/workflows/emscripten.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@ jobs:
194194
-DLLVM_ENABLE_LIBPFM=OFF \
195195
-DCLANG_BUILD_TOOLS=OFF \
196196
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
197+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" \
198+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" \
199+
-DLLVM_ENABLE_LTO=Full \
197200
../llvm
198201
emmake ninja clang cling lld gtest_main
199202
else
@@ -225,6 +228,9 @@ jobs:
225228
-DCLANG_BUILD_TOOLS=OFF \
226229
-G Ninja \
227230
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
231+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" \
232+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" \
233+
-DLLVM_ENABLE_LTO=Full \
228234
../llvm
229235
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
230236
fi
@@ -295,6 +301,9 @@ jobs:
295301
-DLLVM_BUILD_TOOLS=OFF `
296302
-DLLVM_ENABLE_LIBPFM=OFF `
297303
-DCLANG_BUILD_TOOLS=OFF `
304+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" `
305+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" `
306+
-DLLVM_ENABLE_LTO=Full `
298307
..\llvm
299308
emmake make clang cling lld gtest_main
300309
}
@@ -335,6 +344,9 @@ jobs:
335344
-DLLVM_BUILD_TOOLS=OFF `
336345
-DLLVM_ENABLE_LIBPFM=OFF `
337346
-DCLANG_BUILD_TOOLS=OFF `
347+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" `
348+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" `
349+
-DLLVM_ENABLE_LTO=Full `
338350
-G Ninja `
339351
..\llvm
340352
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
@@ -519,6 +531,15 @@ jobs:
519531
fi
520532
521533
emmake make -j ${{ env.ncpus }} check-cppinterop
534+
os="${{ matrix.os }}"
535+
if [[ "${os}" != macos* ]] ; then
536+
actual_size=$(stat -c%s "./lib/libclangCppInterOp.so")
537+
max_size=$((46 * 1024 * 1024))
538+
if [[ "$actual_size" -gt "$max_size" ]]; then
539+
echo "Error: libclangCppInterOp.so is larger than 46 MB."
540+
exit 1
541+
fi
542+
fi
522543
cd ./unittests/CppInterOp/
523544
# Fresh install browsers, and run Emscripten tests in them
524545
# This is to match the Emscripten build instructions, where
@@ -673,7 +694,12 @@ jobs:
673694
-DSYSROOT_PATH=$SYSROOT_PATH \
674695
../
675696
fi
676-
emmake make -j ${{ env.ncpus }} check-cppinterop
697+
os="${{ matrix.os }}"
698+
if [[ "${os}" != macos* ]] ; then
699+
EMCC_CORES=1 emmake make -j 1 check-cppinterop
700+
else
701+
EMCC_CORES=2 emmake make -j 2 check-cppinterop
702+
fi
677703
cd ./unittests/CppInterOp/
678704
# Explaination of options for emrun
679705
# --browser (name of browser on path)

Emscripten-build-instructions.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release \
9999
-DLLVM_ENABLE_LIBPFM=OFF \
100100
-DCLANG_BUILD_TOOLS=OFF \
101101
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
102+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" \
103+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" \
104+
-DLLVM_ENABLE_LTO=Full \
102105
../llvm
103106
emmake make libclang -j $(nproc --all)
104107
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)
@@ -130,6 +133,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release `
130133
-DLLVM_ENABLE_LIBPFM=OFF `
131134
-DCLANG_BUILD_TOOLS=OFF `
132135
-G Ninja `
136+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" `
137+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" `
138+
-DLLVM_ENABLE_LTO=Full `
133139
..\llvm
134140
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
135141
```

docs/Emscripten-build-instructions.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ and osx
119119
-DLLVM_ENABLE_LIBPFM=OFF \
120120
-DCLANG_BUILD_TOOLS=OFF \
121121
-DLLVM_NATIVE_TOOL_DIR=$NATIVE_DIR \
122+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" \
123+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" \
124+
-DLLVM_ENABLE_LTO=Full \
122125
../llvm
123126
emmake make libclang -j $(nproc --all)
124127
emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all)
@@ -150,6 +153,9 @@ or executing
150153
-DLLVM_ENABLE_LIBPFM=OFF `
151154
-DCLANG_BUILD_TOOLS=OFF `
152155
-G Ninja `
156+
-DCMAKE_C_FLAGS_RELEASE="-Oz -g0" `
157+
-DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0" `
158+
-DLLVM_ENABLE_LTO=Full `
153159
..\llvm
154160
emmake ninja libclang clangInterpreter clangStaticAnalyzerCore lldWasm
155161

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)