@@ -9,93 +9,101 @@ set(NASMPATH ${CMAKE_CURRENT_SOURCE_DIR}/../../External/bintools/nasm-2.15.05/na
99get_filename_component (NASMPATH "${NASMPATH} " ABSOLUTE )
1010
1111
12- if (CMAKE_GENERATOR STREQUAL "Ninja" )
13- set (TurboJpegBinDir ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /libjpeg-turbo)
14- get_filename_component (TurboJpegBinDir "${TurboJpegBinDir} " ABSOLUTE )
15-
16- set (LibJpegTurboArgs
17- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
18- -DENABLE_STATIC=FALSE
19- -DWITH_FUZZ=FALSE
20- -DCMAKE_INSTALL_PREFIX=${TurboJpegBinDir} /install
21- -DWITH_JPEG=FALSE # Disable JPEG codec, we only need TurboJPEG
22- )
12+ # =========================
13+ # =========================
2314
24- #Enable ASM provided by NASM
25- if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" )
26- list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
15+ # ======== Detect Multi-config vs Single-config ========
16+ if (CMAKE_CONFIGURATION_TYPES )
17+ set (IS_MULTI_CONFIG TRUE )
18+ else ()
19+ set (IS_MULTI_CONFIG FALSE )
2720endif ()
2821
22+ # ======== Platform-specific file extensions ========
2923if (WIN32 )
30- set (TURBOJPEG_RUNTIME " ${TurboJpegBinDir} /turbojpeg .dll" )
31- set (TURBOJPEG_IMPLIB " ${TurboJpegBinDir} /turbojpeg .lib" )
24+ set (LIB_EXT " .dll" )
25+ set (IMPLIB_EXT " .lib" )
3226elseif (APPLE )
33- set (TURBOJPEG_RUNTIME "${TurboJpegBinDir} /turbojpeg.dylib" )
27+ set (LIB_EXT ".dylib" )
28+ set (IMPLIB_EXT "" ) # No import libs on macOS
3429else ()
35- set (TURBOJPEG_RUNTIME "${TurboJpegBinDir} /turbojpeg.so" )
30+ set (LIB_EXT ".so" )
31+ set (IMPLIB_EXT "" ) # No import libs on Linux
3632endif ()
3733
34+ # ======== External build directory ========
35+ set (TurboJpegBinBaseDir "${CMAKE_BINARY_DIR} /libjpeg-turbo" )
3836
39- ExternalProject_Add(libjpeg-turbo
40- SOURCE_DIR ${LibJpegTurboFolder}
41- BINARY_DIR ${TurboJpegBinDir}
42- CMAKE_ARGS ${LibJpegTurboArgs}
43- INSTALL_COMMAND "" # <--- disables 'ninja install'
44- BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG> --target turbojpeg
45- BUILD_BYPRODUCTS ${TURBOJPEG_RUNTIME}
46- )
47-
48- add_library (libjpeg-turbo::libjpeg-turbo SHARED IMPORTED GLOBAL )
49-
50-
51- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
52- INTERFACE_INCLUDE_DIRECTORIES "${LibJpegTurboFolder} /src"
53- IMPORTED_LOCATION "${TURBOJPEG_RUNTIME} "
54- IMPORTED_IMPLIB "${TURBOJPEG_IMPLIB} " # Will be empty on non-Windows
55- )
56- else ()
57- # MSVC / Xcode (multi-config)
58- set (TurboJpegBinDir_DEBUG ${CMAKE_BINARY_DIR} /libjpeg-turbo/Debug)
59- get_filename_component (TurboJpegBinDir_DEBUG "${TurboJpegBinDir_DEBUG} " ABSOLUTE )
60- set (TurboJpegBinDir_RELEASE ${CMAKE_BINARY_DIR} /libjpeg-turbo/Release)
61- get_filename_component (TurboJpegBinDir_RELEASE "${TurboJpegBinDir_RELEASE} " ABSOLUTE )
62-
37+ # ======== CMake arguments for libjpeg-turbo ========
6338set (LibJpegTurboArgs
6439 -DENABLE_STATIC=FALSE
6540 -DWITH_FUZZ=FALSE
66- -DWITH_JPEG=FALSE # Disable JPEG codec, we only need TurboJPEG
67- -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} /libjpeg-turbo /install
41+ -DWITH_JPEG=FALSE
42+ -DCMAKE_INSTALL_PREFIX=${TurboJpegBinBaseDir} /install
6843)
6944
70- if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" )
45+ # Enable NASM on Windows if needed
46+ if (WIN32 AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" )
7147 list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
7248endif ()
7349
50+ # ======== Add ExternalProject ========
7451ExternalProject_Add(libjpeg-turbo
7552 SOURCE_DIR ${LibJpegTurboFolder}
76- BINARY_DIR ${CMAKE_BINARY_DIR} /libjpeg-turbo
53+ BINARY_DIR ${TurboJpegBinBaseDir}
7754 CMAKE_ARGS ${LibJpegTurboArgs}
7855 INSTALL_COMMAND ""
79- BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${CMAKE_CFG_INTDIR} --target turbojpeg
80- BUILD_BYPRODUCTS
81- ${TurboJpegBinDir_DEBUG} /turbojpeg.dll
82- ${TurboJpegBinDir_RELEASE} /turbojpeg.dll
56+ BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> --target turbojpeg
8357)
8458
59+ # ======== Declare Imported Library ========
8560add_library (libjpeg-turbo::libjpeg-turbo SHARED IMPORTED GLOBAL )
8661
62+ if (IS_MULTI_CONFIG)
63+ # Multi-config: set per-config imported locations
64+ foreach (cfg ${CMAKE_CONFIGURATION_TYPES} )
65+ string (TOUPPER "${cfg} " cfg_upper)
66+ set (cfg_bin_dir "${TurboJpegBinBaseDir} /${cfg} " )
67+
68+ # Set runtime library
69+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
70+ "IMPORTED_LOCATION_${cfg_upper} " "${cfg_bin_dir} /turbojpeg${LIB_EXT} "
71+ )
72+
73+ # Set import library on Windows
74+ if (WIN32 )
75+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
76+ "IMPORTED_IMPLIB_${cfg_upper} " "${cfg_bin_dir} /turbojpeg${IMPLIB_EXT} "
77+ )
78+ endif ()
79+ endforeach ()
80+ else ()
81+ # Single-config: flat directory
82+ set (cfg_bin_dir "${TurboJpegBinBaseDir} " )
83+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
84+ IMPORTED_LOCATION "${cfg_bin_dir} /turbojpeg${LIB_EXT} "
85+ )
86+
87+ # Set import library on Windows
88+ if (WIN32 )
89+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
90+ IMPORTED_IMPLIB "${cfg_bin_dir} /turbojpeg${IMPLIB_EXT} "
91+ )
92+ endif ()
93+ endif ()
94+
95+ # ======== Include directories ========
8796set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
8897 INTERFACE_INCLUDE_DIRECTORIES "${LibJpegTurboFolder} /src"
89- IMPORTED_LOCATION_DEBUG "${TurboJpegBinDir_DEBUG} /turbojpeg.dll"
90- IMPORTED_LOCATION_RELEASE "${TurboJpegBinDir_RELEASE} /turbojpeg.dll"
91- IMPORTED_IMPLIB_DEBUG "${TurboJpegBinDir_DEBUG} /turbojpeg.lib"
92- IMPORTED_IMPLIB_RELEASE "${TurboJpegBinDir_RELEASE} /turbojpeg.lib"
9398)
9499
95- endif ()
100+ # ======== Depend on ExternalProject ========
101+ add_dependencies (libjpeg-turbo::libjpeg-turbo libjpeg-turbo)
96102
97103
98- add_dependencies (libjpeg-turbo::libjpeg-turbo libjpeg-turbo)
104+
105+ # =========================
106+ # =========================
99107
100108 file (GLOB_RECURSE sourceFiles
101109 "./Source/*.h"
0 commit comments