Skip to content

Commit 7f85f18

Browse files
committed
on road to rework examples PCH and cleaning build system a bit, update examples_tests submodule
1 parent 2aa2395 commit 7f85f18

File tree

3 files changed

+50
-168
lines changed

3 files changed

+50
-168
lines changed

cmake/common.cmake

Lines changed: 26 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -16,134 +16,50 @@ include_guard(GLOBAL)
1616

1717
include(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
5222
macro(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-
# TODO: let arek figure out how to redo the PCH
82-
#[===[
83-
string(FIND "${_NBL_PROJECT_DIRECTORY_}" "${NBL_ROOT_PATH}/examples_tests" _NBL_FOUND_)
84-
85-
if(NOT "${_NBL_FOUND_}" STREQUAL "-1") # the call was made for a target defined in examples_tests, request common api PCH
86-
if(NOT TARGET ${NBL_EXECUTABLE_COMMON_API_TARGET})
87-
message(FATAL_ERROR "Internal error, NBL_EXECUTABLE_COMMON_API_TARGET target must be defined to create an example target!")
88-
endif()
89-
90-
add_dependencies(${EXECUTABLE_NAME} ${NBL_EXECUTABLE_COMMON_API_TARGET})
91-
target_link_libraries(${EXECUTABLE_NAME} PUBLIC ${NBL_EXECUTABLE_COMMON_API_TARGET})
92-
target_precompile_headers("${EXECUTABLE_NAME}" REUSE_FROM "${NBL_EXECUTABLE_COMMON_API_TARGET}")
93-
endif()
94-
]===]
95-
endif()
9644

9745
target_include_directories(${EXECUTABLE_NAME}
9846
PUBLIC "${NBL_ROOT_PATH}/examples_tests/common"
99-
PUBLIC "${NBL_ROOT_PATH_BINARY}/include"
100-
PUBLIC ../../include # in macro.. relative to what? TODO: correct
10147
PRIVATE ${_EXTRA_INCLUDES}
10248
)
10349
target_link_libraries(${EXECUTABLE_NAME} PUBLIC Nabla ${_EXTRA_LIBS})
10450

105-
add_compile_options(${_EXTRA_OPTIONS})
106-
107-
if(NBL_SANITIZE_ADDRESS)
108-
if(MSVC)
109-
target_compile_options(${EXECUTABLE_NAME} PUBLIC /fsanitize=address)
110-
else()
111-
target_compile_options(${EXECUTABLE_NAME} PUBLIC -fsanitize=address)
112-
endif()
113-
endif()
114-
115-
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
116-
# add_compile_options("-msse4.2 -mfpmath=sse") ????
117-
add_compile_options(
118-
"$<$<CONFIG:DEBUG>:-fstack-protector-all>"
119-
)
120-
121-
set(COMMON_LINKER_OPTIONS "-msse4.2 -mfpmath=sse -fuse-ld=gold")
122-
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${COMMON_LINKER_OPTIONS}")
123-
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${COMMON_LINKER_OPTIONS} -fstack-protector-strong")
124-
if (NBL_GCC_SANITIZE_ADDRESS)
125-
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address")
126-
endif()
127-
if (NBL_GCC_SANITIZE_THREAD)
128-
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=thread")
129-
endif()
130-
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.1)
131-
add_compile_options(-Wno-error=ignored-attributes)
132-
endif()
133-
endif()
134-
13551
nbl_adjust_flags(TARGET ${EXECUTABLE_NAME} MAP_RELEASE Release MAP_RELWITHDEBINFO RelWithDebInfo MAP_DEBUG Debug)
136-
nbl_adjust_definitions() # macro defined in root CMakeLists
137-
add_definitions(-D_NBL_PCH_IGNORE_PRIVATE_HEADERS)
52+
nbl_adjust_definitions()
13853

139-
set_target_properties(${EXECUTABLE_NAME} PROPERTIES DEBUG_POSTFIX _d)
140-
set_target_properties(${EXECUTABLE_NAME} PROPERTIES RELWITHDEBINFO_POSTFIX _rwdi)
141-
set_target_properties(${EXECUTABLE_NAME}
142-
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
14359
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin"
14460
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR}/bin"
14561
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin"
146-
VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" # for visual studio
62+
VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
14763
)
14864
if(MSVC)
14965
# nothing special
@@ -251,66 +167,28 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
251167
nbl_project_process_test_module()
252168
endmacro()
253169

254-
# TODO this macro needs more love
255170
macro(nbl_create_ext_library_project EXT_NAME LIB_HEADERS LIB_SOURCES LIB_INCLUDES LIB_OPTIONS DEF_OPTIONS)
256171
set(LIB_NAME "NblExt${EXT_NAME}")
257172
project(${LIB_NAME})
258173

259174
add_library(${LIB_NAME} ${LIB_SOURCES})
260-
261-
target_include_directories(${LIB_NAME}
262-
PUBLIC $<TARGET_PROPERTY:Nabla,INCLUDE_DIRECTORIES>
263-
PRIVATE ${LIB_INCLUDES}
264-
)
265175

