bbb8be5d32b7b4647d2f7623f1d706d593e15805
[pcsx_rearmed.git] / deps / libchdr / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.9)
2
3 project(chdr VERSION 0.2 LANGUAGES C)
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
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()
18 endif()
19
20 include(GNUInstallDirs)
21
22 #--------------------------------------------------
23 # dependencies
24 #--------------------------------------------------
25
26
27 # lzma
28 add_subdirectory(deps/lzma-22.01 EXCLUDE_FROM_ALL)
29   list(APPEND CHDR_LIBS lzma)
30   list(APPEND CHDR_INCLUDES lzma)
31
32 # zlib
33 if (WITH_SYSTEM_ZLIB)
34   find_package(ZLIB REQUIRED)
35   list(APPEND PLATFORM_LIBS ZLIB::ZLIB)
36 else()
37   option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" OFF)
38   add_subdirectory(deps/zlib-1.3.1 EXCLUDE_FROM_ALL)
39   set_target_properties(zlibstatic PROPERTIES POSITION_INDEPENDENT_CODE ON)
40   list(APPEND CHDR_LIBS zlibstatic)
41 endif()
42
43 # zstd 
44 add_subdirectory(deps/zstd-1.5.5 EXCLUDE_FROM_ALL)
45 list(APPEND CHDR_LIBS zstd)
46 list(APPEND CHDR_INCLUDES zstd)
47 #--------------------------------------------------
48 # chdr
49 #--------------------------------------------------
50
51 set(CHDR_SOURCES
52   src/libchdr_bitstream.c
53   src/libchdr_cdrom.c
54   src/libchdr_chd.c
55   src/libchdr_flac.c
56   src/libchdr_huffman.c
57 )
58
59 list(APPEND CHDR_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/include)
60
61 add_library(chdr-static STATIC ${CHDR_SOURCES})
62 target_include_directories(chdr-static PRIVATE ${CHDR_INCLUDES} PUBLIC include)
63 target_link_libraries(chdr-static PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS})
64
65 if(MSVC)
66   target_compile_definitions(chdr-static PRIVATE _CRT_SECURE_NO_WARNINGS)
67 endif()
68
69 if (INSTALL_STATIC_LIBS)
70   install(TARGETS chdr-static ${CHDR_LIBS}
71     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
72   )
73 endif()
74
75 if (BUILD_SHARED_LIBS)
76   add_library(chdr SHARED ${CHDR_SOURCES})
77   target_include_directories(chdr PRIVATE ${CHDR_INCLUDES} PUBLIC include)
78   target_link_libraries(chdr PRIVATE ${CHDR_LIBS} ${PLATFORM_LIBS})
79
80   if(MSVC)
81     target_compile_definitions(chdr PUBLIC "CHD_DLL")
82     target_compile_definitions(chdr PRIVATE "CHD_DLL_EXPORTS")
83     target_compile_definitions(chdr PRIVATE _CRT_SECURE_NO_WARNINGS)
84   elseif(APPLE)
85     target_link_libraries(chdr PRIVATE -Wl,-dead_strip -Wl,-exported_symbol,_chd_*)
86   else()
87     target_link_libraries(chdr PRIVATE -Wl,--version-script ${CMAKE_CURRENT_SOURCE_DIR}/src/link.T -Wl,--no-undefined)
88   endif()
89
90   set_target_properties(chdr PROPERTIES C_VISIBILITY_PRESET hidden)
91   set_target_properties(chdr PROPERTIES VISIBILITY_INLINES_HIDDEN 1)
92   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")
93   set_target_properties(chdr PROPERTIES VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}" SOVERSION ${PROJECT_VERSION_MAJOR})
94
95   if (CMAKE_BUILD_TYPE MATCHES Release)
96     #add_custom_command(TARGET chdr POST_BUILD COMMAND ${CMAKE_STRIP} libchdr.so)
97   endif (CMAKE_BUILD_TYPE MATCHES Release)
98
99   install(TARGETS chdr
100     LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
101     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
102     PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/libchdr"
103   )
104
105   configure_file(pkg-config.pc.in ${CMAKE_BINARY_DIR}/libchdr.pc @ONLY)
106   install(FILES ${CMAKE_BINARY_DIR}/libchdr.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
107 endif()
108
109 add_subdirectory(tests)