-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
makefile
79 lines (60 loc) · 2.48 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
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
###############################################################################
## Simulator Makefile
###############################################################################
# TARGETS
TARGETS ?= exactstep exactstep-riscv-linux
HAS_SCREEN ?= False
HAS_NETWORK ?= False
# Source Files
SRC_DIR = core peripherals cpu-rv32 cpu-rv64 cpu-armv6m cpu-mips-i cli platforms device-tree display net virtio sbi
CFLAGS = -O2 -fPIC
CFLAGS += -Wno-format
ifneq ($(HAS_NETWORK),False)
CFLAGS += -DINCLUDE_NET_DEVICE
endif
ifneq ($(HAS_SCREEN),False)
CFLAGS += -DINCLUDE_SCREEN
endif
INCLUDE_PATH += $(SRC_DIR)
CFLAGS += $(patsubst %,-I%,$(INCLUDE_PATH))
LDFLAGS =
LIBS = -lelf -lbfd -lfdt
ifneq ($(HAS_SCREEN),False)
LIBS += -lSDL
endif
###############################################################################
# Variables
###############################################################################
OBJ_DIR ?= obj/
###############################################################################
# Variables: Lists of objects, source and deps
###############################################################################
# SRC / Object list
src2obj = $(OBJ_DIR)$(patsubst %$(suffix $(1)),%.o,$(notdir $(1)))
SRC ?= $(foreach src,$(SRC_DIR),$(wildcard $(src)/*.cpp))
SRC_FILT := $(filter-out cli/main.cpp,$(SRC))
SRC_FILT := $(filter-out cli/main_riscv_linux.cpp,$(SRC_FILT))
OBJ ?= $(foreach src,$(SRC_FILT),$(call src2obj,$(src)))
###############################################################################
# Rules: Compilation macro
###############################################################################
define template_cpp
$(call src2obj,$(1)): $(1) | $(OBJ_DIR)
@echo "# Compiling $(notdir $(1))"
@g++ $(CFLAGS) -c $$< -o $$@
endef
###############################################################################
# Rules
###############################################################################
all: $(TARGETS)
$(OBJ_DIR):
@mkdir -p $@
$(foreach src,$(SRC),$(eval $(call template_cpp,$(src))))
exactstep: $(OBJ) $(OBJ_DIR)main.o makefile
@echo "# Linking $(notdir $@)"
@g++ $(LDFLAGS) $(OBJ_DIR)main.o $(OBJ) $(LIBS) -o $@
exactstep-riscv-linux: $(OBJ) $(OBJ_DIR)main_riscv_linux.o makefile
@echo "# Linking $(notdir $@)"
@g++ $(LDFLAGS) $(OBJ_DIR)main_riscv_linux.o $(OBJ) $(LIBS) -o $@
clean:
-rm -rf $(OBJ_DIR) $(TARGETS)