@@ -16,131 +16,50 @@ include_guard(GLOBAL)
1616
1717include (ProcessorCount)
1818
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-
4919# Macro creating project for an executable
5020# 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)
5121# Created because of common cmake code for examples and tools
5222macro (nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDES _EXTRA_LIBS)
5323 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)
5928
6029 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+ )
6136
6237 if (ANDROID)
63- add_library (${EXECUTABLE_NAME} SHARED main.cpp ${_EXTRA_SOURCES } )
38+ add_library (${EXECUTABLE_NAME} SHARED ${NBL_EXECUTABLE_SOURCES } )
6439 else ()
65- set (NBL_EXECUTABLE_SOURCES
66- main.cpp
67- ${_EXTRA_SOURCES}
68- )
69-
7040 add_executable (${EXECUTABLE_NAME} ${NBL_EXECUTABLE_SOURCES} )
71- nbl_handle_runtime_lib_properties(${EXECUTABLE_NAME} )
7241 endif ()
73-
74- nbl_handle_dll_definitions(${EXECUTABLE_NAME} PUBLIC )
7542
7643 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 ()
9344
9445 target_include_directories (${EXECUTABLE_NAME}
9546 PUBLIC "${NBL_ROOT_PATH} /examples_tests/common"
96- PUBLIC "${NBL_ROOT_PATH_BINARY} /include"
97- PUBLIC ../../include # in macro.. relative to what? TODO: correct
9847 PRIVATE ${_EXTRA_INCLUDES}
9948 )
10049 target_link_libraries (${EXECUTABLE_NAME} PUBLIC Nabla ${_EXTRA_LIBS} )
10150
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-
13251 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()
13553
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
14059 RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR} /bin"
14160 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR} /bin"
14261 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"
14463 )
14564 if (MSVC )
14665 # nothing special
@@ -248,66 +167,28 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
248167 nbl_project_process_test_module()
249168endmacro ()
250169
251- # TODO this macro needs more love
252170macro (nbl_create_ext_library_project EXT_NAME LIB_HEADERS LIB_SOURCES LIB_INCLUDES LIB_OPTIONS DEF_OPTIONS)
253171 set (LIB_NAME "NblExt${EXT_NAME} " )
254172 project (${LIB_NAME} )
255173
256174 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 ()
270175
271- add_dependencies (${LIB_NAME} Nabla)
272176 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} )
288178
289179 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()
291181
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
297187 )
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 ()
307188
308189 if (LIB_HEADERS)
309190 nbl_install_file_spec(${LIB_HEADERS} "nbl/ext/${EXT_NAME} " )
310- endif ()
191+ endif ()
311192
312193 nbl_install_lib_spec(${LIB_NAME} "nbl/ext/${EXT_NAME} " )
313194
@@ -1334,4 +1215,17 @@ macro(NBL_DOCKER)
13341215 RESULT_VARIABLE DOCKER_EXIT_CODE
13351216 OUTPUT_VARIABLE DOCKER_OUTPUT_VAR
13361217 )
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