-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmakefile
More file actions
96 lines (70 loc) · 2.53 KB
/
makefile
File metadata and controls
96 lines (70 loc) · 2.53 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
94
95
96
# Config
CXXC=clang++
CXXFLAGS=-std=c++11 -Wall
SRC_DIR=src
OBJ_DIR=obj
TESTS_DIR=tests
EXECUTABLE=stackjit
LIBRARY=libstackjit.a
LIBRARY_OUTPUT_FOLDER=lib
ASSEMBLER_DIR=assembler
RTLIB_DIR=rtlib
TEST_WITH_VALGRIND=0
# Rules
_FOLDERS=$(sort $(dir $(wildcard $(SRC_DIR)/*/)))
FOLDERS=$(patsubst $(SRC_DIR)/%,$(OBJ_DIR)/%,$(_FOLDERS))
_FOLDERS=$(sort $(dir $(wildcard $(SRC_DIR)/*/*/)))
FOLDERS += $(patsubst $(SRC_DIR)/%,$(OBJ_DIR)/%,$(_FOLDERS))
SOURCES=$(wildcard $(SRC_DIR)/*.cpp)
HEADERS=$(wildcard $(SRC_DIR)/*.h)
SOURCES += $(wildcard $(SRC_DIR)/*/*.cpp)
HEADERS += $(wildcard $(SRC_DIR)/*/*.h)
SOURCES += $(wildcard $(SRC_DIR)/*/*/*.cpp)
HEADERS += $(wildcard $(SRC_DIR)/*/*/*.h)
TEMPLATE_HEADERS=$(wildcard $(SRC_DIR)/*.hpp)
_OBJECTS=$(SOURCES:.cpp=.o)
OBJECTS=$(patsubst $(SRC_DIR)/%,$(OBJ_DIR)/%,$(_OBJECTS))
TEST_RUNNERS_DIR=$(TESTS_DIR)/runners
MAIN_OBJ=$(OBJ_DIR)/$(EXECUTABLE).o
TEST_OBJECTS=$(filter-out $(MAIN_OBJ), $(OBJECTS))
TESTS=$(wildcard $(TESTS_DIR)/*-test.h)
TEST_EXECUTABLES=$(patsubst $(TESTS_DIR)/%.h,$(TEST_RUNNERS_DIR)/%, $(TESTS))
RTLIB_FILES=$(wildcard $(RTLIB_DIR)/*.sbc)
RTLIB_OUT=$(RTLIB_DIR)/rtlib.simg
all: $(OBJ_DIR) $(SOURCES) $(EXECUTABLE) $(RTLIB_OUT)
$(TEST_RUNNERS_DIR):
mkdir $(TEST_RUNNERS_DIR)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
mkdir -p $(FOLDERS)
$(EXECUTABLE): $(OBJECTS)
$(CXXC) $(CXXFLAGS) $(OBJECTS) -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADERS) $(TEMPLATE_HEADERS)
$(CXXC) -c $(CXXFLAGS) $< -o $@
$(RTLIB_OUT): $(RTLIB_FILES)
make -C $(ASSEMBLER_DIR) all
$(ASSEMBLER_DIR)/stackasm -o rtlib/rtlib.simg $(RTLIB_FILES)
valgrind-flags:
$(eval TEST_WITH_VALGRIND = 1)
test-valgrind: valgrind-flags test
test: $(TEST_RUNNERS_DIR) $(TEST_EXECUTABLES)
$(TEST_RUNNERS_DIR)/%: $(TESTS_DIR)/%.h $(OBJ_DIR) $(EXECUTABLE) $(RTLIB_OUT) $(TEST_OBJECTS)
cxxtestgen --error-printer -o $@-runner.cpp $<
$(CXXC) $(CXXFLAGS) -o $@ -I $(CXXTEST) $(TEST_OBJECTS) $@-runner.cpp -DUSE_VALGRIND=$(TEST_WITH_VALGRIND)
./$@
lib: $(OBJECTS) $(RTLIB_OUT)
rm -rf $(LIBRARY_OUTPUT_FOLDER)
mkdir -p $(LIBRARY_OUTPUT_FOLDER)
mkdir -p $(LIBRARY_OUTPUT_FOLDER)/stackjit
ar rvs $(LIBRARY_OUTPUT_FOLDER)/$(LIBRARY) $(OBJECTS)
find src/ -name '*.h*' | cpio -pdm $(LIBRARY_OUTPUT_FOLDER)/stackjit
mv -f $(LIBRARY_OUTPUT_FOLDER)/stackjit/src/* $(LIBRARY_OUTPUT_FOLDER)/stackjit
rmdir $(LIBRARY_OUTPUT_FOLDER)/stackjit/src
cp -r rtlib $(LIBRARY_OUTPUT_FOLDER)
clean:
rm -rf $(OBJ_DIR)
rm -rf $(TEST_RUNNERS_DIR)
rm -f $(EXECUTABLE)
make -C $(ASSEMBLER_DIR) clean
rm -f $(RTLIB_OUT)
rm -f $(LIBRARY_OUTPUT_FOLDER)/$(LIBRARY)