@@ -365,6 +365,7 @@ endif()
365365
366366target_compile_definitions (Nabla
367367 PUBLIC _DXC_DLL_="${DXC_DLL} "
368+ PUBLIC _DXC_DLL_NAME_="$<PATH:REMOVE_EXTENSION,${DXC_DLL_NAME} >"
368369 PRIVATE __NBL_BUILDING_NABLA__
369370)
370371
@@ -595,7 +596,7 @@ target_include_directories(Nabla PUBLIC "${THIRD_PARTY_SOURCE_DIR}/Vulkan-Header
595596target_include_directories (Nabla PUBLIC "${THIRD_PARTY_SOURCE_DIR} /volk" )
596597target_link_libraries (Nabla PRIVATE volk)
597598if (WIN32 )
598- target_compile_definitions (Nabla PRIVATE VK_USE_PLATFORM_WIN32_KHR)
599+ target_compile_definitions (Nabla PUBLIC VK_USE_PLATFORM_WIN32_KHR) # volk is part of public interface headers in Nabla
599600endif ()
600601# CUDA
601602if (NBL_COMPILE_WITH_CUDA)
@@ -637,12 +638,10 @@ target_include_directories(Nabla PUBLIC "${NBL_DEVICE_GEN_INCLUDE_DIR}")
637638if (NBL_EMBED_BUILTIN_RESOURCES)
638639 add_subdirectory (builtin EXCLUDE_FROM_ALL )
639640
640- function (NBL_HOOK_INTERNAL_BUILTIN_RESOURCES NBL_TARGETS)
641- get_target_property (_NABLA_INCLUDE_DIRECTORIES_ Nabla INCLUDE_DIRECTORIES )
642-
641+ function (NBL_HOOK_INTERNAL_BUILTIN_RESOURCES NBL_TARGETS)
643642 foreach (NBL_TARGET IN LISTS NBL_TARGETS)
644643 get_target_property (_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ ${NBL_TARGET} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
645- target_include_directories (${NBL_TARGET} PUBLIC "${_NABLA_INCLUDE_DIRECTORIES_} " )
644+ target_include_directories (${NBL_TARGET} PUBLIC "$<TARGET_PROPERTY:Nabla,INCLUDE_DIRECTORIES> " )
646645 target_include_directories (Nabla PUBLIC "${_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_} " )
647646 endforeach ()
648647
@@ -683,10 +682,25 @@ target_compile_definitions(Nabla
683682 PUBLIC _NABLA_INSTALL_DIR_="${CMAKE_INSTALL_PREFIX} "
684683)
685684
686- # generate Nabla definitions to a header
687- glue_source_definitions(Nabla _NBL_SOURCE_DEFINITIONS_)
688- set (_NBL_DEFINE_FILE_WRAPPER_ ${CMAKE_CURRENT_BINARY_DIR} /include /define.h)
689- write_source_definitions("${_NBL_DEFINE_FILE_WRAPPER_} " "${_NBL_SOURCE_DEFINITIONS_} " )
685+ set (DEFINE_H "${CMAKE_CURRENT_BINARY_DIR} /include/$<CONFIG>/define.h" )
686+ target_include_directories (Nabla BEFORE PUBLIC "$<PATH:GET_PARENT_PATH,${DEFINE_H} >" )
687+
688+ # get consumer definitions
689+ get_directory_property (DEFS COMPILE_DEFINITIONS )
690+ list (APPEND DEFS $<TARGET_PROPERTY:INTERFACE_COMPILE_DEFINITIONS >)
691+
692+ # and generate define.h header aligned for install interface
693+ file (GENERATE OUTPUT ${DEFINE_H}
694+ # note: could be ^([^=]*)=?(.*)$ with 2 regex match groups, first for define name second for optional value defaulted to empty string
695+ # but CMake seems to have a bug https://gitlab.kitware.com/cmake/cmake/-/issues/16899 hence we do 2 sandwitched transforms
696+ CONTENT "$<JOIN:$<LIST:TRANSFORM,$<LIST:TRANSFORM,${DEFS} ,REPLACE,^([^=]+)(=.*|)$,#ifndef \\ 1\\ n#define \\ 1\\ 2\\ n#endif // \\ 1\\ n>,REPLACE,(#define [^=\\ n]*)=,\\ 1 >,\n >"
697+ TARGET Nabla
698+ )
699+
700+ # TODO: we should not expose definitions which contain any absolute paths to install headers,
701+ # eg. _NABLA_INSTALL_DIR_, _NABLA_OUTPUT_DIR_, _DXC_DLL_, imo those can be compiled into binary
702+ # for dev purposes, but shall use BUILD_INTERFACE generator expression to keep trash out of install interface
703+ nbl_install_file("${DEFINE_H} " )
690704
691705# git version tracking
692706target_link_libraries (Nabla PUBLIC gtml)
@@ -725,25 +739,7 @@ start_tracking_variables_for_propagation_to_parent()
725739add_subdirectory (ext )
726740propagate_changed_variables_to_parent_scope()
727741
728- if (NOT NBL_STATIC_BUILD)
729- add_custom_command (OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG>/generated/define.h"
730- COMMAND "${CMAKE_COMMAND} " -DNBL_ROOT_PATH:PATH =${NBL_ROOT_PATH} -DNBL_WRAPPER_FILE:FILEPATH =${_NBL_DEFINE_FILE_WRAPPER_} -DNBL_GEN_DIRECTORY:PATH =${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG>/generated -D_NABLA_DLL_NAME_:STRING =$<PATH :REMOVE_EXTENSION,$<TARGET_FILE_NAME:Nabla>> -D_DXC_DLL_NAME_:STRING =${DXC_DLL_NAME} -D_NABLA_INSTALL_DIR_:PATH ="${CMAKE_INSTALL_PREFIX} " -P ${NBL_ROOT_PATH} /cmake/scripts/nbl/nablaDefines.cmake
731- COMMENT "Launching defines.h generation script!"
732- VERBATIM
733- )
734-
735- add_custom_target (generate_nabla_defines ALL
736- DEPENDS "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG>/generated/define.h"
737- VERBATIM
738- )
739-
740- add_dependencies (Nabla generate_nabla_defines)
741- endif ()
742-
743742nbl_install_headers("${NABLA_HEADERS_PUBLIC} " )
744- if (NOT NBL_STATIC_BUILD)
745- nbl_install_file("${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG>/generated/define.h" )
746- endif ()
747743nbl_install_file_spec("${NBL_ROOT_PATH_BINARY} /include/nbl/builtin/builtinResources.h" "nbl/builtin" )
748744nbl_install_config_header(BuildConfigOptions.h)
749745
0 commit comments