-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
70 lines (52 loc) · 1.68 KB
/
Copy pathMakefile
File metadata and controls
70 lines (52 loc) · 1.68 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
CC = gcc
CPPC = g++
BUILD_DIR = build/
OBJ_DIR = $(BUILD_DIR)obj/
BIN_DIR = $(BUILD_DIR)bin/
INC_DIR = include/
SRC_DIR = src/
MATH_DIR = $(SRC_DIR)math/
SONN_DIR = $(SRC_DIR)sonn/
FFNN_DIR = $(SRC_DIR)ffnn/
TEST_DIR = test/
EXECUTABLE = $(BIN_DIR)serialcore
INCLUDES = -I$(INC_DIR)
CFLAGS = -O2 -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast
CPPFLAGS = $(CFLAGS)
LDFLAGS = -lm -pthread
C_SOURCES = $(wildcard $(SRC_DIR)*.c $(MATH_DIR)*.c $(SONN_DIR)*.c $(FFNN_DIR)*.c)
OBJECTS = $(patsubst %.c,$(OBJ_DIR)%.o,$(C_SOURCES)) \
$(patsubst %.cc,$(OBJ_DIR)%.o,$(CPP_SOURCES)) \
$(patsubst %.cu,$(OBJ_DIR)%.o,$(CU_SOURCES))
TEST_SOURCES = $(wildcard $(TEST_DIR)test_*.c)
TEST_BINS = $(patsubst $(TEST_DIR)%.c,$(BIN_DIR)%,$(TEST_SOURCES))
TEST_OBJS = $(patsubst $(TEST_DIR)%.c,$(OBJ_DIR).o,$(TEST_SOURCES))
# Main executable's own translation unit; excluded from test binaries so
# each test can provide its own main().
MAIN_OBJ = $(OBJ_DIR)$(SRC_DIR)main.o
all: $(EXECUTABLE) $(TEST_BINS)
$(EXECUTABLE): $(OBJECTS)
@mkdir -p $(@D)
$(CC) $^ -o $@ $(LDFLAGS)
$(OBJ_DIR)%.o: %.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(OBJ_DIR)%.o: %.cc
@mkdir -p $(@D)
$(CPPC) $(CPPFLAGS) $(INCLUDES) -c $< -o $@
$(BIN_DIR)test_%: $(OBJ_DIR)$(TEST_DIR)test_%.o $(filter-out $(MAIN_OBJ),$(OBJECTS))
@mkdir -p $(@D)
$(CC) $< $(filter-out $(MAIN_OBJ),$(OBJECTS)) -o $@ $(LDFLAGS)
$(OBJ_DIR)$(TEST_DIR)%.o: $(TEST_DIR)%.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
run: $(EXECUTABLE)
./$(EXECUTABLE)
test: $(TEST_BINS)
@set -e; for bin in $(TEST_BINS); do \
echo "--- $$bin ---"; \
./$$bin; \
done
clean:
rm -rf $(BUILD_DIR)
.PHONY: all run test clean