-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
111 lines (82 loc) · 3.34 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
105
106
107
108
109
110
# local settings
-include Makefile.local
# toolchain
include Makefile.toolchain
# common definitions
# ---------------------------------
OUTDIR = output
NAME = ${OUTDIR}/balrob.elf
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
# file definitions
# ---------------------------------
CODE_DIRS = embexp-balrob CMSIS_CORE_LPC11xx
SOURCES_C = $(foreach d,$(CODE_DIRS),$(call rwildcard, $d/src/, *.c))
SOURCES_S = $(foreach d,$(CODE_DIRS),$(call rwildcard, $d/src/, *.S))
INCLUDE_FILES = $(foreach d,$(CODE_DIRS),$(call rwildcard, $d/inc/, *.h))
OBJECTS = $(SOURCES_C:.c=.o) $(SOURCES_S:.S=.o)
LINKERFILE = lpc11c24_flash.ld
# compiler flags
# ---------------------------------
ifeq ("$(OPTIMIZED_MODE)", "")
OPTIMIZATION_FLAG = -O0
else
OPTIMIZATION_FLAG = -O3
endif
SFLAGS_EXTRA = -mcpu=cortex-m0 -mthumb
# -O3 / -O0
CFLAGS_EXTRA = ${OPTIMIZATION_FLAG} -g3 -specs=nosys.specs -DUSE_OLD_STYLE_DATA_BSS_INIT -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -fno-common -D__USE_CMSIS=CMSIS_CORE_LPC11xx
LDFLAGS_POST = -L$(ARMSYS) -L$(ARMLIB) -lgcc
INCFLAGS = $(foreach d,$(CODE_DIRS),-I$d/inc)
SFLAGS = ${SFLAGS_EXTRA} ${INCFLAGS}
CFLAGS = -std=gnu99 -Wall -fno-builtin -fno-stack-protector ${INCFLAGS} ${CFLAGS_EXTRA} -fdump-rtl-expand
# -DGCC_COMPAT_COMPILATION
LDFLAGS_PRE = -Bstatic -nostartfiles -nostdlib
# compilation and linking
# ---------------------------------
all: $(NAME)
%.o: %.S ${INCLUDE_FILES} Makefile
${CROSS}cpp ${INCFLAGS} $< | ${CROSS}as ${SFLAGS} -o $@ -
%.o: %.c ${INCLUDE_FILES} Makefile
${CROSS}gcc ${CFLAGS} -c -o $@ $<
$(NAME): ${OBJECTS} ${INCLUDE_FILES} $(LINKERFILE) Makefile
mkdir -p ${OUTDIR}
${CROSS}ld $(LDFLAGS_PRE) -o $@ -T $(LINKERFILE) ${OBJECTS} $(LDFLAGS_POST)
${CROSS}objdump -t -h $@ > "$@.table"
${CROSS}objdump -d $@ > "$@.da"
${CROSS}objdump -D $@ > "$@.da.all"
${CROSS}objdump -j.text -j.data -j.bss -j.reloadtext -d $@ > "$@.da.plus"
${CROSS}objdump -j.text -j.data -j.bss -j.reloadtext -s $@ > "$@.mem"
${CROSS}objdump -j.reloadtext -t -h $@ > "$@.reloadtext.table"
${CROSS}objdump -j.reloadtext -d $@ > "$@.reloadtext.da"
${CROSS}objcopy --gap-fill=0xff -j.reloadtext -O binary $@ "$@.reloadtext"
${CROSS}objcopy -O ihex $@ "$@.ihex"
clean:
rm -rf ${OUTDIR}
rm -f $(call rwildcard, , *.o)
rm -f $(call rwildcard, , *.expand)
.PHONY: all clean
# callgraphs
# http://www.gson.org/egypt/
callgraph-install:
rm -f egypt-1.10.tar.gz
rm -rf egypt-1.10
wget http://www.gson.org/egypt/download/egypt-1.10.tar.gz
tar -xzf egypt-1.10.tar.gz
cd egypt-1.10 && perl Makefile.PL && make && chmod +x egypt
# http://m0agx.eu/2016/12/15/making-call-graphs-with-gcc-egypt-and-cflow/
EXPANSION = ./embexp-balrob/src/*.expand ./embexp-balrob/src/dev/*.expand
EXPANSION_SIMP = ./embexp-balrob/src/*.expand
callgraph:
make clean
make callgraph-full
callgraph-full: $(NAME)
rm -f output/callgraph.png
./egypt-1.10/egypt --include-external ${EXPANSION} | dot -Gsize=3000,3000 -Grankdir=LR -Tpng -o output/callgraph.png
xdg-open output/callgraph.png
callgraph-simp: $(NAME)
rm -f output/callgraph.png
./egypt-1.10/egypt --include-external ${EXPANSION_SIMP} | dot -Gsize=3000,3000 -Grankdir=LR -Tpng -o output/callgraph.png
xdg-open output/callgraph.png
.PHONY: callgraph callgraph-install
# running and debugging
include Makefile.run