blob: b4133a7b589c2af4a2f35572ffcb7b80dd65fe3f [file] [log] [blame]
Yann Collet4856a002015-01-24 01:58:16 +01001# ################################################################
2# ZSTD library - Makefile
Yann Collet7d360282016-02-12 00:07:30 +01003# Copyright (C) Yann Collet 2015-2016
Yann Collet4856a002015-01-24 01:58:16 +01004# All rights reserved.
Yann Collet0c5e8b12016-05-29 01:06:30 +02005#
Yann Collet4856a002015-01-24 01:58:16 +01006# BSD license
7
8# Redistribution and use in source and binary forms, with or without modification,
9# are permitted provided that the following conditions are met:
Yann Collet0c5e8b12016-05-29 01:06:30 +020010#
Yann Collet4856a002015-01-24 01:58:16 +010011# * Redistributions of source code must retain the above copyright notice, this
12# list of conditions and the following disclaimer.
Yann Collet0c5e8b12016-05-29 01:06:30 +020013#
Yann Collet4856a002015-01-24 01:58:16 +010014# * Redistributions in binary form must reproduce the above copyright notice, this
15# list of conditions and the following disclaimer in the documentation and/or
16# other materials provided with the distribution.
Yann Collet0c5e8b12016-05-29 01:06:30 +020017#
Yann Collet4856a002015-01-24 01:58:16 +010018# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Yann Collet0c5e8b12016-05-29 01:06:30 +020028#
Yann Collet4856a002015-01-24 01:58:16 +010029# You can contact the author at :
Yann Colletdcac00e2015-11-19 11:23:44 +010030# - ZSTD homepage : http://www.zstd.net
Yann Collet4856a002015-01-24 01:58:16 +010031# ################################################################
32
33# Version numbers
inikep23a08892016-04-22 12:43:18 +020034LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./common/zstd.h`
35LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./common/zstd.h`
36LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./common/zstd.h`
Yann Collet5f9f9872015-12-30 19:52:08 +010037LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
38LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
39LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
40LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
41LIBVER := $(shell echo $(LIBVER_SCRIPT))
Yann Collet722504c2015-12-31 18:32:15 +010042VERSION?= $(LIBVER)
Yann Collet4856a002015-01-24 01:58:16 +010043
44DESTDIR?=
Yann Colletbf504092015-08-26 00:19:06 +010045PREFIX ?= /usr/local
Yann Collet0c5e8b12016-05-29 01:06:30 +020046CPPFLAGS= -I./common -DXXH_NAMESPACE=ZSTD_
Yann Collet4856a002015-01-24 01:58:16 +010047CFLAGS ?= -O3
Yann Colletde4d4da2016-05-20 12:20:12 +020048CFLAGS += -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wstrict-aliasing=1 -Wswitch-enum -Wstrict-prototypes -Wundef
Yann Collet7083b8a2015-07-06 23:58:59 -080049FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(MOREFLAGS)
Yann Collet4856a002015-01-24 01:58:16 +010050
51LIBDIR ?= $(PREFIX)/lib
52INCLUDEDIR=$(PREFIX)/include
53
Yann Collet0c5e8b12016-05-29 01:06:30 +020054ZSTDCOMMON_FILES := common/fse_decompress.c common/zstd_common.c common/entropy_common.c common/xxhash.c
55ZSTDCOMP_FILES := compress/zstd_compress.c compress/fse_compress.c compress/huf_compress.c compress/zbuff_compress.c
56ZSTDDECOMP_FILES := decompress/zstd_decompress.c decompress/huf_decompress.c decompress/zbuff_decompress.c
inikep23a08892016-04-22 12:43:18 +020057ZSTDDICT_FILES := dictBuilder/zdict.c dictBuilder/divsufsort.c
Yann Collet0c5e8b12016-05-29 01:06:30 +020058ZSTD_FILES := $(ZSTDCOMMON_FILES) $(ZSTDDECOMP_FILES) $(ZSTDCOMP_FILES) $(ZSTDDICT_FILES)
Yann Collet029267a2016-04-09 09:42:27 +020059ZSTD_LEGACY:= legacy/zstd_v01.c legacy/zstd_v02.c legacy/zstd_v03.c legacy/zstd_v04.c legacy/zstd_v05.c
Yann Colleta85a8dd2015-11-30 11:53:11 +010060
Yann Colletaead1bf2015-11-30 14:18:47 +010061ifeq ($(ZSTD_LEGACY_SUPPORT), 0)
Yann Colleta85a8dd2015-11-30 11:53:11 +010062CPPFLAGS += -DZSTD_LEGACY_SUPPORT=0
63else
64ZSTD_FILES+= $(ZSTD_LEGACY)
65CPPFLAGS += -I./legacy -DZSTD_LEGACY_SUPPORT=1
66endif
67
Yann Collet4856a002015-01-24 01:58:16 +010068
69# OS X linker doesn't support -soname, and use different extension
70# see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
71ifeq ($(shell uname), Darwin)
72 SHARED_EXT = dylib
73 SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
74 SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
Yann Colletc620b482015-12-01 01:56:02 +010075 SONAME_FLAGS = -install_name $(PREFIX)/lib/$@.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER)
Yann Collet4856a002015-01-24 01:58:16 +010076else
Yann Colletc620b482015-12-01 01:56:02 +010077 SONAME_FLAGS = -Wl,-soname=$@.$(SHARED_EXT).$(LIBVER_MAJOR)
Yann Collet4856a002015-01-24 01:58:16 +010078 SHARED_EXT = so
79 SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
80 SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
81endif
82
Yann Collet4856a002015-01-24 01:58:16 +010083
Yann Colletdcac00e2015-11-19 11:23:44 +010084.PHONY: default all clean install uninstall
Yann Collet4856a002015-01-24 01:58:16 +010085
Yann Colletdcac00e2015-11-19 11:23:44 +010086default: clean libzstd
87
88all: clean libzstd
89
Yann Colleta85a8dd2015-11-30 11:53:11 +010090libzstd: $(ZSTD_FILES)
Yann Collet4856a002015-01-24 01:58:16 +010091 @echo compiling static library
Yann Collet7083b8a2015-07-06 23:58:59 -080092 @$(CC) $(FLAGS) -c $^
Yann Colletc620b482015-12-01 01:56:02 +010093 @$(AR) rcs $@.a *.o
Yann Collet4856a002015-01-24 01:58:16 +010094 @echo compiling dynamic library $(LIBVER)
Yann Collet7083b8a2015-07-06 23:58:59 -080095 @$(CC) $(FLAGS) -shared $^ -fPIC $(SONAME_FLAGS) -o $@.$(SHARED_EXT_VER)
Yann Collet4856a002015-01-24 01:58:16 +010096 @echo creating versioned links
97 @ln -sf $@.$(SHARED_EXT_VER) $@.$(SHARED_EXT_MAJOR)
98 @ln -sf $@.$(SHARED_EXT_VER) $@.$(SHARED_EXT)
99
100clean:
Yann Colletc620b482015-12-01 01:56:02 +0100101 @rm -f core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
Yann Collet4856a002015-01-24 01:58:16 +0100102 @echo Cleaning library completed
103
Yann Collet4856a002015-01-24 01:58:16 +0100104#------------------------------------------------------------------------
105#make install is validated only for Linux, OSX, kFreeBSD and Hurd targets
106ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU))
107
Yann Collet5f9f9872015-12-30 19:52:08 +0100108libzstd.pc:
109libzstd.pc: libzstd.pc.in
Yann Collet4856a002015-01-24 01:58:16 +0100110 @echo creating pkgconfig
111 @sed -e 's|@PREFIX@|$(PREFIX)|' \
Yann Collet5f9f9872015-12-30 19:52:08 +0100112 -e 's|@LIBDIR@|$(LIBDIR)|' \
113 -e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \
114 -e 's|@VERSION@|$(VERSION)|' \
Yann Collet4856a002015-01-24 01:58:16 +0100115 $< >$@
116
117install: libzstd libzstd.pc
118 @install -d -m 755 $(DESTDIR)$(LIBDIR)/pkgconfig/ $(DESTDIR)$(INCLUDEDIR)/
119 @install -m 755 libzstd.$(SHARED_EXT_VER) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_VER)
120 @cp -a libzstd.$(SHARED_EXT_MAJOR) $(DESTDIR)$(LIBDIR)
121 @cp -a libzstd.$(SHARED_EXT) $(DESTDIR)$(LIBDIR)
122 @cp -a libzstd.pc $(DESTDIR)$(LIBDIR)/pkgconfig/
123 @install -m 644 libzstd.a $(DESTDIR)$(LIBDIR)/libzstd.a
inikepa1febea2016-04-22 17:14:25 +0200124 @install -m 644 common/zstd.h $(DESTDIR)$(INCLUDEDIR)/zstd.h
125 @install -m 644 common/zbuff.h $(DESTDIR)$(INCLUDEDIR)/zbuff.h
126 @install -m 644 dictBuilder/zdict.h $(DESTDIR)$(INCLUDEDIR)/zdict.h
Yann Collet4856a002015-01-24 01:58:16 +0100127 @echo zstd static and shared library installed
128
129uninstall:
130 @rm -f $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
131 @rm -f $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
132 @rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/libzstd.pc
133 @[ -x $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_VER) ] && rm -f $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_VER)
134 @[ -f $(DESTDIR)$(LIBDIR)/libzstd.a ] && rm -f $(DESTDIR)$(LIBDIR)/libzstd.a
135 @[ -f $(DESTDIR)$(INCLUDEDIR)/zstd.h ] && rm -f $(DESTDIR)$(INCLUDEDIR)/zstd.h
Yann Colletd7bee332016-04-07 18:16:42 +0200136 @[ -f $(DESTDIR)$(INCLUDEDIR)/zbuff.h ] && rm -f $(DESTDIR)$(INCLUDEDIR)/zbuff.h
137 @[ -f $(DESTDIR)$(INCLUDEDIR)/zdict.h ] && rm -f $(DESTDIR)$(INCLUDEDIR)/zdict.h
Yann Collet4856a002015-01-24 01:58:16 +0100138 @echo zstd libraries successfully uninstalled
139
140endif