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