1*01826a49SYabin Cui# ################################################################ 2*01826a49SYabin Cui# Copyright (c) Meta Platforms, Inc. and affiliates. 3*01826a49SYabin Cui# All rights reserved. 4*01826a49SYabin Cui# 5*01826a49SYabin Cui# This source code is licensed under both the BSD-style license (found in the 6*01826a49SYabin Cui# LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*01826a49SYabin Cui# in the COPYING file in the root directory of this source tree). 8*01826a49SYabin Cui# You may select, at your option, one of the above-listed licenses. 9*01826a49SYabin Cui# ################################################################ 10*01826a49SYabin Cui 11*01826a49SYabin Cui# default target (when running `make` with no argument) 12*01826a49SYabin Cuilib-release: 13*01826a49SYabin Cui 14*01826a49SYabin Cui# Modules 15*01826a49SYabin CuiZSTD_LIB_COMPRESSION ?= 1 16*01826a49SYabin CuiZSTD_LIB_DECOMPRESSION ?= 1 17*01826a49SYabin CuiZSTD_LIB_DICTBUILDER ?= 1 18*01826a49SYabin CuiZSTD_LIB_DEPRECATED ?= 0 19*01826a49SYabin Cui 20*01826a49SYabin Cui# Input variables for libzstd.mk 21*01826a49SYabin Cuiifeq ($(ZSTD_LIB_COMPRESSION), 0) 22*01826a49SYabin Cui ZSTD_LIB_DICTBUILDER = 0 23*01826a49SYabin Cui ZSTD_LIB_DEPRECATED = 0 24*01826a49SYabin Cuiendif 25*01826a49SYabin Cui 26*01826a49SYabin Cuiifeq ($(ZSTD_LIB_DECOMPRESSION), 0) 27*01826a49SYabin Cui ZSTD_LEGACY_SUPPORT = 0 28*01826a49SYabin Cui ZSTD_LIB_DEPRECATED = 0 29*01826a49SYabin Cuiendif 30*01826a49SYabin Cui 31*01826a49SYabin Cuiinclude libzstd.mk 32*01826a49SYabin Cui 33*01826a49SYabin CuiZSTD_FILES := $(ZSTD_COMMON_FILES) $(ZSTD_LEGACY_FILES) 34*01826a49SYabin Cui 35*01826a49SYabin Cuiifneq ($(ZSTD_LIB_COMPRESSION), 0) 36*01826a49SYabin Cui ZSTD_FILES += $(ZSTD_COMPRESS_FILES) 37*01826a49SYabin Cuiendif 38*01826a49SYabin Cui 39*01826a49SYabin Cuiifneq ($(ZSTD_LIB_DECOMPRESSION), 0) 40*01826a49SYabin Cui ZSTD_FILES += $(ZSTD_DECOMPRESS_FILES) 41*01826a49SYabin Cuiendif 42*01826a49SYabin Cui 43*01826a49SYabin Cuiifneq ($(ZSTD_LIB_DEPRECATED), 0) 44*01826a49SYabin Cui ZSTD_FILES += $(ZSTD_DEPRECATED_FILES) 45*01826a49SYabin Cuiendif 46*01826a49SYabin Cui 47*01826a49SYabin Cuiifneq ($(ZSTD_LIB_DICTBUILDER), 0) 48*01826a49SYabin Cui ZSTD_FILES += $(ZSTD_DICTBUILDER_FILES) 49*01826a49SYabin Cuiendif 50*01826a49SYabin Cui 51*01826a49SYabin CuiZSTD_LOCAL_SRC := $(notdir $(ZSTD_FILES)) 52*01826a49SYabin CuiZSTD_LOCAL_OBJ0 := $(ZSTD_LOCAL_SRC:.c=.o) 53*01826a49SYabin CuiZSTD_LOCAL_OBJ := $(ZSTD_LOCAL_OBJ0:.S=.o) 54*01826a49SYabin Cui 55*01826a49SYabin CuiVERSION := $(ZSTD_VERSION) 56*01826a49SYabin Cui 57*01826a49SYabin Cui# Note: by default, the static library is built single-threaded and dynamic library is built 58*01826a49SYabin Cui# multi-threaded. It is possible to force multi or single threaded builds by appending 59*01826a49SYabin Cui# -mt or -nomt to the build target (like lib-mt for multi-threaded, lib-nomt for single-threaded). 60*01826a49SYabin Cui 61*01826a49SYabin Cui 62*01826a49SYabin CuiCPPFLAGS_DYNLIB += -DZSTD_MULTITHREAD # dynamic library build defaults to multi-threaded 63*01826a49SYabin CuiLDFLAGS_DYNLIB += -pthread 64*01826a49SYabin CuiCPPFLAGS_STATICLIB += # static library build defaults to single-threaded 65*01826a49SYabin Cui 66*01826a49SYabin Cui 67*01826a49SYabin Cuiifeq ($(findstring GCC,$(CCVER)),GCC) 68*01826a49SYabin Cuidecompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize 69*01826a49SYabin Cuiendif 70*01826a49SYabin Cui 71*01826a49SYabin Cui 72*01826a49SYabin Cui# macOS linker doesn't support -soname, and use different extension 73*01826a49SYabin Cui# see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html 74*01826a49SYabin Cuiifeq ($(UNAME), Darwin) 75*01826a49SYabin Cui SHARED_EXT = dylib 76*01826a49SYabin Cui SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT) 77*01826a49SYabin Cui SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT) 78*01826a49SYabin Cui SONAME_FLAGS = -install_name $(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER) 79*01826a49SYabin Cuielse 80*01826a49SYabin Cui ifeq ($(UNAME), AIX) 81*01826a49SYabin Cui SONAME_FLAGS = 82*01826a49SYabin Cui else 83*01826a49SYabin Cui SONAME_FLAGS = -Wl,-soname=libzstd.$(SHARED_EXT).$(LIBVER_MAJOR) 84*01826a49SYabin Cui endif 85*01826a49SYabin Cui SHARED_EXT = so 86*01826a49SYabin Cui SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR) 87*01826a49SYabin Cui SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER) 88*01826a49SYabin Cuiendif 89*01826a49SYabin Cui 90*01826a49SYabin Cui 91*01826a49SYabin Cui.PHONY: all 92*01826a49SYabin Cuiall: lib 93*01826a49SYabin Cui 94*01826a49SYabin Cui 95*01826a49SYabin Cui.PHONY: libzstd.a # must be run every time 96*01826a49SYabin Cuilibzstd.a: CPPFLAGS += $(CPPFLAGS_STATICLIB) 97*01826a49SYabin Cui 98*01826a49SYabin CuiSET_CACHE_DIRECTORY = \ 99*01826a49SYabin Cui +$(MAKE) --no-print-directory $@ \ 100*01826a49SYabin Cui BUILD_DIR=obj/$(HASH_DIR) \ 101*01826a49SYabin Cui CPPFLAGS="$(CPPFLAGS)" \ 102*01826a49SYabin Cui CFLAGS="$(CFLAGS)" \ 103*01826a49SYabin Cui LDFLAGS="$(LDFLAGS)" 104*01826a49SYabin Cui 105*01826a49SYabin Cuiifndef BUILD_DIR 106*01826a49SYabin Cui# determine BUILD_DIR from compilation flags 107*01826a49SYabin Cui 108*01826a49SYabin Cuilibzstd.a: 109*01826a49SYabin Cui $(SET_CACHE_DIRECTORY) 110*01826a49SYabin Cui 111*01826a49SYabin Cuielse 112*01826a49SYabin Cui# BUILD_DIR is defined 113*01826a49SYabin Cui 114*01826a49SYabin CuiZSTD_STATICLIB_DIR := $(BUILD_DIR)/static 115*01826a49SYabin CuiZSTD_STATICLIB := $(ZSTD_STATICLIB_DIR)/libzstd.a 116*01826a49SYabin CuiZSTD_STATICLIB_OBJ := $(addprefix $(ZSTD_STATICLIB_DIR)/,$(ZSTD_LOCAL_OBJ)) 117*01826a49SYabin Cui$(ZSTD_STATICLIB): ARFLAGS = rcs 118*01826a49SYabin Cui$(ZSTD_STATICLIB): | $(ZSTD_STATICLIB_DIR) 119*01826a49SYabin Cui$(ZSTD_STATICLIB): $(ZSTD_STATICLIB_OBJ) 120*01826a49SYabin Cui # Check for multithread flag at target execution time 121*01826a49SYabin Cui $(if $(filter -DZSTD_MULTITHREAD,$(CPPFLAGS)),\ 122*01826a49SYabin Cui @echo compiling multi-threaded static library $(LIBVER),\ 123*01826a49SYabin Cui @echo compiling single-threaded static library $(LIBVER)) 124*01826a49SYabin Cui $(AR) $(ARFLAGS) $@ $^ 125*01826a49SYabin Cui 126*01826a49SYabin Cuilibzstd.a: $(ZSTD_STATICLIB) 127*01826a49SYabin Cui cp -f $< $@ 128*01826a49SYabin Cui 129*01826a49SYabin Cuiendif 130*01826a49SYabin Cui 131*01826a49SYabin Cuiifneq (,$(filter Windows%,$(TARGET_SYSTEM))) 132*01826a49SYabin Cui 133*01826a49SYabin CuiLIBZSTD = dll/libzstd.dll 134*01826a49SYabin Cui$(LIBZSTD): $(ZSTD_FILES) 135*01826a49SYabin Cui @echo compiling dynamic library $(LIBVER) 136*01826a49SYabin Cui $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll/libzstd.dll.a -shared $^ -o $@ 137*01826a49SYabin Cui 138*01826a49SYabin Cuielse # not Windows 139*01826a49SYabin Cui 140*01826a49SYabin CuiLIBZSTD = libzstd.$(SHARED_EXT_VER) 141*01826a49SYabin Cui.PHONY: $(LIBZSTD) # must be run every time 142*01826a49SYabin Cui$(LIBZSTD): CPPFLAGS += $(CPPFLAGS_DYNLIB) 143*01826a49SYabin Cui$(LIBZSTD): CFLAGS += -fPIC -fvisibility=hidden 144*01826a49SYabin Cui$(LIBZSTD): LDFLAGS += -shared $(LDFLAGS_DYNLIB) 145*01826a49SYabin Cui 146*01826a49SYabin Cuiifndef BUILD_DIR 147*01826a49SYabin Cui# determine BUILD_DIR from compilation flags 148*01826a49SYabin Cui 149*01826a49SYabin Cui$(LIBZSTD): 150*01826a49SYabin Cui $(SET_CACHE_DIRECTORY) 151*01826a49SYabin Cui 152*01826a49SYabin Cuielse 153*01826a49SYabin Cui# BUILD_DIR is defined 154*01826a49SYabin Cui 155*01826a49SYabin CuiZSTD_DYNLIB_DIR := $(BUILD_DIR)/dynamic 156*01826a49SYabin CuiZSTD_DYNLIB := $(ZSTD_DYNLIB_DIR)/$(LIBZSTD) 157*01826a49SYabin CuiZSTD_DYNLIB_OBJ := $(addprefix $(ZSTD_DYNLIB_DIR)/,$(ZSTD_LOCAL_OBJ)) 158*01826a49SYabin Cui 159*01826a49SYabin Cui$(ZSTD_DYNLIB): | $(ZSTD_DYNLIB_DIR) 160*01826a49SYabin Cui$(ZSTD_DYNLIB): $(ZSTD_DYNLIB_OBJ) 161*01826a49SYabin Cui# Check for multithread flag at target execution time 162*01826a49SYabin Cui $(if $(filter -DZSTD_MULTITHREAD,$(CPPFLAGS)),\ 163*01826a49SYabin Cui @echo compiling multi-threaded dynamic library $(LIBVER),\ 164*01826a49SYabin Cui @echo compiling single-threaded dynamic library $(LIBVER)) 165*01826a49SYabin Cui $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@ 166*01826a49SYabin Cui @echo creating versioned links 167*01826a49SYabin Cui ln -sf $@ libzstd.$(SHARED_EXT_MAJOR) 168*01826a49SYabin Cui ln -sf $@ libzstd.$(SHARED_EXT) 169*01826a49SYabin Cui 170*01826a49SYabin Cui$(LIBZSTD): $(ZSTD_DYNLIB) 171*01826a49SYabin Cui cp -f $< $@ 172*01826a49SYabin Cui 173*01826a49SYabin Cuiendif # ifndef BUILD_DIR 174*01826a49SYabin Cuiendif # if windows 175*01826a49SYabin Cui 176*01826a49SYabin Cui.PHONY: libzstd 177*01826a49SYabin Cuilibzstd : $(LIBZSTD) 178*01826a49SYabin Cui 179*01826a49SYabin Cui.PHONY: lib 180*01826a49SYabin Cuilib : libzstd.a libzstd 181*01826a49SYabin Cui 182*01826a49SYabin Cui 183*01826a49SYabin Cui# note : do not define lib-mt or lib-release as .PHONY 184*01826a49SYabin Cui# make does not consider implicit pattern rule for .PHONY target 185*01826a49SYabin Cui 186*01826a49SYabin Cui%-mt : CPPFLAGS_DYNLIB := -DZSTD_MULTITHREAD 187*01826a49SYabin Cui%-mt : CPPFLAGS_STATICLIB := -DZSTD_MULTITHREAD 188*01826a49SYabin Cui%-mt : LDFLAGS_DYNLIB := -pthread 189*01826a49SYabin Cui%-mt : % 190*01826a49SYabin Cui @echo multi-threaded build completed 191*01826a49SYabin Cui 192*01826a49SYabin Cui%-nomt : CPPFLAGS_DYNLIB := 193*01826a49SYabin Cui%-nomt : LDFLAGS_DYNLIB := 194*01826a49SYabin Cui%-nomt : CPPFLAGS_STATICLIB := 195*01826a49SYabin Cui%-nomt : % 196*01826a49SYabin Cui @echo single-threaded build completed 197*01826a49SYabin Cui 198*01826a49SYabin Cui%-release : DEBUGFLAGS := 199*01826a49SYabin Cui%-release : % 200*01826a49SYabin Cui @echo release build completed 201*01826a49SYabin Cui 202*01826a49SYabin Cui 203*01826a49SYabin Cui# Generate .h dependencies automatically 204*01826a49SYabin Cui 205*01826a49SYabin Cui# -MMD: compiler generates dependency information as a side-effect of compilation, without system headers 206*01826a49SYabin Cui# -MP: adds phony target for each dependency other than main file. 207*01826a49SYabin CuiDEPFLAGS = -MMD -MP 208*01826a49SYabin Cui 209*01826a49SYabin Cui# ensure that ZSTD_DYNLIB_DIR exists prior to generating %.o 210*01826a49SYabin Cui$(ZSTD_DYNLIB_DIR)/%.o : %.c | $(ZSTD_DYNLIB_DIR) 211*01826a49SYabin Cui @echo CC $@ 212*01826a49SYabin Cui $(COMPILE.c) $(DEPFLAGS) $(OUTPUT_OPTION) $< 213*01826a49SYabin Cui 214*01826a49SYabin Cui$(ZSTD_STATICLIB_DIR)/%.o : %.c | $(ZSTD_STATICLIB_DIR) 215*01826a49SYabin Cui @echo CC $@ 216*01826a49SYabin Cui $(COMPILE.c) $(DEPFLAGS) $(OUTPUT_OPTION) $< 217*01826a49SYabin Cui 218*01826a49SYabin Cui$(ZSTD_DYNLIB_DIR)/%.o : %.S | $(ZSTD_DYNLIB_DIR) 219*01826a49SYabin Cui @echo AS $@ 220*01826a49SYabin Cui $(COMPILE.S) $(OUTPUT_OPTION) $< 221*01826a49SYabin Cui 222*01826a49SYabin Cui$(ZSTD_STATICLIB_DIR)/%.o : %.S | $(ZSTD_STATICLIB_DIR) 223*01826a49SYabin Cui @echo AS $@ 224*01826a49SYabin Cui $(COMPILE.S) $(OUTPUT_OPTION) $< 225*01826a49SYabin Cui 226*01826a49SYabin CuiMKDIR ?= mkdir -p 227*01826a49SYabin Cui$(BUILD_DIR) $(ZSTD_DYNLIB_DIR) $(ZSTD_STATICLIB_DIR): 228*01826a49SYabin Cui $(MKDIR) $@ 229*01826a49SYabin Cui 230*01826a49SYabin CuiDEPFILES := $(ZSTD_DYNLIB_OBJ:.o=.d) $(ZSTD_STATICLIB_OBJ:.o=.d) 231*01826a49SYabin Cui$(DEPFILES): 232*01826a49SYabin Cui 233*01826a49SYabin Cui# The leading '-' means: do not fail is include fails (ex: directory does not exist yet) 234*01826a49SYabin Cui-include $(wildcard $(DEPFILES)) 235*01826a49SYabin Cui 236*01826a49SYabin Cui 237*01826a49SYabin Cui# Special case : build library in single-thread mode _and_ without zstdmt_compress.c 238*01826a49SYabin Cui# Note : we still need threading.c and pool.c for the dictionary builder, 239*01826a49SYabin Cui# but they will correctly behave single-threaded. 240*01826a49SYabin CuiZSTDMT_FILES = zstdmt_compress.c 241*01826a49SYabin CuiZSTD_NOMT_FILES = $(filter-out $(ZSTDMT_FILES),$(notdir $(ZSTD_FILES))) 242*01826a49SYabin Cuilibzstd-nomt: CFLAGS += -fPIC -fvisibility=hidden 243*01826a49SYabin Cuilibzstd-nomt: LDFLAGS += -shared 244*01826a49SYabin Cuilibzstd-nomt: $(ZSTD_NOMT_FILES) 245*01826a49SYabin Cui @echo compiling single-thread dynamic library $(LIBVER) 246*01826a49SYabin Cui @echo files : $(ZSTD_NOMT_FILES) 247*01826a49SYabin Cui @if echo "$(ZSTD_NOMT_FILES)" | tr ' ' '\n' | $(GREP) -q zstdmt; then \ 248*01826a49SYabin Cui echo "Error: Found zstdmt in list."; \ 249*01826a49SYabin Cui exit 1; \ 250*01826a49SYabin Cui fi 251*01826a49SYabin Cui $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@ 252*01826a49SYabin Cui 253*01826a49SYabin Cui.PHONY: clean 254*01826a49SYabin Cuiclean: 255*01826a49SYabin Cui $(RM) -r *.dSYM # macOS-specific 256*01826a49SYabin Cui $(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc 257*01826a49SYabin Cui $(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt* 258*01826a49SYabin Cui $(RM) -r obj/* 259*01826a49SYabin Cui @echo Cleaning library completed 260*01826a49SYabin Cui 261*01826a49SYabin Cui#----------------------------------------------------------------------------- 262*01826a49SYabin Cui# make install is validated only for below listed environments 263*01826a49SYabin Cui#----------------------------------------------------------------------------- 264*01826a49SYabin Cuiifneq (,$(filter $(UNAME),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku AIX MSYS_NT CYGWIN_NT)) 265*01826a49SYabin Cui 266*01826a49SYabin Cuilib: libzstd.pc 267*01826a49SYabin Cui 268*01826a49SYabin CuiHAS_EXPLICIT_EXEC_PREFIX := $(if $(or $(EXEC_PREFIX),$(exec_prefix)),1,) 269*01826a49SYabin Cui 270*01826a49SYabin CuiDESTDIR ?= 271*01826a49SYabin Cui# directory variables : GNU conventions prefer lowercase 272*01826a49SYabin Cui# see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html 273*01826a49SYabin Cui# support both lower and uppercase (BSD), use uppercase in script 274*01826a49SYabin Cuiprefix ?= /usr/local 275*01826a49SYabin CuiPREFIX ?= $(prefix) 276*01826a49SYabin Cuiexec_prefix ?= $(PREFIX) 277*01826a49SYabin CuiEXEC_PREFIX ?= $(exec_prefix) 278*01826a49SYabin Cuilibdir ?= $(EXEC_PREFIX)/lib 279*01826a49SYabin CuiLIBDIR ?= $(libdir) 280*01826a49SYabin Cuiincludedir ?= $(PREFIX)/include 281*01826a49SYabin CuiINCLUDEDIR ?= $(includedir) 282*01826a49SYabin Cui 283*01826a49SYabin CuiPCINCDIR := $(patsubst $(PREFIX)%,%,$(INCLUDEDIR)) 284*01826a49SYabin CuiPCLIBDIR := $(patsubst $(EXEC_PREFIX)%,%,$(LIBDIR)) 285*01826a49SYabin Cui 286*01826a49SYabin Cui# If we successfully stripped off a prefix, we'll add a reference to the 287*01826a49SYabin Cui# relevant pc variable. 288*01826a49SYabin CuiPCINCPREFIX := $(if $(findstring $(INCLUDEDIR),$(PCINCDIR)),,$${prefix}) 289*01826a49SYabin CuiPCLIBPREFIX := $(if $(findstring $(LIBDIR),$(PCLIBDIR)),,$${exec_prefix}) 290*01826a49SYabin Cui 291*01826a49SYabin Cui# If no explicit EXEC_PREFIX was set by the caller, write it out as a reference 292*01826a49SYabin Cui# to PREFIX, rather than as a resolved value. 293*01826a49SYabin CuiPCEXEC_PREFIX := $(if $(HAS_EXPLICIT_EXEC_PREFIX),$(EXEC_PREFIX),$${prefix}) 294*01826a49SYabin Cui 295*01826a49SYabin Cuiifneq (,$(filter $(UNAME),FreeBSD NetBSD DragonFly)) 296*01826a49SYabin Cui PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig 297*01826a49SYabin Cuielse 298*01826a49SYabin Cui PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig 299*01826a49SYabin Cuiendif 300*01826a49SYabin Cui 301*01826a49SYabin Cuiifneq (,$(filter $(UNAME),SunOS)) 302*01826a49SYabin Cui INSTALL ?= ginstall 303*01826a49SYabin Cuielse 304*01826a49SYabin Cui INSTALL ?= install 305*01826a49SYabin Cuiendif 306*01826a49SYabin Cui 307*01826a49SYabin CuiINSTALL_PROGRAM ?= $(INSTALL) 308*01826a49SYabin CuiINSTALL_DATA ?= $(INSTALL) -m 644 309*01826a49SYabin Cui 310*01826a49SYabin Cui 311*01826a49SYabin Cuilibzstd.pc: libzstd.pc.in 312*01826a49SYabin Cui @echo creating pkgconfig 313*01826a49SYabin Cui @sed \ 314*01826a49SYabin Cui -e 's|@PREFIX@|$(PREFIX)|' \ 315*01826a49SYabin Cui -e 's|@EXEC_PREFIX@|$(PCEXEC_PREFIX)|' \ 316*01826a49SYabin Cui -e 's|@INCLUDEDIR@|$(PCINCPREFIX)$(PCINCDIR)|' \ 317*01826a49SYabin Cui -e 's|@LIBDIR@|$(PCLIBPREFIX)$(PCLIBDIR)|' \ 318*01826a49SYabin Cui -e 's|@VERSION@|$(VERSION)|' \ 319*01826a49SYabin Cui -e 's|@LIBS_PRIVATE@|$(LDFLAGS_DYNLIB)|' \ 320*01826a49SYabin Cui $< >$@ 321*01826a49SYabin Cui 322*01826a49SYabin Cui.PHONY: install 323*01826a49SYabin Cuiinstall: install-pc install-static install-shared install-includes 324*01826a49SYabin Cui @echo zstd static and shared library installed 325*01826a49SYabin Cui 326*01826a49SYabin Cui.PHONY: install-pc 327*01826a49SYabin Cuiinstall-pc: libzstd.pc 328*01826a49SYabin Cui [ -e $(DESTDIR)$(PKGCONFIGDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/ 329*01826a49SYabin Cui $(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/ 330*01826a49SYabin Cui 331*01826a49SYabin Cui.PHONY: install-static 332*01826a49SYabin Cuiinstall-static: 333*01826a49SYabin Cui # only generate libzstd.a if it's not already present 334*01826a49SYabin Cui [ -e libzstd.a ] || $(MAKE) libzstd.a-release 335*01826a49SYabin Cui [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/ 336*01826a49SYabin Cui @echo Installing static library 337*01826a49SYabin Cui $(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR) 338*01826a49SYabin Cui 339*01826a49SYabin Cui.PHONY: install-shared 340*01826a49SYabin Cuiinstall-shared: 341*01826a49SYabin Cui # only generate libzstd.so if it's not already present 342*01826a49SYabin Cui [ -e $(LIBZSTD) ] || $(MAKE) libzstd-release 343*01826a49SYabin Cui [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/ 344*01826a49SYabin Cui @echo Installing shared library 345*01826a49SYabin Cui $(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR) 346*01826a49SYabin Cui ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) 347*01826a49SYabin Cui ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT) 348*01826a49SYabin Cui 349*01826a49SYabin Cui.PHONY: install-includes 350*01826a49SYabin Cuiinstall-includes: 351*01826a49SYabin Cui [ -e $(DESTDIR)$(INCLUDEDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(INCLUDEDIR)/ 352*01826a49SYabin Cui @echo Installing includes 353*01826a49SYabin Cui $(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR) 354*01826a49SYabin Cui $(INSTALL_DATA) zstd_errors.h $(DESTDIR)$(INCLUDEDIR) 355*01826a49SYabin Cui $(INSTALL_DATA) zdict.h $(DESTDIR)$(INCLUDEDIR) 356*01826a49SYabin Cui 357*01826a49SYabin Cui.PHONY: uninstall 358*01826a49SYabin Cuiuninstall: 359*01826a49SYabin Cui $(RM) $(DESTDIR)$(LIBDIR)/libzstd.a 360*01826a49SYabin Cui $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT) 361*01826a49SYabin Cui $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) 362*01826a49SYabin Cui $(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD) 363*01826a49SYabin Cui $(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc 364*01826a49SYabin Cui $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h 365*01826a49SYabin Cui $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h 366*01826a49SYabin Cui $(RM) $(DESTDIR)$(INCLUDEDIR)/zdict.h 367*01826a49SYabin Cui @echo zstd libraries successfully uninstalled 368*01826a49SYabin Cui 369*01826a49SYabin Cuiendif 370