10c16b537SWarner Losh# ################################################################ 237f1f268SConrad Meyer# Copyright (c) 2015-2020, Yann Collet, Facebook, Inc. 30c16b537SWarner Losh# All rights reserved. 40c16b537SWarner Losh# 50c16b537SWarner Losh# This source code is licensed under both the BSD-style license (found in the 60c16b537SWarner Losh# LICENSE file in the root directory of this source tree) and the GPLv2 (found 70c16b537SWarner Losh# in the COPYING file in the root directory of this source tree). 837f1f268SConrad Meyer# You may select, at your option, one of the above-listed licenses. 90c16b537SWarner Losh# ################################################################ 100c16b537SWarner Losh 11*f7cd7fe5SConrad Meyer.PHONY: default 12*f7cd7fe5SConrad Meyerdefault: lib-release 1337f1f268SConrad Meyer 14*f7cd7fe5SConrad Meyer# define silent mode as default (verbose mode with V=1 or VERBOSE=1) 15*f7cd7fe5SConrad Meyer$(V)$(VERBOSE).SILENT: 16*f7cd7fe5SConrad Meyer 17*f7cd7fe5SConrad Meyer# When cross-compiling from linux to windows, 18*f7cd7fe5SConrad Meyer# one might need to specify TARGET_SYSTEM as "Windows." 19*f7cd7fe5SConrad Meyer# Building from Fedora fails without it. 20*f7cd7fe5SConrad Meyer# (but Ubuntu and Debian don't need to set anything) 2137f1f268SConrad MeyerTARGET_SYSTEM ?= $(OS) 2237f1f268SConrad Meyer 230c16b537SWarner Losh# Version numbers 240c16b537SWarner LoshLIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h` 250c16b537SWarner LoshLIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h` 260c16b537SWarner LoshLIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h` 270c16b537SWarner LoshLIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT) 280c16b537SWarner LoshLIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT)) 290c16b537SWarner LoshLIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT)) 300c16b537SWarner LoshLIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT)) 310c16b537SWarner LoshLIBVER := $(shell echo $(LIBVER_SCRIPT)) 320c16b537SWarner LoshVERSION?= $(LIBVER) 334d3f1eafSConrad MeyerCCVER := $(shell $(CC) --version) 340c16b537SWarner Losh 35*f7cd7fe5SConrad Meyer# ZSTD_LIB_MINIFY is a helper variable that 36*f7cd7fe5SConrad Meyer# configures a bunch of other variables to space-optimized defaults. 3737f1f268SConrad MeyerZSTD_LIB_MINIFY ?= 0 3837f1f268SConrad Meyerifneq ($(ZSTD_LIB_MINIFY), 0) 3937f1f268SConrad Meyer HAVE_CC_OZ ?= $(shell echo "" | $(CC) -Oz -x c -c - -o /dev/null 2> /dev/null && echo 1 || echo 0) 4037f1f268SConrad Meyer ZSTD_LEGACY_SUPPORT ?= 0 4137f1f268SConrad Meyer ZSTD_LIB_DEPRECATED ?= 0 4237f1f268SConrad Meyer HUF_FORCE_DECOMPRESS_X1 ?= 1 4337f1f268SConrad Meyer ZSTD_FORCE_DECOMPRESS_SHORT ?= 1 4437f1f268SConrad Meyer ZSTD_NO_INLINE ?= 1 4537f1f268SConrad Meyer ZSTD_STRIP_ERROR_STRINGS ?= 1 4637f1f268SConrad Meyerifneq ($(HAVE_CC_OZ), 0) 4737f1f268SConrad Meyer # Some compilers (clang) support an even more space-optimized setting. 4837f1f268SConrad Meyer CFLAGS += -Oz 4937f1f268SConrad Meyerelse 5037f1f268SConrad Meyer CFLAGS += -Os 5137f1f268SConrad Meyerendif 5237f1f268SConrad Meyer CFLAGS += -fno-stack-protector -fomit-frame-pointer -fno-ident \ 5337f1f268SConrad Meyer -DDYNAMIC_BMI2=0 -DNDEBUG 5437f1f268SConrad Meyerelse 5537f1f268SConrad Meyer CFLAGS += -O3 5637f1f268SConrad Meyerendif 5737f1f268SConrad Meyer 58*f7cd7fe5SConrad MeyerDEBUGLEVEL ?= 0 59*f7cd7fe5SConrad MeyerCPPFLAGS += -DXXH_NAMESPACE=ZSTD_ -DDEBUGLEVEL=$(DEBUGLEVEL) 60*f7cd7fe5SConrad Meyerifeq ($(TARGET_SYSTEM),Windows_NT) # MinGW assumed 61*f7cd7fe5SConrad Meyer CPPFLAGS += -D__USE_MINGW_ANSI_STDIO # compatibility with %zu formatting 62*f7cd7fe5SConrad Meyerendif 63*f7cd7fe5SConrad MeyerDEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \ 64*f7cd7fe5SConrad Meyer -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \ 65*f7cd7fe5SConrad Meyer -Wstrict-prototypes -Wundef -Wpointer-arith \ 66*f7cd7fe5SConrad Meyer -Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \ 67*f7cd7fe5SConrad Meyer -Wredundant-decls -Wmissing-prototypes -Wc++-compat 68*f7cd7fe5SConrad MeyerCFLAGS += $(DEBUGFLAGS) $(MOREFLAGS) 69*f7cd7fe5SConrad MeyerFLAGS = $(CPPFLAGS) $(CFLAGS) 70*f7cd7fe5SConrad Meyer 71*f7cd7fe5SConrad MeyerHAVE_COLORNEVER = $(shell echo a | grep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0) 72*f7cd7fe5SConrad MeyerGREP_OPTIONS ?= 73*f7cd7fe5SConrad Meyerifeq ($HAVE_COLORNEVER, 1) 74*f7cd7fe5SConrad Meyer GREP_OPTIONS += --color=never 75*f7cd7fe5SConrad Meyerendif 76*f7cd7fe5SConrad MeyerGREP = grep $(GREP_OPTIONS) 77*f7cd7fe5SConrad MeyerSED_ERE_OPT ?= -E 78*f7cd7fe5SConrad Meyer 79*f7cd7fe5SConrad MeyerZSTDCOMMON_FILES := $(sort $(wildcard common/*.c)) 80*f7cd7fe5SConrad MeyerZSTDCOMP_FILES := $(sort $(wildcard compress/*.c)) 81*f7cd7fe5SConrad MeyerZSTDDECOMP_FILES := $(sort $(wildcard decompress/*.c)) 82*f7cd7fe5SConrad MeyerZDICT_FILES := $(sort $(wildcard dictBuilder/*.c)) 83*f7cd7fe5SConrad MeyerZDEPR_FILES := $(sort $(wildcard deprecated/*.c)) 84*f7cd7fe5SConrad MeyerZSTD_FILES := $(ZSTDCOMMON_FILES) 85*f7cd7fe5SConrad Meyer 86*f7cd7fe5SConrad Meyerifeq ($(findstring GCC,$(CCVER)),GCC) 87*f7cd7fe5SConrad Meyerdecompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize 88*f7cd7fe5SConrad Meyerendif 89*f7cd7fe5SConrad Meyer 9037f1f268SConrad Meyer# Modules 910f743729SConrad MeyerZSTD_LIB_COMPRESSION ?= 1 920f743729SConrad MeyerZSTD_LIB_DECOMPRESSION ?= 1 930f743729SConrad MeyerZSTD_LIB_DICTBUILDER ?= 1 940f743729SConrad MeyerZSTD_LIB_DEPRECATED ?= 1 9537f1f268SConrad Meyer 9637f1f268SConrad Meyer# Legacy support 9737f1f268SConrad MeyerZSTD_LEGACY_SUPPORT ?= 5 9837f1f268SConrad MeyerZSTD_LEGACY_MULTITHREADED_API ?= 0 9937f1f268SConrad Meyer 10037f1f268SConrad Meyer# Build size optimizations 101a0483764SConrad MeyerHUF_FORCE_DECOMPRESS_X1 ?= 0 102a0483764SConrad MeyerHUF_FORCE_DECOMPRESS_X2 ?= 0 103a0483764SConrad MeyerZSTD_FORCE_DECOMPRESS_SHORT ?= 0 104a0483764SConrad MeyerZSTD_FORCE_DECOMPRESS_LONG ?= 0 105a0483764SConrad MeyerZSTD_NO_INLINE ?= 0 106a0483764SConrad MeyerZSTD_STRIP_ERROR_STRINGS ?= 0 1070f743729SConrad Meyer 1080f743729SConrad Meyerifeq ($(ZSTD_LIB_COMPRESSION), 0) 1090f743729SConrad Meyer ZSTD_LIB_DICTBUILDER = 0 1100f743729SConrad Meyer ZSTD_LIB_DEPRECATED = 0 1110f743729SConrad Meyerendif 1120f743729SConrad Meyer 1130f743729SConrad Meyerifeq ($(ZSTD_LIB_DECOMPRESSION), 0) 1140f743729SConrad Meyer ZSTD_LEGACY_SUPPORT = 0 1150f743729SConrad Meyer ZSTD_LIB_DEPRECATED = 0 1160f743729SConrad Meyerendif 1170f743729SConrad Meyer 1180f743729SConrad Meyerifneq ($(ZSTD_LIB_COMPRESSION), 0) 1190f743729SConrad Meyer ZSTD_FILES += $(ZSTDCOMP_FILES) 1200f743729SConrad Meyerendif 1210f743729SConrad Meyer 1220f743729SConrad Meyerifneq ($(ZSTD_LIB_DECOMPRESSION), 0) 1230f743729SConrad Meyer ZSTD_FILES += $(ZSTDDECOMP_FILES) 1240f743729SConrad Meyerendif 1250f743729SConrad Meyer 1260f743729SConrad Meyerifneq ($(ZSTD_LIB_DEPRECATED), 0) 1270f743729SConrad Meyer ZSTD_FILES += $(ZDEPR_FILES) 1280f743729SConrad Meyerendif 1290f743729SConrad Meyer 1300f743729SConrad Meyerifneq ($(ZSTD_LIB_DICTBUILDER), 0) 1310f743729SConrad Meyer ZSTD_FILES += $(ZDICT_FILES) 1320f743729SConrad Meyerendif 1330c16b537SWarner Losh 134a0483764SConrad Meyerifneq ($(HUF_FORCE_DECOMPRESS_X1), 0) 135a0483764SConrad Meyer CFLAGS += -DHUF_FORCE_DECOMPRESS_X1 136a0483764SConrad Meyerendif 137a0483764SConrad Meyer 138a0483764SConrad Meyerifneq ($(HUF_FORCE_DECOMPRESS_X2), 0) 139a0483764SConrad Meyer CFLAGS += -DHUF_FORCE_DECOMPRESS_X2 140a0483764SConrad Meyerendif 141a0483764SConrad Meyer 142a0483764SConrad Meyerifneq ($(ZSTD_FORCE_DECOMPRESS_SHORT), 0) 143a0483764SConrad Meyer CFLAGS += -DZSTD_FORCE_DECOMPRESS_SHORT 144a0483764SConrad Meyerendif 145a0483764SConrad Meyer 146a0483764SConrad Meyerifneq ($(ZSTD_FORCE_DECOMPRESS_LONG), 0) 147a0483764SConrad Meyer CFLAGS += -DZSTD_FORCE_DECOMPRESS_LONG 148a0483764SConrad Meyerendif 149a0483764SConrad Meyer 150a0483764SConrad Meyerifneq ($(ZSTD_NO_INLINE), 0) 151a0483764SConrad Meyer CFLAGS += -DZSTD_NO_INLINE 152a0483764SConrad Meyerendif 153a0483764SConrad Meyer 154a0483764SConrad Meyerifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0) 155a0483764SConrad Meyer CFLAGS += -DZSTD_STRIP_ERROR_STRINGS 156a0483764SConrad Meyerendif 157a0483764SConrad Meyer 1582b9c00cbSConrad Meyerifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0) 1592b9c00cbSConrad Meyer CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API 1602b9c00cbSConrad Meyerendif 1612b9c00cbSConrad Meyer 1620c16b537SWarner Loshifneq ($(ZSTD_LEGACY_SUPPORT), 0) 1630c16b537SWarner Loshifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0) 1640f743729SConrad Meyer ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]') 1650c16b537SWarner Loshendif 1660c16b537SWarner Loshendif 1670c16b537SWarner LoshCPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT) 1680c16b537SWarner Losh 169*f7cd7fe5SConrad MeyerZSTD_LOCAL_SRC := $(notdir $(ZSTD_FILES)) 170*f7cd7fe5SConrad MeyerZSTD_LOCAL_OBJ := $(ZSTD_LOCAL_SRC:.c=.o) 171*f7cd7fe5SConrad Meyer 172*f7cd7fe5SConrad MeyerZSTD_SUBDIR := common compress decompress dictBuilder legacy deprecated 173*f7cd7fe5SConrad Meyervpath %.c $(ZSTD_SUBDIR) 174*f7cd7fe5SConrad Meyer 175*f7cd7fe5SConrad MeyerUNAME := $(shell uname) 176*f7cd7fe5SConrad Meyer 177*f7cd7fe5SConrad Meyerifndef BUILD_DIR 178*f7cd7fe5SConrad Meyerifeq ($(UNAME), Darwin) 179*f7cd7fe5SConrad Meyer HASH ?= md5 180*f7cd7fe5SConrad Meyerelse ifeq ($(UNAME), FreeBSD) 181*f7cd7fe5SConrad Meyer HASH ?= gmd5sum 182*f7cd7fe5SConrad Meyerelse ifeq ($(UNAME), OpenBSD) 183*f7cd7fe5SConrad Meyer HASH ?= md5 184*f7cd7fe5SConrad Meyerendif 185*f7cd7fe5SConrad MeyerHASH ?= md5sum 186*f7cd7fe5SConrad Meyer 187*f7cd7fe5SConrad MeyerHASH_DIR = conf_$(shell echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(ZSTD_FILES) | $(HASH) | cut -f 1 -d " " ) 188*f7cd7fe5SConrad MeyerHAVE_HASH :=$(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0) 189*f7cd7fe5SConrad Meyerifeq ($(HAVE_HASH),0) 190*f7cd7fe5SConrad Meyer $(info warning : could not find HASH ($(HASH)), needed to differentiate builds using different flags) 191*f7cd7fe5SConrad Meyer BUILD_DIR := obj/generic_noconf 192*f7cd7fe5SConrad Meyerendif 193*f7cd7fe5SConrad Meyerendif # BUILD_DIR 194*f7cd7fe5SConrad Meyer 1950c16b537SWarner Losh 1960f743729SConrad Meyer# macOS linker doesn't support -soname, and use different extension 1970c16b537SWarner Losh# see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html 198*f7cd7fe5SConrad Meyerifeq ($(UNAME), Darwin) 1990c16b537SWarner Losh SHARED_EXT = dylib 2000c16b537SWarner Losh SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT) 2010c16b537SWarner Losh SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT) 2020c16b537SWarner Losh SONAME_FLAGS = -install_name $(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER) 2030c16b537SWarner Loshelse 2040c16b537SWarner Losh SONAME_FLAGS = -Wl,-soname=libzstd.$(SHARED_EXT).$(LIBVER_MAJOR) 2050c16b537SWarner Losh SHARED_EXT = so 2060c16b537SWarner Losh SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR) 2070c16b537SWarner Losh SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER) 2080c16b537SWarner Loshendif 2090c16b537SWarner Losh 210*f7cd7fe5SConrad MeyerSET_CACHE_DIRECTORY = \ 211*f7cd7fe5SConrad Meyer $(MAKE) --no-print-directory $@ \ 212*f7cd7fe5SConrad Meyer BUILD_DIR=obj/$(HASH_DIR) \ 213*f7cd7fe5SConrad Meyer CPPFLAGS="$(CPPFLAGS)" \ 214*f7cd7fe5SConrad Meyer CFLAGS="$(CFLAGS)" \ 215*f7cd7fe5SConrad Meyer LDFLAGS="$(LDFLAGS)" 2160c16b537SWarner Losh 2170c16b537SWarner Losh 218*f7cd7fe5SConrad Meyer.PHONY: lib-all all clean install uninstall 2190c16b537SWarner Losh 22037f1f268SConrad Meyer# alias 22137f1f268SConrad Meyerlib-all: all 22237f1f268SConrad Meyer 2230c16b537SWarner Loshall: lib 2240c16b537SWarner Losh 225*f7cd7fe5SConrad Meyer.PHONY: libzstd.a # must be run every time 226*f7cd7fe5SConrad Meyer 227*f7cd7fe5SConrad Meyerifndef BUILD_DIR 228*f7cd7fe5SConrad Meyer# determine BUILD_DIR from compilation flags 229*f7cd7fe5SConrad Meyer 230*f7cd7fe5SConrad Meyerlibzstd.a: 231*f7cd7fe5SConrad Meyer $(SET_CACHE_DIRECTORY) 232*f7cd7fe5SConrad Meyer 233*f7cd7fe5SConrad Meyerelse 234*f7cd7fe5SConrad Meyer# BUILD_DIR is defined 235*f7cd7fe5SConrad Meyer 236*f7cd7fe5SConrad MeyerZSTD_STATLIB_DIR := $(BUILD_DIR)/static 237*f7cd7fe5SConrad MeyerZSTD_STATLIB := $(ZSTD_STATLIB_DIR)/libzstd.a 238*f7cd7fe5SConrad MeyerZSTD_STATLIB_OBJ := $(addprefix $(ZSTD_STATLIB_DIR)/,$(ZSTD_LOCAL_OBJ)) 239*f7cd7fe5SConrad Meyer$(ZSTD_STATLIB): ARFLAGS = rcs 240*f7cd7fe5SConrad Meyer$(ZSTD_STATLIB): | $(ZSTD_STATLIB_DIR) 241*f7cd7fe5SConrad Meyer$(ZSTD_STATLIB): $(ZSTD_STATLIB_OBJ) 2420c16b537SWarner Losh @echo compiling static library 243*f7cd7fe5SConrad Meyer $(AR) $(ARFLAGS) $@ $^ 244*f7cd7fe5SConrad Meyer 245*f7cd7fe5SConrad Meyerlibzstd.a: $(ZSTD_STATLIB) 246*f7cd7fe5SConrad Meyer cp -f $< $@ 247*f7cd7fe5SConrad Meyer 248*f7cd7fe5SConrad Meyerendif 2490c16b537SWarner Losh 25037f1f268SConrad Meyerifneq (,$(filter Windows%,$(TARGET_SYSTEM))) 2510f743729SConrad Meyer 252*f7cd7fe5SConrad MeyerLIBZSTD = dll/libzstd.dll 2530f743729SConrad Meyer$(LIBZSTD): $(ZSTD_FILES) 2540f743729SConrad Meyer @echo compiling dynamic library $(LIBVER) 255*f7cd7fe5SConrad Meyer $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll/libzstd.dll.a -shared $^ -o $@ 2560f743729SConrad Meyer 257*f7cd7fe5SConrad Meyerelse # not Windows 2580f743729SConrad Meyer 2590f743729SConrad MeyerLIBZSTD = libzstd.$(SHARED_EXT_VER) 260*f7cd7fe5SConrad Meyer.PHONY: $(LIBZSTD) # must be run every time 261*f7cd7fe5SConrad Meyer$(LIBZSTD): CFLAGS += -fPIC 262*f7cd7fe5SConrad Meyer$(LIBZSTD): LDFLAGS += -shared -fvisibility=hidden 2630f743729SConrad Meyer 264*f7cd7fe5SConrad Meyerifndef BUILD_DIR 265*f7cd7fe5SConrad Meyer# determine BUILD_DIR from compilation flags 266*f7cd7fe5SConrad Meyer 267*f7cd7fe5SConrad Meyer$(LIBZSTD): 268*f7cd7fe5SConrad Meyer $(SET_CACHE_DIRECTORY) 269*f7cd7fe5SConrad Meyer 270*f7cd7fe5SConrad Meyerelse 271*f7cd7fe5SConrad Meyer# BUILD_DIR is defined 272*f7cd7fe5SConrad Meyer 273*f7cd7fe5SConrad MeyerZSTD_DYNLIB_DIR := $(BUILD_DIR)/dynamic 274*f7cd7fe5SConrad MeyerZSTD_DYNLIB := $(ZSTD_DYNLIB_DIR)/$(LIBZSTD) 275*f7cd7fe5SConrad MeyerZSTD_DYNLIB_OBJ := $(addprefix $(ZSTD_DYNLIB_DIR)/,$(ZSTD_LOCAL_OBJ)) 276*f7cd7fe5SConrad Meyer 277*f7cd7fe5SConrad Meyer$(ZSTD_DYNLIB): | $(ZSTD_DYNLIB_DIR) 278*f7cd7fe5SConrad Meyer$(ZSTD_DYNLIB): $(ZSTD_DYNLIB_OBJ) 279*f7cd7fe5SConrad Meyer @echo compiling dynamic library $(LIBVER) 280*f7cd7fe5SConrad Meyer $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@ 281*f7cd7fe5SConrad Meyer @echo creating versioned links 282*f7cd7fe5SConrad Meyer ln -sf $@ libzstd.$(SHARED_EXT_MAJOR) 283*f7cd7fe5SConrad Meyer ln -sf $@ libzstd.$(SHARED_EXT) 284*f7cd7fe5SConrad Meyer 285*f7cd7fe5SConrad Meyer$(LIBZSTD): $(ZSTD_DYNLIB) 286*f7cd7fe5SConrad Meyer cp -f $< $@ 287*f7cd7fe5SConrad Meyer 288*f7cd7fe5SConrad Meyerendif # ifndef BUILD_DIR 289*f7cd7fe5SConrad Meyerendif # if windows 2900c16b537SWarner Losh 29137f1f268SConrad Meyer.PHONY: libzstd 2920c16b537SWarner Loshlibzstd : $(LIBZSTD) 2930c16b537SWarner Losh 29437f1f268SConrad Meyer.PHONY: lib 2950c16b537SWarner Loshlib : libzstd.a libzstd 2960c16b537SWarner Losh 297*f7cd7fe5SConrad Meyer 298*f7cd7fe5SConrad Meyer# note : do not define lib-mt or lib-release as .PHONY 299*f7cd7fe5SConrad Meyer# make does not consider implicit pattern rule for .PHONY target 300*f7cd7fe5SConrad Meyer 30137f1f268SConrad Meyer%-mt : CPPFLAGS += -DZSTD_MULTITHREAD 30237f1f268SConrad Meyer%-mt : LDFLAGS += -pthread 30337f1f268SConrad Meyer%-mt : % 30437f1f268SConrad Meyer @echo multi-threading build completed 3050c16b537SWarner Losh 30637f1f268SConrad Meyer%-release : DEBUGFLAGS := 30737f1f268SConrad Meyer%-release : % 30837f1f268SConrad Meyer @echo release build completed 30937f1f268SConrad Meyer 3100c16b537SWarner Losh 311*f7cd7fe5SConrad Meyer# Generate .h dependencies automatically 312*f7cd7fe5SConrad Meyer 313*f7cd7fe5SConrad MeyerDEPFLAGS = -MT $@ -MMD -MP -MF 314*f7cd7fe5SConrad Meyer 315*f7cd7fe5SConrad Meyer$(ZSTD_DYNLIB_DIR)/%.o : %.c $(ZSTD_DYNLIB_DIR)/%.d | $(ZSTD_DYNLIB_DIR) 316*f7cd7fe5SConrad Meyer @echo CC $@ 317*f7cd7fe5SConrad Meyer $(COMPILE.c) $(DEPFLAGS) $(ZSTD_DYNLIB_DIR)/$*.d $(OUTPUT_OPTION) $< 318*f7cd7fe5SConrad Meyer 319*f7cd7fe5SConrad Meyer$(ZSTD_STATLIB_DIR)/%.o : %.c $(ZSTD_STATLIB_DIR)/%.d | $(ZSTD_STATLIB_DIR) 320*f7cd7fe5SConrad Meyer @echo CC $@ 321*f7cd7fe5SConrad Meyer $(COMPILE.c) $(DEPFLAGS) $(ZSTD_STATLIB_DIR)/$*.d $(OUTPUT_OPTION) $< 322*f7cd7fe5SConrad Meyer 323*f7cd7fe5SConrad MeyerMKDIR ?= mkdir 324*f7cd7fe5SConrad Meyer$(BUILD_DIR) $(ZSTD_DYNLIB_DIR) $(ZSTD_STATLIB_DIR): 325*f7cd7fe5SConrad Meyer $(MKDIR) -p $@ 326*f7cd7fe5SConrad Meyer 327*f7cd7fe5SConrad MeyerDEPFILES := $(ZSTD_DYNLIB_OBJ:.o=.d) $(ZSTD_STATLIB_OBJ:.o=.d) 328*f7cd7fe5SConrad Meyer$(DEPFILES): 329*f7cd7fe5SConrad Meyer 330*f7cd7fe5SConrad Meyerinclude $(wildcard $(DEPFILES)) 331*f7cd7fe5SConrad Meyer 332*f7cd7fe5SConrad Meyer 3330c16b537SWarner Losh# Special case : building library in single-thread mode _and_ without zstdmt_compress.c 3340c16b537SWarner LoshZSTDMT_FILES = compress/zstdmt_compress.c 3350c16b537SWarner LoshZSTD_NOMT_FILES = $(filter-out $(ZSTDMT_FILES),$(ZSTD_FILES)) 3360c16b537SWarner Loshlibzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden 3370c16b537SWarner Loshlibzstd-nomt: $(ZSTD_NOMT_FILES) 3380c16b537SWarner Losh @echo compiling single-thread dynamic library $(LIBVER) 3390c16b537SWarner Losh @echo files : $(ZSTD_NOMT_FILES) 340*f7cd7fe5SConrad Meyer $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@ 3410c16b537SWarner Losh 3420c16b537SWarner Loshclean: 343*f7cd7fe5SConrad Meyer $(RM) -r *.dSYM # macOS-specific 344*f7cd7fe5SConrad Meyer $(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc 345*f7cd7fe5SConrad Meyer $(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt* 346*f7cd7fe5SConrad Meyer $(RM) -r obj/* 3470c16b537SWarner Losh @echo Cleaning library completed 3480c16b537SWarner Losh 3490c16b537SWarner Losh#----------------------------------------------------------------------------- 35037f1f268SConrad Meyer# make install is validated only for below listed environments 3510c16b537SWarner Losh#----------------------------------------------------------------------------- 352*f7cd7fe5SConrad Meyerifneq (,$(filter $(UNAME),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku)) 3530c16b537SWarner Losh 35437f1f268SConrad Meyerall: libzstd.pc 35537f1f268SConrad Meyer 356*f7cd7fe5SConrad MeyerHAS_EXPLICIT_EXEC_PREFIX := $(if $(or $(EXEC_PREFIX),$(exec_prefix)),1,) 357*f7cd7fe5SConrad Meyer 3580c16b537SWarner LoshDESTDIR ?= 3590c16b537SWarner Losh# directory variables : GNU conventions prefer lowercase 3600c16b537SWarner Losh# see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html 3610c16b537SWarner Losh# support both lower and uppercase (BSD), use uppercase in script 3620c16b537SWarner Loshprefix ?= /usr/local 3630c16b537SWarner LoshPREFIX ?= $(prefix) 3640c16b537SWarner Loshexec_prefix ?= $(PREFIX) 36537f1f268SConrad MeyerEXEC_PREFIX ?= $(exec_prefix) 36637f1f268SConrad Meyerlibdir ?= $(EXEC_PREFIX)/lib 3670c16b537SWarner LoshLIBDIR ?= $(libdir) 3680c16b537SWarner Loshincludedir ?= $(PREFIX)/include 3690c16b537SWarner LoshINCLUDEDIR ?= $(includedir) 3700c16b537SWarner Losh 371*f7cd7fe5SConrad MeyerPCINCDIR := $(patsubst $(PREFIX)%,%,$(INCLUDEDIR)) 372*f7cd7fe5SConrad MeyerPCLIBDIR := $(patsubst $(EXEC_PREFIX)%,%,$(LIBDIR)) 37337f1f268SConrad Meyer 374*f7cd7fe5SConrad Meyer# If we successfully stripped off a prefix, we'll add a reference to the 375*f7cd7fe5SConrad Meyer# relevant pc variable. 376*f7cd7fe5SConrad MeyerPCINCPREFIX := $(if $(findstring $(INCLUDEDIR),$(PCINCDIR)),,$${prefix}) 377*f7cd7fe5SConrad MeyerPCLIBPREFIX := $(if $(findstring $(LIBDIR),$(PCLIBDIR)),,$${exec_prefix}) 37837f1f268SConrad Meyer 379*f7cd7fe5SConrad Meyer# If no explicit EXEC_PREFIX was set by the caller, write it out as a reference 380*f7cd7fe5SConrad Meyer# to PREFIX, rather than as a resolved value. 381*f7cd7fe5SConrad MeyerPCEXEC_PREFIX := $(if $(HAS_EXPLICIT_EXEC_PREFIX),$(EXEC_PREFIX),$${prefix}) 38237f1f268SConrad Meyer 383*f7cd7fe5SConrad Meyerifneq (,$(filter $(UNAME),FreeBSD NetBSD DragonFly)) 3840c16b537SWarner Losh PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig 3850c16b537SWarner Loshelse 3860c16b537SWarner Losh PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig 3870c16b537SWarner Loshendif 3880c16b537SWarner Losh 389*f7cd7fe5SConrad Meyerifneq (,$(filter $(UNAME),SunOS)) 3900c16b537SWarner Losh INSTALL ?= ginstall 3910c16b537SWarner Loshelse 3920c16b537SWarner Losh INSTALL ?= install 3930c16b537SWarner Loshendif 3940c16b537SWarner Losh 3950c16b537SWarner LoshINSTALL_PROGRAM ?= $(INSTALL) 3960c16b537SWarner LoshINSTALL_DATA ?= $(INSTALL) -m 644 3970c16b537SWarner Losh 3980c16b537SWarner Losh 3990c16b537SWarner Loshlibzstd.pc: 4000c16b537SWarner Loshlibzstd.pc: libzstd.pc.in 4010c16b537SWarner Losh @echo creating pkgconfig 402*f7cd7fe5SConrad Meyer @sed $(SED_ERE_OPT) \ 403*f7cd7fe5SConrad Meyer -e 's|@PREFIX@|$(PREFIX)|' \ 404*f7cd7fe5SConrad Meyer -e 's|@EXEC_PREFIX@|$(PCEXEC_PREFIX)|' \ 405*f7cd7fe5SConrad Meyer -e 's|@INCLUDEDIR@|$(PCINCPREFIX)$(PCINCDIR)|' \ 406*f7cd7fe5SConrad Meyer -e 's|@LIBDIR@|$(PCLIBPREFIX)$(PCLIBDIR)|' \ 4070c16b537SWarner Losh -e 's|@VERSION@|$(VERSION)|' \ 4080c16b537SWarner Losh $< >$@ 4090c16b537SWarner Losh 4100f743729SConrad Meyerinstall: install-pc install-static install-shared install-includes 4110f743729SConrad Meyer @echo zstd static and shared library installed 4120f743729SConrad Meyer 4130f743729SConrad Meyerinstall-pc: libzstd.pc 414*f7cd7fe5SConrad Meyer [ -e $(DESTDIR)$(PKGCONFIGDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/ 415*f7cd7fe5SConrad Meyer $(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/ 4160f743729SConrad Meyer 417*f7cd7fe5SConrad Meyerinstall-static: 418*f7cd7fe5SConrad Meyer # only generate libzstd.a if it's not already present 419*f7cd7fe5SConrad Meyer [ -e libzstd.a ] || $(MAKE) libzstd.a-release 420*f7cd7fe5SConrad Meyer [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/ 4210f743729SConrad Meyer @echo Installing static library 422*f7cd7fe5SConrad Meyer $(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR) 4230f743729SConrad Meyer 424*f7cd7fe5SConrad Meyerinstall-shared: 425*f7cd7fe5SConrad Meyer # only generate libzstd.so if it's not already present 426*f7cd7fe5SConrad Meyer [ -e $(LIBZSTD) ] || $(MAKE) libzstd-release 427*f7cd7fe5SConrad Meyer [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/ 4280f743729SConrad Meyer @echo Installing shared library 429*f7cd7fe5SConrad Meyer $(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR) 430*f7cd7fe5SConrad Meyer ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) 431*f7cd7fe5SConrad Meyer ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT) 4320f743729SConrad Meyer 4330f743729SConrad Meyerinstall-includes: 434*f7cd7fe5SConrad Meyer [ -e $(DESTDIR)$(INCLUDEDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(INCLUDEDIR)/ 4350c16b537SWarner Losh @echo Installing includes 436*f7cd7fe5SConrad Meyer $(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR) 437*f7cd7fe5SConrad Meyer $(INSTALL_DATA) common/zstd_errors.h $(DESTDIR)$(INCLUDEDIR) 438*f7cd7fe5SConrad Meyer $(INSTALL_DATA) dictBuilder/zdict.h $(DESTDIR)$(INCLUDEDIR) 4390c16b537SWarner Losh 4400c16b537SWarner Loshuninstall: 441*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(LIBDIR)/libzstd.a 442*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT) 443*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) 444*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD) 445*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc 446*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h 447*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h 448*f7cd7fe5SConrad Meyer $(RM) $(DESTDIR)$(INCLUDEDIR)/zdict.h 4490c16b537SWarner Losh @echo zstd libraries successfully uninstalled 4500c16b537SWarner Losh 4510c16b537SWarner Loshendif 452