@@ -16,131 +16,50 @@ include_guard(GLOBAL)
16
16
17
17
include (ProcessorCount )
18
18
19
- function (nbl_handle_dll_definitions _TARGET_ _SCOPE_ )
20
- if (NOT TARGET Nabla )
21
- message (FATAL_ERROR "Internal error, Nabla target must be defined!" )
22
- endif ()
23
-
24
- if (NOT TARGET ${_TARGET_} )
25
- message (FATAL_ERROR "Internal error, requsted \" ${_TARGET_} \" is not defined!" )
26
- endif ()
27
-
28
- if (NBL_COMPILER_DYNAMIC_RUNTIME )
29
- set (_NABLA_OUTPUT_DIR_ "${NBL_ROOT_PATH_BINARY} /src/nbl/$<CONFIG>/devshgraphicsprogramming.nabla" )
30
-
31
- target_compile_definitions (${_TARGET_} ${_SCOPE_}
32
- _NABLA_DLL_NAME_= "$<PATH:REMOVE_EXTENSION,$<TARGET_FILE_NAME:Nabla>>" ;_NABLA_OUTPUT_DIR_= "${_NABLA_OUTPUT_DIR_} "
33
- )
34
- endif ()
35
-
36
- target_compile_definitions (${_TARGET_} ${_SCOPE_}
37
- _DXC_DLL_= "${DXC_DLL} "
38
- )
39
- endfunction ()
40
-
41
- function (nbl_handle_runtime_lib_properties _TARGET_ )
42
- if (NOT TARGET ${_TARGET_} )
43
- message (FATAL_ERROR "Internal error, requsted \" ${_TARGET_} \" is not defined!" )
44
- endif ()
45
-
46
- set_target_properties (${_TARGET_} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<BOOL:${NBL_COMPILER_DYNAMIC_RUNTIME} >:DLL>" )
47
- endfunction ()
48
-
49
19
# Macro creating project for an executable
50
20
# Project and target get its name from directory when this macro gets executed (truncating number in the beginning of the name and making all lower case)
51
21
# Created because of common cmake code for examples and tools
52
22
macro (nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDES _EXTRA_LIBS )
53
23
get_filename_component (_NBL_PROJECT_DIRECTORY_ "${CMAKE_CURRENT_SOURCE_DIR} " ABSOLUTE )
54
- include ("scripts/nbl/projectTargetName" ) # sets EXECUTABLE_NAME
55
-
56
- if (MSVC )
57
- set_property (DIRECTORY PROPERTY VS_STARTUP_PROJECT ${EXECUTABLE_NAME} )
58
- endif ()
24
+ get_filename_component (EXECUTABLE_NAME ${_NBL_PROJECT_DIRECTORY_} NAME )
25
+ string (REGEX REPLACE "^[0-9]+\. " "" EXECUTABLE_NAME ${EXECUTABLE_NAME} )
26
+ string (TOLOWER ${EXECUTABLE_NAME} EXECUTABLE_NAME )
27
+ string (MAKE_C_IDENTIFIER ${EXECUTABLE_NAME} EXECUTABLE_NAME )
59
28
60
29
project (${EXECUTABLE_NAME} )
30
+ set_directory_properties (PROPERTIES VS_STARTUP_PROJECT ${EXECUTABLE_NAME} )
31
+
32
+ set (NBL_EXECUTABLE_SOURCES
33
+ main.cpp
34
+ ${_EXTRA_SOURCES}
35
+ )
61
36
62
37
if (ANDROID )
63
- add_library (${EXECUTABLE_NAME} SHARED main.cpp ${_EXTRA_SOURCES } )
38
+ add_library (${EXECUTABLE_NAME} SHARED ${NBL_EXECUTABLE_SOURCES } )
64
39
else ()
65
- set (NBL_EXECUTABLE_SOURCES
66
- main.cpp
67
- ${_EXTRA_SOURCES}
68
- )
69
-
70
40
add_executable (${EXECUTABLE_NAME} ${NBL_EXECUTABLE_SOURCES} )
71
- nbl_handle_runtime_lib_properties (${EXECUTABLE_NAME} )
72
41
endif ()
73
-
74
- nbl_handle_dll_definitions (${EXECUTABLE_NAME} PUBLIC )
75
42
76
43
target_compile_definitions (${EXECUTABLE_NAME} PUBLIC _NBL_APP_NAME_= "${EXECUTABLE_NAME} " )
77
-
78
- if ("${EXECUTABLE_NAME} " STREQUAL commonpch )
79
- add_dependencies (${EXECUTABLE_NAME} Nabla )
80
- else ()
81
- string (FIND "${_NBL_PROJECT_DIRECTORY_} " "${NBL_ROOT_PATH} /examples_tests" _NBL_FOUND_ )
82
-
83
- if (NOT "${_NBL_FOUND_} " STREQUAL "-1" ) # the call was made for a target defined in examples_tests, request common api PCH
84
- if (NOT TARGET ${NBL_EXECUTABLE_COMMON_API_TARGET} )
85
- message (FATAL_ERROR "Internal error, NBL_EXECUTABLE_COMMON_API_TARGET target must be defined to create an example target!" )
86
- endif ()
87
-
88
- add_dependencies (${EXECUTABLE_NAME} ${NBL_EXECUTABLE_COMMON_API_TARGET} )
89
- target_link_libraries (${EXECUTABLE_NAME} PUBLIC ${NBL_EXECUTABLE_COMMON_API_TARGET} )
90
- target_precompile_headers ("${EXECUTABLE_NAME} " REUSE_FROM "${NBL_EXECUTABLE_COMMON_API_TARGET} " )
91
- endif ()
92
- endif ()
93
44
94
45
target_include_directories (${EXECUTABLE_NAME}
95
46
PUBLIC "${NBL_ROOT_PATH} /examples_tests/common"
96
- PUBLIC "${NBL_ROOT_PATH_BINARY} /include"
97
- PUBLIC ../../include # in macro.. relative to what? TODO: correct
98
47
PRIVATE ${_EXTRA_INCLUDES}
99
48
)
100
49
target_link_libraries (${EXECUTABLE_NAME} PUBLIC Nabla ${_EXTRA_LIBS} )
101
50
102
- add_compile_options (${_EXTRA_OPTIONS} )
103
-
104
- if (NBL_SANITIZE_ADDRESS )
105
- if (MSVC )
106
- target_compile_options (${EXECUTABLE_NAME} PUBLIC /fsanitize=address )
107
- else ()
108
- target_compile_options (${EXECUTABLE_NAME} PUBLIC -fsanitize=address )
109
- endif ()
110
- endif ()
111
-
112
- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU" )
113
- # add_compile_options("-msse4.2 -mfpmath=sse") ????
114
- add_compile_options (
115
- "$<$<CONFIG:DEBUG>:-fstack-protector-all>"
116
- )
117
-
118
- set (COMMON_LINKER_OPTIONS "-msse4.2 -mfpmath=sse -fuse-ld=gold" )
119
- set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${COMMON_LINKER_OPTIONS} " )
120
- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${COMMON_LINKER_OPTIONS} -fstack-protector-strong" )
121
- if (NBL_GCC_SANITIZE_ADDRESS )
122
- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address" )
123
- endif ()
124
- if (NBL_GCC_SANITIZE_THREAD )
125
- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=thread" )
126
- endif ()
127
- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.1 )
128
- add_compile_options (-Wno-error=ignored-attributes )
129
- endif ()
130
- endif ()
131
-
132
51
nbl_adjust_flags (TARGET ${EXECUTABLE_NAME} MAP_RELEASE Release MAP_RELWITHDEBINFO RelWithDebInfo MAP_DEBUG Debug )
133
- nbl_adjust_definitions () # macro defined in root CMakeLists
134
- add_definitions (-D_NBL_PCH_IGNORE_PRIVATE_HEADERS )
52
+ nbl_adjust_definitions ()
135
53
136
- set_target_properties (${EXECUTABLE_NAME} PROPERTIES DEBUG_POSTFIX _d )
137
- set_target_properties (${EXECUTABLE_NAME} PROPERTIES RELWITHDEBINFO_POSTFIX _rwdi )
138
- set_target_properties (${EXECUTABLE_NAME}
139
- PROPERTIES
54
+ add_compile_options (${_EXTRA_OPTIONS} )
55
+ add_definitions (-D_NBL_PCH_IGNORE_PRIVATE_HEADERS ) # TODO: wipe when we finally make Nabla PCH work as its supposed to
56
+ set_target_properties (${EXECUTABLE_NAME} PROPERTIES
57
+ DEBUG_POSTFIX _d
58
+ RELWITHDEBINFO_POSTFIX _rwdi
140
59
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR} /bin"
141
60
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR} /bin"
142
61
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR} /bin"
143
- VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} /bin" # for visual studio
62
+ VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} /bin"
144
63
)
145
64
if (MSVC )
146
65
# nothing special
@@ -248,66 +167,28 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
248
167
nbl_project_process_test_module ()
249
168
endmacro ()
250
169
251
- # TODO this macro needs more love
252
170
macro (nbl_create_ext_library_project EXT_NAME LIB_HEADERS LIB_SOURCES LIB_INCLUDES LIB_OPTIONS DEF_OPTIONS )
253
171
set (LIB_NAME "NblExt${EXT_NAME} " )
254
172
project (${LIB_NAME} )
255
173
256
174
add_library (${LIB_NAME} ${LIB_SOURCES} )
257
-
258
- target_include_directories (${LIB_NAME}
259
- PUBLIC $< TARGET_PROPERTY:Nabla,INCLUDE_DIRECTORIES>
260
- PRIVATE ${LIB_INCLUDES}
261
- )
262
-
263
- if (NBL_EMBED_BUILTIN_RESOURCES )
264
- get_target_property (_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY )
265
-
266
- target_include_directories (${LIB_NAME}
267
- PUBLIC ${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_}
268
- )
269
- endif ()
270
175
271
- add_dependencies (${LIB_NAME} Nabla )
272
176
target_link_libraries (${LIB_NAME} PUBLIC Nabla )
273
- target_compile_options (${LIB_NAME} PUBLIC ${LIB_OPTIONS} )
274
- target_compile_definitions (${LIB_NAME} PUBLIC ${DEF_OPTIONS} )
275
-
276
- nbl_handle_dll_definitions (${LIB_NAME} PUBLIC )
277
- nbl_handle_runtime_lib_properties (${LIB_NAME} )
278
-
279
- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU" )
280
- add_compile_options (
281
- "$<$<CONFIG:DEBUG>:-fstack-protector-all>"
282
- )
283
-
284
- set (COMMON_LINKER_OPTIONS "-msse4.2 -mfpmath=sse -fuse-ld=gold" )
285
- set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${COMMON_LINKER_OPTIONS} " )
286
- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${COMMON_LINKER_OPTIONS} -fstack-protector-strong -fsanitize=address" )
287
- endif ()
177
+ target_include_directories (${LIB_NAME} PRIVATE ${LIB_INCLUDES} )
288
178
289
179
nbl_adjust_flags (TARGET ${LIB_NAME} MAP_RELEASE Release MAP_RELWITHDEBINFO RelWithDebInfo MAP_DEBUG Debug )
290
- nbl_adjust_definitions () # macro defined in root CMakeLists
180
+ nbl_adjust_definitions ()
291
181
292
- set_target_properties (${LIB_NAME} PROPERTIES DEBUG_POSTFIX "" )
293
- set_target_properties (${LIB_NAME} PROPERTIES RELWITHDEBINFO_POSTFIX _rwdb )
294
- set_target_properties (${LIB_NAME}
295
- PROPERTIES
296
- RUNTIME_OUTPUT_DIRECTORY " ${PROJECT_SOURCE_DIR} /bin"
182
+ target_compile_options (${LIB_NAME} PUBLIC ${LIB_OPTIONS} )
183
+ target_compile_definitions (${LIB_NAME} PUBLIC ${DEF_OPTIONS} )
184
+ set_target_properties (${LIB_NAME} PROPERTIES
185
+ DEBUG_POSTFIX _d
186
+ RELWITHDEBINFO_POSTFIX _rwdi
297
187
)
298
- if (MSVC )
299
- set_target_properties (${LIB_NAME}
300
- PROPERTIES
301
- RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR} /bin"
302
- RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR} /bin"
303
- RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR} /bin"
304
- VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR} /bin" # seems like has no effect
305
- )
306
- endif ()
307
188
308
189
if (LIB_HEADERS )
309
190
nbl_install_file_spec (${LIB_HEADERS} "nbl/ext/${EXT_NAME} " )
310
- endif ()
191
+ endif ()
311
192
312
193
nbl_install_lib_spec (${LIB_NAME} "nbl/ext/${EXT_NAME} " )
313
194
@@ -1334,4 +1215,17 @@ macro(NBL_DOCKER)
1334
1215
RESULT_VARIABLE DOCKER_EXIT_CODE
1335
1216
OUTPUT_VARIABLE DOCKER_OUTPUT_VAR
1336
1217
)
1337
- endmacro ()
1218
+ endmacro ()
1219
+
1220
+ function (NBL_ADJUST_FOLDERS NS )
1221
+ NBL_GET_ALL_TARGETS (TARGETS )
1222
+ foreach (T IN LISTS TARGETS )
1223
+ get_target_property (NBL_FOLDER ${T} FOLDER )
1224
+
1225
+ if (NBL_FOLDER )
1226
+ set_target_properties (${T} PROPERTIES FOLDER "nabla/${NS} /${NBL_FOLDER} " )
1227
+ else ()
1228
+ set_target_properties (${T} PROPERTIES FOLDER "nabla/${NS} " )
1229
+ endif ()
1230
+ endforeach ()
1231
+ endfunction ()
0 commit comments