@@ -308,14 +308,26 @@ if(MSVC)
308308 list (APPEND NABLA_SRCS_COMMON "${PROJECT_SOURCE_DIR} /tools/debug/VisualStudio/DynamicArrayVisualizer.natvis" )
309309endif ()
310310
311- set (COMMON_INCLUDE_DIRS
311+ get_target_property (JPEG_STATIC_BINARY_DIR jpeg-static BINARY_DIR)
312+ get_target_property (PNG_STATIC_BINARY_DIR png_static BINARY_DIR)
313+
314+ set (PUBLIC_INCLUDE_DIRS
315+ ${NBL_ROOT_PATH} /include
316+ ${CMAKE_CURRENT_BINARY_DIR} /include
317+ ${THIRD_PARTY_SOURCE_DIR}
312318 ${THIRD_PARTY_SOURCE_DIR} /imath/src
313319 ${THIRD_PARTY_SOURCE_DIR} /gtl/include
314320 ${THIRD_PARTY_SOURCE_DIR} /glm
315- ${THIRD_PARTY_SOURCE_DIR} /renderdoc # for renderdoc api header
316- ${CMAKE_BINARY_DIR} /3rdparty/zlib #for dynamically generated zconf.h
317- $<TARGET_PROPERTY:png_static,BINARY_DIR> #for dynamically generated pnglibconf.h
318- $<TARGET_PROPERTY:jpeg-static ,BINARY_DIR> #for dynamically generated jconfig.h
321+ ${THIRD_PARTY_SOURCE_DIR} /renderdoc # for renderdoc api header
322+ ${CMAKE_BINARY_DIR} /3rdparty/zlib # for dynamically generated zconf.h
323+ ${JPEG_STATIC_BINARY_DIR} # for dynamically generated pnglibconf.h
324+ ${PNG_STATIC_BINARY_DIR} # for dynamically generated jconfig.h
325+
326+ # -> TODO:
327+ "$<$<CONFIG:DEBUG>:${NABLA_CONF_DIR_DEBUG} >"
328+ "$<$<CONFIG:RELEASE>:${NABLA_CONF_DIR_RELEASE} >"
329+ "$<$<CONFIG:RELWITHDEBINFO>:${NABLA_CONF_DIR_RELWITHDEBINFO} >"
330+ # <-
319331)
320332
321333# just gather all the header files and later put them into project so it's easy to search for things using IDE
@@ -333,6 +345,9 @@ set(NBL_LIBRARY_CREATION_SOURCES
333345 $<TARGET_OBJECTS:spirv_cross>
334346)
335347
348+ set (CMAKE_INCLUDE_CURRENT_DIR OFF )
349+ set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE OFF )
350+
336351if (NBL_STATIC_BUILD)
337352 add_library (Nabla STATIC
338353 ${NBL_LIBRARY_CREATION_SOURCES}
@@ -386,9 +401,7 @@ if (ANDROID)
386401 android
387402 log
388403 )
389- target_include_directories (Nabla PUBLIC
390- ${ANDROID_NDK_ROOT_PATH} /sources /android/native_app_glue
391- )
404+ list (APPEND PUBLIC_INCLUDE_DIRS ${ANDROID_NDK_ROOT_PATH} /sources /android/native_app_glue)
392405endif ()
393406
394407set (NBL_ASSEMBLY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG>/devshgraphicsprogramming.nabla" )
@@ -402,14 +415,16 @@ endif()
402415
403416## Set up 3rdparty deps
404417# Parallel Hashmap
405- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /parallel-hashmap/parallel_hashmap)
418+ list ( APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /parallel-hashmap/parallel_hashmap)
406419# TCPP
407- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /tcpp)
420+ list ( APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /tcpp)
408421# oneDPL for clang C++17 parallelism
409422if (_NBL_BUILD_DPL_)
410423 add_dependencies (Nabla oneDPL)
411- target_include_directories (Nabla PUBLIC ${ONETBB_INSTALL_DIR} /include )
412- target_include_directories (Nabla PUBLIC ${ONEDPL_INSTALL_DIR} /include )
424+ list (APPEND PUBLIC_INCLUDE_DIRS
425+ ${ONETBB_INSTALL_DIR} /include
426+ ${ONEDPL_INSTALL_DIR} /include
427+ )
413428 target_link_libraries (Nabla INTERFACE tbb tbbmalloc tbbmalloc_proxy)
414429endif ()
415430
@@ -422,7 +437,7 @@ endif()
422437add_dependencies (Nabla bz2_static)
423438
424439# boost
425- target_include_directories (Nabla PUBLIC " ${BOOST_PREPROCESSOR_INCLUDE} " )
440+ list ( APPEND PUBLIC_INCLUDE_DIRS ${BOOST_PREPROCESSOR_INCLUDE} )
426441
427442if (UNIX )
428443 target_link_libraries (Nabla INTERFACE
@@ -451,11 +466,12 @@ else()
451466 $<$<CONFIG:RelWithDebInfo>:${ZLIB_LIBRARY_RELWITHDEBINFO} >
452467 )
453468endif ()
454- target_include_directories (Nabla PUBLIC $<TARGET_PROPERTY:zlibstatic,BINARY_DIR>/copy_source)
469+
470+ list (APPEND PUBLIC_INCLUDE_DIRS $<TARGET_PROPERTY:zlibstatic,BINARY_DIR>/copy_source)
455471
456472# blake3
457473add_dependencies (Nabla blake3)
458- target_include_directories (Nabla PUBLIC $<TARGET_PROPERTY:blake3,INCLUDE_DIRECTORIES >)
474+ list ( APPEND PUBLIC_INCLUDE_DIRS $<TARGET_PROPERTY:blake3,INCLUDE_DIRECTORIES >)
459475if (NBL_STATIC_BUILD)
460476 target_link_libraries (Nabla INTERFACE blake3)
461477else ()
@@ -469,7 +485,8 @@ if(NBL_STATIC_BUILD)
469485else ()
470486 target_link_libraries (Nabla PRIVATE shaderc)
471487endif ()
472- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /shaderc/libshaderc/include )
488+ list (APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /shaderc/libshaderc/include )
489+
473490# spirv tools
474491add_dependencies (Nabla SPIRV)
475492add_dependencies (Nabla SPIRV-Tools)
@@ -492,7 +509,7 @@ if(NBL_STATIC_BUILD)
492509else ()
493510 target_link_libraries (Nabla PRIVATE nlohmann_json::nlohmann_json)
494511endif ()
495- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /nlohmann_json/include )
512+ list ( APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /nlohmann_json/include )
496513
497514
498515# simdjson
@@ -502,7 +519,7 @@ if(NBL_STATIC_BUILD)
502519else ()
503520 target_link_libraries (Nabla PRIVATE simdjson)
504521endif ()
505- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /simdjson)
522+ list ( APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /simdjson)
506523
507524# libjpeg
508525add_dependencies (Nabla jpeg-static )
@@ -511,15 +528,18 @@ if(NBL_STATIC_BUILD)
511528else ()
512529 target_link_libraries (Nabla PRIVATE jpeg-static )
513530endif ()
514- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /libjpeg-turbo)
531+ list (APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /libjpeg-turbo)
532+
515533# libpng
516534add_dependencies (Nabla png_static)
517535if (NBL_STATIC_BUILD)
518536 target_link_libraries (Nabla INTERFACE png_static)
519537else ()
520538 target_link_libraries (Nabla PRIVATE png_static)
521539endif ()
522- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /libpng)
540+ list (APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /libpng)
541+
542+
523543# OpenEXR
524544if (_NBL_COMPILE_WITH_OPEN_EXR_)
525545 add_dependencies (Nabla OpenEXR)
@@ -528,10 +548,8 @@ if (_NBL_COMPILE_WITH_OPEN_EXR_)
528548 else ()
529549 target_link_libraries (Nabla PRIVATE OpenEXR)
530550 endif ()
531-
532- target_include_directories (
533- Nabla PUBLIC $<TARGET_PROPERTY:OpenEXR,INCLUDE_DIRECTORIES >
534- )
551+
552+ list (APPEND PUBLIC_INCLUDE_DIRS $<TARGET_PROPERTY:OpenEXR,INCLUDE_DIRECTORIES >)
535553endif ()
536554
537555add_dependencies (Nabla OpenEXRCore OpenEXRUtil)
@@ -547,9 +565,9 @@ else()
547565 )
548566endif ()
549567
550- target_include_directories (
551- Nabla PUBLIC $<TARGET_PROPERTY:OpenEXRCore,INCLUDE_DIRECTORIES > # for OpenEXR's core headers
552- Nabla PUBLIC $<TARGET_PROPERTY:OpenEXRUtil,INCLUDE_DIRECTORIES > # for OpenEXR's util headers
568+ list ( APPEND PUBLIC_INCLUDE_DIRS
569+ $<TARGET_PROPERTY:OpenEXRCore,INCLUDE_DIRECTORIES >
570+ $<TARGET_PROPERTY:OpenEXRUtil,INCLUDE_DIRECTORIES >
553571)
554572
555573# GLI
@@ -560,14 +578,15 @@ if(_NBL_COMPILE_WITH_GLI_)
560578 else ()
561579 target_link_libraries (Nabla PRIVATE gli)
562580 endif ()
563- target_include_directories (Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR} /gli)
581+ list ( APPEND PUBLIC_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR} /gli)
564582endif ()
565583
566584# DXC (TODO: nah, lets remove/disable it)
567585if (_NBL_ENABLE_DXC_COMPILE_TESTS_)
568586 add_dependencies (Nabla HLSL_NABLA_COMPILE_TEST)
569587endif ()
570588
589+ # TODO: remove and replace with target in tree
571590add_custom_target (dxcompiler
572591 COMMAND "${CMAKE_COMMAND} " --build "${DXC_BUILD_DIR} " --target dxcompiler --config $<IF:$<CONFIG:Debug>,Debug,Release> -j${_NBL_JOBS_AMOUNT_}
573592 BYPRODUCTS "${DXC_LIB} " "${DXC_DLL} "
@@ -586,38 +605,36 @@ endif()
586605
587606# Linux Display Systems
588607if (UNIX AND NOT ANDROID AND NOT APPLE )
589- target_include_directories (Nabla PUBLIC
608+ list ( APPEND PUBLIC_INCLUDE_DIRS
590609 ${X11_INCLUDE_DIR}
591- X11_Xrandr_INCLUDE_PATH
610+ ${ X11_Xrandr_INCLUDE_PATH}
592611 ${X11_xf86vmode_INCLUDE_PATH}
593612 )
594613endif ()
595614
596615# Vulkan
597- target_include_directories (Nabla PUBLIC "${THIRD_PARTY_SOURCE_DIR} /Vulkan-Headers/include" )
598- target_include_directories (Nabla PUBLIC "${THIRD_PARTY_SOURCE_DIR} /volk" )
616+ list (APPEND PUBLIC_INCLUDE_DIRS
617+ ${THIRD_PARTY_SOURCE_DIR} /Vulkan-Headers/include
618+ ${THIRD_PARTY_SOURCE_DIR} /volk
619+ )
599620target_link_libraries (Nabla PRIVATE volk)
600621if (WIN32 )
601622 target_compile_definitions (Nabla PUBLIC VK_USE_PLATFORM_WIN32_KHR) # volk is part of public interface headers in Nabla
602623endif ()
603624# CUDA
604625if (NBL_COMPILE_WITH_CUDA)
605- target_include_directories (Nabla PUBLIC ${CUDAToolkit_INCLUDE_DIRS} )
626+ list ( APPEND PUBLIC_INCLUDE_DIRS " ${CUDAToolkit_INCLUDE_DIRS} " )
606627endif ()
607628
608- # Include dirs for self
609- target_include_directories (Nabla PUBLIC
610- "${CMAKE_CURRENT_BINARY_DIR} /include"
611- "${NBL_ROOT_PATH} /include"
612- ${COMMON_INCLUDE_DIRS}
613- "${THIRD_PARTY_SOURCE_DIR} "
614- #those also goes as PUBLIC because of examples
615- "$<$<CONFIG:DEBUG>:${NABLA_CONF_DIR_DEBUG} >"
616- "$<$<CONFIG:RELEASE>:${NABLA_CONF_DIR_RELEASE} >"
617- "$<$<CONFIG:RELWITHDEBINFO>:${NABLA_CONF_DIR_RELWITHDEBINFO} >"
629+ list (APPEND PUBLIC_INCLUDE_DIRS
630+ # this should be PRIVATE, but things from /src (or /source) are sometimes included in things in /include and so examples have to put source dirs into theirs Include Path
631+ # -> TODO
632+ ${NBL_ROOT_PATH} /src
633+ ${NBL_ROOT_PATH} /source /Nabla
634+ ${NBL_ROOT_PATH} /src/3rdparty
635+ # <-
618636)
619637
620- target_include_directories (Nabla PUBLIC ${NBL_ROOT_PATH} /src ${NBL_ROOT_PATH} /source /Nabla ${NBL_ROOT_PATH} /src/3rdparty) # this should be PRIVATE, but things from /src (or /source) are sometimes included in things in /include and so examples have to put source dirs into theirs Include Path
621638target_include_directories (Nabla PRIVATE ${CMAKE_BINARY_DIR} /include )
622639
623640target_compile_definitions (Nabla
@@ -627,15 +644,16 @@ target_compile_definitions(Nabla
627644
628645# Boost
629646add_dependencies (Nabla boost_wave)
630- target_include_directories (Nabla PUBLIC $<TARGET_PROPERTY:boost_wave,INCLUDE_DIRECTORIES >)
647+ list (APPEND PUBLIC_INCLUDE_DIRS $<TARGET_PROPERTY:boost_wave,INCLUDE_DIRECTORIES >)
648+
631649if (NBL_STATIC_BUILD)
632650 target_link_libraries (Nabla INTERFACE boost_wave)
633651else ()
634652 target_link_libraries (Nabla PRIVATE boost_wave)
635653endif ()
636654
637655add_dependencies (Nabla DeviceHeaders)
638- target_include_directories (Nabla PUBLIC " ${NBL_DEVICE_GEN_INCLUDE_DIR} " )
656+ list ( APPEND PUBLIC_INCLUDE_DIRS ${NBL_DEVICE_GEN_INCLUDE_DIR} )
639657
640658if (NBL_EMBED_BUILTIN_RESOURCES)
641659 add_subdirectory (builtin EXCLUDE_FROM_ALL )
@@ -644,7 +662,7 @@ if(NBL_EMBED_BUILTIN_RESOURCES)
644662 foreach (NBL_TARGET IN LISTS NBL_TARGETS)
645663 get_target_property (_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ ${NBL_TARGET} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
646664 target_include_directories (${NBL_TARGET} PUBLIC "$<TARGET_PROPERTY:Nabla,INCLUDE_DIRECTORIES>" )
647- target_include_directories (Nabla PUBLIC "${_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_} " )
665+ target_include_directories (Nabla PRIVATE "${_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_} " )
648666 endforeach ()
649667
650668 add_dependencies (Nabla ${NBL_TARGETS} )
@@ -685,7 +703,7 @@ target_compile_definitions(Nabla
685703)
686704
687705set (DEFINE_H "${CMAKE_CURRENT_BINARY_DIR} /include/$<CONFIG>/define.h" )
688- target_include_directories (Nabla BEFORE PUBLIC "$<PATH:GET_PARENT_PATH,${DEFINE_H} >" )
706+ list ( APPEND PUBLIC_INCLUDE_DIRS "$<PATH:GET_PARENT_PATH,${DEFINE_H} >" )
689707
690708# get consumer definitions
691709get_directory_property (DEFS COMPILE_DEFINITIONS )
@@ -705,7 +723,8 @@ file(GENERATE OUTPUT ${DEFINE_H}
705723nbl_install_file("${DEFINE_H} " )
706724
707725# git version tracking
708- target_link_libraries (Nabla PUBLIC gtml)
726+ # TODO: private
727+ target_link_libraries (Nabla PUBLIC $<BUILD_INTERFACE:gtml>)
709728
710729# NGFX
711730if (TARGET ngfx)
@@ -754,7 +773,11 @@ endif()
754773set_target_properties (Nabla PROPERTIES DEBUG_POSTFIX _debug)
755774set_target_properties (Nabla PROPERTIES RELWITHDEBINFO_POSTFIX _relwithdebinfo)
756775
757- nbl_install_lib_spec(Nabla "nbl" )
776+ # target_include_directories for Nabla with PUBLIC *must not* be called after following
777+ target_include_directories (Nabla PUBLIC
778+ "$<BUILD_INTERFACE:${PUBLIC_INCLUDE_DIRS} >"
779+ "$<INSTALL_INTERFACE:include>"
780+ )
758781
759782if (NBL_STATIC_BUILD)
760783 # install dependencies, they are required only for static Nabla builds
0 commit comments