74 lines
3.2 KiB
CMake
74 lines
3.2 KiB
CMake
function(add_jpeg_decoder target runtimeTarget)
|
|
if(NOT TARGET "${runtimeTarget}")
|
|
message(FATAL_ERROR "JPEG decoder requires an existing runtime target: ${runtimeTarget}")
|
|
endif()
|
|
|
|
include(ExternalProject)
|
|
if(NOT TARGET jpeg_turbo_external)
|
|
set(jpeg_turbo_prefix "${CMAKE_BINARY_DIR}/libjpeg-turbo")
|
|
if(WIN32)
|
|
if(MSVC)
|
|
set(jpeg_turbo_library "${jpeg_turbo_prefix}/lib/turbojpeg-static.lib")
|
|
else()
|
|
set(jpeg_turbo_library "${jpeg_turbo_prefix}/lib/libturbojpeg.a")
|
|
endif()
|
|
else()
|
|
set(jpeg_turbo_library "${jpeg_turbo_prefix}/lib/libturbojpeg.a")
|
|
endif()
|
|
file(MAKE_DIRECTORY "${jpeg_turbo_prefix}/include")
|
|
ExternalProject_Add(jpeg_turbo_external
|
|
SOURCE_DIR "${PROJECT_SOURCE_DIR}/3rdparty/libjpeg-turbo"
|
|
BINARY_DIR "${CMAKE_BINARY_DIR}/libjpeg-turbo-build"
|
|
INSTALL_DIR "${jpeg_turbo_prefix}"
|
|
CMAKE_ARGS
|
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
|
-DCMAKE_INSTALL_PREFIX=${jpeg_turbo_prefix}
|
|
-DBUILD_SHARED_LIBS=OFF
|
|
-DENABLE_STATIC=ON
|
|
-DENABLE_SHARED=OFF
|
|
-DWITH_SIMD=OFF
|
|
-DWITH_TURBOJPEG=ON
|
|
-DWITH_TOOLS=OFF
|
|
-DWITH_TESTS=OFF
|
|
-DCMAKE_INSTALL_LIBDIR=lib
|
|
-DCMAKE_C_VISIBILITY_PRESET=hidden
|
|
-DCMAKE_VISIBILITY_INLINES_HIDDEN=ON
|
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
|
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
|
|
BUILD_BYPRODUCTS
|
|
"${jpeg_turbo_library}"
|
|
)
|
|
add_library(jpeg_turbo STATIC IMPORTED GLOBAL)
|
|
set_target_properties(jpeg_turbo PROPERTIES
|
|
IMPORTED_LOCATION "${jpeg_turbo_library}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/3rdparty/libjpeg-turbo/src;${jpeg_turbo_prefix}/include"
|
|
)
|
|
add_dependencies(jpeg_turbo jpeg_turbo_external)
|
|
endif()
|
|
|
|
add_library(${target} STATIC ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/src/Jpeg.cpp)
|
|
target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/include)
|
|
target_include_directories(${target} SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/stb)
|
|
target_link_libraries(${target} PRIVATE ${runtimeTarget} jpeg_turbo)
|
|
set_target_properties(${target} PROPERTIES
|
|
CXX_EXTENSIONS OFF
|
|
CXX_VISIBILITY_PRESET hidden
|
|
VISIBILITY_INLINES_HIDDEN ON
|
|
POSITION_INDEPENDENT_CODE ON
|
|
)
|
|
|
|
if(BUILD_TESTING)
|
|
add_test_executable(${target}_tests ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/tests/Jpeg.cpp)
|
|
target_link_libraries(${target}_tests PRIVATE ${target})
|
|
configure_windows_unwind(${target}_tests)
|
|
add_test(NAME ${target} COMMAND ${target}_tests)
|
|
if(WIN32)
|
|
set_tests_properties(${target} PROPERTIES ENVIRONMENT_MODIFICATION
|
|
"PATH=path_list_prepend:$<TARGET_FILE_DIR:${runtimeTarget}>")
|
|
endif()
|
|
endif()
|
|
endfunction()
|