blob: dd6e7838a9d126bbdc9a615ba5bdc0cbe41a9e0f [file] [log] [blame]
Yann Collet4856a002015-01-24 01:58:16 +01001# ##########################################################################
2# ZSTD programs - Makefile
Yann Collet648959a2016-02-07 23:58:32 +01003# Copyright (C) Yann Collet 2015-2016
Yann Collet4856a002015-01-24 01:58:16 +01004#
5# GPL v2 License
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with this program; if not, write to the Free Software Foundation, Inc.,
19# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# You can contact the author at :
Yann Collet648959a2016-02-07 23:58:32 +010022# - zstd homepage : http://www.zstd.net/
Yann Collet4856a002015-01-24 01:58:16 +010023# ##########################################################################
24# zstd : Command Line Utility, supporting gzip-like arguments
inikep2868d562016-08-18 13:18:11 +020025# zstd32 : Same as zstd, but forced to compile in 32-bits mode
26# zstd_nolegacy : zstd without support of decompression of legacy versions
inikepab2f7702016-08-25 10:07:20 +020027# zstd-small : minimal zstd without dictionary builder and benchmark
28# zstd-compress : compressor-only version of zstd
29# zstd-decompress : decompressor-only version of zstd
Yann Collet4856a002015-01-24 01:58:16 +010030# ##########################################################################
31
Yann Collet4856a002015-01-24 01:58:16 +010032DESTDIR?=
Yann Colletbf504092015-08-26 00:19:06 +010033PREFIX ?= /usr/local
Yann Colletf51e0662016-05-29 01:39:19 +020034BINDIR = $(PREFIX)/bin
35MANDIR = $(PREFIX)/share/man/man1
36
37ZSTDDIR = ../lib
38
Yann Collet5e45a5f2016-07-21 18:36:50 -070039ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version "), 1)
40ALIGN_LOOP = -falign-loops=32
41else
42ALIGN_LOOP =
43endif
44
Yann Collet666398e2016-08-10 08:14:48 +020045CPPFLAGS= -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/dictBuilder
Yann Collet5e45a5f2016-07-21 18:36:50 -070046CFLAGS ?= -O3
Yann Collet32faf6c2016-07-22 04:45:06 +020047CFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 \
48 -Wswitch-enum -Wdeclaration-after-statement -Wstrict-prototypes -Wundef
Yann Collete5a817a2016-07-24 17:46:05 +020049CFLAGS += $(MOREFLAGS)
50FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
Yann Collet4856a002015-01-24 01:58:16 +010051
Yann Collet4856a002015-01-24 01:58:16 +010052
Yann Colletf51e0662016-05-29 01:39:19 +020053ZSTDCOMMON_FILES := $(ZSTDDIR)/common/*.c
Yann Collet0c5e8b12016-05-29 01:06:30 +020054ZSTDCOMP_FILES := $(ZSTDDIR)/compress/zstd_compress.c $(ZSTDDIR)/compress/fse_compress.c $(ZSTDDIR)/compress/huf_compress.c
inikepd0c270f2016-08-17 15:59:50 +020055ZSTDDECOMP_FILES := $(ZSTDDIR)/decompress/huf_decompress.c
Yann Colletf51e0662016-05-29 01:39:19 +020056ZSTD_FILES := $(ZSTDDECOMP_FILES) $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES)
Yann Colletf51e0662016-05-29 01:39:19 +020057ZDICT_FILES := $(ZSTDDIR)/dictBuilder/*.c
inikepd0c270f2016-08-17 15:59:50 +020058ZSTDDECOMP_O = $(ZSTDDIR)/decompress/zstd_decompress.o
59ZSTDDECOMP32_O = $(ZSTDDIR)/decompress/zstd_decompress32.o
Yann Colletb096cbf2015-11-27 16:18:56 +010060
Yann Colletaead1bf2015-11-30 14:18:47 +010061ifeq ($(ZSTD_LEGACY_SUPPORT), 0)
Yann Colletb096cbf2015-11-27 16:18:56 +010062CPPFLAGS += -DZSTD_LEGACY_SUPPORT=0
Yann Colletf51e0662016-05-29 01:39:19 +020063ZSTDLEGACY_FILES:=
Yann Colletb096cbf2015-11-27 16:18:56 +010064else
Yann Colletc8da2c92016-02-12 02:56:27 +010065ZSTD_LEGACY_SUPPORT:=1
Yann Colletf51e0662016-05-29 01:39:19 +020066CPPFLAGS += -I$(ZSTDDIR)/legacy -I./legacy
67ZSTDLEGACY_FILES:= $(ZSTDDIR)/legacy/*.c legacy/fileio_legacy.c
Yann Colletb096cbf2015-11-27 16:18:56 +010068endif
69
Yann Collet4856a002015-01-24 01:58:16 +010070
71# Define *.exe as extension for Windows systems
72ifneq (,$(filter Windows%,$(OS)))
73EXT =.exe
74VOID = nul
75else
76EXT =
77VOID = /dev/null
78endif
79
Yann Collet7447ee92015-11-26 10:52:30 +010080
inikep2868d562016-08-18 13:18:11 +020081.PHONY: default all clean install uninstall
Yann Collet4856a002015-01-24 01:58:16 +010082
83default: zstd
84
inikep2868d562016-08-18 13:18:11 +020085all: zstd
Yann Collet4856a002015-01-24 01:58:16 +010086
Yann Collet5e45a5f2016-07-21 18:36:50 -070087
inikepd0c270f2016-08-17 15:59:50 +020088$(ZSTDDECOMP_O): $(ZSTDDIR)/decompress/zstd_decompress.c
89 $(CC) $(ALIGN_LOOP) $(FLAGS) $^ -c -o $@
90
91$(ZSTDDECOMP32_O): $(ZSTDDIR)/decompress/zstd_decompress.c
92 $(CC) -m32 $(ALIGN_LOOP) $(FLAGS) $^ -c -o $@
93
94zstd : $(ZSTDDECOMP_O) $(ZSTD_FILES) $(ZSTDLEGACY_FILES) $(ZDICT_FILES) \
Yann Collet0c5e8b12016-05-29 01:06:30 +020095 zstdcli.c fileio.c bench.c datagen.c dibio.c
inikep33ad2512016-03-30 09:55:37 +020096 $(CC) $(FLAGS) -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) $^ -o $@$(EXT)
Yann Collet4856a002015-01-24 01:58:16 +010097
inikepd0c270f2016-08-17 15:59:50 +020098zstd32 : $(ZSTDDECOMP32_O) $(ZSTD_FILES) $(ZSTDLEGACY_FILES) $(ZDICT_FILES) \
99 zstdcli.c fileio.c bench.c datagen.c dibio.c
100 $(CC) -m32 $(FLAGS) -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) $^ -o $@$(EXT)
101
Yann Collet4856a002015-01-24 01:58:16 +0100102
Yann Colleta85a8dd2015-11-30 11:53:11 +0100103zstd_nolegacy :
Yann Colletaead1bf2015-11-30 14:18:47 +0100104 $(MAKE) zstd ZSTD_LEGACY_SUPPORT=0
Yann Colleta85a8dd2015-11-30 11:53:11 +0100105
Yann Collet03386352015-12-01 01:28:32 +0100106zstd-pgo : MOREFLAGS = -fprofile-generate
107zstd-pgo : clean zstd
Yann Collet728c8fc2016-02-17 17:04:12 +0100108 ./zstd -b19i1 $(PROFILE_WITH)
109 ./zstd -b16i1 $(PROFILE_WITH)
110 ./zstd -b9i2 $(PROFILE_WITH)
Yann Collet03386352015-12-01 01:28:32 +0100111 ./zstd -b $(PROFILE_WITH)
Yann Collet728c8fc2016-02-17 17:04:12 +0100112 ./zstd -b7i2 $(PROFILE_WITH)
113 ./zstd -b5 $(PROFILE_WITH)
Yann Collet03386352015-12-01 01:28:32 +0100114 rm zstd
115 $(MAKE) zstd MOREFLAGS=-fprofile-use
116
inikep79b40622016-08-17 16:29:57 +0200117zstd-frugal: $(ZSTDDECOMP_O) $(ZSTD_FILES) zstdcli.c fileio.c
Yann Colletc8da2c92016-02-12 02:56:27 +0100118 $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_LEGACY_SUPPORT=0 $^ -o zstd$(EXT)
Yann Collet28e7cef2015-12-03 12:11:30 +0100119
Yann Colletf51e0662016-05-29 01:39:19 +0200120zstd-compress: $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) \
Yann Collet6263ba52016-08-13 23:45:45 +0200121 zstdcli.c fileio.c
inikepa1febea2016-04-22 17:14:25 +0200122 $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NODECOMPRESS -DZSTD_LEGACY_SUPPORT=0 $^ -o $@$(EXT)
123
Yann Colletf51e0662016-05-29 01:39:19 +0200124zstd-decompress: $(ZSTDCOMMON_FILES) $(ZSTDDECOMP_FILES) \
Yann Collet6263ba52016-08-13 23:45:45 +0200125 zstdcli.c fileio.c
inikep3c7c3522016-04-22 13:59:05 +0200126 $(CC) $(FLAGS) -DZSTD_NOBENCH -DZSTD_NODICT -DZSTD_NOCOMPRESS -DZSTD_LEGACY_SUPPORT=0 $^ -o $@$(EXT)
127
Yann Colletfb0ba592016-05-28 15:30:01 +0200128zstd-small: clean
129 CFLAGS="-Os -s" $(MAKE) zstd-frugal
Yann Collet28e7cef2015-12-03 12:11:30 +0100130
Yann Colletfb0ba592016-05-28 15:30:01 +0200131
Yann Collet4856a002015-01-24 01:58:16 +0100132clean:
Yann Collet5e45a5f2016-07-21 18:36:50 -0700133 $(MAKE) -C ../lib clean
inikepc6297762016-08-19 10:45:59 +0200134 @rm -f ../lib/decompress/*.o
Yann Collet71eafdd2016-02-12 02:31:57 +0100135 @rm -f core *.o tmp* result* *.gcda dictionary *.zst \
inikep2868d562016-08-18 13:18:11 +0200136 zstd$(EXT) zstd32$(EXT) zstd-compress$(EXT) zstd-decompress$(EXT)
Yann Collet4856a002015-01-24 01:58:16 +0100137 @echo Cleaning completed
138
139
jrmarino0d07ec02016-07-30 19:10:36 -0500140#----------------------------------------------------------------------------------
141#make install is validated only for Linux, OSX, kFreeBSD, Hurd and some BSD targets
142#----------------------------------------------------------------------------------
143ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly))
Yann Colletc620b482015-12-01 01:56:02 +0100144install: zstd
Yann Collet4856a002015-01-24 01:58:16 +0100145 @echo Installing binaries
146 @install -d -m 755 $(DESTDIR)$(BINDIR)/ $(DESTDIR)$(MANDIR)/
147 @install -m 755 zstd$(EXT) $(DESTDIR)$(BINDIR)/zstd$(EXT)
148 @ln -sf zstd$(EXT) $(DESTDIR)$(BINDIR)/zstdcat
Johan Förberg273d0492015-03-24 20:15:56 +0100149 @ln -sf zstd$(EXT) $(DESTDIR)$(BINDIR)/unzstd
Yann Collet4856a002015-01-24 01:58:16 +0100150 @echo Installing man pages
151 @install -m 644 zstd.1 $(DESTDIR)$(MANDIR)/zstd.1
Yann Collet5abd8202015-08-27 03:16:04 +0100152 @ln -sf zstd.1 $(DESTDIR)$(MANDIR)/zstdcat.1
153 @ln -sf zstd.1 $(DESTDIR)$(MANDIR)/unzstd.1
Yann Collet4856a002015-01-24 01:58:16 +0100154 @echo zstd installation completed
155
156uninstall:
157 rm -f $(DESTDIR)$(BINDIR)/zstdcat
Johan Förberg273d0492015-03-24 20:15:56 +0100158 rm -f $(DESTDIR)$(BINDIR)/unzstd
Yann Collet4856a002015-01-24 01:58:16 +0100159 [ -x $(DESTDIR)$(BINDIR)/zstd$(EXT) ] && rm -f $(DESTDIR)$(BINDIR)/zstd$(EXT)
Yann Collet5abd8202015-08-27 03:16:04 +0100160 rm -f $(DESTDIR)$(MANDIR)/zstdcat.1
161 rm -f $(DESTDIR)$(MANDIR)/unzstd.1
Yann Collet4856a002015-01-24 01:58:16 +0100162 [ -f $(DESTDIR)$(MANDIR)/zstd.1 ] && rm -f $(DESTDIR)$(MANDIR)/zstd.1
Yann Collet4856a002015-01-24 01:58:16 +0100163 @echo zstd programs successfully uninstalled
Yann Collet4856a002015-01-24 01:58:16 +0100164endif