]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | # ########################################################################## |
2 | # Copyright (c) 2016-present, Yann Collet, Facebook, Inc. | |
3 | # All rights reserved. | |
4 | # | |
5 | # This source code is licensed under the BSD-style license found in the | |
6 | # LICENSE file in the root directory of this source tree. An additional grant | |
7 | # of patent rights can be found in the PATENTS file in the same directory. | |
8 | # ########################################################################## | |
9 | # zstd : Command Line Utility, supporting gzip-like arguments | |
10 | # zstd32 : Same as zstd, but forced to compile in 32-bits mode | |
11 | # zstd_nolegacy : zstd without support of decompression of legacy versions | |
12 | # zstd-small : minimal zstd without dictionary builder and benchmark | |
13 | # zstd-compress : compressor-only version of zstd | |
14 | # zstd-decompress : decompressor-only version of zstd | |
15 | # ########################################################################## | |
16 | ||
17 | DESTDIR?= | |
18 | PREFIX ?= /usr/local | |
19 | BINDIR = $(PREFIX)/bin | |
20 | MANDIR = $(PREFIX)/share/man/man1 | |
21 | ||
22 | ZSTDDIR = ../lib | |
23 | ||
24 | ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version "), 1) | |
25 | ALIGN_LOOP = -falign-loops=32 | |
26 | else | |
27 | ALIGN_LOOP = | |
28 | endif | |
29 | ||
30 | CPPFLAGS+= -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/dictBuilder | |
31 | CFLAGS ?= -O3 | |
32 | CFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 \ | |
33 | -Wswitch-enum -Wdeclaration-after-statement -Wstrict-prototypes -Wundef \ | |
34 | -Wpointer-arith | |
35 | CFLAGS += $(MOREFLAGS) | |
36 | FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) | |
37 | ||
38 | ||
39 | ZSTDCOMMON_FILES := $(ZSTDDIR)/common/*.c | |
40 | ZSTDCOMP_FILES := $(ZSTDDIR)/compress/zstd_compress.c $(ZSTDDIR)/compress/fse_compress.c $(ZSTDDIR)/compress/huf_compress.c | |
41 | ZSTDDECOMP_FILES := $(ZSTDDIR)/decompress/huf_decompress.c | |
42 | ZSTD_FILES := $(ZSTDDECOMP_FILES) $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) | |
43 | ZDICT_FILES := $(ZSTDDIR)/dictBuilder/*.c | |
44 | ZSTDDECOMP_O = $(ZSTDDIR)/decompress/zstd_decompress.o | |
45 | ||
46 | ifeq ($(ZSTD_LEGACY_SUPPORT), 0) | |
47 | CPPFLAGS += -DZSTD_LEGACY_SUPPORT=0 | |
48 | ZSTDLEGACY_FILES:= | |
49 | else | |
50 | ZSTD_LEGACY_SUPPORT:=1 | |
51 | CPPFLAGS += -I$(ZSTDDIR)/legacy | |
52 | ZSTDLEGACY_FILES:= $(ZSTDDIR)/legacy/*.c | |
53 | endif | |
54 | ||
55 | ||
56 | # Define *.exe as extension for Windows systems | |
57 | ifneq (,$(filter Windows%,$(OS))) | |
58 | EXT =.exe | |
59 | RES64_FILE = windres/zstd64.res | |
60 | RES32_FILE = windres/zstd32.res | |
61 | ifneq (,$(filter x86_64%,$(shell $(CC) -dumpmachine))) | |
62 | RES_FILE = $(RES64_FILE) | |
63 | else | |
64 | RES_FILE = $(RES32_FILE) | |
65 | endif | |
66 | else | |
67 | EXT = | |
68 | endif | |
69 | ||
70 | ||
71 | .PHONY: default all clean clean_decomp_o install uninstall generate_res | |
72 | ||
73 | default: zstd | |
74 | ||
75 | all: zstd | |
76 | ||
77 | $(ZSTDDECOMP_O): CFLAGS += $(ALIGN_LOOP) | |
78 | ||
79 | zstd : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) | |
80 | zstd : $(ZSTDDECOMP_O) $(ZSTD_FILES) $(ZSTDLEGACY_FILES) $(ZDICT_FILES) \ | |
81 | zstdcli.c fileio.c bench.c datagen.c dibio.c | |
82 | ifneq (,$(filter Windows%,$(OS))) | |
83 | windres/generate_res.bat | |
84 | endif | |
85 | $(CC) $(FLAGS) $^ $(RES_FILE) -o $@$(EXT) $(LDFLAGS) | |
86 | ||
87 | ||
88 | zstd32 : CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) | |
89 | zstd32 : $(ZSTDDIR)/decompress/zstd_decompress.c $(ZSTD_FILES) $(ZSTDLEGACY_FILES) $(ZDICT_FILES) \ | |
90 | zstdcli.c fileio.c bench.c datagen.c dibio.c | |
91 | ifneq (,$(filter Windows%,$(OS))) | |
92 | windres/generate_res.bat | |
93 | endif | |
94 | $(CC) -m32 $(FLAGS) $^ $(RES32_FILE) -o $@$(EXT) | |
95 | ||
96 | ||
97 | zstd-nolegacy : clean_decomp_o | |
98 | $(MAKE) zstd ZSTD_LEGACY_SUPPORT=0 | |
99 | ||
100 | zstd-pgo : MOREFLAGS = -fprofile-generate | |
101 | zstd-pgo : clean zstd | |
102 | ./zstd -b19i1 $(PROFILE_WITH) | |
103 | ./zstd -b16i1 $(PROFILE_WITH) | |
104 | ./zstd -b9i2 $(PROFILE_WITH) | |
105 | ./zstd -b $(PROFILE_WITH) | |
106 | ./zstd -b7i2 $(PROFILE_WITH) | |
107 | ./zstd -b5 $(PROFILE_WITH) | |
108 | $(RM) zstd | |
109 | $(RM) $(ZSTDDECOMP_O) | |
110 | $(MAKE) zstd MOREFLAGS=-fprofile-use | |
111 | ||
112 | zstd-frugal: $(ZSTDDECOMP_O) $(ZSTD_FILES) zstdcli.c fileio.c | |
113 | $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT $^ -o zstd$(EXT) | |
114 | ||
115 | zstd-small: clean_decomp_o | |
116 | ZSTD_LEGACY_SUPPORT=0 CFLAGS="-Os -s" $(MAKE) zstd-frugal | |
117 | ||
118 | zstd-decompress-clean: $(ZSTDDECOMP_O) $(ZSTDCOMMON_FILES) $(ZSTDDECOMP_FILES) zstdcli.c fileio.c | |
119 | $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NOCOMPRESS $^ -o zstd-decompress$(EXT) | |
120 | ||
121 | zstd-decompress: clean_decomp_o | |
122 | ZSTD_LEGACY_SUPPORT=0 $(MAKE) zstd-decompress-clean | |
123 | ||
124 | zstd-compress: $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) zstdcli.c fileio.c | |
125 | $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NODECOMPRESS $^ -o $@$(EXT) | |
126 | ||
127 | gzstd: clean_decomp_o | |
128 | @echo "int main(){}" | $(CC) -o have_zlib -x c - -lz && echo found zlib || echo did not found zlib | |
129 | @if [ -s have_zlib ]; then \ | |
130 | echo building gzstd with .gz decompression support \ | |
131 | && rm have_zlib$(EXT) \ | |
132 | && CPPFLAGS=-DZSTD_GZDECOMPRESS LDFLAGS="-lz" $(MAKE) zstd; \ | |
133 | else \ | |
134 | echo "WARNING : no zlib, building gzstd with only .zst files support : NO .gz SUPPORT !!!" \ | |
135 | && $(MAKE) zstd; \ | |
136 | fi | |
137 | ||
138 | generate_res: | |
139 | windres/generate_res.bat | |
140 | ||
141 | clean: | |
142 | $(MAKE) -C ../lib clean | |
143 | @$(RM) $(ZSTDDIR)/decompress/*.o $(ZSTDDIR)/decompress/zstd_decompress.gcda | |
144 | @$(RM) core *.o tmp* result* *.gcda dictionary *.zst \ | |
145 | zstd$(EXT) zstd32$(EXT) zstd-compress$(EXT) zstd-decompress$(EXT) \ | |
146 | *.gcda default.profraw | |
147 | @echo Cleaning completed | |
148 | ||
149 | clean_decomp_o: | |
150 | @$(RM) $(ZSTDDECOMP_O) | |
151 | ||
152 | ||
153 | #---------------------------------------------------------------------------------- | |
154 | #make install is validated only for Linux, OSX, kFreeBSD, Hurd and some BSD targets | |
155 | #---------------------------------------------------------------------------------- | |
156 | ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD)) | |
157 | install: zstd | |
158 | @echo Installing binaries | |
159 | @install -d -m 755 $(DESTDIR)$(BINDIR)/ $(DESTDIR)$(MANDIR)/ | |
160 | @install -m 755 zstd $(DESTDIR)$(BINDIR)/zstd | |
161 | @ln -sf zstd $(DESTDIR)$(BINDIR)/zstdcat | |
162 | @ln -sf zstd $(DESTDIR)$(BINDIR)/unzstd | |
163 | @install -m 755 zstdless $(DESTDIR)$(BINDIR)/zstdless | |
164 | @install -m 755 zstdgrep $(DESTDIR)$(BINDIR)/zstdgrep | |
165 | @echo Installing man pages | |
166 | @install -m 644 zstd.1 $(DESTDIR)$(MANDIR)/zstd.1 | |
167 | @ln -sf zstd.1 $(DESTDIR)$(MANDIR)/zstdcat.1 | |
168 | @ln -sf zstd.1 $(DESTDIR)$(MANDIR)/unzstd.1 | |
169 | @echo zstd installation completed | |
170 | ||
171 | uninstall: | |
172 | @$(RM) $(DESTDIR)$(BINDIR)/zstdgrep | |
173 | @$(RM) $(DESTDIR)$(BINDIR)/zstdless | |
174 | @$(RM) $(DESTDIR)$(BINDIR)/zstdcat | |
175 | @$(RM) $(DESTDIR)$(BINDIR)/unzstd | |
176 | @$(RM) $(DESTDIR)$(BINDIR)/zstd | |
177 | @$(RM) $(DESTDIR)$(MANDIR)/zstdcat.1 | |
178 | @$(RM) $(DESTDIR)$(MANDIR)/unzstd.1 | |
179 | @$(RM) $(DESTDIR)$(MANDIR)/zstd.1 | |
180 | @echo zstd programs successfully uninstalled | |
181 | endif |