-
Notifications
You must be signed in to change notification settings - Fork 5
/
Makefile
74 lines (54 loc) · 1.92 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
PROJ := portable8439
CFLAGS ?= -O3
CFLAGS += -std=c99 -Wpedantic -Wall -Wextra -Isrc -Isrc/chacha-portable -Isrc/poly1305-donna -fstack-protector
LDFLAGS :=
VERSION ?= dev-version
PREFIX ?= /usr/local
SRCDIR := src
BLDDIR := dist
TSTDIR := $(BLDDIR)/test
SOURCES := $(shell find $(SRCDIR) -type f -iname '*.c')
TESTSRC := $(filter-out test/bench.c, $(wildcard test/*.c))
TESTBIN := $(patsubst test%, $(TSTDIR)%, $(patsubst %.c, %, $(TESTSRC)))
MKDIR := mkdir -p --
RM := rm -rf --
.PHONY: all clean check install simple release uninstall
all: $(BLDDIR)/lib$(PROJ).so $(BLDDIR)/lib$(PROJ).a $(BLDDIR)/$(PROJ).c
clean:
$(RM) $(BLDDIR)
check: $(TESTBIN) $(TSTDIR)/algamized-test
for i in $^; do ./$$i; done
$(BLDDIR)/lib$(PROJ).so: $(BLDDIR)/$(PROJ).c
$(MKDIR) $(@D)
$(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS)
$(BLDDIR)/lib$(PROJ).a: $(BLDDIR)/$(PROJ).c
$(MKDIR) $(@D)
$(CC) $(CFLAGS) -c $< -o $(<:.c=.o)
$(AR) rcs $@ $(<:.c=.o)
simple: $(BLDDIR)/$(PROJ).c
$(BLDDIR)/$(PROJ).h: $(BLDDIR)/$(PROJ).c
$(BLDDIR)/$(PROJ).c:
$(MKDIR) $(@D)
bash ./algamize.sh $(BLDDIR) "$(VERSION)"
$(TSTDIR)/%: $(SOURCES) test/%.c
$(MKDIR) $(@D)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
$(TSTDIR)/algamized-test: test/algamized-test.go | $(BLDDIR)/$(PROJ).c
cd test; go build -o ../$@ ../$<
release: $(BLDDIR)/$(PROJ)-$(VERSION).zip
$(BLDDIR)/$(PROJ)-$(VERSION).zip: all
cp -a $(BLDDIR) $(PROJ)-$(VERSION)
cp LICENSE $(PROJ)-$(VERSION)
cp README.md $(PROJ)-$(VERSION)
$(RM) $(PROJ)-$(VERSION)/obj
zip -r -9 -X $@ $(PROJ)-$(VERSION)
$(RM) $(PROJ)-$(VERSION)
install: all
install -Dm755 $(BLDDIR)/lib$(PROJ).so $(DESTDIR)$(PREFIX)/lib/lib$(PROJ).so
install -Dm755 $(BLDDIR)/lib$(PROJ).a $(DESTDIR)$(PREFIX)/lib/lib$(PROJ).a
install -Dm755 $(BLDDIR)/$(PROJ).h $(DESTDIR)$(PREFIX)/include/$(PROJ).h
uninstall:
rm -f -- $(DESTDIR)$(PREFIX)/lib/lib$(PROJ).so \
$(DESTDIR)$(PREFIX)/lib/lib$(PROJ).a \
$(DESTDIR)$(PREFIX)/include/$(PROJ).h
$(V).SILENT: