11cmake_minimum_required (VERSION 3.20 )
22
3- project (Solidify LANGUAGES CXX C VERSION 0.1.0 )
3+ project (Solidify LANGUAGES CXX C VERSION 2.7.5 )
44
55set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Available build configurations" FORCE )
66
@@ -84,6 +84,25 @@ if(NOT EXISTS "${DND_GLFW_INCLUDE_DIR}/dnd_glfw.h")
8484 message (FATAL_ERROR "dnd_glfw.h not found. Set DND_GLFW_INCLUDE_DIR to its location." )
8585endif ()
8686
87+ set (SOLIDIFY_DND_GLFW_TARGET "" )
88+ set (SOLIDIFY_DND_GLFW_SOURCE "" )
89+ if (APPLE )
90+ enable_language (OBJCXX )
91+ if (NOT TARGET dnd_glfw AND EXISTS "${DND_GLFW_INCLUDE_DIR} /CMakeLists.txt" )
92+ add_subdirectory ("${DND_GLFW_INCLUDE_DIR} " "${CMAKE_CURRENT_BINARY_DIR } /dnd_glfw" )
93+ endif ()
94+ if (TARGET dnd_glfw)
95+ if (TARGET dnd_glfw_macos)
96+ target_link_libraries (dnd_glfw_macos PUBLIC glfw3::glfw3 )
97+ endif ()
98+ set (SOLIDIFY_DND_GLFW_TARGET dnd_glfw)
99+ elseif (EXISTS "${DND_GLFW_INCLUDE_DIR} /dnd_glfw_macos.mm" )
100+ set (SOLIDIFY_DND_GLFW_SOURCE "${DND_GLFW_INCLUDE_DIR} /dnd_glfw_macos.mm" )
101+ else ()
102+ message (FATAL_ERROR "dnd_glfw macOS implementation not found. Expected dnd_glfw_macos.mm or a dnd_glfw CMake target." )
103+ endif ()
104+ endif ()
105+
87106if (NOT SOLIDIFY_TOML11_DIR)
88107 find_path (TOML11_INCLUDE_DIR
89108 NAMES toml.hpp toml11/toml.hpp
@@ -200,6 +219,22 @@ if(NOT TARGET BZip2::BZip2)
200219 endif ()
201220endif ()
202221
222+ find_package (freetype CONFIG QUIET )
223+ if (NOT TARGET Freetype::Freetype AND NOT TARGET freetype)
224+ find_package (Freetype QUIET )
225+ endif ()
226+ if (NOT TARGET Freetype::Freetype AND NOT TARGET freetype)
227+ find_library (FREETYPE_LIBRARY NAMES freetype libfreetype HINTS ${CMAKE_LIBRARY_PATH } )
228+ find_path (FREETYPE_INCLUDE_DIR NAMES ft2build.h PATH_SUFFIXES freetype2 HINTS ${CMAKE_INCLUDE_PATH } )
229+ if (FREETYPE_LIBRARY)
230+ add_library (Freetype::Freetype UNKNOWN IMPORTED )
231+ set_target_properties (Freetype::Freetype PROPERTIES IMPORTED_LOCATION "${FREETYPE_LIBRARY} " )
232+ if (FREETYPE_INCLUDE_DIR)
233+ set_target_properties (Freetype::Freetype PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIR} " )
234+ endif ()
235+ endif ()
236+ endif ()
237+
203238find_package (dng_sdk CONFIG QUIET )
204239if (NOT TARGET dng_sdk::dng_sdk)
205240 find_library (DNG_SDK_LIBRARY NAMES dng_sdk HINTS ${CMAKE_LIBRARY_PATH } )
@@ -245,6 +280,71 @@ if(NOT TARGET hwy::hwy)
245280endif ()
246281find_package (spdlog CONFIG REQUIRED )
247282
283+ find_library (SOLIDIFY_OPENJPH_LINK_LIBRARY NAMES openjph libopenjph HINTS ${CMAKE_LIBRARY_PATH } )
284+ find_library (SOLIDIFY_BZIP2_LINK_LIBRARY NAMES bz2_static bz2 bzip2 HINTS ${CMAKE_LIBRARY_PATH } )
285+ find_library (SOLIDIFY_PUGIXML_LINK_LIBRARY NAMES pugixml HINTS ${CMAKE_LIBRARY_PATH } )
286+ find_library (SOLIDIFY_UHDR_LINK_LIBRARY NAMES uhdr libuhdr HINTS ${CMAKE_LIBRARY_PATH } )
287+
288+ set (SOLIDIFY_FREETYPE_LINK_ITEM "" )
289+ if (TARGET Freetype::Freetype)
290+ set (SOLIDIFY_FREETYPE_LINK_ITEM Freetype::Freetype)
291+ elseif (TARGET freetype)
292+ set (SOLIDIFY_FREETYPE_LINK_ITEM freetype)
293+ endif ()
294+
295+ set (SOLIDIFY_OPENJPH_LINK_ITEM "" )
296+ if (SOLIDIFY_OPENJPH_LINK_LIBRARY)
297+ set (SOLIDIFY_OPENJPH_LINK_ITEM "${SOLIDIFY_OPENJPH_LINK_LIBRARY} " )
298+ elseif (TARGET openjph)
299+ set (SOLIDIFY_OPENJPH_LINK_ITEM openjph)
300+ endif ()
301+
302+ set (SOLIDIFY_PUGIXML_LINK_ITEM "" )
303+ if (TARGET pugixml::pugixml)
304+ set (SOLIDIFY_PUGIXML_LINK_ITEM pugixml::pugixml)
305+ elseif (SOLIDIFY_PUGIXML_LINK_LIBRARY)
306+ set (SOLIDIFY_PUGIXML_LINK_ITEM "${SOLIDIFY_PUGIXML_LINK_LIBRARY} " )
307+ endif ()
308+
309+ set (SOLIDIFY_UHDR_LINK_ITEM "" )
310+ if (TARGET libuhdr::libuhdr)
311+ set (SOLIDIFY_UHDR_LINK_ITEM libuhdr::libuhdr)
312+ elseif (SOLIDIFY_UHDR_LINK_LIBRARY)
313+ set (SOLIDIFY_UHDR_LINK_ITEM "${SOLIDIFY_UHDR_LINK_LIBRARY} " )
314+ endif ()
315+
316+ set (SOLIDIFY_BZIP2_LINK_ITEM "" )
317+ if (TARGET BZip2::BZip2)
318+ set (SOLIDIFY_BZIP2_LINK_ITEM BZip2::BZip2)
319+ elseif (SOLIDIFY_BZIP2_LINK_LIBRARY)
320+ set (SOLIDIFY_BZIP2_LINK_ITEM "${SOLIDIFY_BZIP2_LINK_LIBRARY} " )
321+ endif ()
322+
323+ function (solidify_link_oiio_static_tail target_name )
324+ target_link_libraries (${target_name} PRIVATE
325+ ${SOLIDIFY_FREETYPE_LINK_ITEM}
326+ ${SOLIDIFY_PUGIXML_LINK_ITEM}
327+ ${SOLIDIFY_UHDR_LINK_ITEM}
328+ ${SOLIDIFY_BZIP2_LINK_ITEM}
329+ )
330+
331+ if (APPLE AND SOLIDIFY_OPENJPH_LINK_LIBRARY)
332+ target_link_libraries (${target_name} PRIVATE
333+ "-Wl,-force_load,${SOLIDIFY_OPENJPH_LINK_LIBRARY} "
334+ )
335+ elseif (SOLIDIFY_OPENJPH_LINK_ITEM)
336+ target_link_libraries (${target_name} PRIVATE ${SOLIDIFY_OPENJPH_LINK_ITEM} )
337+ endif ()
338+
339+ if (UNIX AND NOT APPLE AND SOLIDIFY_BZIP2_LINK_LIBRARY)
340+ target_link_libraries (${target_name} PRIVATE
341+ "-Wl,--whole-archive"
342+ "${SOLIDIFY_BZIP2_LINK_LIBRARY} "
343+ "-Wl,--no-whole-archive"
344+ )
345+ endif ()
346+ endfunction ()
347+
248348file (GLOB IMGUI_SOURCES CONFIGURE_DEPENDS
249349 "${IMGUI_INCLUDE_DIR} /imgui.cpp"
250350 "${IMGUI_INCLUDE_DIR} /imgui_draw.cpp"
@@ -285,6 +385,7 @@ set(SOLIDIFY_SOURCES
285385 Solidify/src/pushpull.cpp
286386 Solidify/src/solidify.cpp
287387 Solidify/src/pch.cpp
388+ ${SOLIDIFY_DND_GLFW_SOURCE}
288389 ${SOLIDIFY_EMBEDDED_FONT_SOURCE}
289390)
290391
@@ -312,14 +413,16 @@ target_link_libraries(Solidify PRIVATE
312413 OpenGL::GL
313414)
314415
416+ if (SOLIDIFY_DND_GLFW_TARGET)
417+ target_link_libraries (Solidify PRIVATE "${SOLIDIFY_DND_GLFW_TARGET} " )
418+ endif ()
419+
420+ solidify_link_oiio_static_tail (Solidify )
421+
315422if (UNIX AND NOT APPLE )
316423 target_link_libraries (Solidify PRIVATE
317424 dl
318425 m
319- $<$<TARGET_EXISTS :pugixml ::pugixml >:pugixml ::pugixml >
320- $<$<TARGET_EXISTS :libuhdr ::libuhdr >:libuhdr ::libuhdr >
321- $<$<TARGET_EXISTS :openjph >:openjph >
322- $<$<TARGET_EXISTS :BZip2 ::BZip2 >:BZip2 ::BZip2 >
323426 ${X11_LIBRARIES}
324427 ${X11_Xrandr_LIB}
325428 ${X11_Xinerama_LIB}
@@ -330,27 +433,6 @@ if(UNIX AND NOT APPLE)
330433 if (OpenMP_CXX_FOUND)
331434 target_link_libraries (Solidify PRIVATE OpenMP::OpenMP_CXX )
332435 endif ()
333-
334- find_library (SOLIDIFY_OPENJPH_LINK_LIBRARY NAMES openjph libopenjph HINTS ${CMAKE_LIBRARY_PATH } )
335- find_library (SOLIDIFY_BZIP2_LINK_LIBRARY NAMES bz2_static bz2 bzip2 HINTS ${CMAKE_LIBRARY_PATH } )
336- find_library (SOLIDIFY_PUGIXML_LINK_LIBRARY NAMES pugixml HINTS ${CMAKE_LIBRARY_PATH } )
337- find_library (SOLIDIFY_UHDR_LINK_LIBRARY NAMES uhdr libuhdr HINTS ${CMAKE_LIBRARY_PATH } )
338- foreach (_solidify_tail_lib
339- ${SOLIDIFY_OPENJPH_LINK_LIBRARY}
340- ${SOLIDIFY_BZIP2_LINK_LIBRARY}
341- ${SOLIDIFY_PUGIXML_LINK_LIBRARY}
342- ${SOLIDIFY_UHDR_LINK_LIBRARY} )
343- if (_solidify_tail_lib)
344- target_link_libraries (Solidify PRIVATE "${_solidify_tail_lib} " )
345- endif ()
346- endforeach ()
347- if (SOLIDIFY_BZIP2_LINK_LIBRARY)
348- target_link_libraries (Solidify PRIVATE
349- "-Wl,--whole-archive"
350- "${SOLIDIFY_BZIP2_LINK_LIBRARY} "
351- "-Wl,--no-whole-archive"
352- )
353- endif ()
354436endif ()
355437
356438if (WIN32 )
@@ -403,25 +485,12 @@ function(solidify_configure_image_tool target_name)
403485 hwy::hwy
404486 spdlog::spdlog
405487 )
488+ solidify_link_oiio_static_tail (${target_name} )
406489 if (UNIX AND NOT APPLE )
407490 target_link_libraries (${target_name} PRIVATE
408491 dl
409492 m
410- $<$<TARGET_EXISTS :pugixml ::pugixml >:pugixml ::pugixml >
411- $<$<TARGET_EXISTS :libuhdr ::libuhdr >:libuhdr ::libuhdr >
412- $<$<TARGET_EXISTS :openjph >:openjph >
413- $<$<TARGET_EXISTS :BZip2 ::BZip2 >:BZip2 ::BZip2 >
414- ${SOLIDIFY_OPENJPH_LINK_LIBRARY}
415- ${SOLIDIFY_PUGIXML_LINK_LIBRARY}
416- ${SOLIDIFY_UHDR_LINK_LIBRARY}
417493 )
418- if (SOLIDIFY_BZIP2_LINK_LIBRARY)
419- target_link_libraries (${target_name} PRIVATE
420- "-Wl,--whole-archive"
421- "${SOLIDIFY_BZIP2_LINK_LIBRARY} "
422- "-Wl,--no-whole-archive"
423- )
424- endif ()
425494 endif ()
426495endfunction ()
427496
@@ -441,6 +510,13 @@ if(BUILD_TESTING)
441510 solidify_configure_image_tool (solidify_pushpull_tests )
442511 add_test (NAME solidify_pushpull_tests COMMAND solidify_pushpull_tests )
443512
513+ add_executable (solidify_settings_tests
514+ tests/solidify_settings_tests.cpp
515+ Solidify/src/settings.cpp
516+ )
517+ solidify_configure_image_tool (solidify_settings_tests )
518+ add_test (NAME solidify_settings_tests COMMAND solidify_settings_tests )
519+
444520 add_executable (solidify_pushpull_bench
445521 tests/solidify_pushpull_bench.cpp
446522 Solidify/src/pushpull.cpp
0 commit comments