|
1 | | -CMAKE_MINIMUM_REQUIRED(VERSION 3.9.2) |
| 1 | +cmake_minimum_required(VERSION 3.9.2) |
2 | 2 |
|
3 | | -PROJECT(cpp) |
| 3 | +set(REPO_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 4 | +set(VCPKG_FILES_DIR "${CMAKE_BINARY_DIR}" CACHE STRING "Folder for vcpkg download, build and installed files") |
| 5 | +set(CMAKE_TOOLCHAIN_FILE ${REPO_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake) |
| 6 | +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${REPO_DIR}/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake) |
| 7 | +set(VCPKG_ROOT ${REPO_DIR}/vcpkg) |
| 8 | +set(VCPKG_OVERLAY_PORTS ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg-overlays) |
| 9 | +set(VCPKG_VERBOSE OFF) |
| 10 | +set(VCPKG_TARGET_TRIPLET "wasm32-emscripten") |
| 11 | +file(REMOVE ${REPO_DIR}/vcpkg/vcpkg) |
4 | 12 |
|
5 | | -SET(CMAKE_INSTALL_PREFIX "..") |
6 | | -SET(VCPKG_INCLUDE_DIR ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include) |
| 13 | +project(cpp) |
| 14 | + |
| 15 | +option(ENABLE_SANITIZERS "Enable Clang's sanitizer options" OFF) |
| 16 | + |
| 17 | +set(CMAKE_INSTALL_PREFIX "..") |
| 18 | +set(VCPKG_INCLUDE_DIR ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include) |
7 | 19 |
|
8 | 20 | # See: https://github.com/emscripten-core/emscripten/blob/main/src/settings.js |
9 | | -SET(EM_FLAGS |
10 | | - "-s ASSERTIONS=0" |
11 | | - "-s INVOKE_RUN=0" |
12 | | - "-s ALLOW_MEMORY_GROWTH=1" |
13 | | - "-s WASM=1" |
14 | | - "-s ENVIRONMENT=web" |
15 | | - "-s FILESYSTEM=0" |
16 | | - # "-s MINIMAL_RUNTIME=1" |
17 | | - "-s MODULARIZE=1" |
18 | | - "-s EXPORT_ES6=1" |
19 | | - "-s IGNORE_CLOSURE_COMPILER_ERRORS=0" |
20 | | - "-s USE_ES6_IMPORT_META=0" |
21 | | - # "-s WASM_BIGINT=1" |
22 | | - "-s STANDALONE_WASM=0" |
23 | | - "-s BINARYEN_ASYNC_COMPILATION=1" |
24 | | - # "-s DYNAMIC_EXECUTION=0" |
| 21 | +set(EM_CPP_FLAGS "") |
| 22 | + |
| 23 | +set(EM_LINK_FLAGS |
| 24 | + "-sASSERTIONS=0" |
| 25 | + "-sINVOKE_RUN=0" |
| 26 | + "-sALLOW_MEMORY_GROWTH=1" |
| 27 | + "-sWASM=1" |
| 28 | + "-sENVIRONMENT=webview" |
| 29 | + "-sFILESYSTEM=0" |
| 30 | + # "-sMINIMAL_RUNTIME=1" |
| 31 | + "-sMODULARIZE=1" |
| 32 | + "-sEXPORT_ES6=1" |
| 33 | + "-sIGNORE_CLOSURE_COMPILER_ERRORS=0" |
| 34 | + # "-sWASM_BIGINT=1" |
| 35 | + "-sSTANDALONE_WASM=0" |
| 36 | + "-sBINARYEN_ASYNC_COMPILATION=1" |
| 37 | + # "-sDYNAMIC_EXECUTION=0" |
25 | 38 | "--pre-js ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/pre.js" |
26 | 39 | "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/post.js" |
27 | 40 | ) |
28 | 41 |
|
29 | | -IF (CMAKE_BUILD_TYPE STREQUAL "Debug") |
30 | | - SET(EM_FLAGS |
31 | | - ${EM_FLAGS} |
| 42 | + |
| 43 | +if (CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 44 | + set(EM_LINK_FLAGS |
| 45 | + ${EM_LINK_FLAGS} |
| 46 | + "-sUSE_ES6_IMPORT_META=1" |
32 | 47 | "-gsource-map" |
33 | | - "--source-map-base ${CMAKE_CURRENT_SOURCE_DIR}" |
| 48 | + "--source-map-base ./" # Debugging c++ only works in browser with "Experimental DWARF support turned on" |
| 49 | + ) |
| 50 | + |
| 51 | + if (ENABLE_SANITIZERS) |
| 52 | + set(EM_CPP_FLAGS |
| 53 | + ${EM_CPP_FLAGS} |
| 54 | + "-fsanitize=address" |
| 55 | + ) |
| 56 | + |
| 57 | + set(EM_LINK_FLAGS |
| 58 | + ${EM_LINK_FLAGS} |
| 59 | + "-fsanitize=address" |
| 60 | + "-sENVIRONMENT=web,node" |
| 61 | + ) |
| 62 | + endif () |
| 63 | +else () |
| 64 | + set(EM_LINK_FLAGS |
| 65 | + ${EM_LINK_FLAGS} |
| 66 | + "-sUSE_ES6_IMPORT_META=0" |
34 | 67 | ) |
35 | | -ENDIF() |
| 68 | +endif () |
36 | 69 |
|
37 | | -SET(EMSDK_DIR "${CMAKE_SOURCE_DIR}/emsdk") |
38 | | -SET(EXPAT_DIR "${CMAKE_SOURCE_DIR}/src-expat/expat") |
39 | | -SET(GRAPHVIZ_DIR "${CMAKE_SOURCE_DIR}/src-graphviz") |
| 70 | +set(EMSDK_DIR "${CMAKE_SOURCE_DIR}/emsdk") |
| 71 | +set(EXPAT_DIR "${CMAKE_SOURCE_DIR}/src-expat/expat") |
| 72 | +set(GRAPHVIZ_DIR "${CMAKE_SOURCE_DIR}/src-graphviz") |
40 | 73 |
|
41 | 74 | set(CMAKE_CXX_STANDARD 20) |
42 | 75 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
43 | 76 | set(CMAKE_CXX_EXTENSIONS OFF) |
44 | 77 |
|
45 | | -ADD_SUBDIRECTORY(cpp) |
| 78 | +set(PACK_MODE "") |
| 79 | +if (CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 80 | + set(PACK_MODE "-d") |
| 81 | +endif () |
| 82 | + |
| 83 | +function(packWasm targetID) |
| 84 | + add_custom_target(sfx-${targetID} ALL |
| 85 | + COMMAND node ./utils/sfx-wasm.js ${PACK_MODE} ${CMAKE_CURRENT_BINARY_DIR}/${targetID}.wasm > ${REPO_DIR}/lib-esm/${targetID}.wasm.js |
| 86 | + WORKING_DIRECTORY ${REPO_DIR} |
| 87 | + COMMENT "SFX Wasm ${targetID}" |
| 88 | + ) |
| 89 | + |
| 90 | + add_dependencies(sfx-${targetID} ${targetID} base91lib zstdlib) |
| 91 | +endfunction () |
| 92 | + |
| 93 | +add_subdirectory(cpp) |
0 commit comments