-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
113 lines (92 loc) · 3.24 KB
/
Makefile
File metadata and controls
113 lines (92 loc) · 3.24 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# =============================================================================
# Crescent build configuration
# =============================================================================
STD = c99
OPTIMIZATION = 2
CFLAGS = \
-Wall \
-Wextra \
-Wpedantic \
-Werror \
-Wshadow \
-Wundef \
-Wdouble-promotion \
-Wnull-dereference
CC = gcc
AR = ar rcs
VALGRIND = valgrind
# =============================================================================
# End of configurable options
# =============================================================================
SRC = src
BUILD = build
TYPES = $(SRC)/types
CORE = $(SRC)/core
VM = $(SRC)/vm
API = $(SRC)/api
MAIN = $(SRC)/crescent.c
TARGET = $(BUILD)/crescent
TYPESSRC = $(wildcard $(TYPES)/*.c)
CORESRC = $(wildcard $(CORE)/*.c)
VMSRC = $(wildcard $(VM)/*.c)
APISRC = $(wildcard $(API)/*.c)
OBJECTS = $(foreach source,$(TYPESSRC) $(CORESRC) $(VMSRC) $(APISRC),$(BUILD)/$(subst .c,.o,$(notdir $(source))))
CFLAGS := $(CFLAGS) -I$(SRC)
ifdef STD
CFLAGS := $(CFLAGS) -std=$(STD)
endif
ifdef OPTIMIZATION
CFLAGS := $(CFLAGS) -O$(OPTIMIZATION)
endif
ifdef DEBUG
CFLAGS := $(CFLAGS) -g
endif
.DEFAULT_GOAL = build
.PHONY: build run valgrind clean rmobj todo fixme notes echo
build:
mkdir -p $(BUILD)
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/string.o $(TYPES)/string.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/array.o $(TYPES)/array.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/object.o $(CORE)/object.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/memory.o $(CORE)/memory.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/gc.o $(CORE)/gc.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/buffer.o $(CORE)/buffer.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/format.o $(CORE)/format.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/state.o $(CORE)/state.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/call.o $(CORE)/call.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/opcodes.o $(VM)/opcodes.c
$(CC) $(CFLAGS) -fvisibility=hidden -c -o $(BUILD)/vm.o $(VM)/vm.c
$(CC) $(CFLAGS) -fPIC -c -o $(BUILD)/api.o $(API)/api.c
$(CC) $(CFLAGS) -fPIC -shared -o $(BUILD)/libcrescent.so $(OBJECTS)
$(AR) $(BUILD)/libcrescent.a $(OBJECTS)
$(CC) $(CFLAGS) -o $(TARGET) $(MAIN) $(OBJECTS)
run: build
./$(TARGET)
valgrind: build
valgrind --tool=massif ./$(TARGET)
valgrind --tool=callgrind --dump-instr=yes ./$(TARGET)
valgrind --tool=memcheck ./$(TARGET)
clean:
rm -rf $(BUILD)
rmobj:
rm -f $(BUILD)/*.o
todo:
grep -rnH --color=auto --include "*.c" --include "*.h" "TODO"
fixme:
grep -rnH --color=auto --include "*.c" --include "*.h" "FIXME"
notes:
grep -rnH --color=auto --include "*.c" --include "*.h" "FIXME\|TODO"
echo:
@echo "STD = $(STD)"
@echo "OPTIMIZATION = $(OPTIMIZATION)"
@echo "CFLAGS = $(CFLAGS)"
@echo "CC = $(CC)"
@echo "VALGRIND = $(VALGRIND)"
@echo "SRC = $(SRC)"
@echo "BUILD = $(BUILD)"
@echo "TYPES = $(TYPES)"
@echo "CORE = $(CORE)"
@echo "VM = $(VM)"
@echo "API = $(API)"
@echo "MAIN = $(MAIN)"
@echo "TARGET = $(TARGET)"