11 # Contributors: |
11 # Contributors: |
12 # |
12 # |
13 # Description: |
13 # Description: |
14 # |
14 # |
15 |
15 |
16 # To ensure that EPOCROOT always ends with a forward slash. |
16 # To ensure that EPOCROOT always ends with a forward slash. |
17 TMPROOT:=$(subst \,/,$(EPOCROOT)) |
17 TMPROOT:=$(subst \,/,$(EPOCROOT)) |
18 EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/ |
18 EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/ |
|
19 |
|
20 HOST_PLATFORM := $(patsubst linux%,linux,$(HOSTPLATFORM_DIR)) |
|
21 ifeq (linux,$(HOST_PLATFORM)) |
|
22 INC_PATH := $(EPOCROOT)epoc32/include/platform |
|
23 endif |
19 |
24 |
20 ifndef CPU |
25 ifndef CPU |
21 CPU := arm |
26 CPU := arm |
22 endif |
27 endif |
23 |
28 |
73 ifdef EXTRA_INC_PATH |
78 ifdef EXTRA_INC_PATH |
74 ASMINCPATH := $(EXTRA_INC_PATH) |
79 ASMINCPATH := $(EXTRA_INC_PATH) |
75 endif |
80 endif |
76 |
81 |
77 ifeq "$(CPU)" "arm" |
82 ifeq "$(CPU)" "arm" |
|
83 |
|
84 ifdef ARMCC |
78 ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC) |
85 ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC) |
79 ARMASM_OUT := $(shell armasm 2>&1) |
86 ARMASM_OUT := $(shell armasm 2>&1) |
80 ARMASM_OUT_RVCT := $(wordlist 1,6,$(ARMASM_OUT)) |
87 ARMASM_OUT_RVCT := $(wordlist 1,6,$(ARMASM_OUT)) |
81 ARMASM_OUT_6 := $(word 6,$(ARMASM_OUT)) |
88 ARMASM_OUT_6 := $(word 6,$(ARMASM_OUT)) |
82 |
89 |
91 OP := -- |
98 OP := -- |
92 endif |
99 endif |
93 ifeq "$(ARMASM_OUT_6)" "2.37" |
100 ifeq "$(ARMASM_OUT_6)" "2.37" |
94 TOOLVER := 211 |
101 TOOLVER := 211 |
95 endif |
102 endif |
|
103 endif |
|
104 |
|
105 ifdef GCCE |
|
106 TOOLVER := GCCE |
|
107 ifeq (linux,$(HOST_PLATFORM)) |
|
108 EXE_SUFFIX := |
|
109 else |
|
110 EXE_SUFFIX := .exe |
|
111 endif |
|
112 ifdef SBS_GCCE432BIN |
|
113 GCCEBIN := $(SBS_GCCE432BIN) |
|
114 else ifdef SBS_GCCE433BIN |
|
115 GCCEBIN := $(SBS_GCCE433BIN) |
|
116 else ifdef SBS_GCCE441BIN |
|
117 GCCEBIN := $(SBS_GCCE441BIN) |
|
118 endif |
|
119 GCCEASM := $(GCCEBIN)/arm-none-symbianelf-as$(EXE_SUFFIX) |
|
120 GCCELD := $(GCCEBIN)/arm-none-symbianelf-ld$(EXE_SUFFIX) |
|
121 GCCESTRIP := $(GCCEBIN)/arm-none-symbianelf-strip$(EXE_SUFFIX) |
|
122 endif |
|
123 |
96 endif |
124 endif |
97 |
125 |
98 ifeq "$(MEMMODEL)" "direct" |
126 ifeq "$(MEMMODEL)" "direct" |
99 CFG_MM := CFG_MMDirect |
127 CFG_MM := CFG_MMDirect |
100 endif |
128 endif |
240 $(STRIP) -O binary -o $(TEMPTRG) $< |
268 $(STRIP) -O binary -o $(TEMPTRG) $< |
241 $(COPY) $(TEMPTRG) $@ |
269 $(COPY) $(TEMPTRG) $@ |
242 $(ERASE) $(call slash2generic,$(TEMPTRG)) |
270 $(ERASE) $(call slash2generic,$(TEMPTRG)) |
243 endef |
271 endef |
244 endif |
272 endif |
|
273 ifeq "$(TOOLVER)" "GCCE" |
|
274 ASM_MACROS += USE_CXSF GNU_ASM |
|
275 ASM := $(GCCEASM) |
|
276 ASM_LIST_OPTS := -acdhlms |
|
277 LINK := $(GCCELD) |
|
278 STRIP := $(GCCESTRIP) |
|
279 SRCEXT := s |
|
280 INCEXT := ginc |
|
281 OBJEXT := o |
|
282 EXEEXT := in |
|
283 ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir))) |
|
284 ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--defsym $(macro)=1 ) |
|
285 AFLAGS := -g --keep-locals $(ASM_MACRO_CMD) $(ASMINCPATHCMD) |
|
286 LFLAGS := --Ttext $(LINKBASE) --entry $(LINKBASE) --print-map |
|
287 SYMOPT := -symdefs |
|
288 ASMTYP := AS |
|
289 PROCESS_INCLUDES := 1 |
|
290 ifndef LINKFILE |
|
291 LINKFILE := bootstrap.lnk |
|
292 endif |
|
293 define do_asm |
|
294 perl $(EPOCROOT)/epoc32/tools/armasm2as.pl $< $(join $(basename $@),.ss) |
|
295 $(ASM) $(AFLAGS) -o $@ $(ASM_LIST_OPTS)=$(join $(basename $@),.lst) $(join $(basename $@),.ss) |
|
296 endef |
|
297 define do_link |
|
298 $(call ifexistf,$(join $(basename $@),.lnk),$(ERASE) $(call slash2generic,$(join $(basename $@),.lnk)) ) |
|
299 $(COPY) $(call normalise_path,$(filter %.lnk,$^)) $(join $(basename $@),.lnk) |
|
300 $(LINK) $(LFLAGS) $(SYMOPT)=$(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^) |
|
301 $(COPY) $@ $(join $(basename $(TRG)),.sym) |
|
302 endef |
|
303 define do_strip |
|
304 $(STRIP) -O binary -o $(TEMPTRG) $< |
|
305 $(COPY) $(TEMPTRG) $@ |
|
306 $(ERASE) $(call slash2generic,$(TEMPTRG)) |
|
307 endef |
|
308 endif |
245 endif |
309 endif |
246 |
310 |
247 |
311 |
248 |
312 |
249 # Generic source files |
313 # Generic source files |
296 vpath %.$(SRCEXT) . $(EXTRA_SRC_PATH) $(EXTENSION_ROOT) $(BASESRCPATH) |
360 vpath %.$(SRCEXT) . $(EXTRA_SRC_PATH) $(EXTENSION_ROOT) $(BASESRCPATH) |
297 vpath %.$(OBJEXT) $(EPOCBLDABS) |
361 vpath %.$(OBJEXT) $(EPOCBLDABS) |
298 vpath %.lnk . $(EXTENSION_ROOT) $(EPOCCPUINC) |
362 vpath %.lnk . $(EXTENSION_ROOT) $(EPOCCPUINC) |
299 |
363 |
300 # How to link the object files |
364 # How to link the object files |
301 $(EPOCBLDABS)/$(NAME).$(EXEEXT): $(LINKOBJECTS) $(LINKFILE) $(call pipe,$(EPOCBLDABS)) |
365 $(EPOCBLDABS)/$(NAME).$(EXEEXT): $(LINKOBJECTS) $(LINKFILE) $(call pipe,$(EPOCBLDABS)) |
302 $(do_link) |
366 $(do_link) |
303 |
367 |
304 # How to strip linked object to binary |
368 # How to strip linked object to binary |
305 $(TRG): $(EPOCBLDABS)/$(NAME).$(EXEEXT) |
369 $(TRG): $(EPOCBLDABS)/$(NAME).$(EXEEXT) |
306 $(do_strip) |
370 $(do_strip) |
312 |
376 |
313 $(FULLBASEINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS)) |
377 $(FULLBASEINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS)) |
314 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@ |
378 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@ |
315 |
379 |
316 $(FULLINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS)) |
380 $(FULLINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS)) |
317 perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@ |
381 perl $(EPOCROOT)/epoc32/tools/armasm2as.pl $< $(EPOCBLDABS)/$(notdir $@) |
318 |
382 |
319 $(FULLBASEOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS)) |
383 $(FULLBASEOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS)) |
320 $(do_asm) |
384 $(do_asm) |
321 |
385 |
322 $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS)) |
386 $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS)) |