Makefile 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. # ################################################################
  2. # Copyright (c) 2015-present, Yann Collet, Facebook, Inc.
  3. # All rights reserved.
  4. #
  5. # This source code is licensed under both the BSD-style license (found in the
  6. # LICENSE file in the root directory of this source tree) and the GPLv2 (found
  7. # in the COPYING file in the root directory of this source tree).
  8. # ################################################################
  9. # Version numbers
  10. LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
  11. LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
  12. LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
  13. LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
  14. LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
  15. LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
  16. LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
  17. LIBVER := $(shell echo $(LIBVER_SCRIPT))
  18. VERSION?= $(LIBVER)
  19. CPPFLAGS+= -I. -I./common -DXXH_NAMESPACE=ZSTD_
  20. CFLAGS ?= -O3
  21. DEBUGFLAGS = -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
  22. -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
  23. -Wstrict-prototypes -Wundef -Wpointer-arith -Wformat-security \
  24. -Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
  25. -Wredundant-decls
  26. CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
  27. FLAGS = $(CPPFLAGS) $(CFLAGS)
  28. ZSTD_FILES := $(sort $(wildcard common/*.c compress/*.c decompress/*.c dictBuilder/*.c deprecated/*.c))
  29. ZSTD_LEGACY_SUPPORT ?= 4
  30. ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
  31. ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
  32. ZSTD_FILES += $(shell ls legacy/*.c | grep 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
  33. endif
  34. CPPFLAGS += -I./legacy
  35. endif
  36. CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
  37. ZSTD_OBJ := $(patsubst %.c,%.o,$(ZSTD_FILES))
  38. # OS X linker doesn't support -soname, and use different extension
  39. # see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
  40. ifeq ($(shell uname), Darwin)
  41. SHARED_EXT = dylib
  42. SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
  43. SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
  44. SONAME_FLAGS = -install_name $(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER)
  45. else
  46. SONAME_FLAGS = -Wl,-soname=libzstd.$(SHARED_EXT).$(LIBVER_MAJOR)
  47. SHARED_EXT = so
  48. SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
  49. SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
  50. endif
  51. LIBZSTD = libzstd.$(SHARED_EXT_VER)
  52. .PHONY: default all clean install uninstall
  53. default: lib-release
  54. all: lib
  55. libzstd.a: ARFLAGS = rcs
  56. libzstd.a: $(ZSTD_OBJ)
  57. @echo compiling static library
  58. @$(AR) $(ARFLAGS) $@ $^
  59. libzstd.a-mt: CPPFLAGS += -DZSTD_MULTITHREAD
  60. libzstd.a-mt: libzstd.a
  61. $(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
  62. $(LIBZSTD): $(ZSTD_FILES)
  63. @echo compiling dynamic library $(LIBVER)
  64. ifneq (,$(filter Windows%,$(OS)))
  65. @$(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -shared $^ -o dll\libzstd.dll
  66. dlltool -D dll\libzstd.dll -d dll\libzstd.def -l dll\libzstd.lib
  67. else
  68. @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
  69. @echo creating versioned links
  70. @ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
  71. @ln -sf $@ libzstd.$(SHARED_EXT)
  72. endif
  73. libzstd : $(LIBZSTD)
  74. libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD
  75. libzstd-mt : libzstd
  76. lib: libzstd.a libzstd
  77. lib-mt: CPPFLAGS += -DZSTD_MULTITHREAD
  78. lib-mt: lib
  79. lib-release lib-release-mt: DEBUGFLAGS :=
  80. lib-release: lib
  81. lib-release-mt: lib-mt
  82. # Special case : building library in single-thread mode _and_ without zstdmt_compress.c
  83. ZSTDMT_FILES = compress/zstdmt_compress.c
  84. ZSTD_NOMT_FILES = $(filter-out $(ZSTDMT_FILES),$(ZSTD_FILES))
  85. libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
  86. libzstd-nomt: $(ZSTD_NOMT_FILES)
  87. @echo compiling single-thread dynamic library $(LIBVER)
  88. @echo files : $(ZSTD_NOMT_FILES)
  89. @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
  90. clean:
  91. @$(RM) -r *.dSYM # Mac OS-X specific
  92. @$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
  93. @$(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
  94. @$(RM) common/*.o compress/*.o decompress/*.o dictBuilder/*.o legacy/*.o deprecated/*.o
  95. @echo Cleaning library completed
  96. #-----------------------------------------------------------------------------
  97. # make install is validated only for Linux, OSX, BSD, Hurd and Solaris targets
  98. #-----------------------------------------------------------------------------
  99. ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS))
  100. DESTDIR ?=
  101. # directory variables : GNU conventions prefer lowercase
  102. # see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
  103. # support both lower and uppercase (BSD), use uppercase in script
  104. prefix ?= /usr/local
  105. PREFIX ?= $(prefix)
  106. exec_prefix ?= $(PREFIX)
  107. libdir ?= $(exec_prefix)/lib
  108. LIBDIR ?= $(libdir)
  109. includedir ?= $(PREFIX)/include
  110. INCLUDEDIR ?= $(includedir)
  111. ifneq (,$(filter $(shell uname),OpenBSD FreeBSD NetBSD DragonFly))
  112. PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
  113. else
  114. PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
  115. endif
  116. ifneq (,$(filter $(shell uname),SunOS))
  117. INSTALL ?= ginstall
  118. else
  119. INSTALL ?= install
  120. endif
  121. INSTALL_PROGRAM ?= $(INSTALL)
  122. INSTALL_DATA ?= $(INSTALL) -m 644
  123. libzstd.pc:
  124. libzstd.pc: libzstd.pc.in
  125. @echo creating pkgconfig
  126. @sed -e 's|@PREFIX@|$(PREFIX)|' \
  127. -e 's|@LIBDIR@|$(LIBDIR)|' \
  128. -e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \
  129. -e 's|@VERSION@|$(VERSION)|' \
  130. $< >$@
  131. install: libzstd.a libzstd libzstd.pc
  132. @$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/ $(DESTDIR)$(INCLUDEDIR)/
  133. @$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
  134. @echo Installing libraries
  135. @$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
  136. @$(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR)
  137. @ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
  138. @ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
  139. @echo Installing includes
  140. @$(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR)
  141. @$(INSTALL_DATA) common/zstd_errors.h $(DESTDIR)$(INCLUDEDIR)
  142. @$(INSTALL_DATA) deprecated/zbuff.h $(DESTDIR)$(INCLUDEDIR) # prototypes generate deprecation warnings
  143. @$(INSTALL_DATA) dictBuilder/zdict.h $(DESTDIR)$(INCLUDEDIR)
  144. @echo zstd static and shared library installed
  145. uninstall:
  146. @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.a
  147. @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
  148. @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
  149. @$(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD)
  150. @$(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc
  151. @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h
  152. @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h
  153. @$(RM) $(DESTDIR)$(INCLUDEDIR)/zbuff.h # Deprecated streaming functions
  154. @$(RM) $(DESTDIR)$(INCLUDEDIR)/zdict.h
  155. @echo zstd libraries successfully uninstalled
  156. endif