-
-
Notifications
You must be signed in to change notification settings - Fork 64
/
CMakeLists.txt
385 lines (320 loc) · 17.4 KB
/
CMakeLists.txt
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
cmake_minimum_required (VERSION 3.6)
project (Imogen)
# Add project's cmake modules to path
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/.)
message(${CMAKE_MODULE_PATH})
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "Configuration types" FORCE)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(BGFX_BUILD_EXAMPLES OFF)
if(NOT EMSCRIPTEN)
set(BGFX_BUILD_TOOLS ON)
elseif()
set(BGFX_BUILD_TOOLS OFF)
set(BGFX_CUSTOM_TARGETS OFF)
endif() # emscripten
file(GLOB SRC_FILES
${CMAKE_SOURCE_DIR}/src/*.h
${CMAKE_SOURCE_DIR}/src/*.cpp
)
file(GLOB EXT_FILES
${CMAKE_SOURCE_DIR}/ext/*.h
${CMAKE_SOURCE_DIR}/ext/*.cpp
${CMAKE_SOURCE_DIR}/ext/Nvidia-SBVH/*.cpp
)
file(GLOB NODE_FILES
${CMAKE_SOURCE_DIR}/src/Nodes/*.h
${CMAKE_SOURCE_DIR}/src/Nodes/*.cpp
)
if (NOT EMSCRIPTEN)
file(GLOB EXT_FILES_DESKTOP
${CMAKE_SOURCE_DIR}/ext/gl3w/GL/*.c
${CMAKE_SOURCE_DIR}/ext/enkiTS-C-11/src/*.cpp
${CMAKE_SOURCE_DIR}/ext/NativeFileDialog/src/nfd_common.c
${CMAKE_SOURCE_DIR}/ext/ffmpegCodec/*.cpp
${CMAKE_SOURCE_DIR}/ext/GLSL_Pathtracer/*.cpp
)
set(SDL2_LIBRARIES "SDL2" "SDL2main")
endif()
source_group("Nodes" FILES ${NODE_FILES})
if(WIN32)
set(NFD_FILES ${CMAKE_SOURCE_DIR}/ext/NativeFileDialog/src/nfd_win.cpp)
elseif (EMSCRIPTEN)
else()
set(NFD_FILES ${CMAKE_SOURCE_DIR}/ext/NativeFileDialog/src/nfd_gtk.c
)
# Use the package PkgConfig to detect GTK+ headers/library files
FIND_PACKAGE(PkgConfig REQUIRED)
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
#find_package(FFmpeg REQUIRED)
find_library(AVCODEC_LIBRARY avcodec)
find_library(AVFORMAT_LIBRARY avformat)
find_library(AVUTIL_LIBRARY avutil)
find_library(AVDEVICE_LIBRARY avdevice)
find_library(SWSCALE_LIBRARY swscale)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
# Setup CMake to use GTK+, tell the compiler where to look for headers
# and to the linker where to look for libraries
INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS})
# Add other flags to the compiler
ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER})
ADD_DEFINITIONS(-DBGFX_CONFIG_RENDERER_OPENGLES=31)
set(PLATFORM_LIBS dl pthread ${GTK3_LIBRARIES})
endif()
set(IMOGEN_BGFX_DIR ${CMAKE_SOURCE_DIR}/ext/bgfx)
if(WIN32)
set(FFMPEG_LIBRARIES avcodec.lib avdevice.lib avfilter.lib avformat.lib avutil.lib swscale.lib swresample.lib postproc.lib)
set(FFMPEG_LIBRARY_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/ffmpeg/lib)
set(FFMPEG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/ffmpeg/include)
set(PYTHON37_LIBRARIES python3.lib python37.lib)
set(PYTHON37_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/python37/include)
set(PYTHON37_LIBRARY_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/python37/libs)
set(SDL2_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/SDL2/include)
set(SDL2_LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/SDL2/lib/x64)
elseif (EMSCRIPTEN)
else()
PKG_CHECK_MODULES(PYTHON37 REQUIRED python3)
PKG_CHECK_MODULES(SDL2_LIBRARIES REQUIRED sdl2)
PKG_CHECK_MODULES(FFMPEG REQUIRED libavcodec libavdevice libavfilter libavformat libavutil libswscale libswresample libpostproc)
#${AVCODEC_LIBRARY} ${AVUTIL_LIBRARY} ${AVDEVICE_LIBRARY} ${AVFORMAT_LIBRARY} ${SWSCALE_LIBRARY} ${PYTHON_LIBRARIES}
endif()
set(BGFX_INCLUDE_DIRS "${IMOGEN_BGFX_DIR}/bgfx/include" "${IMOGEN_BGFX_DIR}/bimg/include" "${IMOGEN_BGFX_DIR}/bx/include")
if(WIN32)
set(BGFX_INCLUDE_DIRS "${BGFX_INCLUDE_DIRS}" "${IMOGEN_BGFX_DIR}/bx/include/compat/msvc")
endif()
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/src/Nodes
${CMAKE_CURRENT_SOURCE_DIR}/ext
${SDL2_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/ext/gl3w
${CMAKE_CURRENT_SOURCE_DIR}/ext/NativeFileDialog/src/include/
${CMAKE_CURRENT_SOURCE_DIR}/ext/enkiTS-C-11/src/
${FFMPEG_INCLUDE_DIRS}
${PYTHON37_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/ext/glm/
${CMAKE_CURRENT_SOURCE_DIR}/ext/Nvidia-SBVH
${CMAKE_CURRENT_SOURCE_DIR}/ext/GLSL_Pathtracer/
${CMAKE_CURRENT_SOURCE_DIR}/ext/ffmpegCodec/
${CMAKE_CURRENT_BINARY_DIR}
${BGFX_INCLUDE_DIRS}
)
link_directories(
${SDL2_LIBDIR}
${FFMPEG_LIBRARY_DIRS}
${PYTHON37_LIBRARY_DIRS}
bx bimg bgfx
)
find_package(OpenGL)
#######################################################################################
set (USE_MSVC_RUNTIME_LIBRARY_DLL true)
IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
#We statically link to reduce dependancies
FOREACH(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RETAIL)
IF(${flag_var} MATCHES "/MD")
STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
ENDIF(${flag_var} MATCHES "/MD")
IF(${flag_var} MATCHES "/MDd")
STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
ENDIF(${flag_var} MATCHES "/MDd")
ENDFOREACH(flag_var)
ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
#######################################################################################
foreach(f ${SRC_FILES})
# Get the path of the file relative to ${DIRECTORY},
# then alter it (not compulsory)
file(RELATIVE_PATH SRCGR ${CMAKE_SOURCE_DIR} ${f})
set(SRCGR "Sources/${SRCGR}")
# Extract the folder, ie remove the filename part
string(REGEX REPLACE "(.*)(/[^/]*)$" "\\1" SRCGR ${SRCGR})
# Source_group expects \\ (double antislash), not / (slash)
string(REPLACE / \\ SRCGR ${SRCGR})
source_group("${SRCGR}" FILES ${f})
endforeach()
set(ENABLE_HIDECONSOLE_BUILD TRUE CACHE BOOL "TRUE to hide console for Windows sys")
if(WINDOWS)
set(GUI_TYPE WIN32)
elseif (EMSCRIPTEN)
elseif(APPLE)
set(GUI_TYPE MACOSX_BUNDLE)
endif()
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
endif()
SET(LINK_OPTIONS " ")
SET(EXE_NAME "Imogen")
ADD_EXECUTABLE(${EXE_NAME} ${SRC_FILES} ${EXT_FILES} ${NFD_FILES} ${EXT_FILES_DESKTOP} ${NODE_FILES})
if (EMSCRIPTEN)
add_definitions(-DEMSCRIPTEN)
add_definitions(-D_X86_)
set(EMS_OPTS "-s USE_SDL=2 -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s ASSERTIONS=1 --bind -O2 --no-heap-copy")
add_definitions(${EMS_OPTS})
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
set(EMS_PRELOAD " --preload-file DefaultLibrary.imogen --preload-file imgui.ini --preload-file Nodes --preload-file Stock")
set(EMS_LINK "${EMS_OPTS} ${EMS_PRELOAD}")
set_target_properties(${EXE_NAME} PROPERTIES LINK_FLAGS ${EMS_LINK})
#set_target_properties(${EXE_NAME} PROPERTIES COMPILE_FLAGS ${EMS_OPTS})
add_custom_command(TARGET ${EXE_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/index.html ${CMAKE_CURRENT_BINARY_DIR}/index.html
)
# copy files and directories because packer doesn't know where to place then
add_custom_command(TARGET ${EXE_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/bin/DefaultLibrary.imogen ${CMAKE_CURRENT_BINARY_DIR}/
)
add_custom_command(TARGET ${EXE_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/bin/imgui.ini ${CMAKE_CURRENT_BINARY_DIR}/
)
add_custom_command(TARGET ${EXE_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Nodes ${CMAKE_CURRENT_BINARY_DIR}/Nodes
)
add_custom_command(TARGET ${EXE_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Stock ${CMAKE_CURRENT_BINARY_DIR}/Stock
)
endif()
add_subdirectory(${IMOGEN_BGFX_DIR}/)
set_property(TARGET astc PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET astc-codec PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET edtaa3 PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET etc1 PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET etc2 PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET iqa PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET nvtt PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET pvrtc PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET squish PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx/3rdparty)
set_property(TARGET bgfx PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx)
set_property(TARGET bimg PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx)
set_property(TARGET bx PROPERTY FOLDER ${IMOGEN_BGFX_DIR}/bgfx)
###########################################
if(NOT EMSCRIPTEN)
file(GLOB SHADER_FILES ${CMAKE_SOURCE_DIR}/src/shaders/*.vs
${CMAKE_SOURCE_DIR}/src/shaders/*.fs
${CMAKE_SOURCE_DIR}/src/shaders/*.cs
)
set(shaders_inc_file "${CMAKE_CURRENT_BINARY_DIR}/EmbeddedShaders.h")
FILE(WRITE ${shaders_inc_file} "// generated by CMake\n")
set(shaders_cpp_file "${CMAKE_CURRENT_BINARY_DIR}/EmbeddedShaders.cpp")
FILE(WRITE ${shaders_cpp_file} "// generated by CMake\n")
FILE(WRITE ${shaders_cpp_file} "#include \"EmbeddedShaders.h\"\nstatic const bgfx::EmbeddedShader s_embeddedShaders[] =\n{\n")
foreach(SHADER ${SHADER_FILES})
get_filename_component(FILE_NAME ${SHADER} NAME_WE)
get_filename_component(FILE_NAME_EXT ${SHADER} EXT)
if(${FILE_NAME_EXT} STREQUAL ".vs")
set(SHADER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_dx11.h")
add_custom_command(
OUTPUT ${SHADER_OUTPUT}
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o ${SHADER_OUTPUT} --platform windows -p vs_5_0 -O 3 --type vertex --bin2c ${FILE_NAME}_vs_dx11
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_dx9.h" --platform windows -p vs_3_0 -O 3 --type vertex --bin2c ${FILE_NAME}_vs_dx9
#COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_esl.h" --platform android --type vertex --bin2c ${FILE_NAME}_vs_esl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_glsl.h" --platform asm.js -p 120 --type vertex --bin2c ${FILE_NAME}_vs_glsl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_SOURCE_DIR}/bin/Nodes/Shaders/${FILE_NAME}_vs.bin" --platform asm.js -p 150 --type vertex
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_mtl.h" --platform osx -p metal --type vertex --bin2c ${FILE_NAME}_vs_mtl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_vs_spv.h" --platform linux -p spirv --type vertex --bin2c ${FILE_NAME}_vs_spv
DEPENDS ${SHADER})
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_dx11.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_dx9.h\"\n")
#FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_esl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_glsl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_mtl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_vs_spv.h\"\n")
list(APPEND SHADER_OUTPUT_FILES ${SHADER_OUTPUT})
FILE(APPEND ${shaders_cpp_file} "BGFX_EMBEDDED_SHADER(${FILE_NAME}_vs),\n")
elseif(${FILE_NAME_EXT} STREQUAL ".fs")
set(SHADER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_dx11.h")
add_custom_command(
OUTPUT ${SHADER_OUTPUT}
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o ${SHADER_OUTPUT} --platform windows -p ps_5_0 -O 3 --type fragment --bin2c ${FILE_NAME}_fs_dx11
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_dx9.h" --platform windows -p ps_5_0 -O 3 --type fragment --bin2c ${FILE_NAME}_fs_dx9
#COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_esl.h" --platform android --type fragment --bin2c ${FILE_NAME}_fs_esl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_glsl.h" --platform asm.js -p 120 --type fragment --bin2c ${FILE_NAME}_fs_glsl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_SOURCE_DIR}/bin/Nodes/Shaders/${FILE_NAME}_fs.bin" --platform asm.js -p 150 --type fragment
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_mtl.h" --platform osx -p metal --type fragment --bin2c ${FILE_NAME}_fs_mtl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_fs_spv.h" --platform linux -p spirv --type fragment --bin2c ${FILE_NAME}_fs_spv
DEPENDS ${SHADER})
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_dx11.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_dx9.h\"\n")
#FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_esl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_glsl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_mtl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_fs_spv.h\"\n")
list(APPEND SHADER_OUTPUT_FILES ${SHADER_OUTPUT})
FILE(APPEND ${shaders_cpp_file} "BGFX_EMBEDDED_SHADER(${FILE_NAME}_fs),\n")
elseif(${FILE_NAME_EXT} STREQUAL ".cs")
set(SHADER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_dx11.h")
add_custom_command(
OUTPUT ${SHADER_OUTPUT}
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o ${SHADER_OUTPUT} --platform windows -p cs_5_0 -O 1 --type compute --bin2c ${FILE_NAME}_cs_dx11
#COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_dx9.h" --platform windows -p ps_5_0 -O 3 --type compute --bin2c ${FILE_NAME}_cs_dx9
#COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_esl.h" --platform android --type compute --bin2c ${FILE_NAME}_cs_esl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_glsl.h" --platform linux -p 430 --type compute --bin2c ${FILE_NAME}_cs_glsl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_mtl.h" --platform osx -p metal --type compute --bin2c ${FILE_NAME}_cs_mtl
COMMAND "$<TARGET_FILE:shaderc>" -f ${SHADER} -o "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}_cs_spv.h" --platform linux -p spirv --type compute --bin2c ${FILE_NAME}_cs_spv
DEPENDS ${SHADER})
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_cs_dx11.h\"\n")
FILE(APPEND ${shaders_inc_file} "static const uint8_t ${FILE_NAME}_cs_dx9[1] = {0};\n")
#FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_cs_esl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_cs_glsl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_cs_mtl.h\"\n")
FILE(APPEND ${shaders_inc_file} "#include \"${FILE_NAME}_cs_spv.h\"\n")
list(APPEND SHADER_OUTPUT_FILES ${SHADER_OUTPUT})
FILE(APPEND ${shaders_cpp_file} "BGFX_EMBEDDED_SHADER(${FILE_NAME}_cs),\n")
endif()
endforeach(SHADER)
FILE(APPEND ${shaders_cpp_file} "BGFX_EMBEDDED_SHADER_END()\n};\n")
add_custom_target(Shaders DEPENDS ${SHADER_OUTPUT_FILES})
add_dependencies(${EXE_NAME} Shaders)
endif() # EMSCRIPTEN
#########################################
TARGET_LINK_LIBRARIES(${EXE_NAME} ${PYTHON37_LIBRARIES} ${SDL2_LIBRARIES} ${OPENGL_LIBRARIES} ${PLATFORM_LIBS} ${FFMPEG_LIBRARIES} bx bimg bgfx)
if(APPLE)
find_library(CORE_FOUNDATION CoreFoundation)
target_link_libraries(${EXE_NAME} ${CORE_FOUNDATION})
endif()
#--------------------------------------------------------------------
# preproc
#--------------------------------------------------------------------
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D__STDC_FORMAT_MACROS)
add_definitions(-DBX_CONFIG_ENABLE_MSVC_LEVEL4_WARNINGS=1)
add_definitions(-D__STDC_LIMIT_MACROS)
add_definitions(-D__STDC_CONSTANT_MACROS)
add_definitions(-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS)
add_definitions(-DDUK_USE_CPP_EXCEPTIONS)
if(MSVC)
add_definitions(-DWIN32)
add_definitions(-D_WIN32)
add_definitions(-DNOMINMAX)
endif()
add_definitions(-DUSE_DL_PREFIX)
#--------------------------------------------------------------------
# output dirs
#--------------------------------------------------------------------
set_target_properties(${EXE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/bin )
set_target_properties(${EXE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/bin )
set_target_properties(${EXE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_SOURCE_DIR}/bin )
set_target_properties(${EXE_NAME} PROPERTIES DEBUG_POSTFIX "_d")
set_target_properties(${EXE_NAME} PROPERTIES RELWITHDEBINFO_POSTFIX "RelWithDebInfo")
set_target_properties(${EXE_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
#--------------------------------------------------------------------
# Hide the console window in visual studio projects
#--------------------------------------------------------------------
if(ENABLE_HIDECONSOLE_BUILD)
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()
endif()
if(WINDOWS)
set_target_properties(${EXE_NAME} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:WINDOWS")
set_target_properties(${EXE_NAME} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
endif()
if(ENABLE_HIDECONSOLE_BUILD)
MESSAGE(STATUS "Console is hidden")
else()
MESSAGE(STATUS "Console is visible")
endif()