b24e7fce |
1 | cmake_minimum_required(VERSION 3.9) |
2 | |
9e052883 |
3 | project(chdr VERSION 0.2 LANGUAGES C) |
b24e7fce |
4 | |
5 | if(CMAKE_PROJECT_NAME STREQUAL "chdr") |
6 | option(BUILD_SHARED_LIBS "Build libchdr also as a shared library" ON) |
7 | endif() |
8 | option(INSTALL_STATIC_LIBS "Install static libraries" OFF) |
9 | option(WITH_SYSTEM_ZLIB "Use system provided zlib library" OFF) |
10 | |
9e052883 |
11 | option(BUILD_LTO "Compile libchdr with link-time optimization if supported" OFF) |
12 | if(BUILD_LTO) |
13 | include(CheckIPOSupported) |
14 | check_ipo_supported(RESULT HAVE_IPO) |
15 | if(HAVE_IPO) |
16 | set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) |
17 | endif() |
b24e7fce |
18 | endif() |
19 | |
b24e7fce |
20 | include(GNUInstallDirs) |
21 | |
b24e7fce |
22 | #-------------------------------------------------- |
23 | # dependencies |
24 | #-------------------------------------------------- |
25 | |
26 | |
27 | # lzma |
f535537f |
28 | add_subdirectory(deps/lzma-24.05 EXCLUDE_FROM_ALL) |
b24e7fce |
29 | list(APPEND CHDR_LIBS lzma) |
30 | list(APPEND CHDR_INCLUDES lzma) |
31 | |
32 | # zlib |
33 | if (WITH_SYSTEM_ZLIB) |
9e052883 |
34 | find_package(ZLIB REQUIRED) |
35 | list(APPEND PLATFORM_LIBS ZLIB::ZLIB) |
b24e7fce |
36 | else() |
648db22b |
37 | option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" OFF) |
38 | add_subdirectory(deps/zlib-1.3.1 EXCLUDE_FROM_ALL) |
9e052883 |
39 | set_target_properties(zlibstatic PROPERTIES POSITION_INDEPENDENT_CODE ON) |
40 | list(APPEND CHDR_LIBS zlibstatic) |
b24e7fce |
41 | endif() |
42 | |
f535537f |
43 | # zstd |
44 | option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" OFF) |
45 | option(ZSTD_BUILD_PROGRAMS "BUILD PROGRAMS" OFF) |
46 | add_subdirectory(deps/zstd-1.5.6/build/cmake EXCLUDE_FROM_ALL) |
47 | list(APPEND CHDR_LIBS libzstd_static) |
b24e7fce |
48 | #-------------------------------------------------- |
49 | # chdr |
50 | #-------------------------------------------------- |
51 | |
52 | set(CHDR_SOURCES |
53 | src/libchdr_bitstream.c |
54 | src/libchdr_cdrom.c |
55 | src/libchdr_chd.c |
56 | src/libchdr_flac.c |
57 | src/libchdr_huffman.c |
58 | ) |
59 | |
60 | list(APPEND CHDR_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/include) |
61 | |
62 | add_library(chdr-static STATIC ${CHDR_SOURCES}) |
9e052883 |
63 | target_include_directories(chdr-static PRIVATE ${CHDR_INCLUDES} PUBLIC include) |
b24e7fce |
64 | target_link_libraries(chdr-static PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS}) |
65 | |
9e052883 |
66 | if(MSVC) |
67 | target_compile_definitions(chdr-static PRIVATE _CRT_SECURE_NO_WARNINGS) |
68 | endif() |
69 | |
b24e7fce |
70 | if (INSTALL_STATIC_LIBS) |
71 | install(TARGETS chdr-static ${CHDR_LIBS} |
72 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
73 | ) |
74 | endif() |
75 | |
76 | if (BUILD_SHARED_LIBS) |
b24e7fce |
77 | add_library(chdr SHARED ${CHDR_SOURCES}) |
9e052883 |
78 | target_include_directories(chdr PRIVATE ${CHDR_INCLUDES} PUBLIC include) |
b24e7fce |
79 | target_link_libraries(chdr PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS}) |
80 | |
81 | if(MSVC) |
82 | target_compile_definitions(chdr PUBLIC "CHD_DLL") |
83 | target_compile_definitions(chdr PRIVATE "CHD_DLL_EXPORTS") |
9e052883 |
84 | target_compile_definitions(chdr PRIVATE _CRT_SECURE_NO_WARNINGS) |
b24e7fce |
85 | elseif(APPLE) |
9e052883 |
86 | target_link_libraries(chdr PRIVATE -Wl,-dead_strip -Wl,-exported_symbol,_chd_*) |
f535537f |
87 | elseif(CMAKE_SYSTEM_NAME STREQUAL OpenBSD) |
88 | target_link_libraries(chdr PRIVATE -Wl,--version-script ${CMAKE_CURRENT_SOURCE_DIR}/src/link.T) |
b24e7fce |
89 | else() |
9e052883 |
90 | target_link_libraries(chdr PRIVATE -Wl,--version-script ${CMAKE_CURRENT_SOURCE_DIR}/src/link.T -Wl,--no-undefined) |
b24e7fce |
91 | endif() |
92 | |
9e052883 |
93 | set_target_properties(chdr PROPERTIES C_VISIBILITY_PRESET hidden) |
94 | set_target_properties(chdr PROPERTIES VISIBILITY_INLINES_HIDDEN 1) |
b24e7fce |
95 | 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") |
9e052883 |
96 | set_target_properties(chdr PROPERTIES VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" SOVERSION ${PROJECT_VERSION_MAJOR}) |
b24e7fce |
97 | |
98 | if (CMAKE_BUILD_TYPE MATCHES Release) |
99 | #add_custom_command(TARGET chdr POST_BUILD COMMAND ${CMAKE_STRIP} libchdr.so) |
100 | endif (CMAKE_BUILD_TYPE MATCHES Release) |
101 | |
102 | install(TARGETS chdr |
103 | LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
104 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
105 | PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/libchdr" |
106 | ) |
107 | |
108 | configure_file(pkg-config.pc.in ${CMAKE_BINARY_DIR}/libchdr.pc @ONLY) |
109 | install(FILES ${CMAKE_BINARY_DIR}/libchdr.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
110 | endif() |
111 | |
9e052883 |
112 | add_subdirectory(tests) |