-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
93 lines (73 loc) · 2.54 KB
/
Makefile
File metadata and controls
93 lines (73 loc) · 2.54 KB
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
85
86
87
88
89
90
91
92
93
CC=gcc
LD=ld
AR=ar
CFLAGS=-std=gnu18 -Og -g3 -fPIC -fasynchronous-unwind-tables -pipe -I include/
LDFLAGS=-L.
ARFLAGS=rcs
C_FILES=$(shell find ./src -type f -name "*.c")
OBJS=$(C_FILES:.c=.o)
TEST_FILES=$(wildcard tests/*.c)
TEST_BINS=$(TEST_FILES:.c=.elf)
STATIC=libngi.a
SHARED=libngi.so
PREFIX?=/usr
INSTALL_HEADERS=$(PREFIX)/include/libngi
INSTALL_LIB=$(PREFIX)/lib
# Suppress "Entering directory..."
MAKEFLAGS += --no-print-directory
DOXYFILE=docs/doxyfile
LD_PATH=LD_LIBRARY_PATH="$(pwd);$LD_LIBRARY_PATH"
all: $(STATIC) $(SHARED)
release: CFLAGS=-Wall -std=gnu18 -O2 -DNDEBUG -fsanitize=leak -fsanitize=null \
-Werror=format-security -Wformat -Werror=implicit-function-declaration \
-fstack-protector-strong -fasynchronous-unwind-tables -pipe -I include/
release: $(STATIC) $(SHARED)
$(OBJS): $(C_FILES)
echo " CC $*.o"
$(CC) $(CFLAGS) -c $*.c -o $@
$(STATIC): $(OBJS)
echo " AR $(STATIC)"
$(AR) $(ARFLAGS) $(STATIC) $(OBJS)
$(SHARED): $(OBJS)
echo " LD $(SHARED)"
$(LD) -shared $(LDFLAGS) -fPIC -o $(SHARED) $(OBJS)
check: $(STATIC) $(SHARED) $(TEST_BINS)
cp -f tests/default-test.ngi tests/test.ngi
for test in $(TEST_BINS); do $(LD_PATH) ./$$test; done
#for test in $(TEST_BINS); do $(LD_PATH) valgrind ./$$test; done
$(TEST_BINS): CFLAGS=-Wall -O2 -fPIC -I include/ -I tests/ -L. -Wno-unused-function
$(TEST_BINS): $(STATIC) $(SHARED) $(TEST_FILES)
$(CC) $(CFLAGS) $(TEST_FILES) -o $@ -lngi
docs: clean-docs
echo " DOXY $(DOXYFILE)"
doxygen $(DOXYFILE)
install: release
echo " INSTALL $(INSTALL_HEADERS)"
echo " INSTALL $(INSTALL_LIB)/$(STATIC)"
echo " INSTALL $(INSTALL_LIB)/$(SHARED)"
install -d -m755 -p $(INSTALL_HEADERS)
install -d -m755 -p $(INSTALL_LIB)
for header in include/libngi/*; do install -m644 -p $$header $(INSTALL_HEADERS)/; done
install -m755 -p $(STATIC) $(INSTALL_LIB)
install -m755 -p $(SHARED) $(INSTALL_LIB)
uninstall:
echo " RM $(INSTALL_HEADERS)"
echo " RM $(INSTALL_LIB)/$(STATIC)"
echo " RM $(INSTALL_LIB)/$(SHARED)"
rm -rf $(INSTALL_HEADERS)
rm -f $(INSTALL_LIB)/$(STATIC)
rm -f $(INSTALL_LIB)/$(SHARED)
clean:
echo " RM *.o"
echo " CLEAN tests"
cp -f tests/default-test.ngi tests/test.ngi
rm -f $(OBJS) $(TEST_OBJS) $(TEST_BINS)
clean-docs:
echo " RM docs/doxygen/"
rm -rf docs/doxygen/
mrproper: clean clean-docs
echo " RM $(STATIC)"
echo " RM $(SHARED)"
rm -f $(STATIC) $(SHARED) .gdb_history
.SILENT:
.PHONY: all check release docs install uninstall clean clean-docs mrproper