Merge remote-tracking branch 'origin/master' into feature/performance
[sha1collisiondetection.git] / Makefile
blob8c014e511b35c9791284fcfc88eced7246e0f460
1 ##
2 ## Copyright 2017 Marc Stevens <marc@marc-stevens.nl>, Dan Shumow (danshu@microsoft.com)
3 ## Distributed under the MIT Software License.
4 ## See accompanying file LICENSE.txt or copy at
5 ## https://opensource.org/licenses/MIT
6 ##
8 # dynamic library compatibility
9 # 1. If the library source code has changed at all since the last update,
10 # then increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
11 # 2. If any interfaces have been added, removed, or changed since the last update,
12 # increment current, and set revision to 0.
13 # 3. If any interfaces have been added since the last public release, then increment age.
14 # 4. If any interfaces have been removed or changed since the last public release,
15 # then set age to 0.
16 LIBCOMPAT=0:0:0
18 PREFIX ?= /usr/local
19 BINDIR=$(PREFIX)/bin
20 LIBDIR=$(PREFIX)/lib
21 INCLUDEDIR=$(PREFIX)/include/sha1dc
23 CC ?= gcc
24 LD ?= gcc
25 CC_DEP ?= $(CC)
27 ifeq ($(shell uname),Darwin)
28 LIBTOOL ?= glibtool
29 INSTALL ?= install
30 else
31 LIBTOOL ?= libtool
32 INSTALL ?= install
33 endif
36 CFLAGS=-O2 -Wall -Werror -Wextra -pedantic -std=c90 -Ilib
37 LDFLAGS=
39 LT_CC:=$(LIBTOOL) --tag=CC --mode=compile $(CC)
40 LT_CC_DEP:=$(CC)
41 LT_LD:=$(LIBTOOL) --tag=CC --mode=link $(CC)
42 LT_INSTALL:=$(LIBTOOL) --tag=CC --mode=install $(INSTALL)
44 MKDIR=mkdir -p
46 ifneq (, $(shell which $(LIBTOOL) 2>/dev/null ))
47 CC:=$(LT_CC)
48 CC_DEP:=$(LT_CC_DEP)
49 LD:=$(LT_LD)
50 LDLIB:=$(LT_LD)
51 LIB_EXT:=la
52 else
53 LIB_EXT:=a
54 LD:=$(CC)
55 LT_INSTALL:=$(INSTALL)
56 endif
58 CFLAGS+=$(TARGETCFLAGS)
59 LDFLAGS+=$(TARGETLDFLAGS)
62 LIB_DIR=lib
63 LIB_DEP_DIR=dep_lib
64 LIB_OBJ_DIR=obj_lib
65 SRC_DIR=src
66 SRC_DEP_DIR=dep_src
67 SRC_OBJ_DIR=obj_src
69 FS_LIB=$(wildcard $(LIB_DIR)/*.c)
70 FS_SRC=$(wildcard $(SRC_DIR)/*.c)
71 FS_OBJ_LIB=$(FS_LIB:$(LIB_DIR)/%.c=$(LIB_OBJ_DIR)/%.lo)
72 FS_OBJ_SRC=$(FS_SRC:$(SRC_DIR)/%.c=$(SRC_OBJ_DIR)/%.lo)
73 FS_OBJ=$(FS_OBJ_SRC) $(FS_OBJ_LIB)
74 FS_DEP_LIB=$(FS_LIB:$(LIB_DIR)/%.c=$(LIB_DEP_DIR)/%.d)
75 FS_DEP_SRC=$(FS_SRC:$(SRC_DIR)/%.c=$(SRC_DEP_DIR)/%.d)
76 FS_DEP=$(FS_DEP_SRC) $(FS_DEP_LIB)
78 .SUFFIXES: .c .d
80 .PHONY: all
81 all: library tools
83 .PHONY: install
84 install: all
85 $(LT_INSTALL) -d $(LIBDIR) $(BINDIR) $(INCLUDEDIR)
86 $(LT_INSTALL) bin/libsha1detectcoll.$(LIB_EXT) $(LIBDIR)/libsha1detectcoll.$(LIB_EXT)
87 $(LT_INSTALL) lib/sha1.h $(INCLUDEDIR)/sha1.h
88 $(LT_INSTALL) bin/sha1dcsum $(BINDIR)/sha1dcsum
89 $(LT_INSTALL) bin/sha1dcsum_partialcoll $(BINDIR)/sha1dcsum_partialcoll
91 .PHONY: uninstall
92 uninstall:
93 -$(RM) $(BINDIR)/sha1dcsum
94 -$(RM) $(BINDIR)/sha1dcsum_partialcoll
95 -$(RM) $(INCLUDEDIR)/sha1.h
96 -$(RM) $(LIBDIR)/libsha1detectcoll.$(LIB_EXT)
98 .PHONY: clean
99 clean:
100 -find . -type f -name '*.a' -print -delete
101 -find . -type f -name '*.d' -print -delete
102 -find . -type f -name '*.o' -print -delete
103 -find . -type f -name '*.la' -print -delete
104 -find . -type f -name '*.lo' -print -delete
105 -find . -type f -name '*.so' -print -delete
106 -find . -type d -name '.libs' -print | xargs rm -rv
107 -rm -rf bin
109 .PHONY: test
110 test: tools
111 bin/sha1dcsum test/*
112 bin/sha1dcsum_partialcoll test/*
114 .PHONY: check
115 check: test
117 .PHONY: tools
118 tools: sha1dcsum sha1dcsum_partialcoll
120 .PHONY: sha1dcsum
121 sha1dcsum: bin/sha1dcsum
123 .PHONY: sha1dcsum_partialcoll
124 sha1dcsum_partialcoll: bin/sha1dcsum_partialcoll
127 .PHONY: library
128 library: bin/libsha1detectcoll.$(LIB_EXT)
130 bin/libsha1detectcoll.la: $(FS_OBJ_LIB)
131 $(MKDIR) $(shell dirname $@) && $(LDLIB) $(LDFLAGS) $(FS_OBJ_LIB) -rpath $(LIBDIR) -version-info $(LIBCOMPAT) -o bin/libsha1detectcoll.la
133 bin/libsha1detectcoll.a: $(FS_OBJ_LIB)
134 $(MKDIR) $(shell dirname $@) && $(AR) cru bin/libsha1detectcoll.a $(FS_OBJ_LIB)
136 bin/sha1dcsum: $(FS_OBJ_SRC) bin/libsha1detectcoll.$(LIB_EXT)
137 $(LD) $(LDFLAGS) $(FS_OBJ_SRC) -Lbin -lsha1detectcoll -o bin/sha1dcsum
139 bin/sha1dcsum_partialcoll: $(FS_OBJ_SRC) bin/libsha1detectcoll.$(LIB_EXT)
140 $(LD) $(LDFLAGS) $(FS_OBJ_SRC) -Lbin -lsha1detectcoll -o bin/sha1dcsum_partialcoll
143 $(SRC_DEP_DIR)/%.d: $(SRC_DIR)/%.c
144 $(MKDIR) $(shell dirname $@) && $(CC_DEP) $(CFLAGS) -M -MF $@ $<
146 $(SRC_OBJ_DIR)/%.lo ${SRC_OBJ_DIR}/%.o: ${SRC_DIR}/%.c ${SRC_DEP_DIR}/%.d
147 $(MKDIR) $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
150 $(LIB_DEP_DIR)/%.d: $(LIB_DIR)/%.c
151 $(MKDIR) $(shell dirname $@) && $(CC_DEP) $(CFLAGS) -M -MF $@ $<
153 $(LIB_OBJ_DIR)/%.lo $(LIB_OBJ_DIR)/%.o: $(LIB_DIR)/%.c $(LIB_DEP_DIR)/%.d
154 $(MKDIR) $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
156 -include $(FS_DEP)