Skip to content

Commit 1ed9234

Browse files
committed
refactor glue define code with regex generator expressions (and get rid of extra redundant build target + bugs caused by it); save work, now need to add ABS_KEYs to PUBLIC to make smoke pass
1 parent 6553665 commit 1ed9234

File tree

2 files changed

+23
-108
lines changed

2 files changed

+23
-108
lines changed

cmake/common.cmake

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,87 +1072,6 @@ macro(propagate_changed_variables_to_parent_scope)
10721072
endforeach()
10731073
endmacro()
10741074

1075-
macro(glue_source_definitions NBL_TARGET NBL_REFERENCE_RETURN_VARIABLE)
1076-
macro(NBL_INSERT_DEFINITIONS _NBL_DEFINITIONS_)
1077-
string(FIND "${_NBL_DEFINITIONS_}" "NOTFOUND" CHECK)
1078-
if(${CHECK} EQUAL -1)
1079-
list(APPEND TESTEST ${_NBL_DEFINITIONS_})
1080-
endif()
1081-
endmacro()
1082-
1083-
get_directory_property(NBL_DIRECTORY_DEFINITIONS COMPILE_DEFINITIONS)
1084-
1085-
if(DEFINED NBL_DIRECTORY_DEFINITIONS)
1086-
NBL_INSERT_DEFINITIONS("${NBL_DIRECTORY_DEFINITIONS}")
1087-
endif()
1088-
1089-
get_target_property(NBL_COMPILE_DEFS ${NBL_TARGET} COMPILE_DEFINITIONS)
1090-
if(DEFINED NBL_COMPILE_DEFS)
1091-
foreach(def IN LISTS NBL_COMPILE_DEFS)
1092-
NBL_INSERT_DEFINITIONS(${def})
1093-
endforeach()
1094-
endif()
1095-
1096-
foreach(trgt IN LISTS _NBL_3RDPARTY_TARGETS_)
1097-
get_target_property(NBL_COMPILE_DEFS ${trgt} COMPILE_DEFINITIONS)
1098-
1099-
if(DEFINED NBL_COMPILE_DEFS)
1100-
NBL_INSERT_DEFINITIONS(${NBL_COMPILE_DEFS})
1101-
endif()
1102-
endforeach()
1103-
1104-
foreach(def IN LISTS TESTEST)
1105-
string(FIND "${def}" "-D" CHECK)
1106-
if(${CHECK} EQUAL -1)
1107-
list(APPEND ${NBL_REFERENCE_RETURN_VARIABLE} ${def})
1108-
else()
1109-
string(LENGTH "-D" _NBL_D_LENGTH_)
1110-
string(LENGTH ${def} _NBL_DEFINITION_LENGTH_)
1111-
math(EXPR _NBL_DEFINITION_WITHOUT_D_LENGTH_ "${_NBL_DEFINITION_LENGTH_} - ${_NBL_D_LENGTH_}" OUTPUT_FORMAT DECIMAL)
1112-
string(SUBSTRING ${def} ${_NBL_D_LENGTH_} ${_NBL_DEFINITION_WITHOUT_D_LENGTH_} _NBL_DEFINITION_WITHOUT_D_)
1113-
1114-
list(APPEND ${NBL_REFERENCE_RETURN_VARIABLE} ${_NBL_DEFINITION_WITHOUT_D_})
1115-
endif()
1116-
endforeach()
1117-
1118-
list(REMOVE_DUPLICATES ${NBL_REFERENCE_RETURN_VARIABLE})
1119-
1120-
foreach(_NBL_DEF_ IN LISTS ${NBL_REFERENCE_RETURN_VARIABLE})
1121-
string(FIND "${_NBL_DEF_}" "=" _NBL_POSITION_ REVERSE)
1122-
1123-
# put target compile definitions without any value into wrapper file
1124-
if(_NBL_POSITION_ STREQUAL -1)
1125-
if(NOT ${_NBL_DEF_} STREQUAL "__NBL_BUILDING_NABLA__")
1126-
string(APPEND WRAPPER_CODE
1127-
"#ifndef ${_NBL_DEF_}\n"
1128-
"#define ${_NBL_DEF_}\n"
1129-
"#endif // ${_NBL_DEF_}\n\n"
1130-
)
1131-
endif()
1132-
else()
1133-
# put target compile definitions with an assigned value into wrapper file
1134-
string(SUBSTRING "${_NBL_DEF_}" 0 ${_NBL_POSITION_} _NBL_CLEANED_DEF_)
1135-
1136-
string(LENGTH "${_NBL_DEF_}" _NBL_DEF_LENGTH_)
1137-
math(EXPR _NBL_SHIFTED_POSITION_ "${_NBL_POSITION_} + 1" OUTPUT_FORMAT DECIMAL)
1138-
math(EXPR _NBL_DEF_VALUE_LENGTH_ "${_NBL_DEF_LENGTH_} - ${_NBL_SHIFTED_POSITION_}" OUTPUT_FORMAT DECIMAL)
1139-
string(SUBSTRING "${_NBL_DEF_}" ${_NBL_SHIFTED_POSITION_} ${_NBL_DEF_VALUE_LENGTH_} _NBL_DEF_VALUE_)
1140-
1141-
string(APPEND WRAPPER_CODE
1142-
"#ifndef ${_NBL_CLEANED_DEF_}\n"
1143-
"#define ${_NBL_CLEANED_DEF_} ${_NBL_DEF_VALUE_}\n"
1144-
"#endif // ${_NBL_CLEANED_DEF_}\n\n"
1145-
)
1146-
endif()
1147-
endforeach()
1148-
1149-
set(${NBL_REFERENCE_RETURN_VARIABLE} "${WRAPPER_CODE}")
1150-
endmacro()
1151-
1152-
macro(write_source_definitions NBL_FILE NBL_WRAPPER_CODE_TO_WRITE)
1153-
file(WRITE "${NBL_FILE}" "${NBL_WRAPPER_CODE_TO_WRITE}")
1154-
endmacro()
1155-
11561075
function(NBL_GET_ALL_TARGETS NBL_OUTPUT_VAR)
11571076
set(NBL_TARGETS)
11581077
NBL_GET_ALL_TARGETS_RECURSIVE(NBL_TARGETS ${CMAKE_CURRENT_SOURCE_DIR})

src/nbl/CMakeLists.txt

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ endif()
365365

366366
target_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
595596
target_include_directories(Nabla PUBLIC "${THIRD_PARTY_SOURCE_DIR}/volk")
596597
target_link_libraries(Nabla PRIVATE volk)
597598
if(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
599600
endif()
600601
# CUDA
601602
if (NBL_COMPILE_WITH_CUDA)
@@ -637,12 +638,10 @@ target_include_directories(Nabla PUBLIC "${NBL_DEVICE_GEN_INCLUDE_DIR}")
637638
if(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
692706
target_link_libraries(Nabla PUBLIC gtml)
@@ -725,25 +739,7 @@ start_tracking_variables_for_propagation_to_parent()
725739
add_subdirectory(ext)
726740
propagate_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-
743742
nbl_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()
747743
nbl_install_file_spec("${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResources.h" "nbl/builtin")
748744
nbl_install_config_header(BuildConfigOptions.h)
749745

0 commit comments

Comments
 (0)