AnyPS5/core/Decoder/Jpeg/CMakeLists.txt

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()