@@ -6,6 +6,9 @@ include(../cmake/common.cmake)
66
77project (Nabla-3rdparty LANGUAGES CXX C)
88enable_language (C CXX ASM ASM_NASM)
9+ set (BUILD_SHARED_LIBS OFF )
10+ set (SKIP_INSTALL_ALL ON )
11+ set (BUILD_TESTING OFF )
912
1013option (NBL_FORCE_RELEASE_3RDPARTY "Force map 3rdaprty's configuration regardless Nabla configuration to Release" OFF )
1114option (NBL_FORCE_RELWITHDEBINFO_3RDPARTY "Force map 3rdaprty's configuration regardless Nabla configuration to RelWithDebInfo" OFF )
@@ -15,16 +18,7 @@ set(JSON_BuildTests OFF)
1518add_subdirectory (nlohmann_json nlohmann_json EXCLUDE_FROM_ALL )
1619
1720# simdjson
18- set (_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} )
19- set (_OLD_BUILD_STATIC_LIBS ${BUILD_STATIC_LIBS} )
20- set (_OLD_BUILD_TESTING ${BUILD_TESTING} )
21- set (BUILD_SHARED_LIBS OFF )
22- set (BUILD_STATIC_LIBS OFF )
23- set (BUILD_TESTING OFF )
2421add_subdirectory (simdjson simdjson EXCLUDE_FROM_ALL )
25- set (BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS} )
26- set (BUILD_STATIC_LIBS ${_OLD_BUILD_STATIC_LIBS} )
27- set (BUILD_TESTING ${_OLD_BUILD_TESTING} )
2822
2923# freetype2
3024set (FT_WITH_HARFBUZZ OFF )
@@ -87,63 +81,22 @@ endif()
8781# boost
8882add_subdirectory (boost boost EXCLUDE_FROM_ALL )
8983
90- # zlib (target is zlibstatic)
91- set (_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} )
92- set (_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL} )
93- set (BUILD_SHARED_LIBS OFF )
94- set (SKIP_INSTALL_ALL ON )
95-
96- file (LOCK "${CMAKE_CURRENT_SOURCE_DIR} /zlib" DIRECTORY GUARD PROCESS RESULT_VARIABLE NBL_LOCK TIMEOUT 60)
84+ # zlib
85+ set (ZLIB_BUILD_SHARED OFF )
86+ set (ZLIB_BUILD_STATIC ON )
87+ set (ZLIB_INSTALL OFF )
88+ set (ZLIB_BUILD_TESTING OFF )
89+ set (ZLIB_BUILD_MINIZIP OFF )
9790add_subdirectory (zlib zlib EXCLUDE_FROM_ALL )
98- if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR} /zlib/zconf.h.included" )
99- execute_process (COMMAND "${CMAKE_COMMAND} " -E rename zconf.h.included zconf.h
100- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} /zlib"
101- ) # clean zlib git working-tree
102- endif ()
103- file (LOCK "${CMAKE_CURRENT_SOURCE_DIR} /zlib" DIRECTORY RELEASE RESULT_VARIABLE NBL_LOCK)
104- set (SKIP_INSTALL_ALL ${_OLD_SKIP_INSTALL_ALL} )
105- set (BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS} )
106-
107- get_target_property (ZLIB_SOURCE_DIR zlibstatic "SOURCE_DIR" )
10891get_target_property (ZLIB_BINARY_DIR zlibstatic "BINARY_DIR" )
109- get_filename_component (_ORIGINAL_SOURCE_ "${ZLIB_SOURCE_DIR} " ABSOLUTE )
110- get_filename_component (_COPY_BIN_SOURCE_ "${ZLIB_BINARY_DIR} /copy_source" ABSOLUTE )
111-
112- add_custom_target (zlib_copy
113- COMMAND ${CMAKE_COMMAND} -E rm -Rf "${_COPY_BIN_SOURCE_} "
114- COMMAND ${CMAKE_COMMAND} -E copy_directory "${_ORIGINAL_SOURCE_} " "${_COPY_BIN_SOURCE_} "
115- COMMAND ${CMAKE_COMMAND} -E rm -f ${_COPY_BIN_SOURCE_} /zconf.h # no duplicates in include search paths!
116- COMMENT "Copying zlib..."
92+ set_target_properties (zlibstatic PROPERTIES
93+ ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR} >
94+ DEBUG_POSTFIX "d"
95+ OUTPUT_NAME zlibstatic
11796)
118-
119- unset (_ORIGINAL_SOURCE_)
120- unset (_COPY_BIN_SOURCE_)
121-
122- #https://stackoverflow.com/questions/47175912/using-cmake-how-to-stop-the-debug-and-release-subdirectories
123- set_target_properties (zlibstatic PROPERTIES ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR} >)
124- set_target_properties (zlibstatic PROPERTIES DEBUG_POSTFIX "d" )
125- if (MSVC )
126- set (ZLIB_BINARY_DIR_DEBUG "${ZLIB_BINARY_DIR} " )
127- set (ZLIB_BINARY_DIR_RELEASE "${ZLIB_BINARY_DIR} " )
128- set (ZLIB_BINARY_DIR_RELWITHDEBINFO "${ZLIB_BINARY_DIR} " )
129- get_target_property (ZLIB_NAME zlibstatic "NAME" )
130- else ()
131- set (ZLIB_BINARY_DIR_DEBUG ${ZLIB_BINARY_DIR} )
132- set (ZLIB_BINARY_DIR_RELEASE ${ZLIB_BINARY_DIR} )
133- set (ZLIB_BINARY_DIR_RELWITHDEBINFO ${ZLIB_BINARY_DIR} )
134- get_target_property (ZLIB_NAME zlibstatic "OUTPUT_NAME" )
135- endif ()
136-
137- get_target_property (ZLIB_DEBUG_POSTFIX zlibstatic "DEBUG_POSTFIX" )
138- set (ZLIB_INCLUDE_DIR "${THIRD_PARTY_SOURCE_DIR} /zlib;${THIRD_PARTY_BINARY_DIR} /zlib" CACHE INTERNAL "" FORCE)
139- set (ZLIB_LIBRARY_DEBUG "${ZLIB_BINARY_DIR_DEBUG} /${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${ZLIB_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX} " CACHE INTERNAL "" FORCE)
140- set (ZLIB_LIBRARY_RELEASE "${ZLIB_BINARY_DIR_RELEASE} /${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX} " CACHE INTERNAL "" FORCE)
141- set (ZLIB_LIBRARY_RELWITHDEBINFO "${ZLIB_BINARY_DIR_RELWITHDEBINFO} /${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX} " CACHE INTERNAL "" FORCE)
142- set (ZLIB_LIBRARY # for PNGLIB purposes
143- $<$<CONFIG:Debug>:${ZLIB_LIBRARY_DEBUG} >
144- $<$<CONFIG:Release>:${ZLIB_LIBRARY_RELEASE} >
145- $<$<CONFIG:RelWithDebInfo>:${ZLIB_LIBRARY_RELWITHDEBINFO} >
146- CACHE INTERNAL "" FORCE)
97+ add_library (ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it via alias
98+ set (ZLIB_INCLUDE_DIR "${THIRD_PARTY_SOURCE_DIR} /zlib;${THIRD_PARTY_BINARY_DIR} /zlib" CACHE INTERNAL "" FORCE) # and
99+ set (ZLIB_LIBRARY zlibstatic CACHE INTERNAL "" FORCE) # find_package
147100
148101set (SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install" )
149102set (SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples" )
@@ -167,29 +120,67 @@ set(SHADERC_SKIP_INSTALL ON CACHE INTERNAL "Install shaderc?")
167120add_subdirectory (shaderc shaderc EXCLUDE_FROM_ALL )
168121
169122# libjpeg-turbo
170- option (WITH_SIMD "libjpeg-turbo" ON )
171- option (WITH_MEM_SRCDST "libjpeg-turbo" ON )
172- option (WITH_TURBOJPEG "libjpeg-turbo" ON )
173- option (ENABLE_STATIC "libjpeg-turbo" ON )
174- option (ENABLE_SHARED "libjpeg-turbo" OFF )
175- option (WITH_CRT_DLL "libjpeg-turbo" OFF )
176- option (WITH_FUZZ "libjpeg-turbo" OFF )
177- option (WITH_JAVA "libjpeg-turbo" OFF )
178- set (CMAKE_INSTALL_DOCDIR "${CMAKE_CURRENT_BINARY_DIR} /libjpeg-turbo/install/docdir" )
179- set (CMAKE_INSTALL_MANDIR "${CMAKE_CURRENT_BINARY_DIR} /libjpeg-turbo/install/mandir" )
180- add_subdirectory (libjpeg-turbo libjpeg-turbo EXCLUDE_FROM_ALL )
181- NBL_TARGET_FORCE_ASSEMBLER_EXECUTABLE(simd ASM_NASM libjpeg-turbo/simd/)
182-
183- unset (CMAKE_INSTALL_DOCDIR)
184- unset (CMAKE_INSTALL_MANDIR)
123+ set (NBL_JPEG_CMAKE_OPTIONS
124+ -DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC =MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<BOOL :${NBL_COMPILER_DYNAMIC_RUNTIME} >:DLL>
125+ -DCMAKE_POLICY_DEFAULT_CMP0057=NEW
126+ -DCMAKE_POLICY_DEFAULT_CMP0091=NEW
127+ -DENABLE_SHARED=OFF
128+ -DENABLE_STATIC=ON
129+ -DWITH_CRT_DLL=ON
130+ -DWITH_SIMD=ON
131+ -DWITH_MEM_SRCDST=ON
132+ -DWITH_TURBOJPEG=ON
133+ -DWITH_FUZZ=OFF
134+ -DWITH_JAVA=OFF
135+ )
136+
137+ if (NOT NBL_IS_MULTI_CONFIG)
138+ list (APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} " )
139+ endif ()
140+
141+ if (NOT CMAKE_GENERATOR MATCHES "Ninja*" )
142+ list (APPEND NBL_JPEG_CMAKE_OPTIONS -Ax64)
143+ endif ()
144+
145+ if (CMAKE_GENERATOR_TOOLSET)
146+ list (APPEND NBL_JPEG_CMAKE_OPTIONS -T "${CMAKE_GENERATOR_TOOLSET} " )
147+ endif ()
148+
149+ if (CMAKE_TOOLCHAIN_FILE)
150+ list (APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} " )
151+ endif ()
152+
153+ # TODO: might find an alternative library which supports add_subdirectory, untill then we need to switch to a workaround just like
154+ # we do for DXC due to: https://github.com/libjpeg-turbo/libjpeg-turbo/blob/0b742742c873025e2a127918d4969238ace7ae5b/CMakeLists.txt#L69
155+ 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}
156+ RESULT_VARIABLE JPEG_CMAKE_RESULT
157+ OUTPUT_VARIABLE JPEG_CMAKE_STREAM_PIPE
158+ )
159+
160+ if (NOT "${JPEG_CMAKE_RESULT} " STREQUAL "0" )
161+ message (FATAL_ERROR "${JPEG_CMAKE_STREAM_PIPE} " )
162+ endif ()
163+
164+ set (JPEG_LIB_OUTPUT "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo/$<CONFIG>/jpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX} " )
165+ add_custom_command (OUTPUT ${JPEG_LIB_OUTPUT}
166+ COMMAND "${CMAKE_COMMAND} " --build "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo" -t jpeg-static --config $<CONFIG>
167+ COMMENT "Building libjpeg-turbo static library"
168+ VERBATIM USES_TERMINAL
169+ )
170+ add_library (jpeg-static INTERFACE ${JPEG_LIB_OUTPUT} )
171+ target_include_directories (jpeg-static INTERFACE
172+ "${THIRD_PARTY_SOURCE_DIR} /libjpeg-turbo/src"
173+ "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo"
174+ )
175+ target_link_libraries (jpeg-static INTERFACE "${JPEG_LIB_OUTPUT} " )
185176
186177# blake3
187178add_subdirectory (blake/c EXCLUDE_FROM_ALL )
188179
189- #manipulating libpng cmake options from within cmake script
190- set (PNG_BUILD_ZLIB ON CACHE INTERNAL "" FORCE) # get ZLIB from our /3rdparty
191- option (PNG_SHARED "Build shared lib" OFF )
192- option (PNG_TESTS "Build libpng tests" OFF )
180+ # manipulating libpng cmake options from within cmake script
181+ set (PNG_BUILD_ZLIB OFF )
182+ set (PNG_SHARED OFF )
183+ set (PNG_TESTS OFF )
193184add_subdirectory (libpng libpng EXCLUDE_FROM_ALL )
194185add_dependencies (png_static zlibstatic)
195186
@@ -441,7 +432,7 @@ if (NBL_BUILD_MITSUBA_LOADER)
441432 )
442433 set (MITSUBA_LOADER_DEPENDENTS ${MITSUBA_LOADER_DEPENDENTS} PARENT_SCOPE)
443434 set (MITSUBA_LOADER_DEPENDENT_LIBS
444- expat " ${ZLIB_LIBRARY} "
435+ expat zlibstatic
445436 )
446437 set (MITSUBA_LOADER_DEPENDENT_LIBS ${MITSUBA_LOADER_DEPENDENT_LIBS} PARENT_SCOPE)
447438endif ()
@@ -468,7 +459,6 @@ set(NBL_3RDPARTY_TARGETS
468459 zlibstatic
469460 shaderc_util
470461 shaderc
471- jpeg-static
472462 bz2_static
473463 simdjson
474464 nlohmann_json
0 commit comments