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 )