1 # ################################################################ 2 # LZ4 - Makefile 3 # Copyright (C) Yann Collet 2011-present 4 # All rights reserved. 5 # 6 # BSD license 7 # Redistribution and use in source and binary forms, with or without modification, 8 # are permitted provided that the following conditions are met: 9 # 10 # * Redistributions of source code must retain the above copyright notice, this 11 # list of conditions and the following disclaimer. 12 # 13 # * Redistributions in binary form must reproduce the above copyright notice, this 14 # list of conditions and the following disclaimer in the documentation and/or 15 # other materials provided with the distribution. 16 # 17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 21 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 24 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 # 28 # You can contact the author at : 29 # - LZ4 source repository : https://github.com/lz4/lz4 30 # - LZ4 forum froup : https://groups.google.com/forum/#!forum/lz4c 31 # ################################################################ 32 33 LZ4DIR = lib 34 PRGDIR = programs 35 TESTDIR = tests 36 EXDIR = examples 37 38 39 # Define nul output 40 ifneq (,$(filter Windows%,$(OS))) 41 EXT = .exe 42 VOID = nul 43 else 44 EXT = 45 VOID = /dev/null 46 endif 47 48 49 .PHONY: default 50 default: lib-release lz4-release 51 52 .PHONY: all 53 all: allmost manuals 54 55 .PHONY: allmost 56 allmost: lib lz4 examples 57 58 .PHONY: lib lib-release liblz4.a 59 lib: liblz4.a 60 lib lib-release liblz4.a: 61 @$(MAKE) -C $(LZ4DIR) $@ 62 63 .PHONY: lz4 lz4-release 64 lz4 : liblz4.a 65 lz4-release : lib-release 66 lz4 lz4-release : 67 @$(MAKE) -C $(PRGDIR) $@ 68 @cp $(PRGDIR)/lz4$(EXT) . 69 70 .PHONY: examples 71 examples: liblz4.a 72 $(MAKE) -C $(EXDIR) all 73 74 .PHONY: manuals 75 manuals: 76 @$(MAKE) -C contrib/gen_manual $@ 77 78 .PHONY: clean 79 clean: 80 @$(MAKE) -C $(LZ4DIR) $@ > $(VOID) 81 @$(MAKE) -C $(PRGDIR) $@ > $(VOID) 82 @$(MAKE) -C $(TESTDIR) $@ > $(VOID) 83 @$(MAKE) -C $(EXDIR) $@ > $(VOID) 84 @$(MAKE) -C contrib/gen_manual $@ > $(VOID) 85 @$(RM) lz4$(EXT) 86 @echo Cleaning completed 87 88 89 #----------------------------------------------------------------------------- 90 # make install is validated only for Linux, OSX, BSD, Hurd and Solaris targets 91 #----------------------------------------------------------------------------- 92 ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku MidnightBSD)) 93 HOST_OS = POSIX 94 95 .PHONY: install uninstall 96 install uninstall: 97 @$(MAKE) -C $(LZ4DIR) $@ 98 @$(MAKE) -C $(PRGDIR) $@ 99 100 travis-install: 101 $(MAKE) -j1 install DESTDIR=~/install_test_dir 102 103 cmake: 104 @cd contrib/cmake_unofficial; cmake $(CMAKE_PARAMS) CMakeLists.txt; $(MAKE) 105 106 endif 107 108 109 ifneq (,$(filter MSYS%,$(shell uname))) 110 HOST_OS = MSYS 111 CMAKE_PARAMS = -G"MSYS Makefiles" 112 endif 113 114 115 #------------------------------------------------------------------------ 116 #make tests validated only for MSYS, Linux, OSX, kFreeBSD and Hurd targets 117 #------------------------------------------------------------------------ 118 ifneq (,$(filter $(HOST_OS),MSYS POSIX)) 119 120 .PHONY: list 121 list: 122 @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs 123 124 .PHONY: check 125 check: 126 $(MAKE) -C $(TESTDIR) test-lz4-essentials 127 128 .PHONY: test 129 test: 130 $(MAKE) -C $(TESTDIR) $@ 131 $(MAKE) -C $(EXDIR) $@ 132 133 clangtest: clean 134 clang -v 135 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(LZ4DIR) all CC=clang 136 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(PRGDIR) all CC=clang 137 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(TESTDIR) all CC=clang 138 139 clangtest-native: clean 140 clang -v 141 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(LZ4DIR) all CC=clang 142 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(PRGDIR) native CC=clang 143 @CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) -C $(TESTDIR) native CC=clang 144 145 usan: clean 146 CC=clang CFLAGS="-O3 -g -fsanitize=undefined" $(MAKE) test FUZZER_TIME="-T30s" NB_LOOPS=-i1 147 148 usan32: clean 149 CFLAGS="-m32 -O3 -g -fsanitize=undefined" $(MAKE) test FUZZER_TIME="-T30s" NB_LOOPS=-i1 150 151 staticAnalyze: clean 152 CFLAGS=-g scan-build --status-bugs -v $(MAKE) all 153 154 platformTest: clean 155 @echo "\n ---- test lz4 with $(CC) compiler ----" 156 @$(CC) -v 157 CFLAGS="-O3 -Werror" $(MAKE) -C $(LZ4DIR) all 158 CFLAGS="-O3 -Werror -static" $(MAKE) -C $(PRGDIR) all 159 CFLAGS="-O3 -Werror -static" $(MAKE) -C $(TESTDIR) all 160 $(MAKE) -C $(TESTDIR) test-platform 161 162 .PHONY: versionsTest 163 versionsTest: clean 164 $(MAKE) -C $(TESTDIR) $@ 165 166 gpptest gpptest32: CC = "$(CXX) -Wno-deprecated" 167 gpptest gpptest32: CFLAGS = -O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror 168 gpptest32: CFLAGS += -m32 169 gpptest gpptest32: clean 170 $(CXX) -v 171 CC=$(CC) $(MAKE) -C $(LZ4DIR) all CFLAGS="$(CFLAGS)" 172 CC=$(CC) $(MAKE) -C $(PRGDIR) all CFLAGS="$(CFLAGS)" 173 CC=$(CC) $(MAKE) -C $(TESTDIR) all CFLAGS="$(CFLAGS)" 174 175 ctocpptest: LIBCC="$(CC)" 176 ctocpptest: TESTCC="$(CXX)" 177 ctocpptest: CFLAGS="" 178 ctocpptest: clean 179 CC=$(LIBCC) $(MAKE) -C $(LZ4DIR) CFLAGS="$(CFLAGS)" all 180 CC=$(LIBCC) $(MAKE) -C $(TESTDIR) CFLAGS="$(CFLAGS)" lz4.o lz4hc.o lz4frame.o 181 CC=$(TESTCC) $(MAKE) -C $(TESTDIR) CFLAGS="$(CFLAGS)" all 182 183 c_standards: clean 184 CFLAGS="-std=c90 -Werror" $(MAKE) clean allmost 185 CFLAGS="-std=gnu90 -Werror" $(MAKE) clean allmost 186 CFLAGS="-std=c99 -Werror" $(MAKE) clean allmost 187 CFLAGS="-std=gnu99 -Werror" $(MAKE) clean allmost 188 CFLAGS="-std=c11 -Werror" $(MAKE) clean allmost 189 190 endif 191