|
1 # Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 # All rights reserved. |
|
3 # This component and the accompanying materials are made available |
|
4 # under the terms of "Eclipse Public License v1.0" |
|
5 # which accompanies this distribution, and is available |
|
6 # at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 # |
|
8 # Initial Contributors: |
|
9 # Nokia Corporation - initial contribution. |
|
10 # |
|
11 # Contributors: |
|
12 # |
|
13 # Description: |
|
14 # Code execute address set in the linker file |
|
15 # |
|
16 # |
|
17 |
|
18 # To guarantee there is a slash at the end of EPOCROOT in case there is not. |
|
19 # This is needed to ensure compatibility with SBSv1. |
|
20 TMPROOT:=$(subst \,/,$(EPOCROOT)) |
|
21 EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/ |
|
22 |
|
23 include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk |
|
24 |
|
25 |
|
26 #Set the directories |
|
27 BLDINFDIR := ../../../unref/orphan/cedgen/base/integrator/. |
|
28 GENSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr |
|
29 XSRSRCDIR := $(EXTENSION_ROOT)/../../../kernelhwsrv/kerneltest/e32utils/nandboot/coreldr/unistore2 |
|
30 SPECSRCDIR := $(EXTENSION_ROOT)/nandboot/coreldr |
|
31 VARIANTINC := $(EXTENSION_ROOT)/inc |
|
32 DRIVERDIR := $(EXTENSION_ROOT)/drivers |
|
33 EPOCINCDIR = $(EPOCROOT)epoc32/include/integrator/logic/lmnand2 |
|
34 |
|
35 |
|
36 GENINC1 := $(EPOCROOT)epoc32/include |
|
37 GENDRIVERINC := $(EPOCROOT)epoc32/include/drivers |
|
38 GENINC2 := $(EPOCROOT)epoc32/include/drivers/unistore2 |
|
39 GENINC3 := $(EPOCROOT)epoc32/include/integrator/logic/lmnand2 |
|
40 GENINCPATH:= $(GENSRCDIR) $(SPECSRCDIR) $(XSRSRCDIR) $(VARIANTINC) $(GENINC1) $(GENDRIVERINC) $(GENINC2) $(GENINC3) |
|
41 |
|
42 # Build directory (EPOCBLD too long) |
|
43 #BUILDLOC = $(EPOCROOT)epoc32/build/integrator/logic/lmnand2/nandboot/coreldr/$(PLATFORM_PATH)/$(CFG_PATH) |
|
44 BUILDLOC = $(EPOCBLD)/$(PLATFORM_PATH)/$(CFG_PATH) |
|
45 |
|
46 # Set the target name |
|
47 TARGETDIR := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH) |
|
48 TARGET = $(TARGETDIR)/_lmnand2_coreldr.bin |
|
49 TMPTARGET = $(BUILDLOC)/coreldr.tmp |
|
50 |
|
51 #Rules |
|
52 vpath %.s . $(SPECSRCDIR) $(SRCDIR) |
|
53 vpath %.inc . $(SPECSRCDIR) $(DRIVERDIR) $(EPOCINCDIR) |
|
54 vpath %.ginc . $(BUILDLOC) |
|
55 |
|
56 INCLUDES := nand.inc |
|
57 DRIVERINCLUDES := nand_fbr_offset.h |
|
58 |
|
59 VHEADERS := nanddevice.h |
|
60 BUILTINCLUDES := nanddevice.inc |
|
61 |
|
62 ASMSOURCE := coreldrasm.s |
|
63 GENCPPSOURCE := coreldr.cpp inflate.cpp |
|
64 XSRCPPSOURCE := coreldrxsr.cpp |
|
65 |
|
66 HEADERS := inflate.h coreldr.h |
|
67 SPECHEADERS := nand_plat.h |
|
68 |
|
69 |
|
70 #Execution address |
|
71 LINKBASE = 0x1F00000 |
|
72 |
|
73 |
|
74 |
|
75 ARMASM_OUT := $(shell armasm 2>&1) |
|
76 ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT)) |
|
77 # Use GCC toolchain if no other is available |
|
78 TOOLVER := GCC |
|
79 RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4))) |
|
80 ifeq "$(RVCTSTR)" "RVCT" |
|
81 TOOLVER := RVCT |
|
82 OP := -- |
|
83 OB := o |
|
84 endif |
|
85 |
|
86 #Arm RVCT tools |
|
87 ifeq "$(TOOLVER)" "RVCT" |
|
88 ASM_MACROS += USE_CXSF |
|
89 ASM := armasm |
|
90 LINK := armlink |
|
91 FROMELF := fromelf |
|
92 CPP := armcc |
|
93 |
|
94 OBJEXT := o |
|
95 INCEXT := inc |
|
96 |
|
97 ARMCCFLAGS := --arm -c -Otime --cpp |
|
98 |
|
99 ARMCCFLAGS := $(ARMCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir))) |
|
100 |
|
101 ARMCCFLAGS := $(ARMCCFLAGS) -DSYMBIAN_SUPPORT_UNISTORE2 -DEKA2 |
|
102 |
|
103 ARMCCFLAGS := $(ARMCCFLAGS) --preinclude $(EPOCROOT)epoc32/include/rvct/rvct.h |
|
104 |
|
105 ifeq "$(CFG)" "UDEB" |
|
106 ARMCCFLAGS := $(ARMCCFLAGS) -D_DEBUG |
|
107 endif |
|
108 |
|
109 ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),$(OP)predefine "$(macro) SETL {TRUE}") |
|
110 AFLAGS := -g $(OP)keep $(ASM_MACRO_CMD) -I$(BUILDLOC) |
|
111 LFLAGS := $(OP)entry BootEntry $(OP)ro-base $(LINKBASE) $(OP)FIRST BootEntry $(OP)map |
|
112 SYMOPT := $(OP)symdefs |
|
113 ASMTYP := ARMASM |
|
114 LINKFILE := |
|
115 |
|
116 define do_compile |
|
117 $(CPP) $(ARMCCFLAGS) $< -o $@ |
|
118 endef |
|
119 define do_h2inc |
|
120 perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ ARMASM |
|
121 endef |
|
122 define do_asm |
|
123 $(ASM) $(AFLAGS) -$(OB) $@ $(OP)LIST $(join $(basename $@),.lst) $< |
|
124 endef |
|
125 define do_link |
|
126 $(LINK) $(LFLAGS) -$(OB) $@ $(FULLOBJECTS) |
|
127 endef |
|
128 define do_strip |
|
129 $(FROMELF) $(OP)bin $(OP)output $@ $< |
|
130 endef |
|
131 endif |
|
132 |
|
133 |
|
134 #GCC build options |
|
135 ifeq "$(TOOLVER)" "GCC" |
|
136 ASM := as |
|
137 AFLAGS := -mapcs-32 -R -n -I$(BUILDLOC) |
|
138 |
|
139 LINKFLAGS = -n --section-alignment 4 --file-alignment 2 -no-whole-archive |
|
140 GCCFLAGS=-march=armv4 -nostdinc -pipe -c -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas |
|
141 GCCFLAGS := $(GCCFLAGS) $(foreach dir,$(GENINCPATH),$(join -I, $(dir))) |
|
142 GCCDEFS = -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__MARM_ARM4__ -DEKA2 -DSYMBIAN_SUPPORT_UNISTORE2 |
|
143 ifeq "$(CFG)" "UDEB" |
|
144 GCC = gcc -x c++ -g -O2 $(GCCFLAGS) -D_DEBUG -D_UNICODE $(GCCDEFS) |
|
145 else |
|
146 GCC = gcc -x c++ -s -fomit-frame-pointer -O2 $(GCCFLAGS) -DNDEBUG -D_UNICODE $(GCCDEFS) |
|
147 endif |
|
148 |
|
149 LINKFILE = $(SPECSRCDIR)/coreldr.lnk |
|
150 OBJEXT := o |
|
151 INCEXT := ginc |
|
152 |
|
153 PROCESS_INCLUDES := 1 |
|
154 define do_compile |
|
155 $(GCC) -o $@ $< |
|
156 endef |
|
157 define do_h2inc |
|
158 perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ AS |
|
159 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $@ $(join $(basename $@),.ginc) |
|
160 endef |
|
161 define do_includes |
|
162 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@ |
|
163 endef |
|
164 define do_asm |
|
165 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.s) |
|
166 $(AS) $(AFLAGS) -o $@ $(join $(basename $@),.s) |
|
167 endef |
|
168 define do_strip |
|
169 strip -O binary -o "$(TARGET)" "$(TMPTARGET)" |
|
170 $(ERASE) $(call slash2generic,"$(TMPTARGET)") |
|
171 # $(ERASE) "$(TMPTARGET)" |
|
172 echo Built $(TARGET) |
|
173 endef |
|
174 define do_link |
|
175 ld -o "$(TMPTARGET)" --start $(FULLOBJECTS) --script=$(LINKFILE) |
|
176 endef |
|
177 endif |
|
178 |
|
179 |
|
180 #CPP source processing |
|
181 FULLCPPSOURCE := $(addprefix $(GENSRCDIR)/,$(GENCPPSOURCE)) |
|
182 |
|
183 #Header processing |
|
184 FULLHEADERS := $(addprefix $(GENSRCDIR)/,$(HEADERS)) |
|
185 FULLSPECHEADERS := $(addprefix $(VARIANTINC)/,$(SPECHEADERS)) |
|
186 |
|
187 FULLVHEADERS := $(addprefix $(GENDRIVERINC)/,$(VHEADERS)) |
|
188 FULLBUILTINCLUDES := $(addprefix $(BUILDLOC)/,$(BUILTINCLUDES)) |
|
189 $(FULLBUILTINCLUDES) : $(FULLVHEADERS) |
|
190 $(do_h2inc) |
|
191 |
|
192 |
|
193 |
|
194 #object names |
|
195 GENCPPOBJECTS := $(foreach f,$(GENCPPSOURCE),$(basename $(f)).$(OBJEXT)) |
|
196 FULLGENCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(GENCPPOBJECTS)) |
|
197 |
|
198 XSRCPPOBJECTS := $(foreach f,$(XSRCPPSOURCE),$(basename $(f)).$(OBJEXT)) |
|
199 FULLXSRCPPOBJECTS := $(addprefix $(BUILDLOC)/,$(XSRCPPOBJECTS)) |
|
200 |
|
201 ASMOBJECTS := $(foreach f,$(ASMSOURCE),$(basename $(f)).$(OBJEXT)) |
|
202 FULLASMOBJECTS := $(addprefix $(BUILDLOC)/,$(ASMOBJECTS)) |
|
203 |
|
204 FULLOBJECTS := $(FULLASMOBJECTS) $(FULLGENCPPOBJECTS) $(FULLXSRCPPOBJECTS) |
|
205 |
|
206 ifdef PROCESS_INCLUDES |
|
207 |
|
208 GCCSRC := $(addprefix $(BUILDLOC)/,$(SRC)) |
|
209 |
|
210 #Creation of headers |
|
211 FULLINCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT)) |
|
212 FULLINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLINCLUDES)) |
|
213 |
|
214 FULLDRIVERINCLUDES := $(foreach f,$(DRIVERINCLUDES),$(basename $(f)).$(INCEXT)) |
|
215 FULLDRIVERINCLUDES := $(addprefix $(BUILDLOC)/,$(FULLDRIVERINCLUDES)) |
|
216 |
|
217 $(FULLINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc |
|
218 $(do_includes) |
|
219 |
|
220 $(FULLDRIVERINCLUDES) : $(BUILDLOC)/%.$(INCEXT) : %.inc |
|
221 $(do_includes) |
|
222 |
|
223 else |
|
224 FULLINCLUDES:= $(addprefix $(SPECSRCDIR)/,$(INCLUDES)) |
|
225 FULLDRIVERINCLUDES:= $(addprefix $(DRIVERDIR)/,$(DRIVERINCLUDES)) |
|
226 |
|
227 #Arm RVCT specifics here |
|
228 |
|
229 endif |
|
230 |
|
231 |
|
232 #Link |
|
233 $(TMPTARGET) : $(FULLOBJECTS) |
|
234 $(do_link) |
|
235 |
|
236 #strip |
|
237 $(TARGET) : $(TMPTARGET) |
|
238 $(do_strip) |
|
239 |
|
240 #CPP objects |
|
241 $(FULLGENCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(GENSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS) $(FULLDRIVERINCLUDES) |
|
242 $(do_compile) |
|
243 |
|
244 $(FULLXSRCPPOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(XSRSRCDIR)/%.cpp $(FULLHEADERS) $(FULLSPECHEADERS) |
|
245 $(do_compile) |
|
246 |
|
247 |
|
248 #Asm objects |
|
249 $(FULLASMOBJECTS) : $(BUILDLOC)/%.$(OBJEXT) : $(SPECSRCDIR)/$(ASMSOURCE) $(FULLINCLUDES) $(FULLBUILTINCLUDES) |
|
250 $(do_asm) |
|
251 |
|
252 # make the work directories |
|
253 $(TARGETDIR) : |
|
254 $(call ifnotexistd,"$(TARGETDIR)") |
|
255 |
|
256 $(BUILDLOC) : |
|
257 $(call ifnotexistd,"$(BUILDLOC)") |
|
258 |
|
259 |
|
260 |
|
261 MAKMAKE : |
|
262 echo Nothing to do |
|
263 |
|
264 FREEZE : |
|
265 echo Nothing to do |
|
266 |
|
267 LIB : |
|
268 echo Nothing to do |
|
269 |
|
270 CLEANLIB : |
|
271 echo Nothing to do |
|
272 |
|
273 RESOURCE : |
|
274 echo Nothing to do |
|
275 |
|
276 FINAL : |
|
277 echo Nothing to do |
|
278 |
|
279 BLD SAVESPACE : $(TARGETDIR) $(BUILDLOC) $(TARGET) |
|
280 |
|
281 RELEASABLES : |
|
282 @echo "$(TARGET)" |
|
283 |
|
284 CLEAN : |
|
285 -$(ERASE) $(call slash2generic,"$(TARGET)") |
|
286 -$(ERASE) $(call slash2generic,"$(BUILDLOC)/*.*") |
|
287 # -$(ERASE) "$(TARGET)" |
|
288 # -$(ERASE) "$(BUILDLOC)/*.*" |
|
289 |
|
290 |
|
291 |