Files
RedBear-OS/local/recipes/libs/lcms2/source/cmake/Lcms2Plugins.cmake
T
vasilito d551d5dc41 feat: add display stack dependency recipes
Add lcms2, libdisplay-info, libepoxy, and libxcvt recipes required
by the KWin/Mesa display stack.
2026-05-11 10:10:11 +01:00

92 lines
3.4 KiB
CMake

include(GNUInstallDirs)
function(_lcms2_add_plugin lib_name)
set(options)
set(oneValueArgs)
set(multiValueArgs SOURCES INCLUDE_DIRS)
cmake_parse_arguments(PLUG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(LCMS2_BUILD_SHARED)
add_library(${lib_name} SHARED ${PLUG_SOURCES})
else()
add_library(${lib_name} STATIC ${PLUG_SOURCES})
endif()
target_include_directories(${lib_name}
PRIVATE
"${PROJECT_SOURCE_DIR}/include"
${PLUG_INCLUDE_DIRS}
)
if(DEFINED LCMS2_LIBRARY_TARGET)
target_link_libraries(${lib_name} PRIVATE "${LCMS2_LIBRARY_TARGET}")
endif()
if(WIN32)
# Ensure plugin entrypoints using CMSEXPORT are exported from the DLL.
target_compile_definitions(${lib_name} PRIVATE CMS_DLL_BUILD)
endif()
set_target_properties(${lib_name} PROPERTIES
VERSION "${PROJECT_VERSION}.0"
SOVERSION "2"
)
set(_lcms2_plugin_targets "${LCMS2_PLUGIN_TARGETS}")
list(APPEND _lcms2_plugin_targets "${lib_name}")
set(LCMS2_PLUGIN_TARGETS "${_lcms2_plugin_targets}" PARENT_SCOPE)
endfunction()
function(lcms2_add_plugins)
include(CMakeParseArguments)
# Populated by _lcms2_add_plugin() via PARENT_SCOPE into this function scope.
set(LCMS2_PLUGIN_TARGETS "")
if(LCMS2_WITH_FASTFLOAT)
_lcms2_add_plugin(lcms2_fast_float
SOURCES
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_8_curves.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_8_matsh_sse.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_8_matsh.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_8_tethra.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_16_tethra.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_15bits.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_15mats.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_cmyk.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_curves.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_matsh.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_separate.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_sup.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_tethra.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_lab.c"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/fast_float_internal.h"
INCLUDE_DIRS
"${PROJECT_SOURCE_DIR}/plugins/fast_float/include"
"${PROJECT_SOURCE_DIR}/plugins/fast_float/src/../include"
)
if(LCMS2_DEFINE_CMS_DONT_USE_SSE2)
target_compile_definitions(lcms2_fast_float PRIVATE CMS_DONT_USE_SSE2=1)
endif()
endif()
if(LCMS2_WITH_THREADED_PLUGIN)
_lcms2_add_plugin(lcms2_threaded
SOURCES
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/threaded_split.c"
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/threaded_core.c"
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/threaded_main.c"
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/threaded_scheduler.c"
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/threaded_internal.h"
INCLUDE_DIRS
"${PROJECT_SOURCE_DIR}/plugins/threaded/include"
"${PROJECT_SOURCE_DIR}/plugins/threaded/src/../include"
)
endif()
# Propagate plugin target list to the root scope so packaging (install + pc) can see it.
set(LCMS2_PLUGIN_TARGETS "${LCMS2_PLUGIN_TARGETS}" PARENT_SCOPE)
endfunction()