Files
AnyPS5/core/Decoder/Jpeg/CMakeLists.txt
T
mugurc 8ca4c10096 build(macos): configure the full build for x86-64 under Rosetta
The libraries are x86-64 code that runs under Rosetta 2 on Apple silicon,
so the full build selects x86-64 itself: CMAKE_OSX_ARCHITECTURES defaults to
x86_64, CMake is told the host processor is x86_64 instead of arm64, and
libjpeg-turbo, which is configured by its own CMake run, gets the same
values. Configuring the full build for another architecture fails with an
error.

Apple clang's libc++ needs -fexperimental-library for the C++20 library
features the sources use.

The prx libraries find each other through their run path. dyld does not
know $ORIGIN, so on macOS it is @loader_path.
2026-10-12 19:57:32 +03:00

81 lines
3.5 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")
set(jpeg_turbo_platform_args)
if(APPLE)
list(APPEND jpeg_turbo_platform_args
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_APPLE_SILICON_PROCESSOR=${CMAKE_APPLE_SILICON_PROCESSOR})
endif()
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}
${jpeg_turbo_platform_args}
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()