1- #Codec JPG
1+ # Codec JPG
22cmake_minimum_required (VERSION 3.10 )
33
44include (ExternalProject )
55
6- set (LibJpegTurboFolder ${CMAKE_CURRENT_SOURCE_DIR } /../../External/libjpeg-turbo)
6+ set (LibJpegTurboFolder " ${CMAKE_CURRENT_SOURCE_DIR } /../../External/libjpeg-turbo" )
77get_filename_component (LibJpegTurboFolder "${LibJpegTurboFolder} " ABSOLUTE )
8- set (NASMPATH ${CMAKE_CURRENT_SOURCE_DIR } /../../External/bintools/nasm-2.15.05/nasm.exe)
8+ set (NASMPATH " ${CMAKE_CURRENT_SOURCE_DIR } /../../External/bintools/nasm-2.15.05/nasm.exe" )
99get_filename_component (NASMPATH "${NASMPATH} " ABSOLUTE )
1010
11-
12- # =========================
13- # =========================
14-
1511# ======== Detect Multi-config vs Single-config ========
1612if (CMAKE_CONFIGURATION_TYPES )
1713 set (IS_MULTI_CONFIG TRUE )
1814else ()
1915 set (IS_MULTI_CONFIG FALSE )
2016endif ()
2117
22- # ======== Platform-specific file extensions ========
18+ # ======== Platform-specific file names ========
19+ set (JPG_OUTPUT_NAME turbojpeg)
20+ set (JPG_RUNTIME_NAME "${CMAKE_SHARED_LIBRARY_PREFIX }${JPG_OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX } " )
21+ set (JPG_IMPLIB_NAME "" )
22+
2323if (WIN32 )
24- if (MINGW)
25- set (JPG_RUNTIME_NAME "libturbojpeg.dll" )
26- set (JPG_IMPLIB_NAME "libturbojpeg.dll.a" )
27- else ()
28- set (JPG_RUNTIME_NAME "turbojpeg.dll" )
29- set (JPG_IMPLIB_NAME "turbojpeg.lib" )
30- endif ()
31- elseif (APPLE )
32- set (JPG_RUNTIME_NAME "libturbojpeg.dylib" )
33- set (JPG_IMPLIB_NAME "" ) # No import libs on macOS
34- else ()
35- set (JPG_RUNTIME_NAME "libturbojpeg.so" )
36- set (JPG_IMPLIB_NAME "" ) # No import libs on Linux
24+ set (JPG_IMPLIB_NAME "${CMAKE_IMPORT_LIBRARY_PREFIX }${JPG_OUTPUT_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX } " )
3725endif ()
3826
3927# ======== External build directory ========
4028set (TurboJpegBinBaseDir "${CMAKE_BINARY_DIR } /libjpeg-turbo" )
4129
42- # ======== CMake arguments for libjpeg-turbo ========
43- set (LibJpegTurboArgs
44- -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY }
45- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY }
46- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE }
47- -DCMAKE_MT=${CMAKE_MT}
48- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER }
49- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER }
50- -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM }
51- -DCMAKE_RC_COMPILER=${CMAKE_RC_COMPILER}
52- -DENABLE_STATIC=FALSE
53- -DWITH_FUZZ=FALSE
54- -DWITH_JPEG=FALSE
55- -DCMAKE_INSTALL_PREFIX=${TurboJpegBinBaseDir} /install
56- )
30+ # ======== Output directories ========
31+ if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
32+ set (JPG_RUNTIME_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY } " )
33+ else ()
34+ set (JPG_RUNTIME_OUTPUT_DIR "${TurboJpegBinBaseDir} " )
35+ endif ()
5736
58- if (CMAKE_TOOLCHAIN_FILE )
59- get_filename_component (CMAKE_TOOLCHAIN_FILE_ABSOLUTE "${CMAKE_TOOLCHAIN_FILE } " ABSOLUTE )
60- list (APPEND LibJpegTurboArgs -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_ABSOLUTE} )
37+ if (CMAKE_LIBRARY_OUTPUT_DIRECTORY )
38+ set (JPG_LIBRARY_OUTPUT_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY } " )
39+ else ()
40+ set (JPG_LIBRARY_OUTPUT_DIR "${TurboJpegBinBaseDir} " )
6141endif ()
62- # Enable NASM on Windows if needed
63- if (WIN32 AND NOT ${CMAKE_HOST_SYSTEM_NAME } STREQUAL "Linux" )
64- list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
42+
43+ if (CMAKE_ARCHIVE_OUTPUT_DIRECTORY )
44+ set (JPG_ARCHIVE_OUTPUT_DIR "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY } " )
45+ elseif (WIN32 )
46+ set (JPG_ARCHIVE_OUTPUT_DIR "${JPG_RUNTIME_OUTPUT_DIR} " )
47+ else ()
48+ set (JPG_ARCHIVE_OUTPUT_DIR "${TurboJpegBinBaseDir} " )
6549endif ()
6650
67- # Support Custom runtime and library output directories
68- if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
69- set (JPG_RUNTIME_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY } )
51+ if (WIN32 )
52+ set (JPG_IMPORTED_LOCATION_DIR "${JPG_RUNTIME_OUTPUT_DIR} " )
7053else ()
71- set (JPG_RUNTIME_OUTPUT_DIR ${TurboJpegBinBaseDir} )
54+ set (JPG_IMPORTED_LOCATION_DIR " ${JPG_LIBRARY_OUTPUT_DIR} " )
7255endif ()
7356
57+ function (jpg_get_config_path result output_dir config file_name )
58+ set (path "${output_dir} /${file_name} " )
59+ if (IS_MULTI_CONFIG
60+ AND NOT "${output_dir} " MATCHES "\\ $<CONFIG >|\\ $\\ (Configuration\\ )|\\ $\\ {CMAKE_CFG_INTDIR\\ }"
61+ AND NOT "${output_dir} " MATCHES "(^|/)${config} (/|$)" )
62+ set (path "${output_dir} /${config} /${file_name} " )
63+ endif ()
64+ set (${result} "${path} " PARENT_SCOPE )
65+ endfunction ()
7466
75- if (CMAKE_LIBRARY_OUTPUT_DIRECTORY )
76- set (JPG_LIB_OUTPUT_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY } )
77- else ()
78- set (JPG_LIB_OUTPUT_DIR ${TurboJpegBinBaseDir} )
67+ # ======== CMake arguments for libjpeg-turbo ========
68+ set (LibJpegTurboArgs
69+ "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${JPG_RUNTIME_OUTPUT_DIR} "
70+ "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${JPG_LIBRARY_OUTPUT_DIR} "
71+ "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${JPG_ARCHIVE_OUTPUT_DIR} "
72+ "-DENABLE_STATIC=FALSE"
73+ "-DWITH_FUZZ=FALSE"
74+ "-DWITH_JPEG=FALSE"
75+ "-DCMAKE_INSTALL_PREFIX=${TurboJpegBinBaseDir} /install"
76+ )
77+
78+ if (NOT IS_MULTI_CONFIG AND CMAKE_BUILD_TYPE )
79+ list (APPEND LibJpegTurboArgs "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE } " )
80+ endif ()
81+
82+ foreach (cmake_arg CMAKE_MT CMAKE_C_COMPILER CMAKE_CXX_COMPILER CMAKE_MAKE_PROGRAM CMAKE_RC_COMPILER)
83+ if (DEFINED ${cmake_arg} AND NOT "${${cmake_arg} }" STREQUAL "" )
84+ list (APPEND LibJpegTurboArgs "-D${cmake_arg} =${${cmake_arg} }" )
85+ endif ()
86+ endforeach ()
87+
88+ if (CMAKE_TOOLCHAIN_FILE )
89+ get_filename_component (CMAKE_TOOLCHAIN_FILE_ABSOLUTE "${CMAKE_TOOLCHAIN_FILE } " ABSOLUTE )
90+ list (APPEND LibJpegTurboArgs "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_ABSOLUTE} " )
91+ endif ()
92+
93+ # Enable NASM on Windows when building on Windows.
94+ if (WIN32 AND NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND EXISTS "${NASMPATH} " )
95+ list (APPEND LibJpegTurboArgs "-DCMAKE_ASM_NASM_COMPILER=${NASMPATH} " )
7996endif ()
8097
8198# ======== Declare Imported Library ========
8299add_library (libjpeg-turbo::libjpeg-turbo SHARED IMPORTED GLOBAL )
83100
84101set (JPG_IMPORTED_LOCATION "" )
85102set (JPG_IMPORTED_IMPLIB "" )
86-
103+ set (JPG_BYPRODUCTS "" )
87104
88105if (IS_MULTI_CONFIG)
89106 # Multi-config: set per-config imported locations
90107 foreach (cfg ${CMAKE_CONFIGURATION_TYPES } )
91108 string (TOUPPER "${cfg} " cfg_upper)
92- list (APPEND JPG_IMPORTED_LOCATION "IMPORTED_LOCATION_${cfg_upper} " "${JPG_RUNTIME_OUTPUT_DIR} /${cfg} /${JPG_RUNTIME_NAME} " )
93- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
94- "IMPORTED_LOCATION_${cfg_upper} " "${JPG_RUNTIME_OUTPUT_DIR} /${cfg} /${JPG_RUNTIME_NAME} " )
109+
110+ jpg_get_config_path (JPG_CFG_IMPORTED_LOCATION "${JPG_IMPORTED_LOCATION_DIR} " "${cfg} " "${JPG_RUNTIME_NAME} " )
111+ list (APPEND JPG_IMPORTED_LOCATION "${JPG_CFG_IMPORTED_LOCATION} " )
112+ list (APPEND JPG_BYPRODUCTS "${JPG_CFG_IMPORTED_LOCATION} " )
113+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
114+ "IMPORTED_LOCATION_${cfg_upper} " "${JPG_CFG_IMPORTED_LOCATION} "
115+ )
116+
95117 # Set import library on Windows
96118 if (WIN32 )
97- list (APPEND JPG_IMPORTED_IMPLIB "IMPORTED_IMPLIB_${cfg_upper} " "${JPG_LIB_OUTPUT_DIR} /${cfg} /${JPG_IMPLIB_NAME} " )
98- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
99- "IMPORTED_IMPLIB_${cfg_upper} " "${JPG_LIB_OUTPUT_DIR} /${cfg} /${JPG_IMPLIB_NAME} " )
119+ jpg_get_config_path (JPG_CFG_IMPORTED_IMPLIB "${JPG_ARCHIVE_OUTPUT_DIR} " "${cfg} " "${JPG_IMPLIB_NAME} " )
120+ list (APPEND JPG_IMPORTED_IMPLIB "${JPG_CFG_IMPORTED_IMPLIB} " )
121+ list (APPEND JPG_BYPRODUCTS "${JPG_CFG_IMPORTED_IMPLIB} " )
122+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
123+ "IMPORTED_IMPLIB_${cfg_upper} " "${JPG_CFG_IMPORTED_IMPLIB} "
124+ )
100125 endif ()
101126 endforeach ()
102127else ()
103128
104- set (JPG_IMPORTED_LOCATION "${JPG_RUNTIME_OUTPUT_DIR} /${JPG_RUNTIME_NAME} " )
129+ set (JPG_IMPORTED_LOCATION "${JPG_IMPORTED_LOCATION_DIR} /${JPG_RUNTIME_NAME} " )
130+ list (APPEND JPG_BYPRODUCTS "${JPG_IMPORTED_LOCATION} " )
105131 # Single-config: flat directory
106- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES IMPORTED_LOCATION
107- "${JPG_RUNTIME_OUTPUT_DIR} /${JPG_RUNTIME_NAME} " )
132+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
133+ IMPORTED_LOCATION "${JPG_IMPORTED_LOCATION} "
134+ )
108135
109136 # Set import library on Windows
110137 if (WIN32 )
111- set (JPG_IMPORTED_IMPLIB "${JPG_LIB_OUTPUT_DIR} /${JPG_IMPLIB_NAME} " )
112- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES IMPORTED_IMPLIB
113- "${JPG_LIB_OUTPUT_DIR} /${JPG_IMPLIB_NAME} " )
138+ set (JPG_IMPORTED_IMPLIB "${JPG_ARCHIVE_OUTPUT_DIR} /${JPG_IMPLIB_NAME} " )
139+ list (APPEND JPG_BYPRODUCTS "${JPG_IMPORTED_IMPLIB} " )
140+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
141+ IMPORTED_IMPLIB "${JPG_IMPORTED_IMPLIB} "
142+ )
114143 endif ()
115144endif ()
116145
@@ -119,33 +148,25 @@ set_target_properties(libjpeg-turbo::libjpeg-turbo PROPERTIES
119148 INTERFACE_INCLUDE_DIRECTORIES "${LibJpegTurboFolder} /src"
120149)
121150
122- list ( APPEND JPG_BYPRODUCTS ${JPG_IMPORTED_LOCATION} )
123- if (WIN32 )
124- list (APPEND JPG_BYPRODUCTS ${JPG_IMPORTED_IMPLIB} )
125- endif ()
126-
127151# ======== Add ExternalProject ========
128152ExternalProject_Add (libjpeg-turbo
129153 SOURCE_DIR ${LibJpegTurboFolder}
130154 BINARY_DIR ${TurboJpegBinBaseDir}
131155 CMAKE_ARGS ${LibJpegTurboArgs}
132156 INSTALL_COMMAND ""
133157 BUILD_COMMAND ${CMAKE_COMMAND } --build <BINARY_DIR > --config $<CONFIG > --target turbojpeg
134- BYPRODUCTS ${JPG_BYPRODUCTS}
158+ BYPRODUCTS ${JPG_BYPRODUCTS}
135159)
136160
137161# ======== Depend on ExternalProject ========
138162add_dependencies (libjpeg-turbo::libjpeg-turbo libjpeg-turbo )
139163
140-
141- # =========================
142-
143- file (GLOB_RECURSE sourceFiles
144- "./Source/*.h"
145- "./Source/*.cpp"
146- )
164+ file (GLOB_RECURSE sourceFiles
165+ "./Source/*.h"
166+ "./Source/*.cpp"
167+ )
147168
148169set (TargetName CodecJPG)
149- add_library (${TargetName} ${sourceFiles} )
170+ add_library (${TargetName} ${sourceFiles} )
150171
151- target_link_libraries (${TargetName} PRIVATE libjpeg-turbo::libjpeg-turbo ) # adjust to match built target name
172+ target_link_libraries (${TargetName} PRIVATE libjpeg-turbo::libjpeg-turbo )
0 commit comments