1 cmake_minimum_required(VERSION 3.9)
3 project(chdr VERSION 0.2 LANGUAGES C)
5 if(CMAKE_PROJECT_NAME STREQUAL "chdr")
6 option(BUILD_SHARED_LIBS "Build libchdr also as a shared library" ON)
8 option(INSTALL_STATIC_LIBS "Install static libraries" OFF)
9 option(WITH_SYSTEM_ZLIB "Use system provided zlib library" OFF)
11 option(BUILD_LTO "Compile libchdr with link-time optimization if supported" OFF)
13 include(CheckIPOSupported)
14 check_ipo_supported(RESULT HAVE_IPO)
16 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
20 include(GNUInstallDirs)
22 #--------------------------------------------------
24 #--------------------------------------------------
28 add_subdirectory(deps/lzma-22.01 EXCLUDE_FROM_ALL)
29 list(APPEND CHDR_LIBS lzma)
30 list(APPEND CHDR_INCLUDES lzma)
34 find_package(ZLIB REQUIRED)
35 list(APPEND PLATFORM_LIBS ZLIB::ZLIB)
37 add_subdirectory(deps/zlib-1.2.13 EXCLUDE_FROM_ALL)
38 set_target_properties(zlibstatic PROPERTIES POSITION_INDEPENDENT_CODE ON)
39 list(APPEND CHDR_LIBS zlibstatic)
40 list(APPEND CHDR_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/deps/zlib-1.2.13" "${CMAKE_CURRENT_BINARY_DIR}/deps/zlib-1.2.13")
43 #--------------------------------------------------
45 #--------------------------------------------------
48 src/libchdr_bitstream.c
55 list(APPEND CHDR_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/include)
57 add_library(chdr-static STATIC ${CHDR_SOURCES})
58 target_include_directories(chdr-static PRIVATE ${CHDR_INCLUDES} PUBLIC include)
59 target_link_libraries(chdr-static PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS})
62 target_compile_definitions(chdr-static PRIVATE _CRT_SECURE_NO_WARNINGS)
65 if (INSTALL_STATIC_LIBS)
66 install(TARGETS chdr-static ${CHDR_LIBS}
67 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
71 if (BUILD_SHARED_LIBS)
72 add_library(chdr SHARED ${CHDR_SOURCES})
73 target_include_directories(chdr PRIVATE ${CHDR_INCLUDES} PUBLIC include)
74 target_link_libraries(chdr PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS})
77 target_compile_definitions(chdr PUBLIC "CHD_DLL")
78 target_compile_definitions(chdr PRIVATE "CHD_DLL_EXPORTS")
79 target_compile_definitions(chdr PRIVATE _CRT_SECURE_NO_WARNINGS)
81 target_link_libraries(chdr PRIVATE -Wl,-dead_strip -Wl,-exported_symbol,_chd_*)
83 target_link_libraries(chdr PRIVATE -Wl,--version-script ${CMAKE_CURRENT_SOURCE_DIR}/src/link.T -Wl,--no-undefined)
86 set_target_properties(chdr PROPERTIES C_VISIBILITY_PRESET hidden)
87 set_target_properties(chdr PROPERTIES VISIBILITY_INLINES_HIDDEN 1)
88 set_target_properties(chdr PROPERTIES PUBLIC_HEADER "include/libchdr/bitstream.h;include/libchdr/cdrom.h;include/libchdr/chd.h;include/libchdr/chdconfig.h;include/libchdr/coretypes.h;include/libchdr/flac.h;include/libchdr/huffman.h")
89 set_target_properties(chdr PROPERTIES VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" SOVERSION ${PROJECT_VERSION_MAJOR})
91 if (CMAKE_BUILD_TYPE MATCHES Release)
92 #add_custom_command(TARGET chdr POST_BUILD COMMAND ${CMAKE_STRIP} libchdr.so)
93 endif (CMAKE_BUILD_TYPE MATCHES Release)
96 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
97 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
98 PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/libchdr"
101 configure_file(pkg-config.pc.in ${CMAKE_BINARY_DIR}/libchdr.pc @ONLY)
102 install(FILES ${CMAKE_BINARY_DIR}/libchdr.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
105 add_subdirectory(tests)