Mercurial > hg > orthanc-stone
comparison OrthancStone/SharedLibrary/WebAssembly/CMakeLists.txt @ 1549:a48ae10857b1
packaging of the WebAssembly module
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 13 Aug 2020 15:56:01 +0200 |
parents | |
children | 012ab2c1f23b |
comparison
equal
deleted
inserted
replaced
1548:65eccce95882 | 1549:a48ae10857b1 |
---|---|
1 cmake_minimum_required(VERSION 2.8.3) | |
2 | |
3 project(OrthancStoneModule) | |
4 | |
5 set(ORTHANC_STONE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/../../../wasm-binaries/OrthancStoneModule" CACHE PATH "Where to put the WebAssembly binaries") | |
6 | |
7 | |
8 # Ask for the generation of a side module | |
9 set(WASM_FLAGS "-s SIDE_MODULE=1 -s EXPORT_ALL=1") # Must be before "Compiler.cmake" | |
10 | |
11 | |
12 # Configuration of the Emscripten compiler for WebAssembly target | |
13 # --------------------------------------------------------------- | |
14 | |
15 set(USE_WASM ON CACHE BOOL "") | |
16 | |
17 set(EMSCRIPTEN_SET_LLVM_WASM_BACKEND ON CACHE BOOL "") | |
18 | |
19 set(WASM_FLAGS "${WASM_FLAGS} -s WASM=1 -s FETCH=1") | |
20 if (CMAKE_BUILD_TYPE STREQUAL "Debug") | |
21 set(WASM_FLAGS "${WASM_FLAGS} -s SAFE_HEAP=1") | |
22 endif() | |
23 | |
24 set(WASM_LINKER_FLAGS "${WASM_LINKER_FLAGS} -s ASSERTIONS=1 -s DISABLE_EXCEPTION_CATCHING=0") | |
25 set(WASM_LINKER_FLAGS "${WASM_LINKER_FLAGS} -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1") | |
26 add_definitions( | |
27 -DDISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1 | |
28 ) | |
29 | |
30 | |
31 # Stone of Orthanc configuration | |
32 # --------------------------------------------------------------- | |
33 | |
34 include(${CMAKE_SOURCE_DIR}/../../Resources/CMake/OrthancStoneParameters.cmake) | |
35 | |
36 SET(ENABLE_DCMTK ON) | |
37 SET(ENABLE_DCMTK_NETWORKING OFF) | |
38 SET(ENABLE_DCMTK_TRANSCODING OFF) | |
39 SET(ENABLE_GOOGLE_TEST OFF) | |
40 SET(ENABLE_LOCALE ON) # Necessary for text rendering | |
41 SET(ENABLE_WASM ON) | |
42 SET(ORTHANC_SANDBOXED ON) | |
43 | |
44 include(${CMAKE_SOURCE_DIR}/../../Resources/CMake/OrthancStoneConfiguration.cmake) | |
45 | |
46 | |
47 | |
48 | |
49 ################################################################################ | |
50 | |
51 # The source files that register a callback cannot be part of a side | |
52 # module, and must be compiled in the main module. The following | |
53 # command can be used to identify such files: | |
54 # $ grep -l -r emscripten_ ../../Sources/ | |
55 | |
56 set(SOURCES_WITH_EMSCRIPTEN_CALLBACKS | |
57 ${ORTHANC_STONE_ROOT}/Sources/Oracle/WebAssemblyOracle.cpp | |
58 ${ORTHANC_STONE_ROOT}/Sources/Viewport/WebAssemblyViewport.cpp | |
59 ) | |
60 | |
61 list(REMOVE_ITEM ORTHANC_STONE_SOURCES | |
62 ${SOURCES_WITH_EMSCRIPTEN_CALLBACKS} | |
63 ) | |
64 | |
65 configure_file( | |
66 ${CMAKE_SOURCE_DIR}/../OrthancStone.h.in | |
67 ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-stone/OrthancStone.h | |
68 ) | |
69 | |
70 configure_file( | |
71 ${ORTHANC_FRAMEWORK_ROOT}/../SharedLibrary/OrthancFramework.h.in | |
72 ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-framework/OrthancFramework.h | |
73 ) | |
74 | |
75 file( | |
76 COPY ${CMAKE_SOURCE_DIR}/../../Sources/ | |
77 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-stone | |
78 NO_SOURCE_PERMISSIONS | |
79 FILES_MATCHING | |
80 PATTERN "*.h" | |
81 PATTERN OrthancStone.h EXCLUDE | |
82 PATTERN "Deprecated*" EXCLUDE | |
83 ) | |
84 | |
85 file( | |
86 COPY ${ORTHANC_FRAMEWORK_ROOT}/ | |
87 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-framework | |
88 NO_SOURCE_PERMISSIONS | |
89 FILES_MATCHING | |
90 PATTERN "*.h" | |
91 PATTERN OrthancFramework.h EXCLUDE | |
92 ) | |
93 | |
94 add_executable(OrthancStoneModule | |
95 ${ORTHANC_STONE_SOURCES} | |
96 ${AUTOGENERATED_SOURCES} | |
97 ${CAIRO_SOURCES} | |
98 ${PIXMAN_SOURCES} | |
99 ${FREETYPE_SOURCES} | |
100 ) | |
101 | |
102 set_target_properties(OrthancStoneModule | |
103 PROPERTIES | |
104 COMPILE_FLAGS "${WASM_FLAGS}" | |
105 LINK_FLAGS "${WASM_LINKER_FLAGS}" | |
106 ) | |
107 | |
108 # CMake does not natively handle SIDE_MODULE, and believes that | |
109 # Emscripten produces a ".js" file (whereas it creates only the | |
110 # ".wasm"). Create a dummy ".js" for target to work. | |
111 add_custom_command( | |
112 TARGET OrthancStoneModule POST_BUILD | |
113 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/OrthancStoneModule.js | |
114 ) | |
115 | |
116 file( | |
117 COPY ${BOOST_SOURCES_DIR}/boost/ | |
118 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Include/boost/ | |
119 NO_SOURCE_PERMISSIONS | |
120 FILES_MATCHING | |
121 PATTERN "*.h" | |
122 PATTERN "*.hpp" | |
123 PATTERN "*.ipp" | |
124 ) | |
125 | |
126 file( | |
127 COPY ${JSONCPP_SOURCES_DIR}/include/json/ | |
128 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Include/json/ | |
129 NO_SOURCE_PERMISSIONS | |
130 FILES_MATCHING | |
131 PATTERN "*.h" | |
132 ) | |
133 | |
134 set(DCMTK_MODULES | |
135 dcmdata | |
136 config | |
137 ofstd | |
138 oflog | |
139 ) | |
140 | |
141 foreach (module IN LISTS DCMTK_MODULES) | |
142 file( | |
143 COPY ${DCMTK_SOURCES_DIR}/ofstd/include/dcmtk/${module}/ | |
144 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Include/dcmtk/${module}/ | |
145 NO_SOURCE_PERMISSIONS | |
146 FILES_MATCHING | |
147 PATTERN "*.h" | |
148 ) | |
149 endforeach() | |
150 | |
151 | |
152 install( | |
153 TARGETS OrthancStoneModule | |
154 DESTINATION ${ORTHANC_STONE_INSTALL_PREFIX}/lib | |
155 ) | |
156 | |
157 install(FILES | |
158 ${CMAKE_CURRENT_BINARY_DIR}/OrthancStoneModule.wasm | |
159 DESTINATION ${ORTHANC_STONE_INSTALL_PREFIX}/lib | |
160 ) | |
161 | |
162 install( | |
163 DIRECTORY | |
164 ${CMAKE_CURRENT_BINARY_DIR}/Include/boost | |
165 ${CMAKE_CURRENT_BINARY_DIR}/Include/dcmtk | |
166 ${CMAKE_CURRENT_BINARY_DIR}/Include/json | |
167 ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-framework | |
168 ${CMAKE_CURRENT_BINARY_DIR}/Include/orthanc-stone | |
169 DESTINATION ${ORTHANC_STONE_INSTALL_PREFIX}/include/ | |
170 ) | |
171 | |
172 install(FILES | |
173 ${SOURCES_WITH_EMSCRIPTEN_CALLBACKS} | |
174 DESTINATION ${ORTHANC_STONE_INSTALL_PREFIX}/src/orthanc-stone | |
175 ) |