diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..871b4f274d --- /dev/null +++ b/.clang-format @@ -0,0 +1,11 @@ +--- +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: BlockIndent +AllowShortFunctionsOnASingleLine: InlineOnly +BreakBeforeBraces: Allman +ColumnLimit: 256 +IndentWidth: 4 +InsertNewlineAtEOF: true +PointerAlignment: Left +TabWidth: 4 \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index f96f66ad0d..c39be486bd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,67 +1,16 @@ -[submodule "3rdparty/glslang"] - path = 3rdparty/glslang - url = git@github.com:devshgraphicsprogramming/glslang.git - branch = nabla -[submodule "3rdparty/shaderc"] - path = 3rdparty/shaderc - url = git@github.com:Devsh-Graphics-Programming/shaderc.git -[submodule "3rdparty/bzip2"] - path = 3rdparty/bzip2 - url = git@github.com:Devsh-Graphics-Programming/bzip2.git -[submodule "3rdparty/lz4"] - path = 3rdparty/lz4 - url = git@github.com:Devsh-Graphics-Programming/lz4.git -[submodule "3rdparty/zlib"] - path = 3rdparty/zlib - url = git@github.com:Devsh-Graphics-Programming/zlib.git -[submodule "3rdparty/libpng"] - path = 3rdparty/libpng - url = git@github.com:Devsh-Graphics-Programming/libpng.git -[submodule "3rdparty/libjpeg-turbo"] - path = 3rdparty/libjpeg-turbo - url = git@github.com:Devsh-Graphics-Programming/libjpeg-turbo.git -[submodule "3rdparty/portable-file-dialogs"] - path = 3rdparty/portable-file-dialogs - url = git@github.com:Devsh-Graphics-Programming/portable-file-dialogs.git -[submodule "3rdparty/libexpat"] - path = 3rdparty/libexpat - url = git@github.com:Devsh-Graphics-Programming/libexpat.git - branch = master -[submodule "3rdparty/freetype2"] - path = 3rdparty/freetype2 - url = git@github.com:Devsh-Graphics-Programming/freetype.git -[submodule "3rdparty/openexr"] - path = 3rdparty/openexr - url = git@github.com:Devsh-Graphics-Programming/openexr.git -[submodule "3rdparty/gli"] - path = 3rdparty/gli - url = git@github.com:Devsh-Graphics-Programming/gli.git [submodule "3rdparty/jitify"] path = 3rdparty/jitify url = git@github.com:Devsh-Graphics-Programming/jitify.git -[submodule "3rdparty/volk"] - path = 3rdparty/volk - url = git@github.com:Devsh-Graphics-Programming/volk.git -[submodule "3rdparty/simdjson"] - path = 3rdparty/simdjson - url = git@github.com:Devsh-Graphics-Programming/simdjson.git [submodule "3rdparty/glTFSampleModels"] path = 3rdparty/glTFSampleModels url = git@github.com:Devsh-Graphics-Programming/glTF-Sample-Models.git update = none -[submodule "3rdparty/nbl_spirv_cross"] - path = 3rdparty/nbl_spirv_cross - url = git@github.com:devshgraphicsprogramming/SPIRV-Cross.git [submodule "3rdparty/pstl/oneTBB"] path = 3rdparty/pstl/oneTBB url = git@github.com:Devsh-Graphics-Programming/oneTBB.git [submodule "3rdparty/pstl/oneDPL/oneDPL"] path = 3rdparty/pstl/oneDPL/oneDPL url = git@github.com:Devsh-Graphics-Programming/oneDPL.git -[submodule "3rdparty/Vulkan-Headers"] - path = 3rdparty/Vulkan-Headers - url = git@github.com:Devsh-Graphics-Programming/Vulkan-Headers.git - branch = main [submodule "examples_tests"] path = examples_tests url = git@github.com:Devsh-Graphics-Programming/Nabla-Examples-and-Tests.git @@ -69,54 +18,18 @@ path = 3rdparty/dxc/dxc url = git@github.com:Devsh-Graphics-Programming/DirectXShaderCompiler.git branch = unroll-devshFixes -[submodule "3rdparty/imgui"] - path = 3rdparty/imgui - url = git@github.com:Devsh-Graphics-Programming/imgui.git -[submodule "3rdparty/implot"] - path = 3rdparty/implot - url = git@github.com:Devsh-Graphics-Programming/implot.git [submodule "tests"] path = tests url = git@github.com:Devsh-Graphics-Programming/Nabla-Continous-Integration-Python-Framework.git -[submodule "3rdparty/boost/superproject"] - path = 3rdparty/boost/superproject - url = ../boost.git -[submodule "3rdparty/argparse"] - path = 3rdparty/argparse - url = git@github.com:p-ranav/argparse.git -[submodule "3rdparty/nlohmann_json"] - path = 3rdparty/nlohmann_json - url = git@github.com:Devsh-Graphics-Programming/json.git -[submodule "3rdparty/blake"] - path = 3rdparty/blake - url = git@github.com:Devsh-Graphics-Programming/BLAKE3.git -[submodule "3rdparty/imguizmo"] - path = 3rdparty/imguizmo - url = git@github.com:Devsh-Graphics-Programming/ImGuizmo.git -[submodule "3rdparty/imgui_test_engine"] - path = 3rdparty/imgui_test_engine - url = git@github.com:ocornut/imgui_test_engine.git [submodule "3rdparty/git-version-tracking"] path = 3rdparty/git-version-tracking url = git@github.com:Devsh-Graphics-Programming/cmake-git-version-tracking.git -[submodule "3rdparty/imath"] - path = 3rdparty/imath - url = git@github.com:AcademySoftwareFoundation/Imath.git -[submodule "3rdparty/libdeflate"] - path = 3rdparty/libdeflate - url = git@github.com:Devsh-Graphics-Programming/libdeflate.git [submodule "docker/compiler-explorer"] path = docker/compiler-explorer url = git@github.com:Devsh-Graphics-Programming/Compiler-Explorer-Docker.git -[submodule "3rdparty/glm"] - path = 3rdparty/glm - url = git@github.com:Devsh-Graphics-Programming/glm.git [submodule "docker/msvc-winsdk"] path = docker/msvc-winsdk url = ../docker-nanoserver-msvc-winsdk -[submodule "3rdparty/gtl"] - path = 3rdparty/gtl - url = https://github.com/greg7mdp/gtl.git [submodule "ci"] path = ci url = git@github.com:Devsh-Graphics-Programming/Nabla-CI.git diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 6e7e9e9970..91a4b9e1ac 100755 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -10,37 +10,8 @@ set(BUILD_SHARED_LIBS OFF) set(SKIP_INSTALL_ALL ON) set(BUILD_TESTING OFF) -option(NBL_FORCE_RELEASE_3RDPARTY "Force map 3rdaprty's configuration regardless Nabla configuration to Release" OFF) -option(NBL_FORCE_RELWITHDEBINFO_3RDPARTY "Force map 3rdaprty's configuration regardless Nabla configuration to RelWithDebInfo" OFF) - -# zlib -set(ZLIB_BUILD_SHARED OFF) -set(ZLIB_BUILD_STATIC ON) -set(ZLIB_INSTALL OFF) -set(ZLIB_BUILD_TESTING OFF) -set(ZLIB_BUILD_MINIZIP OFF) -add_subdirectory(zlib zlib EXCLUDE_FROM_ALL) -get_target_property(ZLIB_BINARY_DIR zlibstatic "BINARY_DIR") -set_target_properties(zlibstatic PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR}> - DEBUG_POSTFIX "d" - RELWITHDEBINFO_POSTFIX "rwdi" - OUTPUT_NAME zlibstatic -) -add_library(ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it via alias - -# nlohmann_json -set(JSON_BuildTests OFF) -add_subdirectory(nlohmann_json nlohmann_json EXCLUDE_FROM_ALL) - -# simdjson -add_subdirectory(simdjson simdjson EXCLUDE_FROM_ALL) - -# freetype2 -set(FT_WITH_HARFBUZZ OFF) -add_subdirectory(freetype2 freetype2 EXCLUDE_FROM_ALL) - -set_property(TARGET simdjson PROPERTY CXX_STANDARD 17) +option(NBL_FORCE_RELEASE_3RDPARTY "Force map 3rdparty's configuration regardless Nabla configuration to Release" OFF) +option(NBL_FORCE_RELWITHDEBINFO_3RDPARTY "Force map 3rdparty's configuration regardless Nabla configuration to RelWithDebInfo" OFF) # DXC get_filename_component(DXC_SPIRV_TOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dxc/dxc/external/SPIRV-Tools" ABSOLUTE) @@ -61,179 +32,10 @@ if(_NBL_ENABLE_DXC_COMPILE_TESTS_) message(STATUS "_NBL_ENABLE_DXC_COMPILE_TESTS_ enabled, DXC compile test target will be executed at build time!") endif() -# volk -set(VOLK_PULL_IN_VULKAN OFF CACHE INTERNAL "" FORCE) # Needed to make sure vulkan library will not be linked in examples - -if (WIN32) - set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_WIN32_KHR) -endif() -add_subdirectory(volk volk EXCLUDE_FROM_ALL) - -target_include_directories(volk PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include") -target_include_directories(volk_headers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include") - if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") add_subdirectory(pstl pstl EXCLUDE_FROM_ALL) endif() -# boost -add_subdirectory(boost boost EXCLUDE_FROM_ALL) - -set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install") -set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples") -add_subdirectory("${DXC_SPIRV_HEADERS_DIR}" SPIRV-Headers EXCLUDE_FROM_ALL) -set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE INTERNAL "Skip SPIRV-Tools install") -set(SPIRV_SKIP_TESTS ON CACHE INTERNAL "Skip SPIRV-Tools tests") -set(SPIRV_SKIP_EXECUTABLES ON CACHE INTERNAL "Skip SPIRV-Tools executable build") -add_subdirectory("${DXC_SPIRV_TOOLS_DIR}" SPIRV-Tools EXCLUDE_FROM_ALL) -set(SKIP_GLSLANG_INSTALL ON CACHE INTERNAL "Skip glslang install") -set(ENABLE_SPVREMAPPER OFF CACHE INTERNAL "SPVRemapper is a spirv compression experimental library") -set(ENABLE_GLSLANG_BINARIES OFF CACHE INTERNAL "Build glslangValidator and spirv-remap?") -set(BUILD_TESTING OFF CACHE INTERNAL "Enable glslang build testing?") -set_property(TARGET SPIRV-Tools-opt PROPERTY CXX_STANDARD 17) -add_subdirectory(glslang glslang EXCLUDE_FROM_ALL) -# because we're integrating glslang via add_subdirectory(), build_info.h is generated to wrong directory (relative to Nabla root) so i have to add extra include dir -target_include_directories(SPIRV PUBLIC "${GLSLANG_GENERATED_INCLUDEDIR}") - -set(SHADERC_SKIP_TESTS ON CACHE INTERNAL "Skip shaderc tests?") -set(SHADERC_SKIP_INSTALL ON CACHE INTERNAL "Install shaderc?") - -add_subdirectory(shaderc shaderc EXCLUDE_FROM_ALL) - -# libjpeg-turbo -set(NBL_JPEG_CMAKE_OPTIONS - -DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC=MultiThreaded$<$:Debug>$<$:DLL> - -DCMAKE_POLICY_DEFAULT_CMP0057=NEW - -DCMAKE_POLICY_DEFAULT_CMP0091=NEW - -DENABLE_SHARED=OFF - -DENABLE_STATIC=ON - -DWITH_CRT_DLL=ON - -DWITH_SIMD=ON - -DWITH_MEM_SRCDST=ON - -DWITH_TURBOJPEG=ON - -DWITH_FUZZ=OFF - -DWITH_JAVA=OFF -) - -if(NOT NBL_IS_MULTI_CONFIG) - list(APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") -endif() - -if(NOT CMAKE_GENERATOR MATCHES "Ninja*") - list(APPEND NBL_JPEG_CMAKE_OPTIONS -Ax64) -endif() - -if(CMAKE_GENERATOR_TOOLSET) - list(APPEND NBL_JPEG_CMAKE_OPTIONS -T "${CMAKE_GENERATOR_TOOLSET}") -endif() - -if(CMAKE_TOOLCHAIN_FILE) - list(APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") -endif() - -nbl_append_sanitize_address_cmake_options(NBL_JPEG_CMAKE_OPTIONS) - -# TODO: might find an alternative library which supports add_subdirectory, untill then we need to switch to a workaround just like -# we do for DXC due to: https://github.com/libjpeg-turbo/libjpeg-turbo/blob/0b742742c873025e2a127918d4969238ace7ae5b/CMakeLists.txt#L69 -execute_process(COMMAND "${CMAKE_COMMAND}" -S "${CMAKE_CURRENT_SOURCE_DIR}/libjpeg-turbo" -B "${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo" -G "${CMAKE_GENERATOR}" ${NBL_JPEG_CMAKE_OPTIONS} - RESULT_VARIABLE JPEG_CMAKE_RESULT - OUTPUT_VARIABLE JPEG_CMAKE_STREAM_PIPE -) - -if(NOT "${JPEG_CMAKE_RESULT}" STREQUAL "0") - message(FATAL_ERROR "${JPEG_CMAKE_STREAM_PIPE}") -endif() - -set(JPEG_LIB_OUTPUT "${THIRD_PARTY_BINARY_DIR}/libjpeg-turbo/$/jpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX}") -add_custom_command(OUTPUT ${JPEG_LIB_OUTPUT} - COMMAND "${CMAKE_COMMAND}" --build "${THIRD_PARTY_BINARY_DIR}/libjpeg-turbo" -t jpeg-static --config $ - COMMENT "Building libjpeg-turbo static library" - VERBATIM USES_TERMINAL -) -add_library(jpeg-static INTERFACE ${JPEG_LIB_OUTPUT}) -target_include_directories(jpeg-static INTERFACE - "${THIRD_PARTY_SOURCE_DIR}/libjpeg-turbo/src" - "${THIRD_PARTY_BINARY_DIR}/libjpeg-turbo" -) -target_link_libraries(jpeg-static INTERFACE "${JPEG_LIB_OUTPUT}") - -# blake3 -add_subdirectory(blake/c EXCLUDE_FROM_ALL) - -# manipulating libpng cmake options from within cmake script -set(PNG_BUILD_ZLIB OFF) -set(PNG_SHARED OFF) -set(PNG_TESTS OFF) -add_subdirectory(libpng libpng EXCLUDE_FROM_ALL) -add_dependencies(png_static zlibstatic) - -# OpenEXR -option(_NBL_COMPILE_WITH_OPEN_EXR_ "Build with OpenEXR library" ON) - -# Imath -set(IMATH_INSTALL OFF) -add_subdirectory(imath EXCLUDE_FROM_ALL) - -if(_NBL_COMPILE_WITH_OPEN_EXR_) - # Deflate - set(LIBDEFLATE_BUILD_SHARED_LIB OFF) - set(LIBDEFLATE_BUILD_STATIC_LIB ON) - set(LIBDEFLATE_GZIP_SUPPORT OFF) - set(LIBDEFLATE_BUILD_GZIP OFF) - add_subdirectory(libdeflate EXCLUDE_FROM_ALL) - set(libdeflate_DIR "${CMAKE_CURRENT_BINARY_DIR}/libdeflate") - - # OpenEXR - set(OPENEXR_FORCE_INTERNAL_DEFLATE ON) # trick it into thinking its internal - set(EXR_DEFLATE_LIB libdeflate_static) # and pass deflate target directly from our build tree - set(OPENEXR_FORCE_INTERNAL_IMATH ON) # similar case, force it to look into target from build tree - set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(_OLD_BUILD_STATIC_LIBS ${BUILD_STATIC_LIBS}) - set(_OLD_BUILD_TESTING ${BUILD_TESTING}) - set(BUILD_SHARED_LIBS OFF) - set(BUILD_STATIC_LIBS OFF) - set(BUILD_TESTING OFF) - set(PYILMBASE_ENABLE OFF) - set(OPENEXR_BUILD_UTILS OFF) - set(OPENEXR_BUILD_TOOLS OFF) - set(OPENEXR_INSTALL OFF) - set(OPENEXR_INSTALL_DOCS OFF) - set(OPENEXR_INSTALL_EXAMPLES OFF) - set(OPENEXR_INSTALL_PKG_CONFIG OFF) - set(OPENEXR_INSTALL_TOOLS OFF) - add_subdirectory(openexr EXCLUDE_FROM_ALL) - set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS}) - set(BUILD_STATIC_LIBS ${_OLD_BUILD_STATIC_LIBS}) - set(BUILD_TESTING ${_OLD_BUILD_TESTING}) -endif() - - -# gli -option(_NBL_COMPILE_WITH_GLI_ "Build with GLI library" ON) -if(_NBL_COMPILE_WITH_GLI_) - set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(_OLD_BUILD_STATIC_LIBS ${BUILD_STATIC_LIBS}) - set(_OLD_BUILD_TESTING ${BUILD_TESTING}) - set(BUILD_SHARED_LIBS OFF) - set(BUILD_STATIC_LIBS OFF) - set(BUILD_TESTING OFF) - set(GLI_GLM_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/glm") - add_subdirectory(gli gli EXCLUDE_FROM_ALL) - set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS}) - set(BUILD_STATIC_LIBS ${_OLD_BUILD_STATIC_LIBS}) - set(BUILD_TESTING ${_OLD_BUILD_TESTING}) -endif() - -set(ENABLE_STATIC_LIB ON) -set(ENABLE_SHARED_LIB OFF) -set(ENABLE_EXAMPLES OFF) -set(ENABLE_DOCS OFF) -set(ENABLE_APP OFF) -set(ENABLE_LIB_ONLY ON) -set(ENABLE_TESTS OFF) -set(ENABLE_SUMMARY OFF) -add_subdirectory(bzip2 bzip2 EXCLUDE_FROM_ALL) - add_library(lzma OBJECT lzma/C/Alloc.c lzma/C/LzFind.c @@ -243,23 +45,6 @@ add_library(lzma OBJECT target_compile_definitions(lzma PRIVATE _7ZIP_ST) -add_library(lz4 OBJECT - lz4/lib/lz4.c - lz4/lib/lz4frame.c - lz4/lib/lz4hc.c - lz4/lib/xxhash.c -) - -add_library(spirv_cross OBJECT - nbl_spirv_cross/spirv_cfg.cpp - nbl_spirv_cross/spirv_cross.cpp - nbl_spirv_cross/spirv_glsl.cpp - nbl_spirv_cross/spirv_reflect.cpp - nbl_spirv_cross/spirv_parser.cpp - nbl_spirv_cross/spirv_cross_parsed_ir.cpp -) -target_compile_definitions(spirv_cross PUBLIC SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS) - # cmake-git-version-tracking # note that checking if a repository is dirty may cost build time (especially a lot if like us you have a lot of submodules) - by default we run with all checks but if you want to increase build time iterations I recommend to exclude this check option(GIT_EXCLUDE_IS_DIRTY "Exclude IS_DIRTY from git tracking checks, will increase build time iterations at the expense of the meta information loss" OFF) @@ -274,117 +59,6 @@ NBL_GENERATE_GIT_TRACKING_META() # NGFX include(ngfx/ngfx.cmake) -if(NBL_BUILD_IMGUI) - set(NBL_IMGUI_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/imgui") - set(NBL_IMGUI_TEST_ENGINE_PROJECT_ROOT "${THIRD_PARTY_SOURCE_DIR}/imgui_test_engine") - set(NBL_IMGUI_TEST_ENGINE_ROOT "${NBL_IMGUI_TEST_ENGINE_PROJECT_ROOT}/imgui_test_engine") - set(NBL_IMGUI_TEST_SUITE_ROOT "${NBL_IMGUI_TEST_ENGINE_PROJECT_ROOT}/imgui_test_suite") - set(NBL_IMPLOT_ROOT "${NBL_IMGUI_TEST_SUITE_ROOT}/thirdparty/implot") - - add_library(imgui STATIC - "${NBL_IMGUI_ROOT}/imconfig.h" - "${NBL_IMGUI_ROOT}/imgui_demo.cpp" - "${NBL_IMGUI_ROOT}/imgui_draw.cpp" - "${NBL_IMGUI_ROOT}/imgui_internal.h" - "${NBL_IMGUI_ROOT}/imgui_tables.cpp" - "${NBL_IMGUI_ROOT}/imgui_widgets.cpp" - "${NBL_IMGUI_ROOT}/imgui.cpp" - "${NBL_IMGUI_ROOT}/misc/freetype/imgui_freetype.cpp" - "${NBL_IMGUI_ROOT}/imgui.h" - "${NBL_IMGUI_ROOT}/misc/cpp/imgui_stdlib.cpp" - "${NBL_IMGUI_ROOT}/misc/cpp/imgui_stdlib.h" - "${NBL_IMGUI_ROOT}/imstb_rectpack.h" - "${NBL_IMGUI_ROOT}/imstb_textedit.h" - "${NBL_IMGUI_ROOT}/imstb_truetype.h" - ) - - target_link_libraries(imgui PUBLIC freetype) - - target_include_directories(imgui PUBLIC - "${NBL_IMGUI_ROOT}" - "${NBL_IMGUI_ROOT}/misc/cpp" - "${NBL_IMGUI_ROOT}/backends" - "${NBL_IMGUI_TEST_SUITE_ROOT}" - $ - ) - - add_library(implot STATIC - "${NBL_IMPLOT_ROOT}/implot.h" - "${NBL_IMPLOT_ROOT}/implot_internal.h" - "${NBL_IMPLOT_ROOT}/implot.cpp" - "${NBL_IMPLOT_ROOT}/implot_items.cpp" - "${NBL_IMPLOT_ROOT}/implot_demo.cpp" - ) - - target_include_directories(implot - PUBLIC $ - PUBLIC "${NBL_IMPLOT_ROOT}" - ) - - target_link_libraries(implot PUBLIC imgui) - target_compile_definitions(implot PUBLIC IMPLOT_DEBUG IMPLOT_DLL_EXPORT) - set_target_properties(implot PROPERTIES CXX_STANDARD 20) - - if(MSVC) - target_compile_options(implot PRIVATE /MT /W4 /WX /arch:AVX2 /fp:fast /permissive-) - else() - target_compile_options(implot PRIVATE -Wall -Wextra -pedantic -Werror -mavx2 -Ofast) - endif() - - file(GLOB_RECURSE NBL_TEST_SUITE_SOURCES CONFIGURE_DEPENDS "${NBL_IMGUI_TEST_SUITE_ROOT}/imgui_test*.cpp") - file(GLOB_RECURSE NBL_TEST_SUITE_SOURCES CONFIGURE_DEPENDS "${NBL_IMGUI_TEST_SUITE_ROOT}/imgui_test*.cpp") - - add_library(imtestsuite STATIC - ${NBL_TEST_SUITE_SOURCES} - ) - - target_include_directories(imtestsuite PUBLIC - "${NBL_IMGUI_TEST_ENGINE_PROJECT_ROOT}" - "${NBL_IMGUI_TEST_ENGINE_ROOT}" - "${NBL_IMGUI_TEST_SUITE_ROOT}" - $ - $ - ) - - set_target_properties(imtestsuite PROPERTIES CXX_STANDARD 14) # NOTE! THOSE TESTS DO NOT COMPILE WITH HIGHER STANDARDS SO WE WRAP SOURCES INTO LIBRARY COMPILED WITH LOWER ONE - target_link_libraries(imtestsuite PUBLIC implot) - - file(GLOB_RECURSE NBL_TEST_ENGINE_SOURCES CONFIGURE_DEPENDS "${NBL_IMGUI_TEST_ENGINE_ROOT}/*.cpp") - - add_library(imtestengine STATIC - ${NBL_TEST_ENGINE_SOURCES} - ) - - target_include_directories(imtestengine PUBLIC - $ - ) - - target_link_libraries(imtestengine PUBLIC imtestsuite) - - # imguizmo - add_library(imguizmo - "${CMAKE_CURRENT_SOURCE_DIR}/imguizmo/GraphEditor.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/imguizmo/ImCurveEdit.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/imguizmo/ImGradient.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/imguizmo/ImGuizmo.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/imguizmo/ImSequencer.cpp" - ) - - target_include_directories(imguizmo PUBLIC $) - target_link_libraries(imguizmo PUBLIC imgui) - - # note we override imgui config with our own - set(NBL_IMGUI_USER_CONFIG_FILEPATH "${NBL_IMGUI_ROOT}/nabla_imconfig.h") - - if(NOT EXISTS "${NBL_IMGUI_USER_CONFIG_FILEPATH}") - message(FATAL_ERROR "\"${NBL_IMGUI_USER_CONFIG_FILEPATH}\" doesn't exist!") - endif() - - target_compile_definitions(imgui PUBLIC - IMGUI_USER_CONFIG="${NBL_IMGUI_USER_CONFIG_FILEPATH}" - ) -endif() - add_library(aesGladman OBJECT aesGladman/aes_ni.c aesGladman/aescrypt.c @@ -397,29 +71,6 @@ add_library(aesGladman OBJECT aesGladman/sha1.c ) -add_subdirectory(argparse argparse EXCLUDE_FROM_ALL) - -if (NBL_BUILD_MITSUBA_LOADER) - option(BUILD_tools "EXPAT: build the xmlwf tool for expat library" OFF) - option(BUILD_examples "EXPAT: build the examples for expat library" OFF) - option(BUILD_tests "EXPAT: build the tests for expat library" OFF) - option(BUILD_shared "EXPAT: build a shared expat library" OFF) - option(BUILD_doc "EXPAT: build man page for xmlwf" OFF) - option(USE_libbsd "EXPAT: utilize libbsd (for arc4random_buf)" OFF) - option(INSTALL "EXPAT: install expat files in cmake install target" OFF) - set(MSVC_USE_STATIC_CRT ON CACHE BOOL "Use /MT flag (static CRT) when compiling in MSVC") - add_subdirectory(libexpat/expat EXCLUDE_FROM_ALL) - - set(MITSUBA_LOADER_DEPENDENTS - expat zlibstatic - ) - set(MITSUBA_LOADER_DEPENDENTS ${MITSUBA_LOADER_DEPENDENTS} PARENT_SCOPE) - set(MITSUBA_LOADER_DEPENDENT_LIBS - expat zlibstatic - ) - set(MITSUBA_LOADER_DEPENDENT_LIBS ${MITSUBA_LOADER_DEPENDENT_LIBS} PARENT_SCOPE) -endif() - if (NBL_BUILD_BULLET) set(BULLET_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bullet3/src @@ -428,50 +79,15 @@ if (NBL_BUILD_BULLET) set(BULLET_INCLUDE_PATH ${BULLET_INCLUDE_PATH} PARENT_SCOPE) endif() -add_library(Vulkan-Headers INTERFACE) -target_include_directories(Vulkan-Headers INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include") add_subdirectory(Vulkan-Tools/vulkaninfo vulkaninfo EXCLUDE_FROM_ALL) # Final gather set(NBL_3RDPARTY_TARGETS lzma - lz4 aesGladman - spirv_cross - png_static - zlibstatic - shaderc_util - shaderc - bz2_static - simdjson - nlohmann_json - glslang - OSDependent - MachineIndependent - GenericCodeGen - SPIRV - SPIRV-Tools-static # SPIRV-Tools-shared in case of SHARED lib - SPIRV-Tools-opt vulkaninfo - Imath - freetype ${NBL_MSDFGEN_TARGETS} - blake3 - ${NBL_BOOST_TARGETS} ) -if (_NBL_COMPILE_WITH_OPEN_EXR_) - list(APPEND NBL_3RDPARTY_TARGETS - OpenEXR libdeflate_static OpenEXRUtil OpenEXRCore Iex IlmThread - ) -endif() - -#TODO insert more targets that are conditionally built -if (NBL_BUILD_MITSUBA_LOADER) - list(APPEND NBL_3RDPARTY_TARGETS expat) -endif() -if (NBL_BUILD_IMGUI) - list(APPEND NBL_3RDPARTY_TARGETS imgui implot imtestsuite imtestengine imguizmo) -endif() foreach(trgt IN LISTS NBL_3RDPARTY_TARGETS) set_property(TARGET ${trgt} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$:DLL>") @@ -497,22 +113,7 @@ nbl_adjust_definitions() add_custom_target(3rdparty) add_dependencies(3rdparty ${NBL_3RDPARTY_TARGETS}) -NBL_ADJUST_FOLDERS(3rdaprty) - -nbl_install_dir(Vulkan-Headers/include/vulkan) -nbl_install_dir(Vulkan-Headers/include/vk_video) - -nbl_install_file_spec(volk/volk.h volk) - -nbl_install_dir(gtl/include/gtl) -nbl_install_dir(glm/glm) - -nbl_install_file_spec(${CMAKE_CURRENT_BINARY_DIR}/imath/config/ImathConfig.h imath) -nbl_install_dir(imath/src/Imath) - -nbl_install_file(blake/c/blake3.h) - -nbl_install_dir(boost/superproject/libs/preprocessor/include/boost) +NBL_ADJUST_FOLDERS(3rdparty) nbl_install_file_spec(renderdoc/renderdoc_app.h renderdoc) diff --git a/3rdparty/Vulkan-Headers b/3rdparty/Vulkan-Headers deleted file mode 160000 index f6a6f7ab16..0000000000 --- a/3rdparty/Vulkan-Headers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f6a6f7ab165cedbfa2a7d0c93fe27a2d01ce09c8 diff --git a/3rdparty/Vulkan-Tools b/3rdparty/Vulkan-Tools index 4b6f7101c1..8f12ba2e50 160000 --- a/3rdparty/Vulkan-Tools +++ b/3rdparty/Vulkan-Tools @@ -1 +1 @@ -Subproject commit 4b6f7101c15e09a8931f2f81c97146d0dfe68bc5 +Subproject commit 8f12ba2e50fa41076f66515a8cfa1225a2c6b628 diff --git a/3rdparty/argparse b/3rdparty/argparse deleted file mode 160000 index a1c41c5537..0000000000 --- a/3rdparty/argparse +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a1c41c5537c919c1a56661ec1cdf5a49b9e99af6 diff --git a/3rdparty/blake b/3rdparty/blake deleted file mode 160000 index 79d84e6d39..0000000000 --- a/3rdparty/blake +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 79d84e6d395ec76d9f2d0bcab3013e71fa445478 diff --git a/3rdparty/boost/CMakeLists.txt b/3rdparty/boost/CMakeLists.txt deleted file mode 100644 index a7f48b5696..0000000000 --- a/3rdparty/boost/CMakeLists.txt +++ /dev/null @@ -1,134 +0,0 @@ -get_filename_component(NBL_BOOST_WAVE_DEP_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dep/wave.cmake" ABSOLUTE) - -# Boost uses it's own tool for generating dependency list for targets, therefore we -# can make sure manually added dependency subdirectories for a library are valid -# https://www.boost.org/doc/libs/1_83_0/tools/boostdep/doc/html/index.html#boostdep.introduction.building_boostdep - -if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs - if(NOT WIN32) - message(FATAL_ERROR "NBL_BOOST_GENERATE_DEP_LIST only for Windows host!") - endif() - - macro(NBL_BOOST_EXECUTE) - execute_process(COMMAND ${ARGV} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/superproject") - endmacro() - - NBL_BOOST_EXECUTE(git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE) - string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}") - - foreach(NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST}) - string(REGEX MATCH "submodule\\.(.*)\\.path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME}") - list(APPEND BOOST_SUBMODULES "${CMAKE_MATCH_1}") - endforeach() - - # sync & force update of all boost modules first for the tool purpose (sry guys who use the tool, you need to clone all, I want to keep it simple) - NBL_BOOST_EXECUTE(git submodule sync) - list(APPEND BOOST_FORCE_ALL_CONFIG -c url.https://github.com/.insteadOf=git@github.com:) - foreach(SUBMODULE ${BOOST_SUBMODULES}) - list(APPEND BOOST_FORCE_ALL_CONFIG -c submodule.${SUBMODULE}.update=checkout) - endforeach() - - NBL_BOOST_EXECUTE(git ${BOOST_FORCE_ALL_CONFIG} submodule update --init --recursive -f) - - # build boost dep executable - set(NBL_BOOSTDEP_EXE "boostdep.exe") - set(NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR}/superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE}") - if(NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH}") - NBL_BOOST_EXECUTE(cmd /C bootstrap.bat) - NBL_BOOST_EXECUTE(cmd /C b2.exe tools/boostdep/build) - NBL_BOOST_EXECUTE("${CMAKE_COMMAND}" -E copy "./dist/bin/${NBL_BOOSTDEP_EXE}" "${NBL_BOOSTDEP_EXE_FILEPATH}") - NBL_BOOST_EXECUTE(git clean -fdx) - NBL_BOOST_EXECUTE(git reset --hard) - endif() - - # get wave dependency info - NBL_BOOST_EXECUTE("${NBL_BOOSTDEP_EXE_FILEPATH}" --boost-root "${CMAKE_CURRENT_SOURCE_DIR}/superproject" --brief wave - OUTPUT_VARIABLE NBL_OUTPUT_VAR - ) - - file(WRITE "${NBL_BOOST_WAVE_DEP_FILE}" "${NBL_OUTPUT_VAR}") - - file(STRINGS "${NBL_BOOST_WAVE_DEP_FILE}" NBL_BOOST_LIBS) - set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS}) - list(POP_FRONT NBL_BOOST_LIBS) - list(FILTER NBL_BOOST_LIBS EXCLUDE REGEX "#") - list(FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)") - string(REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS}") - - # update boost .gitmodules configuration, discard all but modules reported by wave - # NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*, - # use when updating boost to more recent version - file(WRITE "${NBL_BOOST_WAVE_DEP_FILE}" "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS})") - - message(STATUS "Updating boost .gitmodules") - foreach(SUBMODULE ${BOOST_SUBMODULES}) - # 1) fallback, ignore all - NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${SUBMODULE}.update none) - endforeach() - - foreach(NAME ${NBL_BOOST_LIBS}) - string(REPLACE "/" "_" SUBMODULE "${NAME}") - message(STATUS "WAVE BOOST DEP SUBMODULE = ${SUBMODULE}") - # 2) pick only submodules reported by wave - NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.${SUBMODULE}.update checkout) - endforeach() - # 3) and the top module itself - NBL_BOOST_EXECUTE(git config --file .gitmodules submodule.wave.update checkout) -endif() - -set(BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/superproject/libs/preprocessor/include" CACHE PATH "" FORCE) - -get_filename_component(_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE}" ABSOLUTE) -get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/src" ABSOLUTE) -get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE) -set(BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}/boost" CACHE INTERNAL "" FORCE) - -if(NBL_EMBED_BUILTIN_RESOURCES) - include("${NBL_ROOT_PATH}/src/nbl/builtin/utils.cmake") - - file(GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH}" "${BOOST_PREPROCESSOR_INCLUDE}/*") - - foreach(BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL) - LIST_BUILTIN_RESOURCE(BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL}") - endforeach() - - ADD_CUSTOM_BUILTIN_RESOURCES(boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}" "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "STATIC" "INTERNAL") -endif() - -if(NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE}") - message(FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!") -endif() - -set(BOOST_STAGEDIR "${CMAKE_CURRENT_BINARY_DIR}/boost/superproject/stage") -include("${NBL_BOOST_WAVE_DEP_FILE}") - -foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS) - add_subdirectory(superproject/libs/${BOOST_LIB} EXCLUDE_FROM_ALL) -endforeach() - -add_subdirectory(superproject/libs/wave EXCLUDE_FROM_ALL) - -list(APPEND NBL_BOOST_TARGETS boost_wave) # wave -foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS) - set(lib boost_${BOOST_LIB}) - if(TARGET ${lib}) # wave's deps - list(APPEND NBL_BOOST_TARGETS ${lib}) - endif() -endforeach() - -# NOTE: wave *must* be compiled with config definitions, inserting them just before wave -# include will lead to ABI mismatch hence we update the target and let inherit options -target_compile_definitions(boost_wave - PUBLIC BOOST_WAVE_ENABLE_COMMANDLINE_MACROS=1 - PUBLIC BOOST_WAVE_SUPPORT_PRAGMA_ONCE=1 - PUBLIC BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES=1 - PUBLIC BOOST_WAVE_SERIALIZATION=0 - PUBLIC BOOST_WAVE_SUPPORT_INCLUDE_NEXT=0 - - # threading option: https://github.com/boostorg/wave/issues/237#issuecomment-2710251773 - PUBLIC BOOST_WAVE_SUPPORT_THREADING=0 -) - -set(NBL_BOOST_TARGETS - ${NBL_BOOST_TARGETS} -PARENT_SCOPE) diff --git a/3rdparty/boost/dep/wave.cmake b/3rdparty/boost/dep/wave.cmake deleted file mode 100644 index 322acd9818..0000000000 --- a/3rdparty/boost/dep/wave.cmake +++ /dev/null @@ -1 +0,0 @@ -set(NBL_BOOST_LIBS assert;concept_check;config;core;filesystem;format;iterator;lexical_cast;mpl;multi_index;optional;pool;preprocessor;serialization;smart_ptr;spirit;static_assert;throw_exception;type_traits;atomic;container_hash;detail;io;predef;system;winapi;utility;conversion;function_types;fusion;container;integer;numeric/conversion;bind;move;tuple;array;function;mp11;variant;variant2;endian;phoenix;proto;range;regex;thread;typeof;unordered;align;intrusive;describe;functional;chrono;date_time;exception;type_index;ratio;algorithm;tokenizer) \ No newline at end of file diff --git a/3rdparty/boost/superproject b/3rdparty/boost/superproject deleted file mode 160000 index 79a5d9a5be..0000000000 --- a/3rdparty/boost/superproject +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 79a5d9a5be2d7bb75f8dbebf9a1412f5f700ac1e diff --git a/3rdparty/bzip2 b/3rdparty/bzip2 deleted file mode 160000 index f4301b0eac..0000000000 --- a/3rdparty/bzip2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f4301b0eac69eb109c5419813102be6f82d2b73a diff --git a/3rdparty/freetype2 b/3rdparty/freetype2 deleted file mode 160000 index 6d4977d660..0000000000 --- a/3rdparty/freetype2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d4977d66033e7841219bdc2b686a97552091ade diff --git a/3rdparty/gli b/3rdparty/gli deleted file mode 160000 index 2749a197e8..0000000000 --- a/3rdparty/gli +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2749a197e88f94858f4108732824b3790064f6ec diff --git a/3rdparty/glm b/3rdparty/glm deleted file mode 160000 index 8f6213d379..0000000000 --- a/3rdparty/glm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8f6213d379a904f5ae910e09a114e066e25faf57 diff --git a/3rdparty/glslang b/3rdparty/glslang deleted file mode 160000 index ff26c2e995..0000000000 --- a/3rdparty/glslang +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ff26c2e995ae521cb9fbc902fb4d686a47e4eb53 diff --git a/3rdparty/gtl b/3rdparty/gtl deleted file mode 160000 index 6ad66cd6d3..0000000000 --- a/3rdparty/gtl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6ad66cd6d3824128300f78aeeffc54294e147bc7 diff --git a/3rdparty/imath b/3rdparty/imath deleted file mode 160000 index 8c1d11f171..0000000000 --- a/3rdparty/imath +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8c1d11f1718e3dbef13e06c69ed788c0938cb504 diff --git a/3rdparty/imgui b/3rdparty/imgui deleted file mode 160000 index a29e9dba30..0000000000 --- a/3rdparty/imgui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a29e9dba3012eca9f80bdc4c39ca61a1df8e7175 diff --git a/3rdparty/imgui_test_engine b/3rdparty/imgui_test_engine deleted file mode 160000 index 60b295cc83..0000000000 --- a/3rdparty/imgui_test_engine +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 60b295cc83a2dd4b530ab2eb5bf37f009a443619 diff --git a/3rdparty/imguizmo b/3rdparty/imguizmo deleted file mode 160000 index b10e91756d..0000000000 --- a/3rdparty/imguizmo +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b10e91756d32395f5c1fefd417899b657ed7cb88 diff --git a/3rdparty/implot b/3rdparty/implot deleted file mode 160000 index 18758e237e..0000000000 --- a/3rdparty/implot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 18758e237e8906a97ddf42de1e75793526f30ce9 diff --git a/3rdparty/libdeflate b/3rdparty/libdeflate deleted file mode 160000 index 495a0062c3..0000000000 --- a/3rdparty/libdeflate +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 495a0062c37768449715ec464f2e7b2cbc6f70d7 diff --git a/3rdparty/libexpat b/3rdparty/libexpat deleted file mode 160000 index e2004f9195..0000000000 --- a/3rdparty/libexpat +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e2004f9195700bb8248c8c954578f14fda58be27 diff --git a/3rdparty/libjpeg-turbo b/3rdparty/libjpeg-turbo deleted file mode 160000 index 0b742742c8..0000000000 --- a/3rdparty/libjpeg-turbo +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0b742742c873025e2a127918d4969238ace7ae5b diff --git a/3rdparty/libpng b/3rdparty/libpng deleted file mode 160000 index 49363adcfa..0000000000 --- a/3rdparty/libpng +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 49363adcfaf098748d7a4c8c624ad8c45a8c3a86 diff --git a/3rdparty/lz4 b/3rdparty/lz4 deleted file mode 160000 index 1a41b2b25c..0000000000 --- a/3rdparty/lz4 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1a41b2b25ca220f560b07c6fc25dae7415273f6e diff --git a/3rdparty/nbl_spirv_cross b/3rdparty/nbl_spirv_cross deleted file mode 160000 index f4accc2a4b..0000000000 --- a/3rdparty/nbl_spirv_cross +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f4accc2a4b478c42038c920aa0e43a8aab7d135c diff --git a/3rdparty/nlohmann_json b/3rdparty/nlohmann_json deleted file mode 160000 index 199dea11b1..0000000000 --- a/3rdparty/nlohmann_json +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 199dea11b17c533721b26249e2dcaee6ca1d51d3 diff --git a/3rdparty/openexr b/3rdparty/openexr deleted file mode 160000 index aaf5f750d7..0000000000 --- a/3rdparty/openexr +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aaf5f750d7a5fd117d79932d209f0e9816cbff1f diff --git a/3rdparty/portable-file-dialogs b/3rdparty/portable-file-dialogs deleted file mode 160000 index dea8520de1..0000000000 --- a/3rdparty/portable-file-dialogs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dea8520de18af09eefdbc18aaf7c24409d18491b diff --git a/3rdparty/shaderc b/3rdparty/shaderc deleted file mode 160000 index d2564ba598..0000000000 --- a/3rdparty/shaderc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d2564ba5989c9de1a76714b3e59ec60595e9be50 diff --git a/3rdparty/simdjson b/3rdparty/simdjson deleted file mode 160000 index 6bed34ad61..0000000000 --- a/3rdparty/simdjson +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6bed34ad615a6ea9babdd59d48dbb89b8fc5d1ae diff --git a/3rdparty/volk b/3rdparty/volk deleted file mode 160000 index b6be5ba0af..0000000000 --- a/3rdparty/volk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b6be5ba0af5567974cc8a0261471573418f0f34f diff --git a/3rdparty/zlib b/3rdparty/zlib deleted file mode 160000 index 5a82f71ed1..0000000000 --- a/3rdparty/zlib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5a82f71ed1dfc0bec044d9702463dbdf84ea3b71 diff --git a/CMakeLists.txt b/CMakeLists.txt index ee888eb868..1982c2480b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,9 @@ if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM) set(CMAKE_POLICY_VERSION_MINIMUM 3.31 CACHE STRING "Minimum policy version for third-party projects") endif() +set(CONAN_INSTALL_BUILD_CONFIGURATIONS "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE) +set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/conan_provider.cmake") + # TODO: Yas - once we deploy 4.x we will fire `cmake_policy(VERSION [...])` instead of manually picking policies # https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html#policy-version # also we should update deps which throw warnings about < 3.10 compatibility diff --git a/cmake/common.cmake b/cmake/common.cmake index 234698fc3d..ff46a525ca 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -1264,11 +1264,12 @@ struct DeviceConfigCaps endif() if(_NBL_NSC_USE_HOST_BUILTINS) + find_package(Boost CONFIG REQUIRED) list(APPEND REQUIRED_OPTIONS -no-nbl-builtins -isystem "${NBL_ROOT_PATH}/include" -isystem "${NBL_ROOT_PATH}/3rdparty/dxc/dxc/external/SPIRV-Headers/include" - -isystem "${NBL_ROOT_PATH}/3rdparty/boost/superproject/libs/preprocessor/include" + -isystem "${Boost_INCLUDE_DIRS}" -isystem "${NBL_ROOT_PATH_BINARY}/src/nbl/device/include" ) endif() diff --git a/cmake/conan_provider.cmake b/cmake/conan_provider.cmake new file mode 100644 index 0000000000..b2a6f0fad4 --- /dev/null +++ b/cmake/conan_provider.cmake @@ -0,0 +1,722 @@ +# The MIT License (MIT) +# +# Copyright (c) 2024 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set(CONAN_MINIMUM_VERSION 2.0.5) + +# Create a new policy scope and set the minimum required cmake version so the +# features behind a policy setting like if(... IN_LIST ...) behaves as expected +# even if the parent project does not specify a minimum cmake version or a minimum +# version less than this module requires (e.g. 3.0) before the first project() call. +# (see: https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.html) +# +# The policy-affecting calls like cmake_policy(SET...) or `cmake_minimum_required` only +# affects the current policy scope, i.e. between the PUSH and POP in this case. +# +# https://cmake.org/cmake/help/book/mastering-cmake/chapter/Policies.html#the-policy-stack +cmake_policy(PUSH) +cmake_minimum_required(VERSION 3.24) + + +function(detect_os os os_api_level os_sdk os_subsystem os_version) + # it could be cross compilation + message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(${os} Macos PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") + set(${os} Neutrino PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") + set(${os} Windows PARENT_SCOPE) + set(${os_subsystem} cygwin PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") + set(${os} Windows PARENT_SCOPE) + set(${os_subsystem} msys2 PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + # https://github.com/emscripten-core/emscripten/blob/4.0.6/cmake/Modules/Platform/Emscripten.cmake#L17C1-L17C34 + set(${os} Emscripten PARENT_SCOPE) + else() + set(${os} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + if(DEFINED ANDROID_PLATFORM) + string(REGEX MATCH "[0-9]+" _os_api_level ${ANDROID_PLATFORM}) + elseif(DEFINED CMAKE_SYSTEM_VERSION) + set(_os_api_level ${CMAKE_SYSTEM_VERSION}) + endif() + message(STATUS "CMake-Conan: android api level=${_os_api_level}") + set(${os_api_level} ${_os_api_level} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") + # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja + # generators, but just has the original input string for Xcode. + if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) + set(_os_sdk ${CMAKE_OSX_SYSROOT}) + else() + if(CMAKE_OSX_SYSROOT MATCHES Simulator) + set(apple_platform_suffix simulator) + else() + set(apple_platform_suffix os) + endif() + if(CMAKE_OSX_SYSROOT MATCHES AppleTV) + set(_os_sdk "appletv${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) + set(_os_sdk "iphone${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES Watch) + set(_os_sdk "watch${apple_platform_suffix}") + endif() + endif() + if(DEFINED os_sdk) + message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") + set(${os_sdk} ${_os_sdk} PARENT_SCOPE) + endif() + if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(${os_version} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) + endif() + endif() + endif() +endfunction() + + +function(detect_arch arch) + # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. + # Therefore this code only finds one. If the recipes support multiple architectures, the + # build will work. Otherwise, there will be a linker error for the missing architecture(s). + if(DEFINED CMAKE_OSX_ARCHITECTURES) + string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") + list(LENGTH apple_arch_list apple_arch_count) + if(apple_arch_count GREATER 1) + message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") + endif() + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(host_arch ${CMAKE_OSX_ARCHITECTURES}) + elseif(MSVC) + set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) + else() + set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if(host_arch MATCHES "aarch64|arm64|ARM64") + set(_arch armv8) + elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") + set(_arch armv7) + elseif(host_arch MATCHES armv7s) + set(_arch armv7s) + elseif(host_arch MATCHES "i686|i386|X86") + set(_arch x86) + elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") + set(_arch x86_64) + endif() + if(EMSCRIPTEN) + # https://github.com/emscripten-core/emscripten/blob/4.0.6/cmake/Modules/Platform/Emscripten.cmake#L294C1-L294C80 + set(_arch wasm) + endif() + message(STATUS "CMake-Conan: cmake_system_processor=${_arch}") + set(${arch} ${_arch} PARENT_SCOPE) +endfunction() + + +function(detect_cxx_standard compiler cxx_standard) + set(${cxx_standard} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if(CMAKE_CXX_EXTENSIONS) + if(compiler STREQUAL "msvc") + set(${cxx_standard} "${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + else() + set(${cxx_standard} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() + endif() +endfunction() + + +macro(detect_gnu_libstdcxx) + # _conan_is_gnu_libstdcxx true if GNU libstdc++ + check_cxx_source_compiles(" + #include + #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) + static_assert(false); + #endif + int main(){}" _conan_is_gnu_libstdcxx) + + # _conan_gnu_libstdcxx_is_cxx11_abi true if C++11 ABI + check_cxx_source_compiles(" + #include + static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); + int main () {}" _conan_gnu_libstdcxx_is_cxx11_abi) + + set(_conan_gnu_libstdcxx_suffix "") + if(_conan_gnu_libstdcxx_is_cxx11_abi) + set(_conan_gnu_libstdcxx_suffix "11") + endif() + unset (_conan_gnu_libstdcxx_is_cxx11_abi) +endmacro() + + +macro(detect_libcxx) + # _conan_is_libcxx true if LLVM libc++ + check_cxx_source_compiles(" + #include + #if !defined(_LIBCPP_VERSION) + static_assert(false); + #endif + int main(){}" _conan_is_libcxx) +endmacro() + + +function(detect_lib_cxx lib_cxx) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") + set(${lib_cxx} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) + return() + endif() + + include(CheckCXXSourceCompiles) + + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + detect_gnu_libstdcxx() + set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(${lib_cxx} "libc++" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + # Check for libc++ + detect_libcxx() + if(_conan_is_libcxx) + set(${lib_cxx} "libc++" PARENT_SCOPE) + return() + endif() + + # Check for libstdc++ + detect_gnu_libstdcxx() + if(_conan_is_gnu_libstdcxx) + set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE) + return() + endif() + + # TODO: it would be an error if we reach this point + elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Do nothing - compiler.runtime and compiler.runtime_type + # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 + return() + else() + # TODO: unable to determine, ask user to provide a full profile file instead + endif() +endfunction() + + +function(detect_compiler compiler compiler_version compiler_runtime compiler_runtime_type) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_compiler ${CMAKE_CXX_COMPILER_ID}) + set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_compiler ${CMAKE_C_COMPILER_ID}) + set(_compiler_version ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "CMake-Conan: CMake compiler=${_compiler}") + message(STATUS "CMake-Conan: CMake compiler version=${_compiler_version}") + + if(_compiler MATCHES MSVC) + set(_compiler "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _compiler_version) + # Configure compiler.runtime and compiler.runtime_type settings for MSVC + if(CMAKE_MSVC_RUNTIME_LIBRARY) + set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) + else() + set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake + endif() + + set(_KNOWN_MSVC_RUNTIME_VALUES "") + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) + + # only accept the 6 possible values, otherwise we don't don't know to map this + if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) + message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") + endif() + + # Runtime is "dynamic" in all cases if it ends in DLL + if(_msvc_runtime_library MATCHES ".*DLL$") + set(_compiler_runtime "dynamic") + else() + set(_compiler_runtime "static") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime=${_compiler_runtime}") + + # Only define compiler.runtime_type when explicitly requested + # If a generator expression is used, let Conan handle it conditional on build_type + if(NOT _msvc_runtime_library MATCHES ":Debug>") + if(_msvc_runtime_library MATCHES "Debug") + set(_compiler_runtime_type "Debug") + else() + set(_compiler_runtime_type "Release") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_compiler_runtime_type}") + endif() + + unset(_KNOWN_MSVC_RUNTIME_VALUES) + + elseif(_compiler MATCHES AppleClang) + set(_compiler "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + elseif(_compiler MATCHES Clang) + set(_compiler "clang") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + elseif(_compiler MATCHES GNU) + set(_compiler "gcc") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + endif() + + message(STATUS "CMake-Conan: [settings] compiler=${_compiler}") + message(STATUS "CMake-Conan: [settings] compiler.version=${_compiler_version}") + if (_compiler_runtime) + message(STATUS "CMake-Conan: [settings] compiler.runtime=${_compiler_runtime}") + endif() + if (_compiler_runtime_type) + message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_compiler_runtime_type}") + endif() + + set(${compiler} ${_compiler} PARENT_SCOPE) + set(${compiler_version} ${_compiler_version} PARENT_SCOPE) + set(${compiler_runtime} ${_compiler_runtime} PARENT_SCOPE) + set(${compiler_runtime_type} ${_compiler_runtime_type} PARENT_SCOPE) +endfunction() + + +function(detect_build_type build_type) + get_property(multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT multiconfig_generator) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${build_type} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + + +macro(set_conan_compiler_if_appleclang lang command output_variable) + if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") + execute_process(COMMAND xcrun --find ${command} + OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) + cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) + cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) + if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") + set(${output_variable} "") + endif() + unset(_xcrun_out) + unset(_xcrun_toolchain_path) + unset(_compiler_parent_path) + endif() +endmacro() + + +macro(append_compiler_executables_configuration) + set(_conan_c_compiler "") + set(_conan_cpp_compiler "") + set(_conan_rc_compiler "") + set(_conan_compilers_list "") + if(CMAKE_C_COMPILER) + set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\"") + set_conan_compiler_if_appleclang(C cc _conan_c_compiler) + list(APPEND _conan_compilers_list ${_conan_c_compiler}) + else() + message(WARNING "CMake-Conan: The C compiler is not defined. " + "Please define CMAKE_C_COMPILER or enable the C language.") + endif() + if(CMAKE_CXX_COMPILER) + set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") + set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) + list(APPEND _conan_compilers_list ${_conan_cpp_compiler}) + else() + message(WARNING "CMake-Conan: The C++ compiler is not defined. " + "Please define CMAKE_CXX_COMPILER or enable the C++ language.") + endif() + if(CMAKE_RC_COMPILER) + set(_conan_rc_compiler "\"rc\":\"${CMAKE_RC_COMPILER}\"") + list(APPEND _conan_compilers_list ${_conan_rc_compiler}) + # Not necessary to warn if RC not defined + endif() + if(NOT "x${_conan_compilers_list}" STREQUAL "x") + if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + string(REPLACE ";" "," _conan_compilers_list "${_conan_compilers_list}") + string(APPEND profile "tools.build:compiler_executables={${_conan_compilers_list}}\n") + endif() + endif() + unset(_conan_c_compiler) + unset(_conan_cpp_compiler) + unset(_conan_rc_compiler) + unset(_conan_compilers_list) +endmacro() + + +function(detect_host_profile output_file) + detect_os(os os_api_level os_sdk os_subsystem os_version) + detect_arch(arch) + detect_compiler(compiler compiler_version compiler_runtime compiler_runtime_type) + detect_cxx_standard(${compiler} compiler_cppstd) + detect_lib_cxx(compiler_libcxx) + detect_build_type(build_type) + + set(profile "") + string(APPEND profile "[settings]\n") + if(arch) + string(APPEND profile arch=${arch} "\n") + endif() + if(os) + string(APPEND profile os=${os} "\n") + endif() + if(os_api_level) + string(APPEND profile os.api_level=${os_api_level} "\n") + endif() + if(os_version) + string(APPEND profile os.version=${os_version} "\n") + endif() + if(os_sdk) + string(APPEND profile os.sdk=${os_sdk} "\n") + endif() + if(os_subsystem) + string(APPEND profile os.subsystem=${os_subsystem} "\n") + endif() + if(compiler) + string(APPEND profile compiler=${compiler} "\n") + endif() + if(compiler_version) + string(APPEND profile compiler.version=${compiler_version} "\n") + endif() + if(compiler_runtime) + string(APPEND profile compiler.runtime=${compiler_runtime} "\n") + endif() + if(compiler_runtime_type) + string(APPEND profile compiler.runtime_type=${compiler_runtime_type} "\n") + endif() + if(compiler_cppstd) + string(APPEND profile compiler.cppstd=${compiler_cppstd} "\n") + endif() + if(compiler_libcxx) + string(APPEND profile compiler.libcxx=${compiler_libcxx} "\n") + endif() + if(build_type) + string(APPEND profile "build_type=${build_type}\n") + endif() + + if(NOT DEFINED output_file) + set(file_name "${CMAKE_BINARY_DIR}/profile") + else() + set(file_name ${output_file}) + endif() + + string(APPEND profile "[conf]\n") + string(APPEND profile "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + # propagate compilers via profile + append_compiler_executables_configuration() + + if(os STREQUAL "Android") + string(APPEND profile "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") + endif() + + message(STATUS "CMake-Conan: Creating profile ${file_name}") + file(WRITE ${file_name} ${profile}) + message(STATUS "CMake-Conan: Profile: \n${profile}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "CMake-Conan: Checking if a default profile exists") + execute_process(COMMAND ${CONAN_COMMAND} profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") + execute_process(COMMAND ${CONAN_COMMAND} profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + set(conan_output_folder ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(conan_args -of=${conan_output_folder}) + list(JOIN ARGN " " argn_str) + message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${conan_args} ${argn_str}") + + + # In case there was not a valid cmake executable in the PATH, we inject the + # same we used to invoke the provider to the PATH + if(DEFINED PATH_TO_CMAKE_BIN) + set(old_path $ENV{PATH}) + if(CMAKE_HOST_WIN32) + set(ENV{PATH} "$ENV{PATH};${PATH_TO_CMAKE_BIN}") + else() + set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") + endif() + endif() + + execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(DEFINED PATH_TO_CMAKE_BIN) + set(ENV{PATH} "${old_path}") + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + + # the files are generated in a folder that depends on the layout used, if + # one is specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder) + cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder) + + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}") + set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}") + # reconfigure on conanfile changes + string(JSON conanfile GET "${conan_stdout}" graph nodes 0 label) + message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${conanfile}") + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${conanfile}") + # success + set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) + +endfunction() + + +function(conan_get_version conan_command conan_current_version) + execute_process( + COMMAND ${conan_command} --version + OUTPUT_VARIABLE conan_output + RESULT_VARIABLE conan_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(conan_result) + message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") + endif() + + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) + set(${conan_current_version} ${conan_version} PARENT_SCOPE) +endfunction() + + +function(conan_version_check) + set(options ) + set(one_value_args MINIMUM CURRENT) + set(multi_value_args ) + cmake_parse_arguments(conan_version_check + "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN}) + + if(NOT conan_version_check_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") + endif() + if(NOT conan_version_check_CURRENT) + message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") + endif() + + if(conan_version_check_CURRENT VERSION_LESS conan_version_check_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Conan version must be ${conan_version_check_MINIMUM} or later") + endif() +endfunction() + + +macro(construct_profile_argument argument_variable profile_list) + set(${argument_variable} "") + if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") + set(_arg_flag "--profile:host=") + elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") + set(_arg_flag "--profile:build=") + endif() + + set(_profile_list "${${profile_list}}") + list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") + list(TRANSFORM _profile_list PREPEND ${_arg_flag}) + set(${argument_variable} ${_profile_list}) + + unset(_arg_flag) + unset(_profile_list) +endmacro() + + +macro(conan_provide_dependency method package_name) + set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) + get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if(NOT _conan_install_success) + find_program(CONAN_COMMAND "conan" REQUIRED) + conan_get_version("${CONAN_COMMAND}" CONAN_CURRENT_VERSION) + conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) + message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") + if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) + conan_profile_detect_default() + endif() + if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + endif() + construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) + construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) + if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeConfigDeps.*") + message(WARNING "Cmake-conan: CMakeConfigDeps generator was not defined in the conanfile") + endif() + elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeConfigDeps.*") + message(WARNING "Cmake-conan: CMakeConfigDeps generator was not defined in the conanfile") + endif() + endif() + + get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + + if(DEFINED CONAN_INSTALL_BUILD_CONFIGURATIONS) + # Configurations are specified by the project or user + set(_build_configs "${CONAN_INSTALL_BUILD_CONFIGURATIONS}") + list(LENGTH _build_configs _build_configs_length) + if(NOT _multiconfig_generator AND _build_configs_length GREATER 1) + message(FATAL_ERROR "cmake-conan: when using a single-config CMake generator, " + "please only specify a single configuration in CONAN_INSTALL_BUILD_CONFIGURATIONS") + endif() + unset(_build_configs_length) + else() + # No configuration overrides, provide sensible defaults + if(_multiconfig_generator) + set(_build_configs Release Debug) + else() + set(_build_configs ${CMAKE_BUILD_TYPE}) + endif() + + endif() + + list(JOIN _build_configs ", " _build_configs_msg) + message(STATUS "CMake-Conan: Installing configuration(s): ${_build_configs_msg}") + foreach(_build_config IN LISTS _build_configs) + set(_self_build_config "") + if(NOT _multiconfig_generator AND NOT _build_config STREQUAL "${CMAKE_BUILD_TYPE}") + set(_self_build_config -s &:build_type=${CMAKE_BUILD_TYPE}) + endif() + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=${_build_config} ${_self_build_config} ${CONAN_INSTALL_ARGS}) + endforeach() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + if(EXISTS "${_conan_generators_folder}/conan_cmakedeps_paths.cmake") + message(STATUS "CMake-Conan: Loading conan_cmakedeps_paths.cmake file") + include(${_conan_generators_folder}/conan_cmakedeps_paths.cmake) + endif() + + unset(_self_build_config) + unset(_multiconfig_generator) + unset(_build_configs) + unset(_build_configs_msg) + unset(_host_profile_flags) + unset(_build_profile_flags) + unset(_conan_install_success) + else() + message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") + unset(_conan_install_success) + endif() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + + # Ensure that we consider Conan-provided packages ahead of any other, + # irrespective of other settings that modify the search order or search paths + # This follows the guidelines from the find_package documentation + # (https://cmake.org/cmake/help/latest/command/find_package.html): + # find_package ( PATHS paths... NO_DEFAULT_PATH) + # find_package () + + # Filter out `REQUIRED` from the argument list, as the first call may fail + set(_find_args_${package_name} "${ARGN}") + list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") + if(NOT "MODULE" IN_LIST _find_args_${package_name}) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + unset(_find_args_${package_name}) + endif() + + # Invoke find_package a second time - if the first call succeeded, + # this will simply reuse the result. If not, fall back to CMake default search + # behaviour, also allowing modules to be searched. + if(NOT ${package_name}_FOUND) + list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) + if(_index EQUAL -1) + list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() + unset(_index) + find_package(${package_name} ${ARGN} BYPASS_PROVIDER) + list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() +endmacro() + + +cmake_language( + SET_DEPENDENCY_PROVIDER conan_provide_dependency + SUPPORTED_METHODS FIND_PACKAGE +) + + +macro(conan_provide_dependency_check) + set(_conan_provide_dependency_invoked FALSE) + get_property(_conan_provide_dependency_invoked GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) + if(NOT _conan_provide_dependency_invoked) + message(WARNING "Conan is correctly configured as dependency provider, " + "but Conan has not been invoked. Please add at least one " + "call to `find_package()`.") + if(DEFINED CONAN_COMMAND) + # supress warning in case `CONAN_COMMAND` was specified but unused. + set(_conan_command ${CONAN_COMMAND}) + unset(_conan_command) + endif() + endif() + unset(_conan_provide_dependency_invoked) +endmacro() + + +# Add a deferred call at the end of processing the top-level directory +# to check if the dependency provider was invoked at all. +cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) + +# Configurable variables for Conan profiles +set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") +set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") +set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") + +find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) +if(NOT _cmake_program) + get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) + set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") +endif() + +cmake_policy(POP) diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000000..d7a70c5e29 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,75 @@ +import os + +from conan import ConanFile +from conan.tools.cmake import CMakeToolchain, CMakeConfigDeps, CMake, cmake_layout +from conan.tools.files import copy + +class NablaConan(ConanFile): + name = "Nabla" + required_conan_version = ">=2.32" + + settings = "os", "arch", "compiler", "build_type" + + tool_requires = ( + "cmake/[>=3.31]", + ) + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires("argparse/[>3.0]") + self.requires("blake3/1.8.5", options={"shared": False}) + self.requires("boost/[>=1.91.0]", options={"shared": False, "magic_autolink": True, "without_test": True, "without_cobalt": True}) + self.requires("bzip2/1.0.8", options={"shared": False}) + self.requires("freetype/[>2.14.1]", options={"shared": False}) + self.requires("greg7mdp-gtl/1.2.0") + self.requires("imath/[>3.2.1]", options={"shared": False}) + self.requires("libdeflate/[>=1.21]", options={"shared": False}) + self.requires("expat/[>=2.5.0]", options={"shared": False}) + self.requires("libjpeg-turbo/[>3.1.2]", options={"shared": False}) + self.requires("libpng/[>1.6.50]", options={"shared": False}) + self.requires("lz4/[>1.9.0]", options={"shared": False}) + self.requires("nlohmann_json/[>3.10.4]") + self.requires("onedpl/2022.3.0") + self.requires("onetbb/2023.1.0", options={"shared": False, "tbbmalloc": True, "tbbproxy": True}) + self.requires("openexr/[>3.4.5]", options={"shared": False}) + self.requires("portable-file-dialogs/[>=0.1.0]") + self.requires("simdjson/[>1.0.0]", options={"shared": False}) + self.requires("zlib/[>=1.3.2]", options={"shared": False}) + + # glm and dependencies + self.requires("glm/[>=1.0.3]", options={"shared": False}, override=True) + self.requires("gli/cci.20210515") + + # imgui libs (from nabla conan index) + self.requires("nabla_imgui/1.91.8") + + # vulkan libs all have related dependencies + self.requires("vulkan-headers/1.4.357.0") + self.requires("nabla_volk/1.4.357.0") + self.requires("glslang/1.4.357.0", options={"shared": False}) + self.requires("shaderc/2026.4", options={"shared": False}) + self.requires("spirv-tools/1.4.357.0", options={"shared": False}) + self.requires("spirv-headers/1.4.357.0") + self.requires("spirv-cross/1.4.357.0", options={"shared": False, "glsl": True, "reflect": True}) + + def configure(self): + # force libtiff to build against libjpeg-turbo instead of standard libjpeg (as a dependency of openexr) + self.options["libtiff"].jpeg = "libjpeg-turbo" + + def generate(self): + tc = CMakeToolchain(self) + tc.generate() + + deps = CMakeConfigDeps(self) + deps.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + cmake = CMake(self) + cmake.install() \ No newline at end of file diff --git a/examples_tests b/examples_tests index 4a0cc2f683..3e49b9c9de 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 4a0cc2f68349ac188c5a9208ae1cadb2684b4040 +Subproject commit 3e49b9c9de4bddc76031e549cb1f3789d163a7e8 diff --git a/include/nbl/video/CVulkanConnection.h b/include/nbl/video/CVulkanConnection.h index f95c11e6b7..2664925a87 100644 --- a/include/nbl/video/CVulkanConnection.h +++ b/include/nbl/video/CVulkanConnection.h @@ -8,7 +8,7 @@ # include "nbl/ui/IWindowWin32.h" #endif -#include +#include namespace nbl::video { diff --git a/include/nbl/video/surface/CSurfaceVulkan.h b/include/nbl/video/surface/CSurfaceVulkan.h index ddf0e39165..879cc03e99 100644 --- a/include/nbl/video/surface/CSurfaceVulkan.h +++ b/include/nbl/video/surface/CSurfaceVulkan.h @@ -9,7 +9,7 @@ #include "nbl/video/surface/ISurface.h" #include "nbl/video/CVulkanConnection.h" -#include +#include namespace nbl::video { diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 2abcb329f7..b46a829c15 100644 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -89,10 +89,10 @@ if(NBL_TARGET_ARCH_ARM) # list(APPEND PUBLIC_DEFINITIONS $) # TODO: uncomment in the future endif() -set(CONFIG_DIRECOTORY "${CMAKE_CURRENT_BINARY_DIR}/include/nbl/config") -set(CONFIG_OUTPUT "${CONFIG_DIRECOTORY}/BuildConfigOptions.h") -configure_file("${NBL_ROOT_PATH}/include/nbl/config/BuildConfigOptions.h.in" "${CONFIG_DIRECOTORY}/.int/BuildConfigOptions.h.conf") -file(GENERATE OUTPUT "${CONFIG_OUTPUT}" INPUT "${CONFIG_DIRECOTORY}/.int/BuildConfigOptions.h.conf") +set(CONFIG_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/nbl/config") +set(CONFIG_OUTPUT "${CONFIG_DIRECTORY}/BuildConfigOptions.h") +configure_file("${NBL_ROOT_PATH}/include/nbl/config/BuildConfigOptions.h.in" "${CONFIG_DIRECTORY}/.int/BuildConfigOptions.h.conf") +file(GENERATE OUTPUT "${CONFIG_OUTPUT}" INPUT "${CONFIG_DIRECTORY}/.int/BuildConfigOptions.h.conf") nbl_install_file_spec("${CONFIG_OUTPUT}" nbl/config) if (NBL_BUILD_OPTIX) @@ -322,19 +322,14 @@ if(MSVC) list(APPEND NABLA_SRCS_COMMON "${PROJECT_SOURCE_DIR}/tools/debug/VisualStudio/DynamicArrayVisualizer.natvis") endif() -get_target_property(PNG_STATIC_BINARY_DIR png_static BINARY_DIR) +# get_target_property(PNG_STATIC_BINARY_DIR png_static BINARY_DIR) set(PUBLIC_BUILD_INCLUDE_DIRS ${NBL_ROOT_PATH}/include ${CMAKE_CURRENT_BINARY_DIR}/include - ${THIRD_PARTY_SOURCE_DIR} - ${THIRD_PARTY_SOURCE_DIR}/imath/src - ${THIRD_PARTY_SOURCE_DIR}/gtl/include - ${THIRD_PARTY_SOURCE_DIR}/glm + ${THIRD_PARTY_SOURCE_DIR} # TODO: should remove when conan migration complete ${THIRD_PARTY_SOURCE_DIR}/renderdoc # for renderdoc api header - ${CMAKE_BINARY_DIR}/3rdparty/zlib # for dynamically generated zconf.h - ${PNG_STATIC_BINARY_DIR} # for dynamically generated jconfig.h - ${CONFIG_DIRECOTORY} # Nabla config directory + ${CONFIG_DIRECTORY} # Nabla config directory ) # just gather all the header files and later put them into project so it's easy to search for things using IDE @@ -347,9 +342,9 @@ set(NBL_LIBRARY_CREATION_SOURCES ${NABLA_SRCS_COMMON} ${NABLA_HEADERS} $ - $ + # $ $ - $ + # $ ) set(CMAKE_INCLUDE_CURRENT_DIR OFF) @@ -477,153 +472,122 @@ endif() # Parallel Hashmap list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/parallel-hashmap/parallel_hashmap) # TCPP -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/tcpp) -# oneDPL for clang C++17 parallelism +# list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/tcpp) +# oneDPL (formerly Parallel STL) for clang C++17 parallelism if(_NBL_BUILD_DPL_) - add_dependencies(Nabla oneDPL) - list(APPEND PUBLIC_BUILD_INCLUDE_DIRS - ${ONETBB_INSTALL_DIR}/include - ${ONEDPL_INSTALL_DIR}/include - ) - target_link_libraries(Nabla INTERFACE tbb tbbmalloc tbbmalloc_proxy) + find_package(ParallelSTL CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE pstl::ParallelSTL) + find_package(TBB CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE onetbb::onetbb) endif() +# argparse +find_package(argparse CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE argparse::argparse) + # bzip2 -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE bz2_static) -else() - target_link_libraries(Nabla PRIVATE bz2_static) -endif() -add_dependencies(Nabla bz2_static) +find_package(BZip2 CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE BZip2::BZip2) # boost -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${BOOST_PREPROCESSOR_INCLUDE}) +find_package(Boost CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE boost::boost) -if (UNIX) - target_link_libraries(Nabla INTERFACE - ${CMAKE_THREAD_LIBS_INIT} - ${CMAKE_DL_LIBS} - ) - target_link_libraries(Nabla PUBLIC atomic) +get_filename_component(_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${Boost_INCLUDE_DIRS}" ABSOLUTE) +get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/src" ABSOLUTE) +get_filename_component(_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE) +set(BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}/boost" CACHE INTERNAL "" FORCE) + +if(NBL_EMBED_BUILTIN_RESOURCES) + include("${NBL_ROOT_PATH}/src/nbl/builtin/utils.cmake") + + file(GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH}" "${Boost_INCLUDE_DIRS}/*") + + foreach(BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL) + LIST_BUILTIN_RESOURCE(BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL}") + endforeach() + + ADD_CUSTOM_BUILTIN_RESOURCES(boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_}" "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_}" "STATIC" "INTERNAL") endif() +# glm +find_package(glm CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE glm::glm) + # zlib -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE zlibstatic) -else() - target_link_libraries(Nabla PRIVATE zlibstatic) -endif() +find_package(ZLIB CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE ZLIB::ZLIB) # blake3 -add_dependencies(Nabla blake3) -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS $) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE blake3) -else() - target_link_libraries(Nabla PRIVATE blake3) -endif() +find_package(blake3 CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE BLAKE3::blake3) # shaderc -add_dependencies(Nabla shaderc) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE shaderc) -else() - target_link_libraries(Nabla PRIVATE shaderc) -endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/shaderc/libshaderc/include) +find_package(shaderc CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE shaderc::shaderc) # spirv tools -add_dependencies(Nabla SPIRV) -add_dependencies(Nabla SPIRV-Tools) -add_dependencies(Nabla SPIRV-Tools-opt) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE SPIRV SPIRV-Tools SPIRV-Tools-opt) -else() - target_link_libraries(Nabla PRIVATE SPIRV SPIRV-Tools SPIRV-Tools-opt) -endif() +find_package(SPIRV-Tools CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE spirv-tools::spirv-tools) +# SPIRV-Tools-opt target_include_directories(Nabla BEFORE PRIVATE "${THIRD_PARTY_SOURCE_DIR}/dxc/dxc/include" - PRIVATE $ - PRIVATE $ + # PRIVATE $ + # PRIVATE $ ) -# nlohmann_json -add_dependencies(Nabla nlohmann_json) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE nlohmann_json::nlohmann_json) -else() - target_link_libraries(Nabla PRIVATE nlohmann_json::nlohmann_json) -endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/nlohmann_json/include) +# spirv headers +find_package(SPIRV-Headers CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE SPIRV-Headers::SPIRV-Headers) +# spirv cross +find_package(spirv-cross CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE spirv-cross-core spirv-cross-glsl spirv-cross-reflect) + +# nlohmann_json +find_package(nlohmann_json CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE nlohmann_json::nlohmann_json) # simdjson -add_dependencies(Nabla simdjson) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE simdjson) -else() - target_link_libraries(Nabla PRIVATE simdjson) -endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/simdjson) +find_package(simdjson CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE simdjson::simdjson) + +# lz4 +find_package(lz4 CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE LZ4::lz4_static) # libjpeg -add_dependencies(Nabla jpeg-static) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla PUBLIC jpeg-static) -else() - target_link_libraries(Nabla PRIVATE jpeg-static) -endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/libjpeg-turbo) +find_package(libjpeg-turbo CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE libjpeg-turbo::libjpeg-turbo) # libpng -add_dependencies(Nabla png_static) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE png_static) -else() - target_link_libraries(Nabla PRIVATE png_static) -endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/libpng) +find_package(PNG CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE PNG::PNG) + +# gtl +find_package(gtl CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE gtl::gtl) # OpenEXR +option(_NBL_COMPILE_WITH_OPEN_EXR_ "Build with OpenEXR library" ON) if (_NBL_COMPILE_WITH_OPEN_EXR_) - add_dependencies(Nabla OpenEXR) - if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE OpenEXR) - else() - target_link_libraries(Nabla PRIVATE OpenEXR) - endif() - - list(APPEND PUBLIC_BUILD_INCLUDE_DIRS $) -endif() + find_package(libdeflate CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE libdeflate::libdeflate_static) -add_dependencies(Nabla OpenEXRCore OpenEXRUtil) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE - OpenEXRCore - OpenEXRUtil -) -else() - target_link_libraries(Nabla PRIVATE - OpenEXRCore - OpenEXRUtil - ) + find_package(OpenEXR CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE openexr::openexr) endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS - $ - $ -) +# Imath +find_package(Imath CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE Imath::Imath) # GLI +option(_NBL_COMPILE_WITH_GLI_ "Build with GLI library" ON) if(_NBL_COMPILE_WITH_GLI_) - add_dependencies(Nabla gli) - if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE gli) - else() - target_link_libraries(Nabla PRIVATE gli) - endif() - list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/gli) + find_package(gli CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE gli) endif() # DXC (TODO: nah, lets remove/disable it) @@ -658,14 +622,22 @@ if (UNIX AND NOT ANDROID AND NOT APPLE) endif() # Vulkan -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS - ${THIRD_PARTY_SOURCE_DIR}/Vulkan-Headers/include - ${THIRD_PARTY_SOURCE_DIR}/volk -) -target_link_libraries(Nabla PRIVATE volk) +find_package(VulkanHeaders CONFIG REQUIRED) +target_link_libraries(Nabla INTERFACE vulkan-headers::vulkan-headers) + +# volk +if (WIN32) + set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_WIN32_KHR) +endif() +find_package(nabla_volk CONFIG REQUIRED) +target_link_libraries(Nabla PUBLIC nabla_volk::volk) # volk is part of public interface headers in Nabla target_compile_definitions(Nabla PUBLIC $<$:VK_USE_PLATFORM_WIN32_KHR>) +# glslang +find_package(glslang CONFIG REQUIRED) +target_link_libraries(Nabla PRIVATE glslang::glslang) + list(APPEND PUBLIC_BUILD_INCLUDE_DIRS # 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 # -> TODO @@ -677,19 +649,18 @@ list(APPEND PUBLIC_BUILD_INCLUDE_DIRS target_include_directories(Nabla PRIVATE ${CMAKE_BINARY_DIR}/include) -target_compile_definitions(Nabla - PRIVATE SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS - PUBLIC _NBL_PCH_IGNORE_PRIVATE_HEADERS # TODO: remove it -) - -# Boost -add_dependencies(Nabla boost_wave) -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS $) +# target_compile_definitions(Nabla +# PRIVATE SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS +# PUBLIC _NBL_PCH_IGNORE_PRIVATE_HEADERS # TODO: remove it +# ) -if(NBL_STATIC_BUILD) - target_link_libraries(Nabla PUBLIC boost_wave) -else() - target_link_libraries(Nabla PRIVATE boost_wave) +if (NBL_BUILD_MITSUBA_LOADER) + find_package(expat CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE expat::expat) +endif() +if (NBL_BUILD_IMGUI) + find_package(nabla_imgui CONFIG REQUIRED) + target_link_libraries(Nabla PRIVATE nabla_imgui::imgui nabla_imgui::implot nabla_imgui::imtestengine nabla_imgui::imguizmo) endif() add_dependencies(Nabla DeviceHeaders) @@ -869,32 +840,32 @@ target_compile_definitions(Nabla INTERFACE if(NBL_STATIC_BUILD) # install dependencies, they are required only for static Nabla builds - nbl_install_lib(glslang) + # nbl_install_lib(glslang) nbl_install_lib(GenericCodeGen) nbl_install_lib(MachineIndependent) - nbl_install_lib(jpeg-static) - if (_NBL_COMPILE_WITH_OPEN_EXR_) - nbl_install_lib(OpenEXR) - else() - nbl_install_lib(OpenEXRCore) - nbl_install_lib(OpenEXRUtil) - endif() - nbl_install_lib(png_static) - nbl_install_lib(shaderc) - nbl_install_lib(shaderc_util) + # nbl_install_lib(jpeg-static) + # if (_NBL_COMPILE_WITH_OPEN_EXR_) + # nbl_install_lib(OpenEXR) + # else() + # nbl_install_lib(OpenEXRCore) + # nbl_install_lib(OpenEXRUtil) + # endif() + # nbl_install_lib(png_static) + # nbl_install_lib(shaderc) + # nbl_install_lib(shaderc_util) nbl_install_lib(SPIRV) - nbl_install_lib(SPIRV-Tools-static) # TODO: make this function/macro work with alias target - nbl_install_lib(SPIRV-Tools-opt) + # nbl_install_lib(SPIRV-Tools-static) # TODO: make this function/macro work with alias target + # nbl_install_lib(SPIRV-Tools-opt) nbl_install_lib(OSDependent) - nbl_install_lib(zlibstatic) - nbl_install_lib(simdjson) - nbl_install_lib(volk) + # nbl_install_lib(zlibstatic) + # nbl_install_lib(simdjson) + # nbl_install_lib(volk) - if(_NBL_BUILD_DPL_) - nbl_install_program(tbb) - nbl_install_program(tbbmalloc) - nbl_install_program(tbbmalloc_proxy) - endif() + # if(_NBL_BUILD_DPL_) + # nbl_install_program(tbb) + # nbl_install_program(tbbmalloc) + # nbl_install_program(tbbmalloc_proxy) + # endif() else() nbl_install_program_spec(Nabla "nbl") endif() diff --git a/src/nbl/asset/interchange/CImageLoaderPNG.cpp b/src/nbl/asset/interchange/CImageLoaderPNG.cpp index 1e15195a73..b9d7471ebf 100644 --- a/src/nbl/asset/interchange/CImageLoaderPNG.cpp +++ b/src/nbl/asset/interchange/CImageLoaderPNG.cpp @@ -17,7 +17,7 @@ using namespace core; #include "CImageLoaderPNG.h" #ifdef _NBL_COMPILE_WITH_LIBPNG_ -# include "libpng/png.h" +#include "libpng16/png.h" #endif // _NBL_COMPILE_WITH_LIBPNG_ #include "nbl/system/IFile.h" diff --git a/src/nbl/asset/interchange/CImageWriterPNG.cpp b/src/nbl/asset/interchange/CImageWriterPNG.cpp index ddb9cc1933..e54196147c 100644 --- a/src/nbl/asset/interchange/CImageWriterPNG.cpp +++ b/src/nbl/asset/interchange/CImageWriterPNG.cpp @@ -18,7 +18,7 @@ #include "CImageLoaderPNG.h" #ifdef _NBL_COMPILE_WITH_LIBPNG_ - #include "libpng/png.h" +#include "libpng16/png.h" #endif // _NBL_COMPILE_WITH_LIBPNG_ namespace nbl::asset diff --git a/src/nbl/asset/utils/CHLSLCompiler.cpp b/src/nbl/asset/utils/CHLSLCompiler.cpp index c378048180..b2a806741a 100644 --- a/src/nbl/asset/utils/CHLSLCompiler.cpp +++ b/src/nbl/asset/utils/CHLSLCompiler.cpp @@ -20,6 +20,7 @@ #include #include #include +#include "nbl/asset/utils/waveContext.h" using namespace nbl; using namespace nbl::asset; @@ -354,8 +355,6 @@ static DxcCompilationResult dxcCompile(const CHLSLCompiler* compiler, nbl::asset return result; } -#include "nbl/asset/utils/waveContext.h" - namespace nbl::wave { extern nbl::core::string preprocess(std::string& code, const IShaderCompiler::SPreprocessorOptions& preprocessOptions, bool withCaching, std::function post); diff --git a/src/nbl/asset/utils/CSPIRVIntrospector.cpp b/src/nbl/asset/utils/CSPIRVIntrospector.cpp index 818fbc584b..28431f9a76 100644 --- a/src/nbl/asset/utils/CSPIRVIntrospector.cpp +++ b/src/nbl/asset/utils/CSPIRVIntrospector.cpp @@ -7,8 +7,8 @@ #include "nbl/asset/ICPUPipeline.h" #include "nbl/asset/utils/spvUtils.h" -#include "nbl_spirv_cross/spirv_parser.hpp" -#include "nbl_spirv_cross/spirv_cross.hpp" +#include "spirv_cross/spirv_parser.hpp" +#include "spirv_cross/spirv_cross.hpp" namespace nbl::asset { diff --git a/src/nbl/asset/utils/CWaveStringResolver.cpp b/src/nbl/asset/utils/CWaveStringResolver.cpp index 84fffc5581..a9002c0d89 100644 --- a/src/nbl/asset/utils/CWaveStringResolver.cpp +++ b/src/nbl/asset/utils/CWaveStringResolver.cpp @@ -13,12 +13,11 @@ #include #include #include +#include "nbl/asset/utils/waveContext.h" using namespace nbl; using namespace nbl::asset; -#include "nbl/asset/utils/waveContext.h" - namespace { constexpr size_t kWaveFailureLogOutputTailMaxChars = 4096ull; diff --git a/src/nbl/asset/utils/ISPIRVEntryPointTrimmer.cpp b/src/nbl/asset/utils/ISPIRVEntryPointTrimmer.cpp index 8c3b72e08b..04f39182d7 100644 --- a/src/nbl/asset/utils/ISPIRVEntryPointTrimmer.cpp +++ b/src/nbl/asset/utils/ISPIRVEntryPointTrimmer.cpp @@ -1,6 +1,6 @@ #include "nbl/asset/utils/ISPIRVEntryPointTrimmer.h" #include "nbl/asset/utils/ISPIRVOptimizer.h" -#include "nbl_spirv_cross/spirv.hpp" +#include "spirv_cross/spirv.hpp" #include "nbl/core/declarations.h" #include "nbl/system/ILogger.h" diff --git a/src/nbl/asset/utils/spvUtils.h b/src/nbl/asset/utils/spvUtils.h index d3c58b0b48..11df835b49 100644 --- a/src/nbl/asset/utils/spvUtils.h +++ b/src/nbl/asset/utils/spvUtils.h @@ -5,7 +5,7 @@ #define _NBL_ASSET_C_SPV_UTILS_H_INCLUDED_ #include "nbl/asset/IShader.h" -#include "nbl_spirv_cross/spirv_cross.hpp" +#include "spirv_cross/spirv_cross.hpp" namespace nbl { diff --git a/src/nbl/asset/utils/waveContext.h b/src/nbl/asset/utils/waveContext.h index 4904846463..8d5e3835c8 100644 --- a/src/nbl/asset/utils/waveContext.h +++ b/src/nbl/asset/utils/waveContext.h @@ -311,14 +311,14 @@ struct preprocessing_hooks final : public boost::wave::context_policies::default return false; } auto shaderStageIdentifier = std::string(valueIter->get_value().c_str()); - const static core::unordered_map stageFromIdent = + const static core::unordered_map stageFromIdent = { - { "vertex", IShader::E_SHADER_STAGE::ESS_VERTEX }, - { "fragment", IShader::E_SHADER_STAGE::ESS_FRAGMENT }, - { "tesscontrol", IShader::E_SHADER_STAGE::ESS_TESSELLATION_CONTROL }, - { "tesseval", IShader::E_SHADER_STAGE::ESS_TESSELLATION_EVALUATION }, - { "geometry", IShader::E_SHADER_STAGE::ESS_GEOMETRY }, - { "compute", IShader::E_SHADER_STAGE::ESS_COMPUTE } + { "vertex", asset::IShader::E_SHADER_STAGE::ESS_VERTEX }, + { "fragment", asset::IShader::E_SHADER_STAGE::ESS_FRAGMENT }, + { "tesscontrol", asset::IShader::E_SHADER_STAGE::ESS_TESSELLATION_CONTROL }, + { "tesseval", asset::IShader::E_SHADER_STAGE::ESS_TESSELLATION_EVALUATION }, + { "geometry", asset::IShader::E_SHADER_STAGE::ESS_GEOMETRY }, + { "compute", asset::IShader::E_SHADER_STAGE::ESS_COMPUTE } }; auto found = stageFromIdent.find(shaderStageIdentifier); if (found == stageFromIdent.end()) @@ -727,7 +727,7 @@ class context : private boost::noncopyable cachingRequested = b; } - std::vector&& get_dependencies() { + std::vector&& get_dependencies() { return std::move(dependencies); } @@ -751,7 +751,7 @@ class context : private boost::noncopyable std::unordered_map include_resolution_cache; // Cache Additions bool cachingRequested = false; - std::vector dependencies = {}; + std::vector dependencies = {}; // Nabla Additions End boost::wave::util::if_block_stack ifblocks; // conditional compilation contexts @@ -795,7 +795,7 @@ template<> inline bool boost::wave::impl::pp_iterator_functor inline bool boost::wave::impl::pp_iterator_functor diff --git a/src/nbl/system/CArchiveLoaderZip.cpp b/src/nbl/system/CArchiveLoaderZip.cpp index c820f12cb6..80633481cc 100644 --- a/src/nbl/system/CArchiveLoaderZip.cpp +++ b/src/nbl/system/CArchiveLoaderZip.cpp @@ -5,9 +5,9 @@ #include #include -#include +#include -#include +#include #include "nbl/nblpack.h" diff --git a/src/nbl/video/CVulkanDeviceFunctionTable.h b/src/nbl/video/CVulkanDeviceFunctionTable.h index 343485a7bf..0d601afb39 100644 --- a/src/nbl/video/CVulkanDeviceFunctionTable.h +++ b/src/nbl/video/CVulkanDeviceFunctionTable.h @@ -1,7 +1,7 @@ #ifndef _C_VULKAN_FUNCTION_TABLE_H_INCLUDED_ #define _C_VULKAN_FUNCTION_TABLE_H_INCLUDED_ -#include +#include namespace nbl::video { diff --git a/tools/nite/CMakeLists.txt b/tools/nite/CMakeLists.txt index 946453a553..a1ab04eac6 100644 --- a/tools/nite/CMakeLists.txt +++ b/tools/nite/CMakeLists.txt @@ -13,9 +13,10 @@ set(NBL_EXTRA_LIBS nbl_create_executable_project("" "${NBL_EXTRA_OPTIONS}" "${NBL_EXTRA_INCLUDES}" "${NBL_EXTRA_LIBS}") -add_dependencies(${EXECUTABLE_NAME} argparse) +find_package(argparse CONFIG REQUIRED) +target_link_libraries(${EXECUTABLE_NAME} PRIVATE argparse::argparse) target_include_directories(${EXECUTABLE_NAME} PUBLIC - $ + # $ "${NBL_ROOT_PATH}/examples_tests/common/include" ) diff --git a/tools/xxHash256/CMakeLists.txt b/tools/xxHash256/CMakeLists.txt index 7484b3955c..21d8f0f51c 100644 --- a/tools/xxHash256/CMakeLists.txt +++ b/tools/xxHash256/CMakeLists.txt @@ -3,9 +3,10 @@ set(EXECUTABLE_NAME xxHash256) project(${EXECUTABLE_NAME}) add_executable(${EXECUTABLE_NAME} main.cpp) -add_dependencies(${EXECUTABLE_NAME} argparse) +find_package(argparse CONFIG REQUIRED) +target_link_libraries(${EXECUTABLE_NAME} PRIVATE argparse::argparse) target_include_directories(${EXECUTABLE_NAME} PUBLIC - $ + # $ $ # only for xxHash256 include directory, we DO NOT want to link it nor use it ) target_compile_definitions(${EXECUTABLE_NAME} PUBLIC "$") # workaround because must use Nabla headers without linking Nabla to itself..