1) Fix for Bug 3166 - [GCCE] -symdefs GCCE linker option is obselete in bootstrap.mk
2) Fix for Bug 3165 - [GCCE] assembler include path is incomplete for GCCE in bootstrap.mk
# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).+ −
# All rights reserved.+ −
# This component and the accompanying materials are made available+ −
# under the terms of "Eclipse Public License v1.0"+ −
# which accompanies this distribution, and is available+ −
# at the URL "http://www.eclipse.org/legal/epl-v10.html".+ −
#+ −
# Initial Contributors:+ −
# Nokia Corporation - initial contribution.+ −
#+ −
# Contributors:+ −
#+ −
# Description:+ −
#+ −
+ −
# To ensure that EPOCROOT always ends with a forward slash.+ −
TMPROOT:=$(subst \,/,$(EPOCROOT))+ −
EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/+ −
+ −
HOST_PLATFORM := $(patsubst linux%,linux,$(HOSTPLATFORM_DIR))+ −
ifeq (linux,$(HOST_PLATFORM))+ −
INC_PATH := $(EPOCROOT)epoc32/include/platform+ −
endif+ −
+ −
ifndef CPU+ −
CPU := arm+ −
endif+ −
+ −
ifndef LINKBASE+ −
LINKBASE := 0x00000000+ −
endif+ −
+ −
include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk+ −
+ −
PROCEED:=build+ −
ifneq "$(PBUILDPID)" ""+ −
ifneq "$(CFG)" "UREL"+ −
PROCEED:=skip+ −
endif+ −
endif+ −
+ −
COPY := $(call ecopy)+ −
+ −
ifeq "$(CPU)" "x86"+ −
ifeq "$(MEMMODEL)" "direct"+ −
BLDSGL:=s+ −
else+ −
ifeq "$(MEMMODEL)" "flexible"+ −
BLDSGL:=f+ −
else+ −
BLDSGL:=+ −
endif+ −
endif+ −
ifdef SMP+ −
BLDSMP:=smp+ −
else+ −
BLDSMP:=+ −
endif+ −
EPOCROOT:=$(subst /,\,$(EPOCROOT))+ −
EPOCBLDABS := $(EPOCROOT)epoc32\build\tasm$(PBUILDPID)\$(BLDSGL)$(VNAME)$(BLDSMP)+ −
else+ −
DRIVELETTER := $(shell cd 2>NUL)+ −
DRIVELETTER_2 := $(word 1,$(subst \, ,$(DRIVELETTER)))+ −
EPOCBLDABS_1 := $(subst $(TO_ROOT),,$(EPOCBLD))+ −
EPOCBLDABS_2 := $(subst $(DRIVELETTER_2),,$(EPOCBLDABS_1))+ −
+ −
EPOCBLDABS := $(call epocbldabs,$(DRIVELETTER_2),$(EPOCBLDABS_2))/$(NAME)+ −
endif+ −
+ −
EPOCINC := $(INC_PATH)+ −
EPOCKERNINC := $(EPOCINC)/kernel+ −
EPOCCPUINC := $(EPOCKERNINC)/$(CPU)+ −
EPOCMMINC := $(INC_PATH)/memmodel/epoc/$(MEMMODEL)/$(CPU)+ −
EPOCTRG := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)+ −
TRG := $(EPOCTRG)/$(NAME).bin+ −
TEMPTRG := $(EPOCBLDABS)/$(NAME).bin+ −
+ −
ifdef EXTRA_INC_PATH+ −
ASMINCPATH := $(EXTRA_INC_PATH)+ −
endif+ −
+ −
ifeq "$(CPU)" "arm"+ −
+ −
ifdef ARMCC+ −
ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC)+ −
ARMASM_OUT := $(shell armasm 2>&1)+ −
ARMASM_OUT_RVCT := $(wordlist 1,6,$(ARMASM_OUT))+ −
ARMASM_OUT_6 := $(word 6,$(ARMASM_OUT))+ −
+ −
# Use GCC toolchain if no other is available+ −
TOOLVER := GCC+ −
+ −
# ARM/Thumb Macro Assembler, RVCT2.2 [Build 616]+ −
# ARM Assembler, RVCT4.0 [Build 529]+ −
RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_RVCT)))+ −
ifeq "$(RVCTSTR)" "RVCT"+ −
TOOLVER := RVCT+ −
OP := --+ −
endif+ −
ifeq "$(ARMASM_OUT_6)" "2.37"+ −
TOOLVER := 211+ −
endif+ −
endif+ −
+ −
ifdef GCCE+ −
TOOLVER := GCCE+ −
ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC)+ −
ifeq (linux,$(HOST_PLATFORM))+ −
EXE_SUFFIX :=+ −
else+ −
EXE_SUFFIX := .exe+ −
endif+ −
ifdef SBS_GCCE441BIN+ −
GCCEBIN := $(SBS_GCCE441BIN)+ −
else ifdef SBS_GCCE433BIN+ −
GCCEBIN := $(SBS_GCCE433BIN)+ −
else ifdef SBS_GCCE432BIN+ −
GCCEBIN := $(SBS_GCCE432BIN)+ −
endif+ −
GCCEASM := $(GCCEBIN)/arm-none-symbianelf-as$(EXE_SUFFIX)+ −
GCCELD := $(GCCEBIN)/arm-none-symbianelf-ld$(EXE_SUFFIX)+ −
GCCESTRIP := $(GCCEBIN)/arm-none-symbianelf-strip$(EXE_SUFFIX)+ −
endif+ −
+ −
endif+ −
+ −
ifeq "$(MEMMODEL)" "direct"+ −
CFG_MM := CFG_MMDirect+ −
endif+ −
ifeq "$(MEMMODEL)" "moving"+ −
CFG_MM := CFG_MMMoving+ −
endif+ −
ifeq "$(MEMMODEL)" "multiple"+ −
CFG_MM := CFG_MMMultiple+ −
endif+ −
ifeq "$(MEMMODEL)" "flexible"+ −
CFG_MM := CFG_MMFlexible+ −
endif+ −
ifndef CFG_MM+ −
$(error Memory model unknown)+ −
endif+ −
+ −
ASM_MACROS += $(CFG_MM)+ −
ifdef SMP+ −
ASM_MACROS += SMP+ −
endif+ −
+ −
ifeq "$(CPU)" "x86"+ −
ifndef BASEINCLUDES+ −
BASEINCLUDES := bootcpu.inc bootmacr.inc+ −
endif+ −
ifndef BASESOURCES+ −
BASESOURCES := bootmain.asm bootcpu.asm bootutil.asm+ −
endif+ −
GENINCLUDES := $(GENINCLUDES) x86boot.h+ −
ASMINCPATH := . + −
ASM := tasm+ −
LINK := tlink+ −
EXE2BIN := exe2bin+ −
SRCEXT := asm+ −
INCEXT := inc+ −
OBJEXT := obj+ −
EXEEXT := exe+ −
+ −
ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join /i,$(call slash2generic,$(dir)))) + −
ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),/d$(macro)=1)+ −
AFLAGS := /l /m3 /ML /W-PDC $(ASM_MACRO_CMD) $(ASMINCPATHCMD)+ −
LFLAGS := /m /s /n /3 /c+ −
ASMTYP := TASM+ −
LINKFILE :=+ −
define do_asm+ −
cd $(EPOCBLDABS) && $(CP) $(call slash2generic,$<) .+ −
cd $(EPOCBLDABS) && $(ASM) $(AFLAGS) $(notdir $<)+ −
endef+ −
define do_link+ −
cd $(EPOCBLDABS) && $(LINK) $(LFLAGS) $(filter %.$(OBJEXT),$(foreach obj,$^,$(notdir $(obj)))), temp.exe+ −
cd $(EPOCBLDABS) && $(COPY) temp.exe $@+ −
cd $(EPOCBLDABS) && $(ERASE) temp.exe+ −
endef+ −
define do_strip+ −
cd $(EPOCBLDABS) && $(COPY) $< temp.exe+ −
cd $(EPOCBLDABS) && $(EXE2BIN) temp.exe temp.bin+ −
cd $(EPOCBLDABS) && $(COPY) temp.bin $@+ −
cd $(EPOCBLDABS) && $(ERASE) temp.exe temp.bin+ −
endef+ −
endif+ −
ifeq "$(CPU)" "arm"+ −
ifeq "$(TOOLVER)" "211"+ −
ASM := armasm+ −
LINK := armlink+ −
SRCEXT := s+ −
INCEXT := inc+ −
OBJEXT := o+ −
EXEEXT := in+ −
ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))+ −
ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),-predefine "$(macro) SETL {TRUE}")+ −
AFLAGS := $(ASM_ARM211_VARIANTFLAGS) -apcs 3/32bit/nosw -Length 0 -Width 200 $(ASM_MACRO_CMD) $(ASMINCPATHCMD)+ −
LFLAGS := -Base $(LINKBASE) -Data 0xf0000000 -Entry $(LINKBASE) -Bin -map+ −
SYMOPT := -symbols+ −
ASMTYP := ARMASM+ −
LINKFILE :=+ −
define do_asm+ −
$(ASM) $(AFLAGS) -o $@ -LIST $(join $(basename $@),.lst) $<+ −
endef+ −
define do_link+ −
$(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)+ −
endef+ −
define do_strip+ −
@if exist $@ $(ERASE) $(call slash2generic,$@) + −
$(COPY) $< $@+ −
endef+ −
endif+ −
ifeq "$(TOOLVER)" "RVCT"+ −
ASM_MACROS += USE_CXSF+ −
ASM := armasm+ −
LINK := armlink+ −
FROMELF := fromelf+ −
SRCEXT := s+ −
INCEXT := inc+ −
OBJEXT := o+ −
EXEEXT := in+ −
ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))+ −
ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")+ −
AFLAGS := -g $(OP)keep $(ASM_MACRO_CMD) $(ASMINCPATHCMD) $(ASM_RVCT_VARIANTFLAGS)+ −
LFLAGS := $(OP)ro-base $(LINKBASE) $(OP)entry $(LINKBASE) $(OP)map+ −
SYMOPT := $(OP)symdefs+ −
ASMTYP := ARMASM+ −
LINKFILE :=+ −
define do_asm+ −
$(ASM) $(AFLAGS) -o $@ $(OP)LIST $(join $(basename $@),.lst) $<+ −
endef+ −
define do_link+ −
$(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)+ −
$(COPY) $@ $(join $(basename $(TRG)),.sym)+ −
endef+ −
define do_strip+ −
$(FROMELF) $(OP)bin $(OP)output $@ $<+ −
endef+ −
endif+ −
ifeq "$(TOOLVER)" "GCC"+ −
ASM_MACROS += USE_CXSF GNU_ASM+ −
ASM := as+ −
LINK := ld+ −
STRIP := strip+ −
SRCEXT := s+ −
INCEXT := ginc+ −
OBJEXT := o+ −
EXEEXT := in+ −
ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))+ −
ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--defsym $(macro)=1 )+ −
AFLAGS := -mapcs-32 -R -n $(ASM_MACRO_CMD) -I- $(ASMINCPATHCMD)+ −
LFLAGS := -n -x --section-alignment 4 --file-alignment 2 -no-whole-archive+ −
SYMOPT := -symdefs+ −
ASMTYP := AS+ −
PROCESS_INCLUDES := 1+ −
ifndef LINKFILE+ −
LINKFILE := bootstrap.lnk+ −
endif+ −
define do_asm+ −
perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.ss)+ −
$(ASM) $(AFLAGS) -acdhlms=$(join $(basename $@),.lst) -o $@ $(join $(basename $@),.ss)+ −
endef+ −
define do_link+ −
if exist $(join $(basename $@),.lnk) $(ERASE) $(call slash2generic,$(join $(basename $@),.lnk)) + −
$(COPY) $(subst /,\,$(filter %.lnk,$^)) $(join $(basename $@),.lnk)+ −
$(LINK) -M -o $@ $(filter %.$(OBJEXT),$^) $(LFLAGS) --script=$(join $(basename $@),.lnk) >$(join $(basename $@),.map)+ −
endef+ −
define do_strip+ −
$(STRIP) -O binary -o $(TEMPTRG) $<+ −
$(COPY) $(TEMPTRG) $@+ −
$(ERASE) $(call slash2generic,$(TEMPTRG)) + −
endef+ −
endif+ −
ifeq "$(TOOLVER)" "GCCE"+ −
ASM_MACROS += USE_CXSF GNU_ASM+ −
ASM := $(GCCEASM)+ −
ASM_LIST_OPTS := -acdhlms+ −
LINK := $(GCCELD)+ −
STRIP := $(GCCESTRIP)+ −
SRCEXT := s+ −
INCEXT := ginc+ −
OBJEXT := o+ −
EXEEXT := in+ −
ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))+ −
ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--defsym $(macro)=1 )+ −
AFLAGS := -g --keep-locals $(ASM_MACRO_CMD) $(ASMINCPATHCMD)+ −
LFLAGS := -Ttext $(LINKBASE) --entry $(LINKBASE) --print-map+ −
ASMTYP := AS+ −
PROCESS_INCLUDES := 1+ −
ifndef LINKFILE+ −
LINKFILE := bootstrap.lnk+ −
endif+ −
define do_asm+ −
perl $(EPOCROOT)/epoc32/tools/armasm2as.pl $< $(join $(basename $@),.ss)+ −
$(ASM) $(AFLAGS) -o $@ $(ASM_LIST_OPTS)=$(join $(basename $@),.lst) $(join $(basename $@),.ss)+ −
endef+ −
define do_link+ −
$(call ifexistf,$(join $(basename $@),.lnk),$(ERASE) $(call slash2generic,$(join $(basename $@),.lnk)) )+ −
$(COPY) $(call normalise_path,$(filter %.lnk,$^)) $(join $(basename $@),.lnk)+ −
$(LINK) $(LFLAGS) -o $@ $(filter %.$(OBJEXT),$^)+ −
$(COPY) $@ $(join $(basename $(TRG)),.sym)+ −
endef+ −
define do_strip+ −
$(STRIP) -O binary -o $(TEMPTRG) $<+ −
$(COPY) $(TEMPTRG) $@+ −
$(ERASE) $(call slash2generic,$(TEMPTRG)) + −
endef+ −
endif+ −
endif+ −
+ −
+ −
+ −
# Generic source files+ −
ifndef BASESOURCES+ −
BASESOURCES := bootmain.s bootcpu.s bootutils.s+ −
endif+ −
+ −
# Path for generic source files+ −
ifndef BASESRCPATH+ −
BASESRCPATH := $(E32PATH)/eka/kernel/$(CPU)+ −
endif+ −
+ −
+ −
# Generated include files+ −
GENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))+ −
GENINCLUDES := $(GENINCLUDES) e32rom.$(INCEXT) kernboot.$(INCEXT)+ −
GENINCLUDES := $(GENINCLUDES) bootdefs.$(INCEXT)+ −
ifneq "$(MEMMODEL)" "direct"+ −
GENINCLUDES := $(GENINCLUDES) mmboot.$(INCEXT)+ −
endif+ −
+ −
# Headers from which GENINCLUDES are generated+ −
GENHEADERS = $(foreach inc,$(GENINCLUDES),$(basename $(inc)).h)+ −
+ −
# Non-generated generic include files+ −
ifndef BASEINCLUDES+ −
BASEINCLUDES := bootcpu.inc bootmacro.inc+ −
endif+ −
BASEINCLUDES := $(foreach f,$(BASEINCLUDES),$(basename $(f)).$(INCEXT))+ −
INCLUDES := $(foreach f,$(INCLUDES),$(basename $(notdir $(f))).$(INCEXT))+ −
+ −
# Generic object files+ −
BASEOBJECTS = $(foreach src, $(BASESOURCES), $(basename $(src)).$(OBJEXT))+ −
+ −
# Platform specific object files+ −
OBJECTS = $(foreach src, $(SOURCES), $(basename $(src)).$(OBJEXT))+ −
+ −
# Object files with paths+ −
FULLBASEOBJECTS = $(addprefix $(EPOCBLDABS)/,$(BASEOBJECTS))+ −
FULLOBJECTS = $(addprefix $(EPOCBLDABS)/,$(OBJECTS))+ −
LINKOBJECTS = $(FULLBASEOBJECTS) $(FULLOBJECTS)+ −
+ −
# Generated include files with paths+ −
FULLGENINCLUDES = $(addprefix $(EPOCBLDABS)/,$(GENINCLUDES))+ −
+ −
# Tell make where to look for things+ −
vpath %.h . $(EXTRA_INC_PATH) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC)+ −
vpath %.inc . $(EXTRA_INC_PATH) $(EXTENSION_ROOT) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC) $(EPOCBLDABS)+ −
vpath %.ginc $(EPOCBLDABS)+ −
vpath %.$(SRCEXT) . $(EXTRA_SRC_PATH) $(EXTENSION_ROOT) $(BASESRCPATH)+ −
vpath %.$(OBJEXT) $(EPOCBLDABS)+ −
vpath %.lnk . $(EXTENSION_ROOT) $(EPOCCPUINC)+ −
+ −
# How to link the object files + −
$(EPOCBLDABS)/$(NAME).$(EXEEXT): $(LINKOBJECTS) $(LINKFILE) $(call pipe,$(EPOCBLDABS))+ −
$(do_link)+ −
+ −
# How to strip linked object to binary+ −
$(TRG): $(EPOCBLDABS)/$(NAME).$(EXEEXT)+ −
$(do_strip)+ −
+ −
# How to assemble the source files+ −
ifdef PROCESS_INCLUDES+ −
FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))+ −
FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))+ −
+ −
$(FULLBASEINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))+ −
perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@+ −
+ −
$(FULLINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))+ −
perl $(EPOCROOT)/epoc32/tools/armasm2as.pl $< $@+ −
+ −
$(FULLBASEOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))+ −
$(do_asm)+ −
+ −
$(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))+ −
$(do_asm)+ −
+ −
else+ −
+ −
ifeq "$(CPU)" "x86"+ −
FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))+ −
FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))+ −
+ −
$(FULLBASEINCLUDES) $(FULLINCLUDES) : $(EPOCBLDABS)/%.inc : %.inc+ −
$(CP) $(call slash2generic,$<) $(call slash2generic,$@) + −
+ −
$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(FULLINCLUDES)+ −
$(do_asm)+ −
+ −
else+ −
$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(BASEINCLUDES) $(FULLGENINCLUDES) $(INCLUDES) $(call pipe,$(EPOCBLDABS))+ −
$(do_asm)+ −
+ −
endif+ −
endif+ −
+ −
# How to translate the .h files to .inc+ −
$(FULLGENINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.h $(call pipe,$(EPOCBLDABS))+ −
perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ $(ASMTYP)+ −
+ −
+ −
# How to make the working directories+ −
$(EPOCBLDABS) $(EPOCTRG) :+ −
$(call ifnotexistd,$(call slash2generic,$@))+ −
+ −
# Makmake targets+ −
.PHONY : MAKMAKE FREEZE LIB CLEANLIB RESOURCE FINAL BLD SAVESPACE RELEASABLES CLEAN+ −
.PHONY : build skip+ −
+ −
MAKMAKE :+ −
echo Nothing to do+ −
echo $(BASESRCPATH)+ −
+ −
FREEZE :+ −
echo Nothing to do+ −
echo $(BASESRCPATH)+ −
+ −
LIB :+ −
echo Nothing to do+ −
echo $(BASESRCPATH)+ −
+ −
CLEANLIB :+ −
echo Nothing to do+ −
echo $(BASESRCPATH)+ −
+ −
RESOURCE :+ −
echo Nothing to do+ −
echo $(BASESRCPATH)+ −
+ −
FINAL :+ −
echo Nothing to do+ −
+ −
BLD SAVESPACE : $(PROCEED)+ −
+ −
RELEASABLES :+ −
@echo $(TRG)+ −
+ −
CLEAN :+ −
-$(ERASE) $(call slash2generic,$(TRG)) + −
-$(ERASE) $(call slash2generic,$(EPOCBLDABS)/*.*) + −
+ −
build: $(EPOCTRG) $(EPOCBLDABS) $(TRG)+ −
echo Bootstrap built for $(PLATFORM) $(CFG)+ −
+ −
skip:+ −
echo Bootstrap build skipped for $(PLATFORM) $(CFG)+ −