]> rtime.felk.cvut.cz Git - arc.git/blob - scripts/rules.mk
Merge maek compiler warning removal.
[arc.git] / scripts / rules.mk
1 \r
2 CFG_ARCH_$(ARCH):=y\r
3 \r
4 RELDIR := $(subst $(TOPDIR)/,,$(CURDIR))\r
5 \r
6 # Create the target name... \r
7 target := $(subst /,_,$(SUBDIR))\r
8 \r
9 #goal=$(subst /cygdrive/c/,c:/,$(abspath $@))\r
10 goal=$@\r
11 \r
12 #===== MODULE CONFIGURATION =====\r
13 include $(ROOTDIR)/boards/$(BOARDDIR)/build_config.mk\r
14 -include ../build_config.mk\r
15 \r
16 define MOD_AVAIL_template\r
17         MOD_$(1)=y\r
18 endef\r
19 \r
20 define MOD_USE_template\r
21         USE_$(1)=y\r
22         def-y += USE_$(1)\r
23 endef\r
24 \r
25 define CFG_template\r
26         CFG_$(1)=y\r
27         def-y += CFG_$(1)\r
28 endef\r
29 \r
30 \r
31 $(foreach mod,$(MOD_AVAIL),$(eval $(call MOD_AVAIL_template,${mod})))\r
32 $(foreach mod,$(MOD_USE),$(eval $(call MOD_USE_template,${mod})))\r
33 $(foreach mod,$(CFG),$(eval $(call CFG_template,${mod})))\r
34 def-y += $(ARCH) $(ARCH_FAM) $(ARCH_MCU) \r
35 \r
36 not_avail = $(filter-out $(MOD_AVAIL),$(MOD_USE))\r
37 ifneq ($(not_avail),)\r
38 $(error Trying to build a module that is not available: $(not_avail))\r
39 endif\r
40 \r
41 #===== COMPILER CONFIG =====\r
42 \r
43 ARCH_PATH-y = arch/$(ARCH_FAM)/$(ARCH)\r
44 \r
45 # Include compiler generic and arch specific\r
46 COMPILER?=gcc\r
47 ifneq ($(ARCH),)\r
48 include $(ROOTDIR)/$(ARCH_PATH-y)/scripts/gcc.mk\r
49 endif\r
50 include $(ROOTDIR)/scripts/cc_$(COMPILER).mk\r
51 \r
52 # Get object files\r
53 include ../makefile\r
54 \r
55 inc-y += $(ROOTDIR)/include\r
56 inc-$(CFG_PPC) += $(ROOTDIR)/include/ppc\r
57 inc-$(CFG_ARM) += $(ROOTDIR)/include/arm\r
58 \r
59 .PHONY config:\r
60 \r
61 config:\r
62         @echo "board   modules:" $(MOD_AVAIL)\r
63         @echo "example modules:" $(MOD_USE)\r
64         @echo $(MOD) ${def-y}\r
65 \r
66 # build- targets are "end" target that the included makefile want's to build\r
67 all: $(build-lib-y) $(build-exe-y)\r
68 \r
69 # Determine what kind of filetype to build from  \r
70 VPATH += $(ROOTDIR)/$(SUBDIR)/src\r
71 VPATH += $(ROOTDIR)/$(SUBDIR)\r
72 \r
73 inc-y += ../include\r
74 \r
75 .SUFFIXES:\r
76 \r
77 # Simple depencendy stuff\r
78 -include $(subst .o,.d,$(obj-y))\r
79 # Some dependency for xxx_offset.c/h also\r
80 -include $(subst .h,.d,$(dep-y))\r
81 \r
82 # Compile\r
83 %.o: %.c\r
84         @echo "  >> CC $(notdir $<)"\r
85         $(Q)$(CC) -c $(CFLAGS) -o $(goal) $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $(realpath $<)\r
86 \r
87 # Assembler\r
88 \r
89 %.o: %.s\r
90         @echo "  >> AS $(notdir $<)  $(ASFLAGS)"\r
91         $(Q)$(AS) $(ASFLAGS) -o $(goal) $<\r
92         \r
93 # PP Assembler  \r
94 #.SECONDARY %.s:\r
95 \r
96 %.s: %.S\r
97         @echo "  >> CPP $(notdir $<)"\r
98         $(Q)$(CPP) -o $@ $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $<\r
99 \r
100 %.s: %.ps\r
101         @echo "  >> CPP $(notdir $<)"\r
102         $(Q)$(CPP) -x assembler-with-cpp -o $@ $(addprefix -I ,$(inc-y)) $(addprefix -D,$(def-y)) $<\r
103 \r
104 \r
105 #       @cat $@ \r
106         \r
107 .PHONY $(ROOTDIR)/libs:\r
108 $(ROOTDIR)/libs:\r
109         $(Q)mkdir -p $@\r
110 \r
111 dep-y += $(ROOTDIR)/libs\r
112         \r
113 # lib   \r
114 $(build-lib-y): $(dep-y) $(obj-y)\r
115         @echo "  >> AR $@"   \r
116         $(Q)$(AR) -r -o $@ $(obj-y) 2> /dev/null\r
117 \r
118 # Could use readelf -S instead of parsing the *.map file.\r
119 $(build-exe-y): $(obj-y) $(sim-y) $(libitem-y) \r
120         @echo "  >> LD $@"\r
121         $(Q)$(LD) $(LDFLAGS) $(ldcmdfile-y) -o $@ $(libpath-y) --start-group $(obj-y) $(lib-y) $(libitem-y) --end-group $(LDMAPFILE)\r
122         @echo "Image size: (decimal)"\r
123         @gawk --non-decimal-data        '/^\.text/ { print "  text:"  $$3+0 " bytes"; rom+=$$3 };\\r
124                                                                 /^\.data/ { print "  data:"  $$3+0 " bytes"; rom+=$$3; ram+=$$3}; \\r
125                                                                 /^\.bss/ { print "  bss :"  $$3+0 " bytes"; ram+=$$3}; \\r
126                                                                 END { print "  ROM: ~" rom " bytes"; print "  RAM: ~" ram " bytes"}' $(subst .elf,.map,$@)\r
127         @echo "  >>>>>>>  DONE  <<<<<<<<<"\r
128         \r
129 \r
130 $(size-exe-y): $(build-exe-y)\r
131         $(Q)$(OBJDUMP) -h $<\r
132         @echo TODO: Parse the file....\r
133 \r
134 .PHONY clean:\r
135         @-rm -f *.o *.d *.h *.elf *.a\r