git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.5 / lib / libzstd.mk
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 # You may select, at your option, one of the above-listed licenses.
9 # ################################################################
10
11 ##################################################################
12 # Input Variables
13 ##################################################################
14
15 # Zstd lib directory
16 LIBZSTD ?= ./
17
18 # ZSTD_LIB_MINIFY is a helper variable that
19 # configures a bunch of other variables to space-optimized defaults.
20 ZSTD_LIB_MINIFY ?= 0
21
22 # Legacy support
23 ifneq ($(ZSTD_LIB_MINIFY), 0)
24   ZSTD_LEGACY_SUPPORT ?= 0
25 else
26   ZSTD_LEGACY_SUPPORT ?= 5
27 endif
28 ZSTD_LEGACY_MULTITHREADED_API ?= 0
29
30 # Build size optimizations
31 ifneq ($(ZSTD_LIB_MINIFY), 0)
32   HUF_FORCE_DECOMPRESS_X1 ?= 1
33   HUF_FORCE_DECOMPRESS_X2 ?= 0
34   ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT ?= 1
35   ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG ?= 0
36   ZSTD_NO_INLINE ?= 1
37   ZSTD_STRIP_ERROR_STRINGS ?= 1
38 else
39   HUF_FORCE_DECOMPRESS_X1 ?= 0
40   HUF_FORCE_DECOMPRESS_X2 ?= 0
41   ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT ?= 0
42   ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG ?= 0
43   ZSTD_NO_INLINE ?= 0
44   ZSTD_STRIP_ERROR_STRINGS ?= 0
45 endif
46
47 # Assembly support
48 ZSTD_NO_ASM ?= 0
49
50 ##################################################################
51 # libzstd helpers
52 ##################################################################
53
54 VOID ?= /dev/null
55
56 # Make 4.3 doesn't support '\#' anymore (https://lwn.net/Articles/810071/)
57 NUM_SYMBOL := \#
58
59 # define silent mode as default (verbose mode with V=1 or VERBOSE=1)
60 $(V)$(VERBOSE).SILENT:
61
62 # When cross-compiling from linux to windows,
63 # one might need to specify TARGET_SYSTEM as "Windows."
64 # Building from Fedora fails without it.
65 # (but Ubuntu and Debian don't need to set anything)
66 TARGET_SYSTEM ?= $(OS)
67
68 # Version numbers
69 LIBVER_SRC := $(LIBZSTD)/zstd.h
70 LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
71 LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
72 LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
73 LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
74 LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
75 LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
76 LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
77 LIBVER := $(shell echo $(LIBVER_SCRIPT))
78 CCVER := $(shell $(CC) --version)
79 ZSTD_VERSION?= $(LIBVER)
80
81 ifneq ($(ZSTD_LIB_MINIFY), 0)
82   HAVE_CC_OZ ?= $(shell echo "" | $(CC) -Oz -x c -c - -o /dev/null 2> /dev/null && echo 1 || echo 0)
83 ifneq ($(HAVE_CC_OZ), 0)
84     # Some compilers (clang) support an even more space-optimized setting.
85     CFLAGS += -Oz
86 else
87     CFLAGS += -Os
88 endif
89   CFLAGS += -fno-stack-protector -fomit-frame-pointer -fno-ident \
90             -DDYNAMIC_BMI2=0 -DNDEBUG
91 else
92   CFLAGS ?= -O3
93 endif
94
95 DEBUGLEVEL ?= 0
96 CPPFLAGS += -DXXH_NAMESPACE=ZSTD_ -DDEBUGLEVEL=$(DEBUGLEVEL)
97 ifeq ($(TARGET_SYSTEM),Windows_NT)   # MinGW assumed
98   CPPFLAGS += -D__USE_MINGW_ANSI_STDIO   # compatibility with %zu formatting
99 endif
100 DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
101             -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
102             -Wstrict-prototypes -Wundef -Wpointer-arith \
103             -Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
104             -Wredundant-decls -Wmissing-prototypes -Wc++-compat
105 CFLAGS   += $(DEBUGFLAGS) $(MOREFLAGS)
106 ASFLAGS  += $(DEBUGFLAGS) $(MOREFLAGS) $(CFLAGS)
107 LDFLAGS  += $(MOREFLAGS)
108 FLAGS     = $(CPPFLAGS) $(CFLAGS) $(ASFLAGS) $(LDFLAGS)
109
110 ifndef ALREADY_APPENDED_NOEXECSTACK
111 export ALREADY_APPENDED_NOEXECSTACK := 1
112 ifeq ($(shell echo "int main(int argc, char* argv[]) { (void)argc; (void)argv; return 0; }" | $(CC) $(FLAGS) -z noexecstack -x c -Werror - -o $(VOID) 2>$(VOID) && echo 1 || echo 0),1)
113 LDFLAGS += -z noexecstack
114 endif
115 ifeq ($(shell echo | $(CC) $(FLAGS) -Wa,--noexecstack -x assembler -Werror -c - -o $(VOID) 2>$(VOID) && echo 1 || echo 0),1)
116 CFLAGS  += -Wa,--noexecstack
117 # CFLAGS are also added to ASFLAGS
118 else ifeq ($(shell echo | $(CC) $(FLAGS) -Qunused-arguments -Wa,--noexecstack -x assembler -Werror -c - -o $(VOID) 2>$(VOID) && echo 1 || echo 0),1)
119 # See e.g.: https://github.com/android/ndk/issues/171
120 CFLAGS  += -Qunused-arguments -Wa,--noexecstack
121 # CFLAGS are also added to ASFLAGS
122 endif
123 endif
124
125 ifeq ($(shell echo "int main(int argc, char* argv[]) { (void)argc; (void)argv; return 0; }" | $(CC) $(FLAGS) -z cet-report=error -x c -Werror - -o $(VOID) 2>$(VOID) && echo 1 || echo 0),1)
126 LDFLAGS += -z cet-report=error
127 endif
128
129 HAVE_COLORNEVER = $(shell echo a | grep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
130 GREP_OPTIONS ?=
131 ifeq ($(HAVE_COLORNEVER), 1)
132   GREP_OPTIONS += --color=never
133 endif
134 GREP = grep $(GREP_OPTIONS)
135
136 ZSTD_COMMON_FILES := $(sort $(wildcard $(LIBZSTD)/common/*.c))
137 ZSTD_COMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/compress/*.c))
138 ZSTD_DECOMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*.c))
139 ZSTD_DICTBUILDER_FILES := $(sort $(wildcard $(LIBZSTD)/dictBuilder/*.c))
140 ZSTD_DEPRECATED_FILES := $(sort $(wildcard $(LIBZSTD)/deprecated/*.c))
141 ZSTD_LEGACY_FILES :=
142
143 ZSTD_DECOMPRESS_AMD64_ASM_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*_amd64.S))
144
145 ifneq ($(ZSTD_NO_ASM), 0)
146   CPPFLAGS += -DZSTD_DISABLE_ASM
147 else
148   # Unconditionally add the ASM files they are disabled by
149   # macros in the .S file.
150   ZSTD_DECOMPRESS_FILES += $(ZSTD_DECOMPRESS_AMD64_ASM_FILES)
151 endif
152
153 ifneq ($(HUF_FORCE_DECOMPRESS_X1), 0)
154   CFLAGS += -DHUF_FORCE_DECOMPRESS_X1
155 endif
156
157 ifneq ($(HUF_FORCE_DECOMPRESS_X2), 0)
158   CFLAGS += -DHUF_FORCE_DECOMPRESS_X2
159 endif
160
161 ifneq ($(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT), 0)
162   CFLAGS += -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
163 endif
164
165 ifneq ($(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG), 0)
166   CFLAGS += -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
167 endif
168
169 ifneq ($(ZSTD_NO_INLINE), 0)
170   CFLAGS += -DZSTD_NO_INLINE
171 endif
172
173 ifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0)
174   CFLAGS += -DZSTD_STRIP_ERROR_STRINGS
175 endif
176
177 ifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0)
178   CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API
179 endif
180
181 ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
182 ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
183   ZSTD_LEGACY_FILES += $(shell ls $(LIBZSTD)/legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
184 endif
185 endif
186 CPPFLAGS  += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
187
188 UNAME := $(shell uname)
189
190 ifndef BUILD_DIR
191 ifeq ($(UNAME), Darwin)
192   ifeq ($(shell md5 < /dev/null > /dev/null; echo $$?), 0)
193     HASH ?= md5
194   endif
195 else ifeq ($(UNAME), FreeBSD)
196   HASH ?= gmd5sum
197 else ifeq ($(UNAME), NetBSD)
198   HASH ?= md5 -n
199 else ifeq ($(UNAME), OpenBSD)
200   HASH ?= md5
201 endif
202 HASH ?= md5sum
203
204 HASH_DIR = conf_$(shell echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(ZSTD_FILES) | $(HASH) | cut -f 1 -d " " )
205 HAVE_HASH :=$(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0)
206 ifeq ($(HAVE_HASH),0)
207   $(info warning : could not find HASH ($(HASH)), needed to differentiate builds using different flags)
208   BUILD_DIR := obj/generic_noconf
209 endif
210 endif # BUILD_DIR
211
212 ZSTD_SUBDIR := $(LIBZSTD)/common $(LIBZSTD)/compress $(LIBZSTD)/decompress $(LIBZSTD)/dictBuilder $(LIBZSTD)/legacy $(LIBZSTD)/deprecated
213 vpath %.c $(ZSTD_SUBDIR)
214 vpath %.S $(ZSTD_SUBDIR)