-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
121 lines (85 loc) · 2.8 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
111
112
113
114
115
116
117
118
119
120
-include local.mk
# Find the local dir of the make file
GET_LOCAL_DIR = $(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))))
# makes sure the target dir exists
MKDIR = if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi
include $(ECOS_KERNEL)/include/pkgconf/ecos.mak
XCC = $(ECOS_COMMAND_PREFIX)gcc
XCXX = $(ECOS_COMMAND_PREFIX)g++
XLD = $(ECOS_COMMAND_PREFIX)gcc
XAR = $(ECOS_COMMAND_PREFIX)ar
OBJCOPY = $(ECOS_COMMAND_PREFIX)objcopy
# default lib and app name, can override them
MIFI_LIB ?= libmf
MIFI_APP ?= mf_main
BUILDDIR := build-$(PROJECT)-$(BOARD)
CONFIGHEADER := $(BUILDDIR)/config.h
CPU2BOOTBIN := qboot.bin
BUILDTIME := $(shell date "+%Y.%m.%d-%H:%M:%S")
INCLUDES := -I$(BUILDDIR) -Iinclude
DEFINES := PROJECT_$(PROJECT)=1 BOARD_$(BOARD)=1 LOG_OUT_$(LOG_OUT)=1
LDFLAGS += -L$(ECOS_KERNEL)/lib
LDFLAGS += -Ttarget.ld
LDFLAGS += -ltarget
CFLAGS += -I$(ECOS_KERNEL)/include -include $(CONFIGHEADER)
SRCDEPS := $(CONFIGHEADER) $(CPU2BOOTBIN)
OBJS :=
include src/rules.mk
include board/$(BOARD)/rules.mk
include project/$(PROJECT)/rules.mk
TARGETLIB := $(BUILDDIR)/$(MIFI_LIB).a
TARGETBIN := $(BUILDDIR)/$(MIFI_APP).bin
TARGETELF := $(BUILDDIR)/$(MIFI_APP).elf
ALLOBJS := \
$(OBJS)
ALLOBJS := $(addprefix $(BUILDDIR)/, $(ALLOBJS))
DEPS := $(ALLOBJS:%o=%d)
$(BUILDDIR)/%.o : %.c $(SRCDEPS)
@$(MKDIR)
@echo compiling $<
$(XCC) $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
$(BUILDDIR)/%.o : %.S $(SRCDEPS)
@$(MKDIR)
@echo compiling $<
@$(XCC) $(CFLAGS) $(ASMFLAGS) $(ECOS_GLOBAL_CFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@
$(TARGETBIN) : $(TARGETELF)
$(OBJCOPY) -O binary $< $@
$(TARGETELF) : $(TARGETLIB)
$(XLD) $(ECOS_GLOBAL_LDFLAGS) -o $@ $(ALLOBJS) $(LDFLAGS)
$(TARGETLIB): $(ALLOBJS)
$(XAR) rcs $@ $(ALLOBJS)
cpu2bootbin:
$(CPU2BOOTBIN) : cpu2bootbin
@rm -f $(CPU2BOOTBIN)
@ln -s board/$(BOARD)/qboot.bin $(CPU2BOOTBIN)
configheader:
$(CONFIGHEADER): configheader
@$(MKDIR)
@echo generating $@
@rm -f $(CONFIGHEADER).tmp; \
echo \#ifndef __CONFIG_H > $(CONFIGHEADER).tmp; \
echo \#define __CONFIG_H >> $(CONFIGHEADER).tmp; \
for d in `echo $(DEFINES) | tr [:lower:] [:upper:]`; do \
echo "#define $$d" | sed "s/=/\ /g;s/-/_/g;s/\//_/g" >> $(CONFIGHEADER).tmp; \
done; \
echo \#endif >> $(CONFIGHEADER).tmp; \
if [ -f "$(CONFIGHEADER)" ]; then \
if cmp "$(CONFIGHEADER).tmp" "$(CONFIGHEADER)"; then \
rm -f $(CONFIGHEADER).tmp; \
else \
mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
fi \
else \
mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \
fi
%.d:
ifeq ($(filter $(MAKECMDGOALS), clean), )
-include $(DEPS)
endif
all: $(TARGETLIB) $(TARGETBIN)
clean:
@echo Cleaning...
-rm -f $(ALLOBJS)
-rm -f $(TARGETLIB)
-rm -f $(TARGETBIN) $(TARGETELF)
-rm -f $(CPU2BOOTBIN)