Skip to content

Commit 356dee3

Browse files
committed
Fix: ImagecCodec example
1 parent 0f0f5d9 commit 356dee3

File tree

3 files changed

+107
-25
lines changed

3 files changed

+107
-25
lines changed

Codecs/CodecJPG/CMakeLists.txt

Lines changed: 87 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ cmake_minimum_required(VERSION 3.10)
33

44
include(ExternalProject)
55

6-
set(LibJpegTurboFolder ../../External/libjpeg-turbo)
6+
set(LibJpegTurboFolder ${CMAKE_CURRENT_SOURCE_DIR}/../../External/libjpeg-turbo)
77
get_filename_component(LibJpegTurboFolder "${LibJpegTurboFolder}" ABSOLUTE)
88
set(NASMPATH ${CMAKE_CURRENT_SOURCE_DIR}/../../External/bintools/nasm-2.15.05/nasm.exe)
99
get_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

1216
set(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})
2327
endif()
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+
2539
ExternalProject_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
39105
set(TargetName CodecJPG)
40106
add_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")
51128
else()
52129
endif()

Codecs/CodecTiff/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,6 @@ target_include_directories(${TargetName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/ext
6868

6969

7070
target_link_libraries(${TargetName} tiff)
71-
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND NOT MINGW)
71+
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") AND NOT MINGW)
7272
target_link_options(${TargetName} PUBLIC "/DELAYLOAD:$<TARGET_FILE_BASE_NAME:tiff>.dll")
7373
endif()

Example/CMakeLists.txt

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required (VERSION 3.8)
1+
cmake_minimum_required (VERSION 3.10)
22

33
#Image Codec
44
set(CMAKE_CXX_STANDARD 20)
@@ -16,21 +16,26 @@ add_executable(${TargetName} ${sourceFiles})
1616
target_include_directories(${TargetName} PRIVATE ./Imageloader/Include)
1717
target_link_libraries(${TargetName} PRIVATE ImageCodec)
1818

19+
1920
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
20-
target_link_libraries(${TargetName} PRIVATE delayimp)
21+
target_link_libraries(${TargetName} PRIVATE delayimp dbghelp)
2122
endif()
2223

2324

25+
set(OUTPUT_PATH $<TARGET_FILE_DIR:${TargetName}>)
26+
2427
#Copy oiv library resources to the output dir
25-
add_custom_command(TARGET ${TargetName}
26-
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/cat.jpg ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/)
27-
28-
#Copy needed dependencies to output dir
29-
add_custom_command(TARGET ${TargetName} POST_BUILD
30-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:png_shared> ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/)
31-
32-
add_custom_command(TARGET ${TargetName} POST_BUILD
33-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:zlib> ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/)
34-
35-
add_custom_command(TARGET ${TargetName} POST_BUILD
36-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:turbojpeg> ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/)
28+
add_custom_command(TARGET ${TargetName} POST_BUILD
29+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/cat.jpg ${OUTPUT_PATH}/)
30+
31+
#copy zlib, libpng and libjpeg-turbo dlls to the output dir
32+
add_custom_command(TARGET ${TargetName} POST_BUILD
33+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:zlib> ${OUTPUT_PATH}/)
34+
35+
add_custom_command(TARGET ${TargetName} POST_BUILD
36+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:png_shared> ${OUTPUT_PATH}/)
37+
38+
add_custom_command(TARGET ${TargetName} POST_BUILD
39+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libjpeg-turbo::libjpeg-turbo> ${OUTPUT_PATH}/)
40+
41+

0 commit comments

Comments
 (0)