From 5e302b442f80a66db734688cace13ea52e0a8a2f Mon Sep 17 00:00:00 2001 From: Arkadiusz Lachowicz Date: Sun, 23 Nov 2025 10:01:36 +0100 Subject: [PATCH 1/5] update freetype2 to upstream's master --- 3rdparty/freetype2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/freetype2 b/3rdparty/freetype2 index fbbcf50367..6d4977d660 160000 --- a/3rdparty/freetype2 +++ b/3rdparty/freetype2 @@ -1 +1 @@ -Subproject commit fbbcf50367403a6316a013b51690071198962920 +Subproject commit 6d4977d66033e7841219bdc2b686a97552091ade From 9ae8b68ec8cfd1e4024a2a0060510da88b5c8c1c Mon Sep 17 00:00:00 2001 From: Arkadiusz Lachowicz Date: Sun, 23 Nov 2025 10:10:28 +0100 Subject: [PATCH 2/5] update zlib to its upstream master --- 3rdparty/zlib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/zlib b/3rdparty/zlib index cacf7f1d4e..5a82f71ed1 160000 --- a/3rdparty/zlib +++ b/3rdparty/zlib @@ -1 +1 @@ -Subproject commit cacf7f1d4e3d44d871b605da3b647f07d718623f +Subproject commit 5a82f71ed1dfc0bec044d9702463dbdf84ea3b71 From b244e1167f930606e208a7ba698f70f55d7afa0a Mon Sep 17 00:00:00 2001 From: Arkadiusz Lachowicz Date: Sun, 23 Nov 2025 10:13:40 +0100 Subject: [PATCH 3/5] update libjpeg-turbo to its upstream master --- 3rdparty/libjpeg-turbo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/libjpeg-turbo b/3rdparty/libjpeg-turbo index 97a1575cb8..0b742742c8 160000 --- a/3rdparty/libjpeg-turbo +++ b/3rdparty/libjpeg-turbo @@ -1 +1 @@ -Subproject commit 97a1575cb877e593cf9940cd869f41b1ddd4a4fd +Subproject commit 0b742742c873025e2a127918d4969238ace7ae5b From 8453c8805320bdebbb8e4056dc0557c40bff143e Mon Sep 17 00:00:00 2001 From: Arkadiusz Lachowicz Date: Sun, 23 Nov 2025 17:11:43 +0100 Subject: [PATCH 4/5] update 3rdparty/libpng to its upstream master, clean some part of build system and adjust to configure with CMake 4.2 --- 3rdparty/CMakeLists.txt | 156 +++++++++++++++++------------------- 3rdparty/dxc/CMakeLists.txt | 1 + 3rdparty/libpng | 2 +- CMakeLists.txt | 2 +- src/nbl/CMakeLists.txt | 19 +---- 5 files changed, 76 insertions(+), 104 deletions(-) diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 4ee86dcfcd..2777ff26d9 100755 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -6,6 +6,9 @@ include(../cmake/common.cmake) project(Nabla-3rdparty LANGUAGES CXX C) enable_language(C CXX ASM ASM_NASM) +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) @@ -15,16 +18,7 @@ set(JSON_BuildTests OFF) add_subdirectory(nlohmann_json nlohmann_json EXCLUDE_FROM_ALL) # simdjson -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) add_subdirectory(simdjson simdjson 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}) # freetype2 set(FT_WITH_HARFBUZZ OFF) @@ -87,64 +81,21 @@ endif() # boost add_subdirectory(boost boost EXCLUDE_FROM_ALL) -# zlib (target is zlibstatic) -set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) -set(_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL}) -set(BUILD_SHARED_LIBS OFF) -set(SKIP_INSTALL_ALL ON) - -file(LOCK "${CMAKE_CURRENT_SOURCE_DIR}/zlib" DIRECTORY GUARD PROCESS RESULT_VARIABLE NBL_LOCK TIMEOUT 60) +# 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) -if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/zconf.h.included") - execute_process(COMMAND "${CMAKE_COMMAND}" -E rename zconf.h.included zconf.h - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/zlib" - ) # clean zlib git working-tree -endif() -file(LOCK "${CMAKE_CURRENT_SOURCE_DIR}/zlib" DIRECTORY RELEASE RESULT_VARIABLE NBL_LOCK) -set(SKIP_INSTALL_ALL ${_OLD_SKIP_INSTALL_ALL}) -set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS}) - -get_target_property(ZLIB_SOURCE_DIR zlibstatic "SOURCE_DIR") +add_library(ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it get_target_property(ZLIB_BINARY_DIR zlibstatic "BINARY_DIR") -get_filename_component(_ORIGINAL_SOURCE_ "${ZLIB_SOURCE_DIR}" ABSOLUTE) -get_filename_component(_COPY_BIN_SOURCE_ "${ZLIB_BINARY_DIR}/copy_source" ABSOLUTE) - -add_custom_target(zlib_copy - COMMAND ${CMAKE_COMMAND} -E rm -Rf "${_COPY_BIN_SOURCE_}" - COMMAND ${CMAKE_COMMAND} -E copy_directory "${_ORIGINAL_SOURCE_}" "${_COPY_BIN_SOURCE_}" - COMMAND ${CMAKE_COMMAND} -E rm -f ${_COPY_BIN_SOURCE_}/zconf.h # no duplicates in include search paths! - COMMENT "Copying zlib..." +set_target_properties(zlibstatic PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR}> + DEBUG_POSTFIX "d" + OUTPUT_NAME zlibstatic ) -unset(_ORIGINAL_SOURCE_) -unset(_COPY_BIN_SOURCE_) - -#https://stackoverflow.com/questions/47175912/using-cmake-how-to-stop-the-debug-and-release-subdirectories -set_target_properties(zlibstatic PROPERTIES ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR}>) -set_target_properties(zlibstatic PROPERTIES DEBUG_POSTFIX "d") -if (MSVC) - set(ZLIB_BINARY_DIR_DEBUG "${ZLIB_BINARY_DIR}") - set(ZLIB_BINARY_DIR_RELEASE "${ZLIB_BINARY_DIR}") - set(ZLIB_BINARY_DIR_RELWITHDEBINFO "${ZLIB_BINARY_DIR}") - get_target_property(ZLIB_NAME zlibstatic "NAME") -else() - set(ZLIB_BINARY_DIR_DEBUG ${ZLIB_BINARY_DIR}) - set(ZLIB_BINARY_DIR_RELEASE ${ZLIB_BINARY_DIR}) - set(ZLIB_BINARY_DIR_RELWITHDEBINFO ${ZLIB_BINARY_DIR}) - get_target_property(ZLIB_NAME zlibstatic "OUTPUT_NAME") -endif() - -get_target_property(ZLIB_DEBUG_POSTFIX zlibstatic "DEBUG_POSTFIX") -set(ZLIB_INCLUDE_DIR "${THIRD_PARTY_SOURCE_DIR}/zlib;${THIRD_PARTY_BINARY_DIR}/zlib" CACHE INTERNAL "" FORCE) -set(ZLIB_LIBRARY_DEBUG "${ZLIB_BINARY_DIR_DEBUG}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${ZLIB_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE INTERNAL "" FORCE) -set(ZLIB_LIBRARY_RELEASE "${ZLIB_BINARY_DIR_RELEASE}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE INTERNAL "" FORCE) -set(ZLIB_LIBRARY_RELWITHDEBINFO "${ZLIB_BINARY_DIR_RELWITHDEBINFO}/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE INTERNAL "" FORCE) -set(ZLIB_LIBRARY # for PNGLIB purposes - $<$:${ZLIB_LIBRARY_DEBUG}> - $<$:${ZLIB_LIBRARY_RELEASE}> - $<$:${ZLIB_LIBRARY_RELWITHDEBINFO}> -CACHE INTERNAL "" FORCE) - 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) @@ -167,29 +118,67 @@ set(SHADERC_SKIP_INSTALL ON CACHE INTERNAL "Install shaderc?") add_subdirectory(shaderc shaderc EXCLUDE_FROM_ALL) # libjpeg-turbo -option(WITH_SIMD "libjpeg-turbo" ON) -option(WITH_MEM_SRCDST "libjpeg-turbo" ON) -option(WITH_TURBOJPEG "libjpeg-turbo" ON) -option(ENABLE_STATIC "libjpeg-turbo" ON) -option(ENABLE_SHARED "libjpeg-turbo" OFF) -option(WITH_CRT_DLL "libjpeg-turbo" OFF) -option(WITH_FUZZ "libjpeg-turbo" OFF) -option(WITH_JAVA "libjpeg-turbo" OFF) -set(CMAKE_INSTALL_DOCDIR "${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/install/docdir") -set(CMAKE_INSTALL_MANDIR "${CMAKE_CURRENT_BINARY_DIR}/libjpeg-turbo/install/mandir") -add_subdirectory(libjpeg-turbo libjpeg-turbo EXCLUDE_FROM_ALL) -NBL_TARGET_FORCE_ASSEMBLER_EXECUTABLE(simd ASM_NASM libjpeg-turbo/simd/) - -unset(CMAKE_INSTALL_DOCDIR) -unset(CMAKE_INSTALL_MANDIR) +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() + +# 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 ON CACHE INTERNAL "" FORCE) # get ZLIB from our /3rdparty -option(PNG_SHARED "Build shared lib" OFF) -option(PNG_TESTS "Build libpng tests" OFF) +# 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) @@ -441,7 +430,7 @@ if (NBL_BUILD_MITSUBA_LOADER) ) set(MITSUBA_LOADER_DEPENDENTS ${MITSUBA_LOADER_DEPENDENTS} PARENT_SCOPE) set(MITSUBA_LOADER_DEPENDENT_LIBS - expat "${ZLIB_LIBRARY}" + expat zlibstatic ) set(MITSUBA_LOADER_DEPENDENT_LIBS ${MITSUBA_LOADER_DEPENDENT_LIBS} PARENT_SCOPE) endif() @@ -468,7 +457,6 @@ set(NBL_3RDPARTY_TARGETS zlibstatic shaderc_util shaderc - jpeg-static bz2_static simdjson nlohmann_json diff --git a/3rdparty/dxc/CMakeLists.txt b/3rdparty/dxc/CMakeLists.txt index 9432b4df07..d6ea0d0554 100644 --- a/3rdparty/dxc/CMakeLists.txt +++ b/3rdparty/dxc/CMakeLists.txt @@ -98,6 +98,7 @@ if(CMAKE_TOOLCHAIN_FILE) list(APPEND NBL_DXC_CMAKE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") endif() +# TODO: add_subdirectory but don't modify dxc target compile options execute_process(COMMAND "${CMAKE_COMMAND}" -C "${CMAKE_CURRENT_SOURCE_DIR}/dxc/cmake/caches/PredefinedParams.cmake" -S "${CMAKE_CURRENT_SOURCE_DIR}/dxc" -B "${DXC_BUILD_DIR}" -G "${CMAKE_GENERATOR}" ${NBL_DXC_CMAKE_OPTIONS} RESULT_VARIABLE DXC_CMAKE_RESULT OUTPUT_VARIABLE DXC_CMAKE_STREAM_PIPE diff --git a/3rdparty/libpng b/3rdparty/libpng index 8439534daa..49363adcfa 160000 --- a/3rdparty/libpng +++ b/3rdparty/libpng @@ -1 +1 @@ -Subproject commit 8439534daa1d3a5705ba92e653eda9251246dd61 +Subproject commit 49363adcfaf098748d7a4c8c624ad8c45a8c3a86 diff --git a/CMakeLists.txt b/CMakeLists.txt index 522793170d..bedb9f1dc2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O. # This file is part of the "Nabla Engine". # For conditions of distribution and use, see copyright notice in nabla.h.in or nabla.h -cmake_minimum_required(VERSION 3.31) +cmake_minimum_required(VERSION 3.31..4.2.0) # 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 diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index d932715fe4..f52b60539b 100644 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -307,7 +307,6 @@ if(MSVC) list(APPEND NABLA_SRCS_COMMON "${PROJECT_SOURCE_DIR}/tools/debug/VisualStudio/DynamicArrayVisualizer.natvis") endif() -get_target_property(JPEG_STATIC_BINARY_DIR jpeg-static BINARY_DIR) get_target_property(PNG_STATIC_BINARY_DIR png_static BINARY_DIR) set(PUBLIC_BUILD_INCLUDE_DIRS @@ -319,7 +318,6 @@ set(PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/glm ${THIRD_PARTY_SOURCE_DIR}/renderdoc # for renderdoc api header ${CMAKE_BINARY_DIR}/3rdparty/zlib # for dynamically generated zconf.h - ${JPEG_STATIC_BINARY_DIR} # for dynamically generated pnglibconf.h ${PNG_STATIC_BINARY_DIR} # for dynamically generated jconfig.h ${CONFIG_DIRECOTORY} # Nabla config directory ) @@ -486,27 +484,12 @@ if (UNIX) endif() # zlib -add_dependencies(zlibstatic zlib_copy) -add_dependencies(Nabla zlibstatic) - if(NBL_STATIC_BUILD) target_link_libraries(Nabla INTERFACE zlibstatic) - target_link_libraries(Nabla INTERFACE - $<$:${ZLIB_LIBRARY_DEBUG}> - $<$:${ZLIB_LIBRARY_RELEASE}> - $<$:${ZLIB_LIBRARY_RELWITHDEBINFO}> - ) else() target_link_libraries(Nabla PRIVATE zlibstatic) - target_link_libraries(Nabla PRIVATE - $<$:${ZLIB_LIBRARY_DEBUG}> - $<$:${ZLIB_LIBRARY_RELEASE}> - $<$:${ZLIB_LIBRARY_RELWITHDEBINFO}> - ) endif() -list(APPEND PUBLIC_BUILD_INCLUDE_DIRS $/copy_source) - # blake3 add_dependencies(Nabla blake3) list(APPEND PUBLIC_BUILD_INCLUDE_DIRS $) @@ -562,7 +545,7 @@ list(APPEND PUBLIC_BUILD_INCLUDE_DIRS ${THIRD_PARTY_SOURCE_DIR}/simdjson) # libjpeg add_dependencies(Nabla jpeg-static) if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE jpeg-static) + target_link_libraries(Nabla PUBLIC jpeg-static) else() target_link_libraries(Nabla PRIVATE jpeg-static) endif() From 6170a89373a71c3402f8bb73ce05bbab4dca1ce5 Mon Sep 17 00:00:00 2001 From: Arkadiusz Lachowicz Date: Sun, 23 Nov 2025 17:36:21 +0100 Subject: [PATCH 5/5] oh got fooled by my local cache, keep ZLIB_INCLUDE_DIR and ZLIB_LIBRARY to trick find_package calls --- 3rdparty/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 2777ff26d9..558496a753 100755 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -88,13 +88,15 @@ set(ZLIB_INSTALL OFF) set(ZLIB_BUILD_TESTING OFF) set(ZLIB_BUILD_MINIZIP OFF) add_subdirectory(zlib zlib EXCLUDE_FROM_ALL) -add_library(ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it get_target_property(ZLIB_BINARY_DIR zlibstatic "BINARY_DIR") set_target_properties(zlibstatic PROPERTIES ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR}> DEBUG_POSTFIX "d" OUTPUT_NAME zlibstatic ) +add_library(ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it via alias +set(ZLIB_INCLUDE_DIR "${THIRD_PARTY_SOURCE_DIR}/zlib;${THIRD_PARTY_BINARY_DIR}/zlib" CACHE INTERNAL "" FORCE) # and +set(ZLIB_LIBRARY zlibstatic CACHE INTERNAL "" FORCE) # find_package set(SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install") set(SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples")