git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.6 / 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 option(ZSTD_BUILD_COMPRESSION "BUILD COMPRESSION MODULE" ON)
16 option(ZSTD_BUILD_DECOMPRESSION "BUILD DECOMPRESSION MODULE" ON)
17 option(ZSTD_BUILD_DICTBUILDER "BUILD DICTBUILDER MODULE" ON)
18 option(ZSTD_BUILD_DEPRECATED "BUILD DEPRECATED MODULE" OFF)
19
20 set(ZSTDLIB_VISIBLE "" CACHE STRING "Visibility for ZSTDLIB API")
21 set(ZSTDERRORLIB_VISIBLE "" CACHE STRING "Visibility for ZSTDERRORLIB_VISIBLE API")
22 set(ZDICTLIB_VISIBLE "" CACHE STRING "Visibility for ZDICTLIB_VISIBLE API")
23 set(ZSTDLIB_STATIC_API "" CACHE STRING "Visibility for ZSTDLIB_STATIC_API API")
24 set(ZDICTLIB_STATIC_API "" CACHE STRING "Visibility for ZDICTLIB_STATIC_API API")
25
26 set_property(CACHE ZSTDLIB_VISIBLE PROPERTY STRINGS "" "hidden" "default" "protected" "internal")
27 set_property(CACHE ZSTDERRORLIB_VISIBLE PROPERTY STRINGS "" "hidden" "default" "protected" "internal")
28 set_property(CACHE ZDICTLIB_VISIBLE PROPERTY STRINGS "" "hidden" "default" "protected" "internal")
29 set_property(CACHE ZSTDLIB_STATIC_API PROPERTY STRINGS "" "hidden" "default" "protected" "internal")
30 set_property(CACHE ZDICTLIB_STATIC_API PROPERTY STRINGS "" "hidden" "default" "protected" "internal")
31
32 if(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
33     message(SEND_ERROR "You need to build at least one flavor of libzstd")
34 endif()
35
36 file(GLOB CommonSources ${LIBRARY_DIR}/common/*.c)
37 file(GLOB CompressSources ${LIBRARY_DIR}/compress/*.c)
38 file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c)
39 if (MSVC)
40     add_compile_options(-DZSTD_DISABLE_ASM)
41 else ()
42     if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|AMD64.*|x86_64.*|X86_64.*")
43         set(DecompressSources ${DecompressSources} ${LIBRARY_DIR}/decompress/huf_decompress_amd64.S)
44     else()
45         add_compile_options(-DZSTD_DISABLE_ASM)
46     endif()
47 endif ()
48 file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c)
49 file(GLOB DeprecatedSources ${LIBRARY_DIR}/deprecated/*.c)
50
51 file(GLOB PublicHeaders ${LIBRARY_DIR}/*.h)
52 file(GLOB CommonHeaders ${LIBRARY_DIR}/common/*.h)
53 file(GLOB CompressHeaders ${LIBRARY_DIR}/compress/*.h)
54 file(GLOB DecompressHeaders ${LIBRARY_DIR}/decompress/*.h)
55 file(GLOB DictBuilderHeaders ${LIBRARY_DIR}/dictBuilder/*.h)
56 file(GLOB DeprecatedHeaders ${LIBRARY_DIR}/deprecated/*.h)
57
58 set(Sources ${CommonSources})
59 set(Headers ${PublicHeaders} ${CommonHeaders})
60 if (ZSTD_BUILD_COMPRESSION)
61     set(Sources ${Sources} ${CompressSources})
62     set(Headers ${Headers} ${CompressHeaders})
63 endif()
64 if (ZSTD_BUILD_DECOMPRESSION)
65     set(Sources ${Sources} ${DecompressSources})
66     set(Headers ${Headers} ${DecompressHeaders})
67 endif()
68 if (ZSTD_BUILD_DICTBUILDER)
69     set(Sources ${Sources} ${DictBuilderSources})
70     set(Headers ${Headers} ${DictBuilderHeaders})
71 endif()
72 if (ZSTD_BUILD_DEPRECATED)
73     set(Sources ${Sources} ${DeprecatedSources})
74     set(Headers ${Headers} ${DeprecatedHeaders})
75 endif()
76
77 if (ZSTD_LEGACY_SUPPORT)
78     set(LIBRARY_LEGACY_DIR ${LIBRARY_DIR}/legacy)
79
80     set(Sources ${Sources}
81             ${LIBRARY_LEGACY_DIR}/zstd_v01.c
82             ${LIBRARY_LEGACY_DIR}/zstd_v02.c
83             ${LIBRARY_LEGACY_DIR}/zstd_v03.c
84             ${LIBRARY_LEGACY_DIR}/zstd_v04.c
85             ${LIBRARY_LEGACY_DIR}/zstd_v05.c
86             ${LIBRARY_LEGACY_DIR}/zstd_v06.c
87             ${LIBRARY_LEGACY_DIR}/zstd_v07.c)
88
89     set(Headers ${Headers}
90             ${LIBRARY_LEGACY_DIR}/zstd_legacy.h
91             ${LIBRARY_LEGACY_DIR}/zstd_v01.h
92             ${LIBRARY_LEGACY_DIR}/zstd_v02.h
93             ${LIBRARY_LEGACY_DIR}/zstd_v03.h
94             ${LIBRARY_LEGACY_DIR}/zstd_v04.h
95             ${LIBRARY_LEGACY_DIR}/zstd_v05.h
96             ${LIBRARY_LEGACY_DIR}/zstd_v06.h
97             ${LIBRARY_LEGACY_DIR}/zstd_v07.h)
98 endif ()
99
100 if (MSVC)
101     set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll)
102     set(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc)
103 endif ()
104
105 # Explicitly set the language to C for all files, including ASM files.
106 # Our assembly expects to be compiled by a C compiler, and is only enabled for
107 # __GNUC__ compatible compilers. Otherwise all the ASM code is disabled by
108 # macros.
109 if(NOT CMAKE_ASM_COMPILER STREQUAL CMAKE_C_COMPILER)
110     set_source_files_properties(${Sources} PROPERTIES LANGUAGE C)
111 endif()
112
113 macro (add_definition target var)
114     if (NOT ("${${var}}" STREQUAL ""))
115         set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS "${var}=__attribute__((visibility(\"${${var}}\")))")
116     endif ()
117 endmacro ()
118
119 # Define directories containing the library's public headers
120 set(PUBLIC_INCLUDE_DIRS ${LIBRARY_DIR})
121
122 # Split project to static and shared libraries build
123 set(library_targets)
124 if (ZSTD_BUILD_SHARED)
125     add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources})
126     target_include_directories(libzstd_shared INTERFACE $<BUILD_INTERFACE:${PUBLIC_INCLUDE_DIRS}>)
127     list(APPEND library_targets libzstd_shared)
128     if (ZSTD_MULTITHREAD_SUPPORT)
129         set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
130         if (UNIX)
131             target_link_libraries(libzstd_shared ${THREADS_LIBS})
132         endif ()
133     endif ()
134     add_definition(libzstd_shared ZSTDLIB_VISIBLE)
135     add_definition(libzstd_shared ZSTDERRORLIB_VISIBLE)
136     add_definition(libzstd_shared ZDICTLIB_VISIBLE)
137 endif ()
138 if (ZSTD_BUILD_STATIC)
139     add_library(libzstd_static STATIC ${Sources} ${Headers})
140     target_include_directories(libzstd_static INTERFACE $<BUILD_INTERFACE:${PUBLIC_INCLUDE_DIRS}>)
141     list(APPEND library_targets libzstd_static)
142     if (ZSTD_MULTITHREAD_SUPPORT)
143         set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
144         if (UNIX)
145             target_link_libraries(libzstd_static ${THREADS_LIBS})
146         endif ()
147     endif ()
148     add_definition(libzstd_static ZSTDLIB_VISIBLE)
149     add_definition(libzstd_static ZSTDERRORLIB_VISIBLE)
150     add_definition(libzstd_static ZDICTLIB_VISIBLE)
151     add_definition(libzstd_static ZSTDLIB_STATIC_API)
152     add_definition(libzstd_static ZDICTLIB_STATIC_API)
153 endif ()
154 if (ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
155     if (NOT BUILD_SHARED_LIBS)
156         message(WARNING "BUILD_SHARED_LIBS is OFF, but ZSTD_BUILD_SHARED is ON and ZSTD_BUILD_STATIC is OFF, which takes precedence, so libzstd is a shared library")
157     endif ()
158     add_library(libzstd INTERFACE)
159     target_link_libraries(libzstd INTERFACE libzstd_shared)
160     list(APPEND library_targets libzstd)
161 endif ()
162 if (ZSTD_BUILD_STATIC AND NOT ZSTD_BUILD_SHARED)
163     if (BUILD_SHARED_LIBS)
164         message(WARNING "BUILD_SHARED_LIBS is ON, but ZSTD_BUILD_SHARED is OFF and ZSTD_BUILD_STATIC is ON, which takes precedence, is set so libzstd is a static library")
165     endif ()
166     add_library(libzstd INTERFACE)
167     target_link_libraries(libzstd INTERFACE libzstd_static)
168     list(APPEND library_targets libzstd)
169 endif ()
170 if (ZSTD_BUILD_SHARED AND ZSTD_BUILD_STATIC)
171     # If both ZSTD_BUILD_SHARED and ZSTD_BUILD_STATIC are set, which is the
172     # default, fallback to using BUILD_SHARED_LIBS to determine whether to
173     # set libzstd to static or shared.
174     if (BUILD_SHARED_LIBS)
175         add_library(libzstd INTERFACE)
176         target_link_libraries(libzstd INTERFACE libzstd_shared)
177         list(APPEND library_targets libzstd)
178     else ()
179         add_library(libzstd INTERFACE)
180         target_link_libraries(libzstd INTERFACE libzstd_static)
181         list(APPEND library_targets libzstd)
182     endif ()
183 endif ()
184
185 # Add specific compile definitions for MSVC project
186 if (MSVC)
187     if (ZSTD_BUILD_SHARED)
188         set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
189     endif ()
190     if (ZSTD_BUILD_STATIC)
191         set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
192     endif ()
193 endif ()
194
195 # With MSVC static library needs to be renamed to avoid conflict with import library
196 if (MSVC OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MINGW))
197     set(STATIC_LIBRARY_BASE_NAME zstd_static)
198 else ()
199     set(STATIC_LIBRARY_BASE_NAME zstd)
200 endif ()
201
202 # Define static and shared library names
203 if (ZSTD_BUILD_SHARED)
204     set_target_properties(
205             libzstd_shared
206             PROPERTIES
207             OUTPUT_NAME zstd
208             VERSION ${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}
209             SOVERSION ${zstd_VERSION_MAJOR})
210 endif ()
211
212 if (ZSTD_BUILD_STATIC)
213     set_target_properties(
214             libzstd_static
215             PROPERTIES
216             POSITION_INDEPENDENT_CODE On
217             OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
218 endif ()
219
220 # pkg-config
221 include(JoinPaths) # can be replaced by cmake_path(APPEND) in CMake 3.20
222 set(PREFIX "${CMAKE_INSTALL_PREFIX}")
223 set(EXEC_PREFIX "\${prefix}")
224 join_paths(LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
225 join_paths(INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
226 set(LIBS_PRIVATE "${THREADS_LIBS}")
227 set(VERSION "${zstd_VERSION}")
228
229 configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
230 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
231
232 # install target
233 install(FILES ${PublicHeaders} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
234
235 install(TARGETS ${library_targets}
236     EXPORT zstdExports
237     INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
238     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
239     LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
240     RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
241     BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}"
242     )
243
244 # uninstall target
245 if (NOT TARGET uninstall)
246     configure_file(
247             "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
248             "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
249             IMMEDIATE @ONLY)
250
251     add_custom_target(uninstall
252             COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
253 endif ()