@@ -3,11 +3,15 @@ cmake_minimum_required(VERSION 3.10)
33
44include (ExternalProject)
55
6- set (LibJpegTurboFolder ../../External/libjpeg-turbo)
6+ set (LibJpegTurboFolder ${CMAKE_CURRENT_SOURCE_DIR} / ../../External/libjpeg-turbo)
77get_filename_component (LibJpegTurboFolder "${LibJpegTurboFolder} " ABSOLUTE )
88set (NASMPATH ${CMAKE_CURRENT_SOURCE_DIR} /../../External/bintools/nasm-2.15.05/nasm.exe)
99get_filename_component (NASMPATH "${NASMPATH} " ABSOLUTE )
10- set (TurboJpegBinDir ${CMAKE_BINARY_DIR} /libjpeg-turbo)
10+
11+
12+ if (CMAKE_GENERATOR STREQUAL "Ninja" )
13+ set (TurboJpegBinDir ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /libjpeg-turbo)
14+ get_filename_component (TurboJpegBinDir "${TurboJpegBinDir} " ABSOLUTE )
1115
1216set (LibJpegTurboArgs
1317 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
@@ -22,15 +26,77 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT ${CMAKE_HOST_SYSTEM_NAME} STR
2226 list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
2327endif ()
2428
29+ if (WIN32 )
30+ set (TURBOJPEG_RUNTIME "${TurboJpegBinDir} /turbojpeg.dll" )
31+ set (TURBOJPEG_IMPLIB "${TurboJpegBinDir} /turbojpeg.lib" )
32+ elseif (APPLE )
33+ set (TURBOJPEG_RUNTIME "${TurboJpegBinDir} /turbojpeg.dylib" )
34+ else ()
35+ set (TURBOJPEG_RUNTIME "${TurboJpegBinDir} /turbojpeg.so" )
36+ endif ()
37+
38+
2539ExternalProject_Add(libjpeg-turbo
2640 SOURCE_DIR ${LibJpegTurboFolder}
2741 BINARY_DIR ${TurboJpegBinDir}
2842 CMAKE_ARGS ${LibJpegTurboArgs}
2943 INSTALL_COMMAND "" # <--- disables 'ninja install'
30- BUILD_COMMAND ${CMAKE_COMMAND} --build . --target turbojpeg
31- BUILD_BYPRODUCTS ${TurboJpegBinDir} /turbojpeg.dll
44+ BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG> -- target turbojpeg
45+ BUILD_BYPRODUCTS ${TURBOJPEG_RUNTIME}
3246)
3347
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+
63+ set (LibJpegTurboArgs
64+ -DENABLE_STATIC=FALSE
65+ -DWITH_FUZZ=FALSE
66+ -DWITH_JPEG=FALSE # Disable JPEG codec, we only need TurboJPEG
67+ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} /libjpeg-turbo/install
68+ )
69+
70+ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" )
71+ list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
72+ endif ()
73+
74+ ExternalProject_Add(libjpeg-turbo
75+ SOURCE_DIR ${LibJpegTurboFolder}
76+ BINARY_DIR ${CMAKE_BINARY_DIR} /libjpeg-turbo
77+ CMAKE_ARGS ${LibJpegTurboArgs}
78+ 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
83+ )
84+
85+ add_library (libjpeg-turbo::libjpeg-turbo SHARED IMPORTED GLOBAL )
86+
87+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
88+ 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"
93+ )
94+
95+ endif ()
96+
97+
98+ add_dependencies (libjpeg-turbo::libjpeg-turbo libjpeg-turbo)
99+
34100 file (GLOB_RECURSE sourceFiles
35101 "./Source/*.h"
36102 "./Source/*.cpp"
@@ -39,14 +105,25 @@ ExternalProject_Add(libjpeg-turbo
39105set (TargetName CodecJPG)
40106add_library (${TargetName} ${sourceFiles} )
41107
42- add_dependencies (${TargetName} libjpeg-turbo)
43- target_link_libraries (${TargetName} PRIVATE ${TurboJpegBinDir} /turbojpeg.lib) # adjust to match built target name
108+ target_link_libraries (${TargetName} PRIVATE libjpeg-turbo::libjpeg-turbo) # adjust to match built target name
109+
110+ if (CMAKE_GENERATOR STREQUAL "Ninja" )
111+ add_custom_command (TARGET ${TargetName} POST_BUILD
112+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
113+ "$<TARGET_FILE:libjpeg-turbo::libjpeg-turbo>"
114+ "${CMAKE_CURRENT_BINARY_DIR} " )
115+ else ()
116+ add_custom_command (TARGET ${TargetName} POST_BUILD
117+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
118+ "$<TARGET_FILE:libjpeg-turbo::libjpeg-turbo>"
119+ "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION>/" )
120+ endif ()
121+
122+
44123
45- add_custom_command (TARGET libjpeg-turbo POST_BUILD
46- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${TurboJpegBinDir} /turbojpeg.dll ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /bin/)
47- target_include_directories (${TargetName} PRIVATE ${LibJpegTurboFolder} /src)
124+ target_include_directories (${TargetName} PRIVATE ${LibJpegTurboFolder} /src)
48125
49- if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT MINGW)
126+ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" ) AND NOT MINGW)
50127 target_link_options (${TargetName} PUBLIC "/DELAYLOAD:turbojpeg.dll" )
51128else ()
52129endif ()
0 commit comments