git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.5 / build / cmake / lib / CMakeLists.txt
CommitLineData
648db22b 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
10project(libzstd C ASM)
11
12set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
13option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
14option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" ON)
15
16if(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
17 message(SEND_ERROR "You need to build at least one flavor of libzstd")
18endif()
19
20# Define library directory, where sources and header files are located
21include_directories(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
22
23file(GLOB CommonSources ${LIBRARY_DIR}/common/*.c)
24file(GLOB CompressSources ${LIBRARY_DIR}/compress/*.c)
25if (MSVC)
26 file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c)
27 add_compile_options(-DZSTD_DISABLE_ASM)
28else ()
29 file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c ${LIBRARY_DIR}/decompress/*.S)
30endif ()
31file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c)
32
33set(Sources
34 ${CommonSources}
35 ${CompressSources}
36 ${DecompressSources}
37 ${DictBuilderSources})
38
39file(GLOB CommonHeaders ${LIBRARY_DIR}/common/*.h)
40file(GLOB CompressHeaders ${LIBRARY_DIR}/compress/*.h)
41file(GLOB DecompressHeaders ${LIBRARY_DIR}/decompress/*.h)
42file(GLOB DictBuilderHeaders ${LIBRARY_DIR}/dictBuilder/*.h)
43
44set(Headers
45 ${LIBRARY_DIR}/zstd.h
46 ${CommonHeaders}
47 ${CompressHeaders}
48 ${DecompressHeaders}
49 ${DictBuilderHeaders})
50
51if (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)
73endif ()
74
75if (MSVC)
76 set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll)
77 set(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc)
78endif ()
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.
84set_source_files_properties(${Sources} PROPERTIES LANGUAGE C)
85
86# Split project to static and shared libraries build
87set(library_targets)
88if (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()
97endif ()
98if (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 ()
107endif ()
108
109# Add specific compile definitions for MSVC project
110if (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 ()
117endif ()
118
119# With MSVC static library needs to be renamed to avoid conflict with import library
120if (MSVC OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MINGW))
121 set(STATIC_LIBRARY_BASE_NAME zstd_static)
122else ()
123 set(STATIC_LIBRARY_BASE_NAME zstd)
124endif ()
125
126# Define static and shared library names
127if (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})
134endif ()
135
136if (ZSTD_BUILD_STATIC)
137 set_target_properties(
138 libzstd_static
139 PROPERTIES
140 POSITION_INDEPENDENT_CODE On
141 OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
142endif ()
143
144# pkg-config
145include(JoinPaths) # can be replaced by cmake_path(APPEND) in CMake 3.20
146set(PREFIX "${CMAKE_INSTALL_PREFIX}")
147set(EXEC_PREFIX "\${prefix}")
148join_paths(LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
149join_paths(INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
150set(LIBS_PRIVATE "${THREADS_LIBS}")
151set(VERSION "${zstd_VERSION}")
152
153configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
154install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
155
156# install target
157install(FILES
158 "${LIBRARY_DIR}/zstd.h"
159 "${LIBRARY_DIR}/zdict.h"
160 "${LIBRARY_DIR}/zstd_errors.h"
161 DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
162
163install(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
173if (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)
181endif ()