git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.5 / contrib / pzstd / Makefile
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
10# Standard variables for installation
11DESTDIR ?=
12PREFIX ?= /usr/local
13BINDIR := $(DESTDIR)$(PREFIX)/bin
14
15ZSTDDIR = ../../lib
16PROGDIR = ../../programs
17
18# External program to use to run tests, e.g. qemu or valgrind
19TESTPROG ?=
20# Flags to pass to the tests
21TESTFLAGS ?=
22
23# We use gcc/clang to generate the header dependencies of files
24DEPFLAGS = -MMD -MP -MF $*.Td
25POSTCOMPILE = mv -f $*.Td $*.d
26
27# CFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS are for the users to override
28CFLAGS ?= -O3 -Wall -Wextra
29CXXFLAGS ?= -O3 -Wall -Wextra -pedantic
30CPPFLAGS ?=
31LDFLAGS ?=
32
33# PZstd uses legacy APIs
34CFLAGS += -Wno-deprecated-declarations
35
36# Include flags
37PZSTD_INC = -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(PROGDIR) -I.
38GTEST_INC = -isystem googletest/googletest/include
39
40# If default C++ version is older than C++11, explicitly set C++11, which is the
41# minimum required by the code.
42ifeq ($(shell echo "\043if __cplusplus < 201103L\n\043error\n\043endif" | $(CXX) -x c++ -Werror -c - -o /dev/null 2>/dev/null && echo 1 || echo 0),0)
43PZSTD_CXX_STD := -std=c++11
44endif
45
46PZSTD_CPPFLAGS = $(PZSTD_INC)
47PZSTD_CCXXFLAGS =
48PZSTD_CFLAGS = $(PZSTD_CCXXFLAGS)
49PZSTD_CXXFLAGS = $(PZSTD_CCXXFLAGS) $(PZSTD_CXX_STD)
50PZSTD_LDFLAGS =
51EXTRA_FLAGS =
52ALL_CFLAGS = $(EXTRA_FLAGS) $(CPPFLAGS) $(PZSTD_CPPFLAGS) $(CFLAGS) $(PZSTD_CFLAGS)
53ALL_CXXFLAGS = $(EXTRA_FLAGS) $(CPPFLAGS) $(PZSTD_CPPFLAGS) $(CXXFLAGS) $(PZSTD_CXXFLAGS)
54ALL_LDFLAGS = $(EXTRA_FLAGS) $(CXXFLAGS) $(LDFLAGS) $(PZSTD_LDFLAGS)
55
56
57# gtest libraries need to go before "-lpthread" because they depend on it.
58GTEST_LIB = -L googletest/build/googlemock/gtest
59LIBS =
60
61# Compilation commands
62LD_COMMAND = $(CXX) $^ $(ALL_LDFLAGS) $(LIBS) -pthread -o $@
63CC_COMMAND = $(CC) $(DEPFLAGS) $(ALL_CFLAGS) -c $< -o $@
64CXX_COMMAND = $(CXX) $(DEPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@
65
66# List all the pzstd source files so we can determine their dependencies
67PZSTD_SRCS := $(wildcard *.cpp)
68PZSTD_TESTS := $(wildcard test/*.cpp)
69UTILS_TESTS := $(wildcard utils/test/*.cpp)
70ALL_SRCS := $(PZSTD_SRCS) $(PZSTD_TESTS) $(UTILS_TESTS)
71
72
73# Define *.exe as extension for Windows systems
74ifneq (,$(filter Windows%,$(OS)))
75EXT =.exe
76else
77EXT =
78endif
79
80# Standard targets
81.PHONY: default
82default: all
83
84.PHONY: test-pzstd
85test-pzstd: TESTFLAGS=--gtest_filter=-*ExtremelyLarge*
86test-pzstd: clean googletest pzstd tests check
87
88.PHONY: test-pzstd32
89test-pzstd32: clean googletest32 all32 check
90
91.PHONY: test-pzstd-tsan
92test-pzstd-tsan: LDFLAGS=-fuse-ld=gold
93test-pzstd-tsan: TESTFLAGS=--gtest_filter=-*ExtremelyLarge*
94test-pzstd-tsan: clean googletest tsan check
95
96.PHONY: test-pzstd-asan
97test-pzstd-asan: LDFLAGS=-fuse-ld=gold
98test-pzstd-asan: TESTFLAGS=--gtest_filter=-*ExtremelyLarge*
99test-pzstd-asan: clean asan check
100
101.PHONY: check
102check:
103 $(TESTPROG) ./utils/test/BufferTest$(EXT) $(TESTFLAGS)
104 $(TESTPROG) ./utils/test/RangeTest$(EXT) $(TESTFLAGS)
105 $(TESTPROG) ./utils/test/ResourcePoolTest$(EXT) $(TESTFLAGS)
106 $(TESTPROG) ./utils/test/ScopeGuardTest$(EXT) $(TESTFLAGS)
107 $(TESTPROG) ./utils/test/ThreadPoolTest$(EXT) $(TESTFLAGS)
108 $(TESTPROG) ./utils/test/WorkQueueTest$(EXT) $(TESTFLAGS)
109 $(TESTPROG) ./test/OptionsTest$(EXT) $(TESTFLAGS)
110 $(TESTPROG) ./test/PzstdTest$(EXT) $(TESTFLAGS)
111
112.PHONY: install
113install: PZSTD_CPPFLAGS += -DNDEBUG
114install: pzstd$(EXT)
115 install -d -m 755 $(BINDIR)/
116 install -m 755 pzstd$(EXT) $(BINDIR)/pzstd$(EXT)
117
118.PHONY: uninstall
119uninstall:
120 $(RM) $(BINDIR)/pzstd$(EXT)
121
122# Targets for many different builds
123.PHONY: all
124all: PZSTD_CPPFLAGS += -DNDEBUG
125all: pzstd$(EXT)
126
127.PHONY: debug
128debug: EXTRA_FLAGS += -g
129debug: pzstd$(EXT) tests roundtrip
130
131.PHONY: tsan
132tsan: PZSTD_CCXXFLAGS += -fsanitize=thread -fPIC
133tsan: PZSTD_LDFLAGS += -fsanitize=thread
134tsan: debug
135
136.PHONY: asan
137asan: EXTRA_FLAGS += -fsanitize=address
138asan: debug
139
140.PHONY: ubsan
141ubsan: EXTRA_FLAGS += -fsanitize=undefined
142ubsan: debug
143
144.PHONY: all32
145all32: EXTRA_FLAGS += -m32
146all32: all tests roundtrip
147
148.PHONY: debug32
149debug32: EXTRA_FLAGS += -m32
150debug32: debug
151
152.PHONY: asan32
153asan32: EXTRA_FLAGS += -m32
154asan32: asan
155
156.PHONY: tsan32
157tsan32: EXTRA_FLAGS += -m32
158tsan32: tsan
159
160.PHONY: ubsan32
161ubsan32: EXTRA_FLAGS += -m32
162ubsan32: ubsan
163
164# Run long round trip tests
165.PHONY: roundtripcheck
166roundtripcheck: roundtrip check
167 $(TESTPROG) ./test/RoundTripTest$(EXT) $(TESTFLAGS)
168
169# Build the main binary
170pzstd$(EXT): main.o $(PROGDIR)/util.o Options.o Pzstd.o SkippableFrame.o $(ZSTDDIR)/libzstd.a
171 $(LD_COMMAND)
172
173# Target that depends on all the tests
174.PHONY: tests
175tests: EXTRA_FLAGS += -Wno-deprecated-declarations
176tests: $(patsubst %,%$(EXT),$(basename $(PZSTD_TESTS) $(UTILS_TESTS)))
177
178# Build the round trip tests
179.PHONY: roundtrip
180roundtrip: EXTRA_FLAGS += -Wno-deprecated-declarations
181roundtrip: test/RoundTripTest$(EXT)
182
183# Use the static library that zstd builds for simplicity and
184# so we get the compiler options correct
185.PHONY: $(ZSTDDIR)/libzstd.a
186$(ZSTDDIR)/libzstd.a:
187 CFLAGS="$(ALL_CFLAGS)" LDFLAGS="$(ALL_LDFLAGS)" $(MAKE) -C $(ZSTDDIR) libzstd.a
188
189# Rules to build the tests
190test/RoundTripTest$(EXT): test/RoundTripTest.o $(PROGDIR)/datagen.o \
191 $(PROGDIR)/util.o Options.o \
192 Pzstd.o SkippableFrame.o $(ZSTDDIR)/libzstd.a
193 $(LD_COMMAND)
194
195test/%Test$(EXT): PZSTD_LDFLAGS += $(GTEST_LIB)
196test/%Test$(EXT): LIBS += -lgtest -lgtest_main
197test/%Test$(EXT): test/%Test.o $(PROGDIR)/datagen.o \
198 $(PROGDIR)/util.o Options.o Pzstd.o \
199 SkippableFrame.o $(ZSTDDIR)/libzstd.a
200 $(LD_COMMAND)
201
202utils/test/%Test$(EXT): PZSTD_LDFLAGS += $(GTEST_LIB)
203utils/test/%Test$(EXT): LIBS += -lgtest -lgtest_main
204utils/test/%Test$(EXT): utils/test/%Test.o
205 $(LD_COMMAND)
206
207
208GTEST_CMAKEFLAGS =
209
210# Install googletest
211.PHONY: googletest
212googletest: PZSTD_CCXXFLAGS += -fPIC
213googletest:
214 @$(RM) -rf googletest
215 @git clone https://github.com/google/googletest
216 @mkdir -p googletest/build
217 @cd googletest/build && cmake $(GTEST_CMAKEFLAGS) -DCMAKE_CXX_FLAGS="$(ALL_CXXFLAGS)" .. && $(MAKE)
218
219.PHONY: googletest32
220googletest32: PZSTD_CCXXFLAGS += -m32
221googletest32: googletest
222
223.PHONY: googletest-mingw64
224googletest-mingw64: GTEST_CMAKEFLAGS += -G "MSYS Makefiles"
225googletest-mingw64: googletest
226
227.PHONY: clean
228clean:
229 $(RM) -f *.o pzstd$(EXT) *.Td *.d
230 $(RM) -f test/*.o test/*Test$(EXT) test/*.Td test/*.d
231 $(RM) -f utils/test/*.o utils/test/*Test$(EXT) utils/test/*.Td utils/test/*.d
232 $(RM) -f $(PROGDIR)/*.o $(PROGDIR)/*.Td $(PROGDIR)/*.d
233 $(MAKE) -C $(ZSTDDIR) clean
234 @echo Cleaning completed
235
236
237# Cancel implicit rules
238%.o: %.c
239%.o: %.cpp
240
241# Object file rules
242%.o: %.c
243 $(CC_COMMAND)
244 $(POSTCOMPILE)
245
246$(PROGDIR)/%.o: $(PROGDIR)/%.c
247 $(CC_COMMAND)
248 $(POSTCOMPILE)
249
250%.o: %.cpp
251 $(CXX_COMMAND)
252 $(POSTCOMPILE)
253
254test/%.o: PZSTD_CPPFLAGS += $(GTEST_INC)
255test/%.o: test/%.cpp
256 $(CXX_COMMAND)
257 $(POSTCOMPILE)
258
259utils/test/%.o: PZSTD_CPPFLAGS += $(GTEST_INC)
260utils/test/%.o: utils/test/%.cpp
261 $(CXX_COMMAND)
262 $(POSTCOMPILE)
263
264# Dependency file stuff
265.PRECIOUS: %.d test/%.d utils/test/%.d
266
267# Include rules that specify header file dependencies
268-include $(patsubst %,%.d,$(basename $(ALL_SRCS)))