-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
84 lines (69 loc) · 2.35 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
75
76
77
78
79
80
81
82
83
84
MKDIR := mkdir -p --
RMDIR := rm -Rf --
RM := rm --
PRINTF := printf --
CP := cp --
GITCLONETAG := git clone --single-branch -c advice.detachedHead=false --branch
EXTRA_CFLAGS :=
WARNINGS := -Wall -Wextra -Wfloat-equal -Wundef
ERRORS := -Werror=implicit-int -Werror=implicit-function-declaration
CFLAGS := $(WARNINGS) $(ERRORS) -std=c99 $(EXTRA_CFLAGS) -D_POSIX_C_SOURCE
LLVM_FLAGS := $(shell llvm-config --cflags --libs all)
LLVM_LIBS := $(shell llvm-config --system-libs --ldflags --libs all)
CURRENT_CFLAGS :=
BIN := ./bin
INCLUDE := ./include
SRC := ./src
SRCS := $(wildcard $(SRC)/*.c)
OUT := $(BIN)/ansllc
TESTSRC := ./tests
TESTSRCS := $(wildcard $(TESTSRC)/*.c)
TESTBIN := ./testbin
TESTOUT := $(TESTBIN)/test
LIBS := ./libs
LIBHEADERS := ./libheaders
HBLIB := $(LIBS)/libhashedbrown.a
HBSRC := ./.hashedbrown
HBVERSION := 'v1.0.0'
UTF8LIB := $(LIBS)/libutf8encoder.a
UTF8SRC := ./.utf8encoder
UTF8VERSION := 'v1.1.1'
INCLUDEFLAGS := -I$(INCLUDE) -I$(LIBHEADERS)
LIB_FLAGS := -L$(LIBS) -lutf8encoder -lhashedbrown
DESTDIR := /usr/local/bin
.PHONY: release debug tests install clean
release: CURRENT_CFLAGS += -O3 -DNDEBUG
release: $(OUT)
debug: CURRENT_CFLAGS += -g3 -O0 -DDEBUG
debug: $(OUT) tests
$(OUT): $(SRCS) $(HBLIB) $(UTF8LIB)
$(MKDIR) $(BIN)
$(CC) $(CFLAGS) $(CURRENT_CFLAGS) $(INCLUDEFLAGS) $(LLVM_FLAGS) $(SRCS) -o $@ $(LLVM_LIBS) $(LIB_FLAGS)
$(HBLIB):
ifeq (,$(wildcard $(HBLIB)))
$(MKDIR) $(LIBS) $(LIBHEADERS)
$(GITCLONETAG) $(HBVERSION) https://github.com/penguin-teal/hashedbrown $(HBSRC)
make -C$(HBSRC) release CC=$(CC)
cp $(HBSRC)/bin/libhashedbrown.a $(HBLIB)
cp $(HBSRC)/include/hashedbrown.h $(LIBHEADERS)/hashedbrown.h
$(RMDIR) $(HBSRC)
endif
$(UTF8LIB):
ifeq (,$(wilcard $(UTF8LIB)))
$(MKDIR) $(LIBS) $(LIBHEADERS)
$(GITCLONETAG) $(UTF8VERSION) https://github.com/penguin-teal/utf8encoder $(UTF8SRC)
make -C$(UTF8SRC) static CC=$(CC)
cp $(UTF8SRC)/bin/libutf8encoder.a $(UTF8LIB)
cp $(UTF8SRC)/include/utf8encoder.h $(LIBHEADERS)/utf8encoder.h
$(RMDIR) $(UTF8SRC)
endif
tests: $(TESTOUT)
$(TESTOUT)
$(RM) $^
$(TESTOUT): $(TESTSRCS) $(SRC)/mangleName.c
$(MKDIR) $(TESTBIN)
$(CC) $(CFLAGS) $(INCLUDEFLAGS) -g3 -O0 -DDEBUG $^ -o $@ $(LIB_FLAGS)
install:
$(CP) $(OUT) $(DESTDIR)/ansllc
clean:
$(RMDIR) $(TESTBIN) $(BIN) $(LIBS) $(HBSRC) $(UTF8SRC) $(LIBHEADERS)