-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
49 lines (35 loc) · 1.02 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
TARGET = libcollections
SRC = ./src
TEST = ./test
DIST = ./dist
SHARED = ./shared
INCLUDE = ./include
CC = gcc
LIBS = -lcollections
FLAGS = -I$(INCLUDE) -Wall -O3 -march=native
OBJECTS = $(patsubst $(SRC)/%.c,$(DIST)/%.o,$(wildcard $(SRC)/*.c))
TEST_BINS = $(patsubst $(TEST)/test_%.c,$(DIST)/%.test,$(wildcard $(TEST)/test_*.c))
ifeq ($(PREFIX),)
PREFIX := /usr
endif
all: $(SHARED)/$(TARGET).so
.PHONY: clean install uninstall format test
$(DIST) $(SHARED):
mkdir -p $@
$(DIST)/%.o: $(SRC)/%.c $(INCLUDE)/%.h | $(DIST)
$(CC) -fPIC -c -o $@ $< $(FLAGS)
$(SHARED)/$(TARGET).so: $(OBJECTS) | $(SHARED)
$(CC) -shared -o $@ $^ $(FLAGS)
$(DIST)/%.test: $(TEST)/test_%.c | $(DIST)
$(CC) -o $@ $< $(LIBS) $(FLAGS)
test: $(TEST_BINS) | $(DIST)
for f in $^; do ./$$f; done
clean:
rm -rf $(DIST) $(SHARED)
install:
mkdir -p $(PREFIX)/include/$(TARGET)
cp $(INCLUDE)/*.h $(PREFIX)/include/$(TARGET)
cp $(SHARED)/$(TARGET).so $(PREFIX)/lib/$(TARGET).so
uninstall:
rm -rf $(PREFIX)/include/$(TARGET)
rm -rf $(PREFIX)/lib/$(TARGET)