Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
28 views8 pages

CMake Lists

The document is a CMake configuration file for the libxmp project, specifying build options for static and shared libraries, including conditions for different platforms. It includes options for enabling or disabling features like depackers and ProWizard format loaders, as well as unit testing and documentation. The file also handles installation configurations and exports for the built libraries.

Uploaded by

jetspyderhd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views8 pages

CMake Lists

The document is a CMake configuration file for the libxmp project, specifying build options for static and shared libraries, including conditions for different platforms. It includes options for enabling or disabling features like depackers and ProWizard format loaders, as well as unit testing and documentation. The file also handles installation configurations and exports for the built libraries.

Uploaded by

jetspyderhd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

cmake_minimum_required(VERSION 3.4...3.

10)
project(libxmp VERSION 4.6.3 LANGUAGES C)

set(LIBXMP_DEFINES)
set(LIBXMPLITE_DEFINES)
set(LIBXMP_CFLAGS)

include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/libxmp-checks.cmake)
include(GNUInstallDirs)

# -fPIC thing
if(NOT WIN32 AND NOT EMSCRIPTEN AND NOT VITA)
option(LIBXMP_PIC "Build the static library as position-independent" OFF)
else()
set(LIBXMP_PIC OFF)
endif()

if(EMSCRIPTEN OR VITA OR PSP)


set(BUILD_SHARED_DEFAULT OFF)
else()
set(BUILD_SHARED_DEFAULT ON)
endif()

option(BUILD_STATIC "Build libXMP static library" ON)


option(BUILD_SHARED "Build libXMP shared library" ${BUILD_SHARED_DEFAULT})
option(BUILD_LITE "Build libXMP-lite library" OFF)
if(NOT BUILD_STATIC AND NOT BUILD_SHARED)
message(FATAL_ERROR "Both static and shared builds got disabled. You must
enable at least one of them.")
endif()

option(LIBXMP_DISABLE_DEPACKERS "Disable archive depackers" OFF)


option(LIBXMP_DISABLE_PROWIZARD "Disable ProWizard format loaders" OFF)
option(LIBXMP_DISABLE_IT "Disable IT format in libXMP-lite" OFF)

include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/libxmp-sources.cmake)

if(LIBXMP_DISABLE_DEPACKERS)
list(APPEND LIBXMP_DEFINES LIBXMP_NO_DEPACKERS)
else()
list(APPEND LIBXMP_SRC_LIST ${LIBXMP_SRC_LIST_DEPACKERS})
endif()
if(LIBXMP_DISABLE_PROWIZARD)
list(APPEND LIBXMP_DEFINES LIBXMP_NO_PROWIZARD)
else()
list(APPEND LIBXMP_SRC_LIST ${LIBXMP_SRC_LIST_PROWIZARD})
endif()

#lite-only defs
list(APPEND LIBXMPLITE_DEFINES LIBXMP_CORE_PLAYER)
if(LIBXMP_DISABLE_IT)
list(APPEND LIBXMPLITE_DEFINES LIBXMP_CORE_DISABLE_IT)
endif()

if(MSVC)
list(APPEND LIBXMP_DEFINES _USE_MATH_DEFINES)
list(APPEND LIBXMPLITE_DEFINES _USE_MATH_DEFINES)
else()
list(APPEND LIBXMP_DEFINES _REENTRANT)
list(APPEND LIBXMPLITE_DEFINES _REENTRANT)
endif()

#for libxmp-lite.pc
set(libxmplite_VERSION ${libxmp_VERSION})

# extract exports:
set(XMP_EXPORTS)
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/libxmp.map _XMP_EXPORTS)
foreach(export_sym ${_XMP_EXPORTS})
if(export_sym MATCHES "xmp_.*")
string(REPLACE ";" "" export_sym ${export_sym})
string(STRIP ${export_sym} export_sym)
list(APPEND XMP_EXPORTS "${export_sym}")
endif()
endforeach()
set(_XMP_EXPORTS)
list(REMOVE_DUPLICATES XMP_EXPORTS)

set(XMP_INSTALLS)

