@@ -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,64 +81,21 @@ 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" )
91+ add_library (ZLIB::ZLIB ALIAS zlibstatic) # trick projects which want to use it
10892get_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..."
93+ set_target_properties (zlibstatic PROPERTIES
94+ ARCHIVE_OUTPUT_DIRECTORY $<1:${ZLIB_BINARY_DIR} >
95+ DEBUG_POSTFIX "d"
96+ OUTPUT_NAME zlibstatic
11797)
11898
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)
147-
14899set (SPIRV_HEADERS_SKIP_INSTALL ON CACHE INTERNAL "Skip SPIRV-Headers install" )
149100set (SPIRV_HEADERS_SKIP_EXAMPLES ON CACHE INTERNAL "Skip SPIRV-Headers examples" )
150101add_subdirectory ("${DXC_SPIRV_HEADERS_DIR} " SPIRV-Headers EXCLUDE_FROM_ALL )
@@ -167,29 +118,67 @@ set(SHADERC_SKIP_INSTALL ON CACHE INTERNAL "Install shaderc?")
167118add_subdirectory (shaderc shaderc EXCLUDE_FROM_ALL )
168119
169120# 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)
121+ set (NBL_JPEG_CMAKE_OPTIONS
122+ -DCMAKE_MSVC_RUNTIME_LIBRARY:STATIC =MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<BOOL :${NBL_COMPILER_DYNAMIC_RUNTIME} >:DLL>
123+ -DCMAKE_POLICY_DEFAULT_CMP0057=NEW
124+ -DCMAKE_POLICY_DEFAULT_CMP0091=NEW
125+ -DENABLE_SHARED=OFF
126+ -DENABLE_STATIC=ON
127+ -DWITH_CRT_DLL=ON
128+ -DWITH_SIMD=ON
129+ -DWITH_MEM_SRCDST=ON
130+ -DWITH_TURBOJPEG=ON
131+ -DWITH_FUZZ=OFF
132+ -DWITH_JAVA=OFF
133+ )
134+
135+ if (NOT NBL_IS_MULTI_CONFIG)
136+ list (APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} " )
137+ endif ()
138+
139+ if (NOT CMAKE_GENERATOR MATCHES "Ninja*" )
140+ list (APPEND NBL_JPEG_CMAKE_OPTIONS -Ax64)
141+ endif ()
142+
143+ if (CMAKE_GENERATOR_TOOLSET)
144+ list (APPEND NBL_JPEG_CMAKE_OPTIONS -T "${CMAKE_GENERATOR_TOOLSET} " )
145+ endif ()
146+
147+ if (CMAKE_TOOLCHAIN_FILE)
148+ list (APPEND NBL_JPEG_CMAKE_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} " )
149+ endif ()
150+
151+ # TODO: might find an alternative library which supports add_subdirectory, untill then we need to switch to a workaround just like
152+ # we do for DXC due to: https://github.com/libjpeg-turbo/libjpeg-turbo/blob/0b742742c873025e2a127918d4969238ace7ae5b/CMakeLists.txt#L69
153+ 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}
154+ RESULT_VARIABLE JPEG_CMAKE_RESULT
155+ OUTPUT_VARIABLE JPEG_CMAKE_STREAM_PIPE
156+ )
157+
158+ if (NOT "${JPEG_CMAKE_RESULT} " STREQUAL "0" )
159+ message (FATAL_ERROR "${JPEG_CMAKE_STREAM_PIPE} " )
160+ endif ()
161+
162+ set (JPEG_LIB_OUTPUT "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo/$<CONFIG>/jpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX} " )
163+ add_custom_command (OUTPUT ${JPEG_LIB_OUTPUT}
164+ COMMAND "${CMAKE_COMMAND} " --build "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo" -t jpeg-static --config $<CONFIG>
165+ COMMENT "Building libjpeg-turbo static library"
166+ VERBATIM USES_TERMINAL
167+ )
168+ add_library (jpeg-static INTERFACE ${JPEG_LIB_OUTPUT} )
169+ target_include_directories (jpeg-static INTERFACE
170+ "${THIRD_PARTY_SOURCE_DIR} /libjpeg-turbo/src"
171+ "${THIRD_PARTY_BINARY_DIR} /libjpeg-turbo"
172+ )
173+ target_link_libraries (jpeg-static INTERFACE "${JPEG_LIB_OUTPUT} " )
185174
186175# blake3
187176add_subdirectory (blake/c EXCLUDE_FROM_ALL )
188177
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 )
178+ # manipulating libpng cmake options from within cmake script
179+ set (PNG_BUILD_ZLIB OFF )
180+ set (PNG_SHARED OFF )
181+ set (PNG_TESTS OFF )
193182add_subdirectory (libpng libpng EXCLUDE_FROM_ALL )
194183add_dependencies (png_static zlibstatic)
195184
@@ -441,7 +430,7 @@ if (NBL_BUILD_MITSUBA_LOADER)
441430 )
442431 set (MITSUBA_LOADER_DEPENDENTS ${MITSUBA_LOADER_DEPENDENTS} PARENT_SCOPE)
443432 set (MITSUBA_LOADER_DEPENDENT_LIBS
444- expat " ${ZLIB_LIBRARY} "
433+ expat zlibstatic
445434 )
446435 set (MITSUBA_LOADER_DEPENDENT_LIBS ${MITSUBA_LOADER_DEPENDENT_LIBS} PARENT_SCOPE)
447436endif ()
@@ -468,7 +457,6 @@ set(NBL_3RDPARTY_TARGETS
468457 zlibstatic
469458 shaderc_util
470459 shaderc
471- jpeg-static
472460 bz2_static
473461 simdjson
474462 nlohmann_json
0 commit comments