266-
if(NBL_EMBED_BUILTIN_RESOURCES)
267-
get_target_property(_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
268-
269-
target_include_directories(${LIB_NAME}
270-
PUBLIC ${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_}
271-
)
272-
endif()
273-
274-
add_dependencies(${LIB_NAME} Nabla)
275176
target_link_libraries(${LIB_NAME} PUBLIC Nabla)
276-
target_compile_options(${LIB_NAME} PUBLIC ${LIB_OPTIONS})
277-
target_compile_definitions(${LIB_NAME} PUBLIC ${DEF_OPTIONS})
278-
279-
nbl_handle_dll_definitions(${LIB_NAME} PUBLIC)
280-
nbl_handle_runtime_lib_properties(${LIB_NAME})
281-
282-
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
283-
add_compile_options(
284-
"$<$<CONFIG:DEBUG>:-fstack-protector-all>"
285-
)
286-
287-
set(COMMON_LINKER_OPTIONS "-msse4.2 -mfpmath=sse -fuse-ld=gold")
288-
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${COMMON_LINKER_OPTIONS}")
289-
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${COMMON_LINKER_OPTIONS} -fstack-protector-strong -fsanitize=address")
290-
endif()
177+
target_include_directories(${LIB_NAME} PRIVATE ${LIB_INCLUDES})
291178

292179
nbl_adjust_flags(TARGET ${LIB_NAME} MAP_RELEASE Release MAP_RELWITHDEBINFO RelWithDebInfo MAP_DEBUG Debug)
293-
nbl_adjust_definitions() # macro defined in root CMakeLists
180+
nbl_adjust_definitions()
294181

295-
set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX "")
296-
set_target_properties(${LIB_NAME} PROPERTIES RELWITHDEBINFO_POSTFIX _rwdb)
297-
set_target_properties(${LIB_NAME}
298-
PROPERTIES
299-
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
300187
)
301-
if(MSVC)
302-
set_target_properties(${LIB_NAME}
303-
PROPERTIES
304-
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin"
305-
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin"
306-
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR}/bin"
307-
VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" # seems like has no effect
308-
)
309-
endif()
310188

311189
if(LIB_HEADERS)
312190
nbl_install_file_spec(${LIB_HEADERS} "nbl/ext/${EXT_NAME}")
313-
endif()
191+
endif()
314192

315193
nbl_install_lib_spec(${LIB_NAME} "nbl/ext/${EXT_NAME}")
316194

src/nbl/CMakeLists.txt

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -349,21 +349,18 @@ if(NBL_CPACK_NO_BUILD_DIRECTORY_MODULES)
349349
target_compile_definitions(Nabla PUBLIC NBL_CPACK_NO_BUILD_DIRECTORY_MODULES)
350350
endif()
351351

352-
if(NBL_COMPILER_DYNAMIC_RUNTIME)
353-
set_property(TARGET Nabla PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
354-
else()
355-
set_property(TARGET Nabla PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
356-
endif()
357-
358-
target_compile_definitions(Nabla PRIVATE __NBL_BUILDING_NABLA__)
359-
360-
target_link_options(Nabla INTERFACE # proxy to downstream targets
361-
$<$<CXX_COMPILER_FRONTEND_VARIANT:MSVC>:
362-
$<$<BOOL:${NBL_COMPILER_DYNAMIC_RUNTIME}>:/DELAYLOAD:$<TARGET_FILE_NAME:Nabla>>
363-
/DELAYLOAD:dxcompiler.dll
364-
>
352+
target_compile_definitions(Nabla
353+
PUBLIC _DXC_DLL_="${DXC_DLL}"
354+
PRIVATE __NBL_BUILDING_NABLA__
365355
)
366356

357+
if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MATCHES MSVC)
358+
target_link_options(Nabla
359+
INTERFACE /DELAYLOAD:$<TARGET_FILE_NAME:Nabla>
360+
PRIVATE /DELAYLOAD:dxcompiler.dll
361+
)
362+
endif()
363+
367364
if (ANDROID)
368365
add_library(android_native_app_glue STATIC
369366
${ANDROID_NDK_ROOT_PATH}/sources/android/native_app_glue/android_native_app_glue.c
@@ -378,9 +375,12 @@ if (ANDROID)
378375
)
379376
endif()
380377

378+
set(NBL_ASSEMBLY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/devshgraphicsprogramming.nabla")
381379
if(NOT NBL_STATIC_BUILD)
382-
set(NBL_ASSEMBLY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/devshgraphicsprogramming.nabla" CACHE INTERNAL "" FORCE)
383380
set_target_properties(Nabla PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NBL_ASSEMBLY_DIRECTORY})
381+
target_compile_definitions(Nabla PUBLIC
382+
_NABLA_DLL_NAME_="$<PATH:REMOVE_EXTENSION,$<TARGET_FILE_NAME:Nabla>>";_NABLA_OUTPUT_DIR_="${NBL_ASSEMBLY_DIRECTORY}"
383+
)
384384
endif()
385385

386386
## Set up 3rdparty deps
@@ -590,10 +590,10 @@ endif()
590590

591591
# Include dirs for self
592592
target_include_directories(Nabla PUBLIC
593-
${CMAKE_CURRENT_BINARY_DIR}/include
594-
${NBL_ROOT_PATH}/include
593+
"${CMAKE_CURRENT_BINARY_DIR}/include"
594+
"${NBL_ROOT_PATH}/include"
595595
${COMMON_INCLUDE_DIRS}
596-
${THIRD_PARTY_SOURCE_DIR}
596+
"${THIRD_PARTY_SOURCE_DIR}"
597597
#those also goes as PUBLIC because of examples
598598
"$<$<CONFIG:DEBUG>:${NABLA_CONF_DIR_DEBUG}>"
599599
"$<$<CONFIG:RELEASE>:${NABLA_CONF_DIR_RELEASE}>"
@@ -697,9 +697,13 @@ if (MSVC)
697697
target_compile_options(Nabla PUBLIC /bigobj)
698698
endif()
699699

700-
#precompiled headers
701700
if(NBL_PCH)
702-
target_precompile_headers(Nabla PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pch.h")
701+
target_precompile_headers(Nabla
702+
# private as nothing from source directory should ever leak to downstream targets!
703+
# NOTE: currently our whole public and private interface is broken
704+
# and private headers leak to public includes
705+
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/pch.h"
706+
)
703707
endif()
704708

705709
# extensions

0 commit comments

Comments
 (0)