jxl_threads.cmake (3232B)
1 # Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 # 3 # Use of this source code is governed by a BSD-style 4 # license that can be found in the LICENSE file. 5 6 find_package(Threads REQUIRED) 7 8 include(jxl_lists.cmake) 9 10 add_library(jxl_threads ${JPEGXL_INTERNAL_THREADS_SOURCES}) 11 target_compile_options(jxl_threads PRIVATE ${JPEGXL_INTERNAL_FLAGS}) 12 target_compile_options(jxl_threads PUBLIC ${JPEGXL_COVERAGE_FLAGS}) 13 set_property(TARGET jxl_threads PROPERTY POSITION_INDEPENDENT_CODE ON) 14 15 target_include_directories(jxl_threads 16 PRIVATE 17 "${PROJECT_SOURCE_DIR}" 18 PUBLIC 19 "${CMAKE_CURRENT_SOURCE_DIR}/include" 20 "${CMAKE_CURRENT_BINARY_DIR}/include") 21 22 target_link_libraries(jxl_threads 23 PUBLIC ${JPEGXL_COVERAGE_FLAGS} Threads::Threads 24 ) 25 26 set_target_properties(jxl_threads PROPERTIES 27 CXX_VISIBILITY_PRESET hidden 28 VISIBILITY_INLINES_HIDDEN 1 29 DEFINE_SYMBOL JXL_THREADS_INTERNAL_LIBRARY_BUILD 30 ) 31 32 install(TARGETS jxl_threads 33 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 34 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 35 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) 36 37 set_target_properties(jxl_threads PROPERTIES 38 VERSION ${JPEGXL_LIBRARY_VERSION} 39 SOVERSION ${JPEGXL_LIBRARY_SOVERSION}) 40 41 set_target_properties(jxl_threads PROPERTIES 42 LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/jxl/jxl.version) 43 if(APPLE) 44 set_property(TARGET ${target} APPEND_STRING PROPERTY 45 LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/jxl/jxl_osx.syms") 46 elseif(WIN32) 47 # Nothing needed here, we use __declspec(dllexport) (jxl_threads_export.h) 48 else() 49 set_property(TARGET jxl_threads APPEND_STRING PROPERTY 50 LINK_FLAGS " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/jxl/jxl.version") 51 endif() # APPLE 52 53 # Compile the shared library such that the JXL_THREADS_EXPORT symbols are 54 # exported. Users of the library will not set this flag and therefore import 55 # those symbols. 56 target_compile_definitions(jxl_threads 57 PRIVATE -DJXL_THREADS_INTERNAL_LIBRARY_BUILD) 58 59 generate_export_header(jxl_threads 60 BASE_NAME JXL_THREADS 61 EXPORT_FILE_NAME include/jxl/jxl_threads_export.h) 62 # Place all public headers in a single directory. 63 foreach(path ${JPEGXL_INTERNAL_THREADS_PUBLIC_HEADERS}) 64 configure_file( 65 ${path} 66 ${path} 67 COPYONLY 68 ) 69 endforeach() 70 71 ### Add a pkg-config file for libjxl_threads. 72 73 # Allow adding prefix if CMAKE_INSTALL_INCLUDEDIR not absolute. 74 if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") 75 set(PKGCONFIG_TARGET_INCLUDES "${CMAKE_INSTALL_INCLUDEDIR}") 76 else() 77 set(PKGCONFIG_TARGET_INCLUDES "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") 78 endif() 79 # Allow adding prefix if CMAKE_INSTALL_LIBDIR not absolute. 80 if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") 81 set(PKGCONFIG_TARGET_LIBS "${CMAKE_INSTALL_LIBDIR}") 82 else() 83 set(PKGCONFIG_TARGET_LIBS "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") 84 endif() 85 86 if (BUILD_SHARED_LIBS) 87 set(JPEGXL_REQUIRES_TYPE "Requires.private") 88 else() 89 set(JPEGXL_REQUIRES_TYPE "Requires") 90 endif() 91 92 set(JPEGXL_THREADS_LIBRARY_REQUIRES "") 93 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/threads/libjxl_threads.pc.in" 94 "libjxl_threads.pc" @ONLY) 95 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libjxl_threads.pc" 96 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")