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