git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.5 / build / cmake / lib / CMakeLists.txt
1 # ################################################################
2 # Copyright (c) Meta Platforms, Inc. and affiliates.
3 # All rights reserved.
4 #
5 # This source code is licensed under both the BSD-style license (found in the
6 # LICENSE file in the root directory of this source tree) and the GPLv2 (found
7 # in the COPYING file in the root directory of this source tree).
8 # ################################################################
9
10 project(libzstd C ASM)
11
12 set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
13 option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
14 option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" ON)
15
16 if(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
17     message(SEND_ERROR "You need to build at least one flavor of libzstd")
18 endif()
19
20 # Define library directory, where sources and header files are located
21 include_directories(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
22
23 file(GLOB CommonSources ${LIBRARY_DIR}/common/*.c)
24 file(GLOB CompressSources ${LIBRARY_DIR}/compress/*.c)
25 if (MSVC)
26     file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c)
27     add_compile_options(-DZSTD_DISABLE_ASM)
28 else ()
29     file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c ${LIBRARY_DIR}/decompress/*.S)
30 endif ()
31 file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c)
32
33 set(Sources
34         ${CommonSources}
35         ${CompressSources}
36         ${DecompressSources}
37         ${DictBuilderSources})
38
39 file(GLOB CommonHeaders ${LIBRARY_DIR}/common/*.h)
40 file(GLOB CompressHeaders ${LIBRARY_DIR}/compress/*.h)
41 file(GLOB DecompressHeaders ${LIBRARY_DIR}/decompress/*.h)
42 file(GLOB DictBuilderHeaders ${LIBRARY_DIR}/dictBuilder/*.h)
43
44 set(Headers
45         ${LIBRARY_DIR}/zstd.h
46         ${CommonHeaders}
47         ${CompressHeaders}
48         ${DecompressHeaders}
49         ${DictBuilderHeaders})
50
51 if (ZSTD_LEGACY_SUPPORT)
52     set(LIBRARY_LEGACY_DIR ${LIBRARY_DIR}/legacy)
53     include_directories(${LIBRARY_LEGACY_DIR})
54
55     set(Sources ${Sources}
56             ${LIBRARY_LEGACY_DIR}/zstd_v01.c
57             ${LIBRARY_LEGACY_DIR}/zstd_v02.c
58             ${LIBRARY_LEGACY_DIR}/zstd_v03.c
59             ${LIBRARY_LEGACY_DIR}/zstd_v04.c
60             ${LIBRARY_LEGACY_DIR}/zstd_v05.c
61             ${LIBRARY_LEGACY_DIR}/zstd_v06.c
62             ${LIBRARY_LEGACY_DIR}/zstd_v07.c)
63
64     set(Headers ${Headers}
65             ${LIBRARY_LEGACY_DIR}/zstd_legacy.h
66             ${LIBRARY_LEGACY_DIR}/zstd_v01.h
67             ${LIBRARY_LEGACY_DIR}/zstd_v02.h
68             ${LIBRARY_LEGACY_DIR}/zstd_v03.h
69             ${LIBRARY_LEGACY_DIR}/zstd_v04.h
70             ${LIBRARY_LEGACY_DIR}/zstd_v05.h
71             ${LIBRARY_LEGACY_DIR}/zstd_v06.h
72             ${LIBRARY_LEGACY_DIR}/zstd_v07.h)
73 endif ()
74
75 if (MSVC)
76     set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll)
77     set(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc)
78 endif ()
79
80 # Explicitly set the language to C for all files, including ASM files.
81 # Our assembly expects to be compiled by a C compiler, and is only enabled for
82 # __GNUC__ compatible compilers. Otherwise all the ASM code is disabled by
83 # macros.
84 set_source_files_properties(${Sources} PROPERTIES LANGUAGE C)
85
86 # Split project to static and shared libraries build
87 set(library_targets)
88 if (ZSTD_BUILD_SHARED)
89     add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources})
90     list(APPEND library_targets libzstd_shared)
91     if (ZSTD_MULTITHREAD_SUPPORT)
92         set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
93         if (UNIX)
94             target_link_libraries(libzstd_shared ${THREADS_LIBS})
95         endif ()
96     endif()
97 endif ()
98 if (ZSTD_BUILD_STATIC)
99     add_library(libzstd_static STATIC ${Sources} ${Headers})
100     list(APPEND library_targets libzstd_static)
101     if (ZSTD_MULTITHREAD_SUPPORT)
102         set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
103         if (UNIX)
104             target_link_libraries(libzstd_static ${THREADS_LIBS})
105         endif ()
106     endif ()
107 endif ()
108
109 # Add specific compile definitions for MSVC project
110 if (MSVC)
111     if (ZSTD_BUILD_SHARED)
112         set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
113     endif ()
114     if (ZSTD_BUILD_STATIC)
115         set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
116     endif ()
117 endif ()
118
119 # With MSVC static library needs to be renamed to avoid conflict with import library
120 if (MSVC OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MINGW))
121     set(STATIC_LIBRARY_BASE_NAME zstd_static)
122 else ()
123     set(STATIC_LIBRARY_BASE_NAME zstd)
124 endif ()
125
126 # Define static and shared library names
127 if (ZSTD_BUILD_SHARED)
128     set_target_properties(
129             libzstd_shared
130             PROPERTIES
131             OUTPUT_NAME zstd
132             VERSION ${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}
133             SOVERSION ${zstd_VERSION_MAJOR})
134 endif ()
135
136 if (ZSTD_BUILD_STATIC)
137     set_target_properties(
138             libzstd_static
139             PROPERTIES
140             POSITION_INDEPENDENT_CODE On
141             OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
142 endif ()
143
144 # pkg-config
145 include(JoinPaths) # can be replaced by cmake_path(APPEND) in CMake 3.20
146 set(PREFIX "${CMAKE_INSTALL_PREFIX}")
147 set(EXEC_PREFIX "\${prefix}")
148 join_paths(LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
149 join_paths(INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
150 set(LIBS_PRIVATE "${THREADS_LIBS}")
151 set(VERSION "${zstd_VERSION}")
152
153 configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
154 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
155
156 # install target
157 install(FILES
158     "${LIBRARY_DIR}/zstd.h"
159     "${LIBRARY_DIR}/zdict.h"
160     "${LIBRARY_DIR}/zstd_errors.h"
161     DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
162
163 install(TARGETS ${library_targets}
164     EXPORT zstdExports
165     INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
166     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
167     LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
168     RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
169     BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}"
170     )
171
172 # uninstall target
173 if (NOT TARGET uninstall)
174     configure_file(
175             "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
176             "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
177             IMMEDIATE @ONLY)
178
179     add_custom_target(uninstall
180             COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
181 endif ()