1*22ce4affSfengbojiang# Makefile for example of using zstd wrapper for zlib
2*22ce4affSfengbojiang#
3*22ce4affSfengbojiang# make - compiles examples
4*22ce4affSfengbojiang# make MOREFLAGS=-DZWRAP_USE_ZSTD=1 - compiles examples with zstd compression turned on
5*22ce4affSfengbojiang# make test - runs examples
6*22ce4affSfengbojiang
7*22ce4affSfengbojiang
8*22ce4affSfengbojiang# Paths to static and dynamic zlib and zstd libraries
9*22ce4affSfengbojiang# Use "make ZLIB_PATH=path/to/zlib ZLIB_LIBRARY=path/to/libz.a" to select a path to library
10*22ce4affSfengbojiangZLIB_LIBRARY ?= -lz
11*22ce4affSfengbojiangZLIB_PATH ?= .
12*22ce4affSfengbojiang
13*22ce4affSfengbojiangZSTDLIBDIR = ../lib
14*22ce4affSfengbojiangZSTDLIBRARY = $(ZSTDLIBDIR)/libzstd.a
15*22ce4affSfengbojiangZLIBWRAPPER_PATH = .
16*22ce4affSfengbojiangGZFILES = gzclose.o gzlib.o gzread.o gzwrite.o
17*22ce4affSfengbojiangEXAMPLE_PATH = examples
18*22ce4affSfengbojiangPROGRAMS_PATH = ../programs
19*22ce4affSfengbojiangTEST_FILE = ../doc/zstd_compression_format.md
20*22ce4affSfengbojiang
21*22ce4affSfengbojiangVPATH = $(PROGRAMS_PATH)
22*22ce4affSfengbojiang
23*22ce4affSfengbojiangCPPFLAGS += -DXXH_NAMESPACE=ZSTD_ -I$(ZLIB_PATH) -I$(PROGRAMS_PATH)       \
24*22ce4affSfengbojiang            -I$(ZSTDLIBDIR) -I$(ZSTDLIBDIR)/common -I$(ZLIBWRAPPER_PATH)
25*22ce4affSfengbojiangSTDFLAGS  = -std=c89 -pedantic -Wno-long-long -Wno-variadic-macros -Wc++-compat \
26*22ce4affSfengbojiang            -DNO_snprintf -DNO_vsnprintf  # strict ANSI C89 is missing these prototypes
27*22ce4affSfengbojiangDEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wswitch-enum \
28*22ce4affSfengbojiang            -Wdeclaration-after-statement -Wstrict-prototypes -Wundef     \
29*22ce4affSfengbojiang            -Wstrict-aliasing=1
30*22ce4affSfengbojiangCFLAGS   ?= -O3
31*22ce4affSfengbojiangCFLAGS   += $(STDFLAGS) $(DEBUGFLAGS) $(MOREFLAGS)
32*22ce4affSfengbojiang
33*22ce4affSfengbojiang# Define *.exe as extension for Windows systems
34*22ce4affSfengbojiangifneq (,$(filter Windows%,$(OS)))
35*22ce4affSfengbojiangEXT =.exe
36*22ce4affSfengbojiangelse
37*22ce4affSfengbojiangEXT =
38*22ce4affSfengbojiangendif
39*22ce4affSfengbojiang
40*22ce4affSfengbojiangdefault : release
41*22ce4affSfengbojiang
42*22ce4affSfengbojiangrelease : STDFLAGS =
43*22ce4affSfengbojiangrelease : DEBUGFLAGS =
44*22ce4affSfengbojiangrelease : all
45*22ce4affSfengbojiang
46*22ce4affSfengbojiangall: fitblk example zwrapbench minigzip
47*22ce4affSfengbojiang
48*22ce4affSfengbojiangtest: example fitblk example_zstd fitblk_zstd zwrapbench minigzip minigzip_zstd
49*22ce4affSfengbojiang	./example
50*22ce4affSfengbojiang	./example_zstd
51*22ce4affSfengbojiang	./fitblk 10240 <$(TEST_FILE)
52*22ce4affSfengbojiang	./fitblk 40960 <$(TEST_FILE)
53*22ce4affSfengbojiang	./fitblk_zstd 10240 <$(TEST_FILE)
54*22ce4affSfengbojiang	./fitblk_zstd 40960 <$(TEST_FILE)
55*22ce4affSfengbojiang	@echo ---- minigzip start ----
56*22ce4affSfengbojiang	./minigzip_zstd example$(EXT)
57*22ce4affSfengbojiang	#cp example$(EXT).gz example$(EXT)_zstd.gz
58*22ce4affSfengbojiang	./minigzip_zstd -d example$(EXT).gz
59*22ce4affSfengbojiang	./minigzip example$(EXT)
60*22ce4affSfengbojiang	#cp example$(EXT).gz example$(EXT)_gz.gz
61*22ce4affSfengbojiang	./minigzip_zstd -d example$(EXT).gz
62*22ce4affSfengbojiang	@echo ---- minigzip end ----
63*22ce4affSfengbojiang	./zwrapbench -qi1b3B1K $(TEST_FILE)
64*22ce4affSfengbojiang	./zwrapbench -rqi1b1e5 ../lib ../programs ../tests
65*22ce4affSfengbojiang
66*22ce4affSfengbojiang#valgrindTest: ZSTDLIBRARY = $(ZSTDLIBDIR)/libzstd.so
67*22ce4affSfengbojiangvalgrindTest: VALGRIND = LD_LIBRARY_PATH=$(ZSTDLIBDIR) valgrind --track-origins=yes --leak-check=full --error-exitcode=1
68*22ce4affSfengbojiangvalgrindTest: clean example fitblk example_zstd fitblk_zstd zwrapbench
69*22ce4affSfengbojiang	@echo "\n ---- valgrind tests ----"
70*22ce4affSfengbojiang	$(VALGRIND) ./example
71*22ce4affSfengbojiang	$(VALGRIND) ./example_zstd
72*22ce4affSfengbojiang	$(VALGRIND) ./fitblk 10240 <$(TEST_FILE)
73*22ce4affSfengbojiang	$(VALGRIND) ./fitblk 40960 <$(TEST_FILE)
74*22ce4affSfengbojiang	$(VALGRIND) ./fitblk_zstd 10240 <$(TEST_FILE)
75*22ce4affSfengbojiang	$(VALGRIND) ./fitblk_zstd 40960 <$(TEST_FILE)
76*22ce4affSfengbojiang	$(VALGRIND) ./zwrapbench -qi1b3B1K $(TEST_FILE)
77*22ce4affSfengbojiang	$(VALGRIND) ./zwrapbench -rqi1b1e5 ../lib ../programs ../tests
78*22ce4affSfengbojiang
79*22ce4affSfengbojiang#.c.o:
80*22ce4affSfengbojiang#	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
81*22ce4affSfengbojiang
82*22ce4affSfengbojiangminigzip: $(EXAMPLE_PATH)/minigzip.o zstd_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
83*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZSTDLIBRARY) $(ZLIB_LIBRARY) -o $@
84*22ce4affSfengbojiang
85*22ce4affSfengbojiangminigzip_zstd: $(EXAMPLE_PATH)/minigzip.o zstdTurnedOn_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
86*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZSTDLIBRARY) $(ZLIB_LIBRARY) -o $@
87*22ce4affSfengbojiang
88*22ce4affSfengbojiangexample: $(EXAMPLE_PATH)/example.o zstd_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
89*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZLIB_LIBRARY) -o $@
90*22ce4affSfengbojiang
91*22ce4affSfengbojiangexample_zstd: $(EXAMPLE_PATH)/example.o zstdTurnedOn_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
92*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZLIB_LIBRARY) -o $@
93*22ce4affSfengbojiang
94*22ce4affSfengbojiangfitblk: $(EXAMPLE_PATH)/fitblk.o zstd_zlibwrapper.o $(ZSTDLIBRARY)
95*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZLIB_LIBRARY) -o $@
96*22ce4affSfengbojiang
97*22ce4affSfengbojiangfitblk_zstd: $(EXAMPLE_PATH)/fitblk.o zstdTurnedOn_zlibwrapper.o $(ZSTDLIBRARY)
98*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZLIB_LIBRARY) -o $@
99*22ce4affSfengbojiang
100*22ce4affSfengbojiangzwrapbench: $(EXAMPLE_PATH)/zwrapbench.o zstd_zlibwrapper.o util.o timefn.o datagen.o $(ZSTDLIBRARY)
101*22ce4affSfengbojiang	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(ZLIB_LIBRARY) -o $@
102*22ce4affSfengbojiang
103*22ce4affSfengbojiang
104*22ce4affSfengbojiangzstd_zlibwrapper.o: $(ZLIBWRAPPER_PATH)/zstd_zlibwrapper.c $(ZLIBWRAPPER_PATH)/zstd_zlibwrapper.h
105*22ce4affSfengbojiang
106*22ce4affSfengbojiangzstdTurnedOn_zlibwrapper.o: CPPFLAGS += -DZWRAP_USE_ZSTD=1
107*22ce4affSfengbojiangzstdTurnedOn_zlibwrapper.o: $(ZLIBWRAPPER_PATH)/zstd_zlibwrapper.c $(ZLIBWRAPPER_PATH)/zstd_zlibwrapper.h
108*22ce4affSfengbojiang	$(CC) $(CPPFLAGS) $(CFLAGS) $< -c -o $@
109*22ce4affSfengbojiang
110*22ce4affSfengbojiang$(ZSTDLIBDIR)/libzstd.a:
111*22ce4affSfengbojiang	$(MAKE) -C $(ZSTDLIBDIR) libzstd.a
112*22ce4affSfengbojiang
113*22ce4affSfengbojiang$(ZSTDLIBDIR)/libzstd.so:
114*22ce4affSfengbojiang	$(MAKE) -C $(ZSTDLIBDIR) libzstd
115*22ce4affSfengbojiang
116*22ce4affSfengbojiang
117*22ce4affSfengbojiangclean:
118*22ce4affSfengbojiang	-$(RM) $(ZLIBWRAPPER_PATH)/*.o $(EXAMPLE_PATH)/*.o *.o foo.gz example$(EXT) example_zstd$(EXT) fitblk$(EXT) fitblk_zstd$(EXT) zwrapbench$(EXT) minigzip$(EXT) minigzip_zstd$(EXT)
119*22ce4affSfengbojiang	@echo Cleaning completed
120