-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
104 lines (75 loc) · 2.4 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
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
# compile logic
CROSS_COMPILE ?= riscv64-unknown-linux-gnu-
CC = $(CROSS_COMPILE)gcc
OBJDUMP = $(CROSS_COMPILE)objdump
AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
# C flags
INCLUDE = -Iinclude
CFLAGS = -O2 -g -MMD -Wno-c23-extensions -Wno-varargs $(INCLUDE) -DDASICS_LINUX -DDASICS_COPY -DDASICS_DEBUG
ifdef USER_DEFINE
CFLAGS += -D$(USER_DEFINE)
endif
# build di0
DIR_PWD ?=
DIR_BUILD = build
DIR_SRC = src
DIR_LIB = lib
DIR_TEST = test
UCFLAGS = -O2 -g -MMD $(INCLUDE) -I$(DIR_TEST)/include -MMD
# target files
# LIB FILE, stand alone, not depend on any other standard library
LIB_FILES_C = $(wildcard $(DIR_LIB)/*/*.c)
LIB_FILES_ASM = $(wildcard $(DIR_LIB)/*/*.S)
# SRC FILE, may used standard library
SRC_FILES_C = $(wildcard $(DIR_SRC)/*/*.c)
SRC_FILES_ASM = $(wildcard $(DIR_SRC)/*/*.S)
# TEST FIle
TEST_FILES = $(wildcard $(DIR_TEST)/*.c)
# BASENAME
BASENAME = $(notdir $(LIB_FILES_C) $(LIB_FILES_ASM) $(SRC_FILES_C) $(SRC_FILES_ASM))
OBJ_FILES = $(addprefix build/, \
$(addsuffix .o, $(basename $(BASENAME))))
TEST_SO_FILES = $(notdir $(wildcard $(DIR_TEST)/lib/*.c))
TEST_SO_OBJ = $(addprefix build/, \
$(addsuffix .so, $(basename $(TEST_SO_FILES))))
# Lib target
LibDASICS = $(DIR_BUILD)/libDASICS.a
.PHONY: all
all: $(LibDASICS)
build:
@mkdir -p $(DIR_BUILD)
# compile all files
$(DIR_BUILD)/%.o: $(DIR_SRC)/*/%.c | $(DIR_BUILD)
@$(CC) $(CFLAGS) -c $< -o $@
@echo + CC $@
$(DIR_BUILD)/%.o: $(DIR_SRC)/*/%.S | $(DIR_BUILD)
@$(CC) $(CFLAGS) -c $< -o $@
@echo + CC $@
$(DIR_BUILD)/%.o: $(DIR_LIB)/*/%.c | $(DIR_BUILD)
@$(CC) -fno-builtin -nostdlib $(CFLAGS) -c $< -o $@
@echo + CC $@
$(DIR_BUILD)/%.o: $(DIR_LIB)/*/%.S | $(DIR_BUILD)
@$(CC) -fno-builtin -nostdlib $(CFLAGS) -c $< -o $@
@echo + CC $@
# Test library
$(DIR_BUILD)/%.so: $(DIR_TEST)/*/%.c | $(DIR_BUILD) $(LibDASICS)
@$(CC) $(UCFLAGS) -fPIC -shared $< -o $@
@echo + CC $@
# Make lib
$(LibDASICS): $(OBJ_FILES)
@$(AR) rcs $(LibDASICS) $(OBJ_FILES)
@echo + AR $(LibDASICS)
@$(RANLIB) $(LibDASICS)
@echo + RANLIB $(LibDASICS)
test: $(LibDASICS) $(TEST_SO_OBJ)
@$(CC) $(UCFLAGS) $(TEST_FILES) -o ./build/test -T./ld.lds $(LibDASICS)
@echo + CC ./build/test
@$(OBJDUMP) -d ./build/test > $(DIR_BUILD)/test.txt
@echo + OBJDUMP ./build/test
clean:
rm -rf $(DIR_BUILD)
# Dependencies
DEPS = $(addprefix $(DIR_BUILD)/, \
$(addsuffix .d, $(basename $(BASENAME))))
-include $(DEPS)