forked from AcademySoftwareFoundation/MaterialX
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
129 lines (107 loc) · 4.36 KB
/
CMakeLists.txt
File metadata and controls
129 lines (107 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
set(CORE ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXCore/)
set(FORMAT ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXFormat/)
set(GENSHADER ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenShader/)
set(GENESSL ${CMAKE_CURRENT_SOURCE_DIR}/JsMaterialXGenEssl/)
set(SOURCE_FOLDER ${CMAKE_SOURCE_DIR}/source)
set(CORE_DEPS ${CORE}JsTypes.cpp
${CORE}JsMaterial.cpp
${CORE}JsUnit.cpp
${CORE}JsExceptions.cpp
${CORE}JsUtil.cpp
${CORE}JsElement.cpp
${CORE}JsInterface.cpp
${CORE}JsNode.cpp
${CORE}JsDefinition.cpp
${CORE}JsDocument.cpp
${CORE}JsLook.cpp
${CORE}JsProperty.cpp
${CORE}JsGeom.cpp
${CORE}JsVariant.cpp
${CORE}JsValue.cpp
${CORE}JsTraversal.cpp)
set(FORMAT_DEPS
${FORMAT}JsUtil.cpp
${FORMAT}JsXmlIo.cpp
${FORMAT}JsEnviron.cpp)
set(GENSHADER_DEPS ${GENSHADER}JsGenContext.cpp
${GENSHADER}JsGenOptions.cpp
${GENSHADER}JsHwShaderGenerator.cpp
${GENSHADER}JsShader.cpp
${GENSHADER}JsShaderGenerator.cpp
${GENSHADER}JsShaderNode.cpp
${GENSHADER}JsShaderStage.cpp
${GENSHADER}JsTypeDesc.cpp
${GENSHADER}JsUtil.cpp)
set(GENESSL_DEPS ${GENESSL}JsEsslShaderGenerator.cpp)
# Linker flags
set(JS_LINK_FLAGS_CORE "")
if (EXTERNAL_LINK_FLAGS)
string(APPEND JS_LINK_FLAGS_CORE "${EXTERNAL_LINK_FLAGS} ")
endif()
string(APPEND JS_LINK_FLAGS_CORE " -I${SOURCE_FOLDER} \
-s WASM=1 \
-s DISABLE_EXCEPTION_CATCHING=0 \
-s MODULARIZE=1 \
-s USE_ES6_IMPORT_META=0 \
-s EXPORT_NAME='MaterialX' \
-s MEMORY_GROWTH_LINEAR_STEP=32MB \
-s ALLOW_MEMORY_GROWTH=1 \
-s FORCE_FILESYSTEM=1 ")
# Add the post javascript files. The one in the root folder of this project needs to come first.
string(APPEND JS_LINK_FLAGS_CORE "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/post.js \
--post-js ${FORMAT}post.js ")
# Compiler flags
set(JS_COMPILE_FLAGS "")
if (EXTERNAL_COMPILE_FLAGS)
string(APPEND JS_COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS} ")
endif()
if (CMAKE_BUILD_TYPE MATCHES Debug)
message("JS: Building Debug")
string(APPEND JS_LINK_FLAGS_CORE "--bind ")
else()
message("JS: Building Release")
string(APPEND JS_LINK_FLAGS_CORE "-flto -Os --bind ")
string(APPEND JS_COMPILE_FLAGS "-flto -Os ")
endif()
set(JS_LINK_FLAGS_GENSHADER "${JS_LINK_FLAGS_CORE} --preload-file ${CMAKE_SOURCE_DIR}/libraries@libraries ")
add_executable(JsMaterialXCore MaterialXLib.cpp
${CORE_DEPS}
${FORMAT_DEPS})
add_executable(JsMaterialXGenShader MaterialXLib.cpp
${CORE_DEPS}
${FORMAT_DEPS}
${GENSHADER_DEPS}
${GENESSL_DEPS})
set_target_properties(JsMaterialXCore
PROPERTIES
OUTPUT_NAME JsMaterialXCore
COMPILE_FLAGS "${JS_COMPILE_FLAGS}"
LINK_FLAGS "${JS_LINK_FLAGS_CORE}"
SOVERSION "${MATERIALX_MAJOR_VERSION}")
set_target_properties(JsMaterialXGenShader
PROPERTIES
OUTPUT_NAME JsMaterialXGenShader
COMPILE_FLAGS "${JS_COMPILE_FLAGS}"
LINK_FLAGS "${JS_LINK_FLAGS_GENSHADER}"
SOVERSION "${MATERIALX_MAJOR_VERSION}")
target_link_libraries(JsMaterialXCore
PUBLIC MaterialXCore
PUBLIC MaterialXFormat
PRIVATE ${CMAKE_DL_LIBS})
target_link_libraries(JsMaterialXGenShader
PUBLIC MaterialXCore
PUBLIC MaterialXFormat
PUBLIC MaterialXGenShader
PUBLIC MaterialXGenGlsl
PRIVATE ${CMAKE_DL_LIBS})
# Install the JavaScript output
install(TARGETS JsMaterialXCore DESTINATION "JavaScript/MaterialX")
install(TARGETS JsMaterialXGenShader DESTINATION "JavaScript/MaterialX")
# Copy the wasm output
install(FILES ${CMAKE_BINARY_DIR}/bin/JsMaterialXCore.wasm DESTINATION JavaScript/MaterialX/)
install(FILES ${CMAKE_BINARY_DIR}/bin/JsMaterialXGenShader.wasm ${CMAKE_BINARY_DIR}/bin/JsMaterialXGenShader.data DESTINATION JavaScript/MaterialX/)
# Copy the JavaScript files with the version appended to them.
install(FILES ${CMAKE_BINARY_DIR}/bin/JsMaterialXCore.js DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ RENAME JsMaterialXCore-${MATERIALX_LIBRARY_VERSION}.js)
install(FILES ${CMAKE_INSTALL_PREFIX}/JavaScript/MaterialX/JsMaterialXCore.js DESTINATION JavaScript/MaterialX/ RENAME JsMaterialXCore-${MATERIALX_LIBRARY_VERSION}.js)
install(FILES ${CMAKE_BINARY_DIR}/bin/JsMaterialXGenShader.js DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ RENAME JsMaterialXGenShader-${MATERIALX_LIBRARY_VERSION}.js)
install(FILES ${CMAKE_INSTALL_PREFIX}/JavaScript/MaterialX/JsMaterialXGenShader.js DESTINATION JavaScript/MaterialX/ RENAME JsMaterialXGenShader-${MATERIALX_LIBRARY_VERSION}.js)