if(BUILD_STATIC)
add_library(xmp_static STATIC ${LIBXMP_SRC_LIST})
add_library(libxmp::xmp_static ALIAS xmp_static)
list(APPEND XMP_INSTALLS xmp_static)
set_target_properties(xmp_static PROPERTIES C_STANDARD 90)
if(MSVC)
set_target_properties(xmp_static PROPERTIES OUTPUT_NAME libxmp-static)
else()
set_target_properties(xmp_static PROPERTIES OUTPUT_NAME xmp)
endif()

target_compile_options(xmp_static PRIVATE ${LIBXMP_CFLAGS})


target_compile_definitions(xmp_static PRIVATE ${LIBXMP_DEFINES})
target_compile_definitions(xmp_static PUBLIC LIBXMP_STATIC)

if(LIBXMP_PIC)
target_compile_options(xmp_static PRIVATE -fPIC)
endif()

target_include_directories(xmp_static PUBLIC "$<BUILD_INTERFACE:$


{CMAKE_CURRENT_SOURCE_DIR}/include>")
target_include_directories(xmp_static PUBLIC "$<INSTALL_INTERFACE:$
{CMAKE_INSTALL_INCLUDEDIR}>")

if(LIBM_REQUIRED)
target_link_libraries(xmp_static PUBLIC ${LIBM_LIBRARY})
endif()

if(BUILD_LITE)
add_library(xmp_lite_static STATIC ${LIBXMP_SRC_LIST_LITE})
add_library(libxmp-lite::xmp_lite_static ALIAS xmp_lite_static)
list(APPEND XMP_INSTALLS xmp_lite_static)
set_target_properties(xmp_lite_static PROPERTIES C_STANDARD 90)
if(MSVC)
set_target_properties(xmp_lite_static PROPERTIES OUTPUT_NAME libxmp-
lite-static)
else()
set_target_properties(xmp_lite_static PROPERTIES OUTPUT_NAME xmp-lite)
endif()

target_compile_options(xmp_lite_static PRIVATE ${LIBXMP_CFLAGS})


target_compile_definitions(xmp_lite_static PRIVATE ${LIBXMPLITE_DEFINES})
target_compile_definitions(xmp_lite_static PUBLIC LIBXMP_STATIC)

if(LIBXMP_PIC)
target_compile_options(xmp_lite_static PRIVATE -fPIC)
endif()

target_include_directories(xmp_lite_static PUBLIC "$<BUILD_INTERFACE:$


{CMAKE_CURRENT_SOURCE_DIR}/include>")
target_include_directories(xmp_lite_static PUBLIC "$<INSTALL_INTERFACE:$
{CMAKE_INSTALL_INCLUDEDIR}/libxmp-lite>")

if(LIBM_REQUIRED)
target_link_libraries(xmp_lite_static PUBLIC ${LIBM_LIBRARY})
endif()
endif()
endif()

if(BUILD_SHARED)
add_library(xmp_shared SHARED ${LIBXMP_SRC_LIST})
add_library(libxmp::xmp_shared ALIAS xmp_shared)
list(APPEND XMP_INSTALLS xmp_shared)
set_target_properties(xmp_shared PROPERTIES C_STANDARD 90)
if(MSVC)
set_target_properties(xmp_shared PROPERTIES OUTPUT_NAME libxmp)
elseif(OS2)
set_target_properties(xmp_shared PROPERTIES OUTPUT_NAME libxmp)
set(DEF_CONTENTS "LIBRARY LIBXMP INITINSTANCE TERMINSTANCE\n")
list(APPEND DEF_CONTENTS "DATA MULTIPLE NONSHARED\n")
list(APPEND DEF_CONTENTS "EXPORTS\n")
foreach(export_sym ${XMP_EXPORTS})
list(APPEND DEF_CONTENTS " ${export_sym}\n")
endforeach()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/os2dll.def ${DEF_CONTENTS})
target_sources(xmp_shared PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/os2dll.def)
else()
set_target_properties(xmp_shared PROPERTIES OUTPUT_NAME xmp)
endif()

if(HAVE_GCC OR HAVE_CLANG)
if(APPLE)
set_property(TARGET xmp_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-undefined,error")
elseif(NOT CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
cmake_push_check_state()
set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
check_c_compiler_flag("" HAVE_NO_UNDEFINED)
cmake_pop_check_state()
if(HAVE_NO_UNDEFINED)
set_property(TARGET xmp_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--no-undefined")
endif()
endif()
endif()
if(HAVE_VISIBILITY AND HAVE_GNU_LD AND UNIX)
target_compile_definitions(xmp_shared PRIVATE USE_VERSIONED_SYMBOLS=1)
set_property(TARGET xmp_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--version-script,\"$
{CMAKE_CURRENT_SOURCE_DIR}/libxmp.map\"")
message(STATUS "Versioned symbols: ENABLED.")
else()
message(STATUS "Versioned symbols: DISABLED")
endif()

target_compile_options(xmp_shared PRIVATE ${LIBXMP_CFLAGS})


target_compile_definitions(xmp_shared PRIVATE ${LIBXMP_DEFINES})
if(WIN32)
target_compile_definitions(xmp_shared PRIVATE BUILDING_DLL)
endif()

target_include_directories(xmp_shared PUBLIC "$<BUILD_INTERFACE:$


{CMAKE_CURRENT_SOURCE_DIR}/include>")
target_include_directories(xmp_shared PUBLIC "$<INSTALL_INTERFACE:$
{CMAKE_INSTALL_INCLUDEDIR}>")

set_target_properties(xmp_shared PROPERTIES VERSION ${libxmp_VERSION} SOVERSION


${libxmp_VERSION_MAJOR})

if(ANDROID AND CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")


target_link_libraries(xmp_shared PRIVATE log)
endif()
if(LIBM_REQUIRED)
target_link_libraries(xmp_shared PUBLIC ${LIBM_LIBRARY})
endif()

if(BUILD_LITE)
add_library(xmp_lite_shared SHARED ${LIBXMP_SRC_LIST_LITE})
add_library(libxmp-lite::xmp_lite_shared ALIAS xmp_lite_shared)
list(APPEND XMP_INSTALLS xmp_lite_shared)
set_target_properties(xmp_lite_shared PROPERTIES C_STANDARD 90)
if(MSVC)
set_target_properties(xmp_lite_shared PROPERTIES OUTPUT_NAME libxmp-
lite)
elseif(OS2)
set_target_properties(xmp_lite_shared PROPERTIES OUTPUT_NAME libxmplt)
set(DEF_CONTENTS "LIBRARY LIBXMPLT INITINSTANCE TERMINSTANCE\n")
list(APPEND DEF_CONTENTS "DATA MULTIPLE NONSHARED\n")
list(APPEND DEF_CONTENTS "EXPORTS\n")
foreach(export_sym ${XMP_EXPORTS})
list(APPEND DEF_CONTENTS " ${export_sym}\n")
endforeach()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/os2lite.def ${DEF_CONTENTS})
target_sources(xmp_lite_shared PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/os2lite.def)
else()
set_target_properties(xmp_lite_shared PROPERTIES OUTPUT_NAME xmp-lite)
endif()

if(HAVE_GCC OR HAVE_CLANG)
if(APPLE)
set_property(TARGET xmp_lite_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-undefined,error")
elseif(NOT CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
cmake_push_check_state()
set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined")
check_c_compiler_flag("" HAVE_NO_UNDEFINED)
cmake_pop_check_state()
if(HAVE_NO_UNDEFINED)
set_property(TARGET xmp_lite_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--no-undefined")
endif()
endif()
endif()

if(HAVE_VISIBILITY AND HAVE_GNU_LD AND UNIX)


target_compile_definitions(xmp_lite_shared PRIVATE
USE_VERSIONED_SYMBOLS=1)
set_property(TARGET xmp_lite_shared APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--version-script,$
{CMAKE_CURRENT_SOURCE_DIR}/libxmp.map")
endif()

target_compile_options(xmp_lite_shared PRIVATE ${LIBXMP_CFLAGS})


target_compile_definitions(xmp_lite_shared PRIVATE ${LIBXMPLITE_DEFINES})
if(WIN32)
target_compile_definitions(xmp_lite_shared PRIVATE BUILDING_DLL)
endif()

target_include_directories(xmp_lite_shared PUBLIC "$<BUILD_INTERFACE:$


{CMAKE_CURRENT_SOURCE_DIR}/include>")
target_include_directories(xmp_lite_shared PUBLIC "$<INSTALL_INTERFACE:$
{CMAKE_INSTALL_INCLUDEDIR}/libxmp-lite>")

set_target_properties(xmp_lite_shared PROPERTIES VERSION ${libxmp_VERSION}


SOVERSION ${libxmp_VERSION_MAJOR})

if(ANDROID AND CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")


target_link_libraries(xmp_lite_shared PRIVATE log)
endif()
if(LIBM_REQUIRED)
target_link_libraries(xmp_lite_shared PUBLIC ${LIBM_LIBRARY})
endif()
endif()
endif()

add_library(XMP_IF INTERFACE)
if(NOT BUILD_SHARED)
target_link_libraries(XMP_IF INTERFACE xmp_static)
else()
target_link_libraries(XMP_IF INTERFACE xmp_shared)
endif()

if(BUILD_LITE)
add_library(XMPLITE_IF INTERFACE)
if(NOT BUILD_SHARED)
target_link_libraries(XMPLITE_IF INTERFACE xmp_lite_static)
else()
target_link_libraries(XMPLITE_IF INTERFACE xmp_lite_shared)
endif()
endif()
# === Unit tests ====
option(WITH_UNIT_TESTS "Enable unit testing" OFF)
if(WITH_UNIT_TESTS)
enable_testing()
add_subdirectory(test)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test-dev/")
add_subdirectory(test-dev)
endif()
endif()

if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples/CMakeLists.txt")
add_subdirectory(examples)
endif()

# === Documentation ====


add_subdirectory(docs)

# === Install ====

include(CMakePackageConfigHelpers)

if(WIN32)
set(cmake_install_cmakdir "cmake")
set(cmake_install_cmakdir_lite "cmake")
else()
set(cmake_install_cmakdir "${CMAKE_INSTALL_LIBDIR}/cmake/libxmp")
set(cmake_install_cmakdir_lite "${CMAKE_INSTALL_LIBDIR}/cmake/libxmp-lite")
endif()

set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "\${prefix}")
set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
set(bindir "${CMAKE_INSTALL_FULL_BINDIR}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/libxmp.pc.in"
"${CMAKE_CURRENT_BINARY_DIR}/libxmp.pc" @ONLY
)
write_basic_package_version_file(libxmp-config-version.cmake
COMPATIBILITY AnyNewerVersion
)
if(TARGET xmp_shared)
install(TARGETS xmp_shared EXPORT libxmp_shared_exports
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(EXPORT libxmp_shared_exports
DESTINATION "${cmake_install_cmakdir}"
FILE "libxmp-shared-targets.cmake"
NAMESPACE "libxmp::"
)
endif()
if(TARGET xmp_static)
install(TARGETS xmp_static EXPORT libxmp_static_exports
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(EXPORT libxmp_static_exports
DESTINATION "${cmake_install_cmakdir}"
FILE "libxmp-static-targets.cmake"
NAMESPACE "libxmp::"
)
endif()
install(FILES
libxmp-config.cmake
"${CMAKE_CURRENT_BINARY_DIR}/libxmp-config-version.cmake"
DESTINATION "${cmake_install_cmakdir}"
)
install(FILES
include/xmp.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libxmp.pc"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
if(BUILD_LITE)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/lite/libxmp-lite.pc.in"
"${CMAKE_CURRENT_BINARY_DIR}/libxmp-lite.pc" @ONLY
)
write_basic_package_version_file(libxmp-lite-config-version.cmake
COMPATIBILITY AnyNewerVersion
)
if(TARGET xmp_lite_shared)
install(TARGETS xmp_lite_shared EXPORT libxmp_lite_shared_exports
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(EXPORT libxmp_lite_shared_exports
DESTINATION "${cmake_install_cmakdir_lite}"
FILE "libxmp-lite-shared-targets.cmake"
NAMESPACE "libxmp-lite::"
)
endif()
if(TARGET xmp_lite_static)
install(TARGETS xmp_lite_static EXPORT libxmp_lite_static_exports
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(EXPORT libxmp_lite_static_exports
DESTINATION "${cmake_install_cmakdir_lite}"
FILE "libxmp-lite-static-targets.cmake"
NAMESPACE "libxmp-lite::"
)
endif()
install(FILES
"${CMAKE_CURRENT_SOURCE_DIR}/src/lite/libxmp-lite-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/libxmp-lite-config-version.cmake"
DESTINATION "${cmake_install_cmakdir_lite}"
)
install(FILES
include/xmp.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libxmp-lite
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libxmp-lite.pc"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
endif()

You might also like