diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml index 98cc10ef3..21aab2710 100644 --- a/.github/workflows/emscripten.yml +++ b/.github/workflows/emscripten.yml @@ -175,7 +175,6 @@ jobs: -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 }}" \ @@ -194,6 +193,9 @@ jobs: -DLLVM_ENABLE_LIBPFM=OFF \ -DCLANG_BUILD_TOOLS=OFF \ -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 clang cling lld gtest_main else @@ -206,7 +208,6 @@ jobs: cd build emcmake cmake -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 }}" \ @@ -225,6 +226,9 @@ jobs: -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 @@ -284,7 +288,6 @@ jobs: -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 }}" ` @@ -302,6 +305,9 @@ jobs: -DLLVM_BUILD_TOOLS=OFF ` -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` + -DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" ` + -DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" ` + -DLLVM_ENABLE_LTO=Full ` -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` ..\llvm emmake make clang cling lld gtest_main @@ -325,7 +331,6 @@ jobs: echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:" emcmake cmake -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 }}" ` @@ -342,6 +347,9 @@ jobs: -DLLVM_BUILD_TOOLS=OFF ` -DLLVM_ENABLE_LIBPFM=OFF ` -DCLANG_BUILD_TOOLS=OFF ` + -DCMAKE_C_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" ` + -DCMAKE_CXX_FLAGS_RELEASE="-Oz -g0 -DNDEBUG" ` + -DLLVM_ENABLE_LTO=Full ` -G Ninja ` -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` ..\llvm @@ -527,6 +535,15 @@ jobs: fi emmake make -j ${{ env.ncpus }} check-cppinterop + os="${{ matrix.os }}" + if [[ "${os}" != macos* ]] ; then + actual_size=$(stat -c%s "./lib/libclangCppInterOp.so") + max_size=$((40 * 1024 * 1024)) + if [[ "$actual_size" -gt "$max_size" ]]; then + echo "Error: libclangCppInterOp.so is larger than 40 MB." + exit 1 + fi + fi cd ./unittests/CppInterOp/ # Fresh install browsers, and run Emscripten tests in them # This is to match the Emscripten build instructions, where @@ -689,7 +706,12 @@ jobs: -DSYSROOT_PATH=$SYSROOT_PATH \ ../ fi - emmake make -j ${{ env.ncpus }} check-cppinterop + os="${{ matrix.os }}" + if [[ "${os}" != macos* ]] ; then + EMCC_CORES=1 emmake make -j 1 check-cppinterop + else + EMCC_CORES=2 emmake make -j 2 check-cppinterop + fi cd ./unittests/CppInterOp/ # Explaination of options for emrun # --browser (name of browser on path) diff --git a/Emscripten-build-instructions.md b/Emscripten-build-instructions.md index 673859374..0854fed2d 100644 --- a/Emscripten-build-instructions.md +++ b/Emscripten-build-instructions.md @@ -80,7 +80,6 @@ mkdir build cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release \ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \ - -DLLVM_ENABLE_ASSERTIONS=ON \ -DLLVM_TARGETS_TO_BUILD="WebAssembly" \ -DLLVM_ENABLE_LIBEDIT=OFF \ -DLLVM_ENABLE_PROJECTS="clang;lld" \ @@ -98,6 +97,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_LIBPFM=OFF \ -DCLANG_BUILD_TOOLS=OFF \ -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 make libclang -j $(nproc --all) emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all) @@ -118,7 +120,6 @@ mkdir build cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release ` -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten ` - -DLLVM_ENABLE_ASSERTIONS=ON ` -DLLVM_TARGETS_TO_BUILD="WebAssembly" ` -DLLVM_ENABLE_LIBEDIT=OFF ` -DLLVM_ENABLE_PROJECTS="clang;lld" ` @@ -137,6 +138,9 @@ emcmake cmake -DCMAKE_BUILD_TYPE=Release ` -DCLANG_BUILD_TOOLS=OFF ` -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` -G Ninja ` + -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 ``` diff --git a/docs/Emscripten-build-instructions.rst b/docs/Emscripten-build-instructions.rst index e336a6399..89e9be0d2 100644 --- a/docs/Emscripten-build-instructions.rst +++ b/docs/Emscripten-build-instructions.rst @@ -100,7 +100,6 @@ and osx cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release \ -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten \ - -DLLVM_ENABLE_ASSERTIONS=ON \ -DLLVM_TARGETS_TO_BUILD="WebAssembly" \ -DLLVM_ENABLE_LIBEDIT=OFF \ -DLLVM_ENABLE_PROJECTS="clang;lld" \ @@ -118,6 +117,9 @@ and osx -DLLVM_ENABLE_LIBPFM=OFF \ -DCLANG_BUILD_TOOLS=OFF \ -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 make libclang -j $(nproc --all) emmake make clangInterpreter clangStaticAnalyzerCore -j $(nproc --all) @@ -138,7 +140,6 @@ or executing cd build emcmake cmake -DCMAKE_BUILD_TYPE=Release ` -DLLVM_HOST_TRIPLE=wasm32-unknown-emscripten ` - -DLLVM_ENABLE_ASSERTIONS=ON ` -DLLVM_TARGETS_TO_BUILD="WebAssembly" ` -DLLVM_ENABLE_LIBEDIT=OFF ` -DLLVM_ENABLE_PROJECTS="clang;lld" ` @@ -157,6 +158,9 @@ or executing -DCLANG_BUILD_TOOLS=OFF ` -DLLVM_NATIVE_TOOL_DIR="$env:NATIVE_DIR" ` -G Ninja ` + -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 diff --git a/lib/CppInterOp/CMakeLists.txt b/lib/CppInterOp/CMakeLists.txt index 142d4d5d9..5a4fa9f96 100644 --- a/lib/CppInterOp/CMakeLists.txt +++ b/lib/CppInterOp/CMakeLists.txt @@ -127,10 +127,16 @@ if(EMSCRIPTEN) set_target_properties(clangCppInterOp PROPERTIES NO_SONAME 1 ) + target_compile_options(clangCppInterOp + PRIVATE "SHELL: -Oz" + PRIVATE "SHELL: -flto" + ) target_link_options(clangCppInterOp PRIVATE "SHELL: -s WASM_BIGINT" PRIVATE "SHELL: -s SIDE_MODULE=1" PRIVATE "SHELL: ${SYMBOLS_LIST}" + PRIVATE "SHELL: -Oz" + PRIVATE "SHELL: -flto" ) else() target_link_options(clangCppInterOp diff --git a/lib/CppInterOp/exports.ld b/lib/CppInterOp/exports.ld index 49b7b0d83..e22490f2a 100644 --- a/lib/CppInterOp/exports.ld +++ b/lib/CppInterOp/exports.ld @@ -50,4 +50,5 @@ -Wl,--export=_ZNK5clang4Type14isFloatingTypeEv -Wl,--export=_ZNK5clang12FunctionDecl12getNumParamsEv -Wl,--export=__clang_Interpreter_SetValueNoAlloc --Wl,--export=__clang_Interpreter_SetValueWithAlloc \ No newline at end of file +-Wl,--export=__clang_Interpreter_SetValueWithAlloc +-Wl,--export=_ZN4llvm15SmallVectorBaseIjE8set_sizeEm \ No newline at end of file