blob: 85bee9bc9505add11e5f543bf2310f110f890e8c (
plain)
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
|
# Standard housekeeping
.PHONY: all debug release clean target install
.SUFFIXES:
all: targets
debug: CC := clang
debug: CFLAGS += -DDEBUG -g -fsanitize=address
debug: INCS := -I $(INC_DIR)
debug: ELIBS := -fsanitize=address
debug: STATIC :=
debug: INIT :=
debug: FINI :=
debug: targets
release: CFLAGS += -O2 -mtune=native -flto #-DNDEBUG
release: targets
# Targets & array of sources & intermediates
SRCS :=
OBJS :=
DEPS :=
LIBS :=
BINS :=
TEST :=
GENS :=
# generic rules
%.a: %.o
$(ARCHIVE)
%: %.o
$(LINK)
# explicit system layer
DIR := sys
include $(DIR)/rules.mk
# userland rules
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(COMPILE)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.s
$(ASSEMBLE)
$(OBJ_DIR)/%: $(SRC_DIR)/%.c
$(COMPLINK)
$(TST_DIR)/%: TLIBS=$(OBJ_DIR)/base/base.a $(SYS)
$(TST_DIR)/%: $(SRC_DIR)/%.c
$(COMPLINK)
# iterate through source directory tree
LIBBASE := $(OBJ_DIR)/base/base.a $(SYS)
DIR := src
include $(DIR)/rules.mk
$(BINS): | $(LIBS) $(RUNTIME) $(SYS)
$(TEST): | $(LIBS) $(RUNTIME) $(SYS)
targets: $(LIBS) $(BINS) $(TEST)
clean:
@echo removing system layer
@rm -f $(SYS_OBJS) $(SYS) $(RT_OBJS) $(RT1) $(RTI) $(RTN) $(RT3)
@echo removing object files
@rm -f $(OBJS)
@echo removing dependency files
@rm -f $(DEPS)
@echo removing generated source files
@rm -f $(GENS)
@echo removing libraries
@rm -f $(LIBS)
@echo removing binaries
@rm -f $(BINS)
@echo removing unit tests
@rm -f $(TEST)
install: targets
@echo installing executables
@if [ -n $$BINS ]; then\
install $(BINS) $(BIN_DIR);\
fi
@echo installing libraries
@if [ -n $$LIBS ]; then\
install $(LIBS) $(LIB_DIR);\
fi
@echo installing terminfo
@tic -sx $(SRC_DIR)/cmd/term/term.info
database:
compiledb make -j4
|