1 # ##########################################################################
2 # Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
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 # ##########################################################################
19 BINDIR
= $(PREFIX
)/bin
20 MANDIR
= $(PREFIX
)/share
/man
/man1
24 ifeq ($(shell $(CC
) -v
2>&1 | grep
-c
"gcc version "), 1)
25 ALIGN_LOOP
= -falign-loops
=32
30 CPPFLAGS
+= -I
$(ZSTDDIR
) -I
$(ZSTDDIR
)/common
-I
$(ZSTDDIR
)/dictBuilder
32 CFLAGS
+= -Wall
-Wextra
-Wcast-qual
-Wcast-align
-Wshadow
-Wstrict-aliasing
=1 \
33 -Wswitch-enum
-Wdeclaration-after-statement
-Wstrict-prototypes
-Wundef \
35 CFLAGS
+= $(MOREFLAGS
)
36 FLAGS
= $(CPPFLAGS
) $(CFLAGS
) $(LDFLAGS
)
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
46 ifeq ($(ZSTD_LEGACY_SUPPORT
), 0)
47 CPPFLAGS
+= -DZSTD_LEGACY_SUPPORT
=0
50 ZSTD_LEGACY_SUPPORT
:=1
51 CPPFLAGS
+= -I
$(ZSTDDIR
)/legacy
52 ZSTDLEGACY_FILES
:= $(ZSTDDIR
)/legacy
/*.c
56 # Define *.exe as extension for Windows systems
57 ifneq (,$(filter Windows
%,$(OS
)))
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
)
64 RES_FILE
= $(RES32_FILE
)
71 .PHONY
: default
all clean clean_decomp_o
install uninstall generate_res
77 $(ZSTDDECOMP_O
): CFLAGS
+= $(ALIGN_LOOP
)
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
85 $(CC
) $(FLAGS
) $^
$(RES_FILE
) -o
$@
$(EXT
) $(LDFLAGS
)
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
94 $(CC
) -m32
$(FLAGS
) $^
$(RES32_FILE
) -o
$@
$(EXT
)
97 zstd-nolegacy
: clean_decomp_o
98 $(MAKE
) zstd ZSTD_LEGACY_SUPPORT
=0
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
)
109 $(RM
) $(ZSTDDECOMP_O
)
110 $(MAKE
) zstd MOREFLAGS
=-fprofile-use
112 zstd-frugal
: $(ZSTDDECOMP_O
) $(ZSTD_FILES
) zstdcli.c fileio.c
113 $(CC
) $(FLAGS
) -DZSTD_NOBENCH
-DZSTD_NODICT
$^
-o zstd
$(EXT
)
115 zstd-small
: clean_decomp_o
116 ZSTD_LEGACY_SUPPORT
=0 CFLAGS
="-Os -s" $(MAKE
) zstd-frugal
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
)
121 zstd-decompress
: clean_decomp_o
122 ZSTD_LEGACY_SUPPORT
=0 $(MAKE
) zstd-decompress-clean
124 zstd-compress
: $(ZSTDCOMMON_FILES
) $(ZSTDCOMP_FILES
) zstdcli.c fileio.c
125 $(CC
) $(FLAGS
) -DZSTD_NOBENCH
-DZSTD_NODICT
-DZSTD_NODECOMPRESS
$^
-o
$@
$(EXT
)
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
; \
134 echo
"WARNING : no zlib, building gzstd with only .zst files support : NO .gz SUPPORT !!!" \
139 windres
/generate_res.bat
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
150 @
$(RM
) $(ZSTDDECOMP_O
)
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
))
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
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