kernel/eka/extension/bootstrap.mk
author hgs
Mon, 13 Sep 2010 15:16:07 +0100
changeset 269 d57b86b1867a
permissions -rw-r--r--
201035_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
269
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     1
# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     2
# All rights reserved.
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     3
# This component and the accompanying materials are made available
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     4
# under the terms of "Eclipse Public License v1.0"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     5
# which accompanies this distribution, and is available
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     7
#
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     8
# Initial Contributors:
d57b86b1867a 201035_03
hgs
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    10
#
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    11
# Contributors:
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    12
#
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    13
# Description:
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    14
#
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    15
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    16
# To ensure that EPOCROOT always ends with a forward slash. 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    17
TMPROOT:=$(subst \,/,$(EPOCROOT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    18
EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    19
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    20
ifndef CPU
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    21
CPU := arm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    22
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    23
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    24
ifndef LINKBASE
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    25
LINKBASE := 0x00000000
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    26
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    27
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    28
include $(EPOCROOT)epoc32/tools/shell/$(notdir $(basename $(SHELL))).mk
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    29
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    30
PROCEED:=build
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    31
ifneq "$(PBUILDPID)" ""
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    32
        ifneq "$(CFG)" "UREL"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    33
                PROCEED:=skip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    34
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    35
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    36
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    37
COPY := $(call ecopy)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    38
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    39
ifeq "$(CPU)" "x86"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    40
        ifeq "$(MEMMODEL)" "direct"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    41
                BLDSGL:=s
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    42
        else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    43
                ifeq "$(MEMMODEL)" "flexible"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    44
                        BLDSGL:=f
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    45
                else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    46
                        BLDSGL:=
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    47
                endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    48
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    49
        ifdef SMP
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    50
                BLDSMP:=smp
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    51
        else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    52
                BLDSMP:=
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    53
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    54
        EPOCROOT:=$(subst /,\,$(EPOCROOT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    55
        EPOCBLDABS := $(EPOCROOT)epoc32\build\tasm$(PBUILDPID)\$(BLDSGL)$(VNAME)$(BLDSMP)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    56
else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    57
        DRIVELETTER := $(shell cd 2>NUL)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    58
        DRIVELETTER_2 := $(word 1,$(subst \, ,$(DRIVELETTER)))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    59
        EPOCBLDABS_1 := $(subst $(TO_ROOT),,$(EPOCBLD))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    60
        EPOCBLDABS_2 := $(subst $(DRIVELETTER_2),,$(EPOCBLDABS_1))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    61
        
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    62
        EPOCBLDABS := $(call epocbldabs,$(DRIVELETTER_2),$(EPOCBLDABS_2))/$(NAME)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    63
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    64
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    65
EPOCINC := $(INC_PATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    66
EPOCKERNINC := $(EPOCINC)/kernel
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    67
EPOCCPUINC := $(EPOCKERNINC)/$(CPU)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    68
EPOCMMINC := $(INC_PATH)/memmodel/epoc/$(MEMMODEL)/$(CPU)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    69
EPOCTRG := $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    70
TRG := $(EPOCTRG)/$(NAME).bin
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    71
TEMPTRG := $(EPOCBLDABS)/$(NAME).bin
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    72
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    73
ifdef EXTRA_INC_PATH
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    74
ASMINCPATH := $(EXTRA_INC_PATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    75
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    76
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    77
ifeq "$(CPU)" "arm"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    78
ASMINCPATH := . $(EPOCBLDABS) $(ASMINCPATH) $(EXTENSION_ROOT) $(EPOCCPUINC)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    79
ARMASM_OUT := $(shell armasm 2>&1)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    80
ARMASM_OUT_4 := $(word 4,$(ARMASM_OUT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    81
ARMASM_OUT_6 := $(word 6,$(ARMASM_OUT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    82
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    83
# Use GCC toolchain if no other is available
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    84
TOOLVER := GCC
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    85
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    86
RVCTSTR := $(strip $(findstring RVCT, $(ARMASM_OUT_4)))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    87
ifeq "$(RVCTSTR)" "RVCT"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    88
        TOOLVER := RVCT
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    89
        OP := --
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    90
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    91
ifeq "$(ARMASM_OUT_6)" "2.37"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    92
        TOOLVER := 211
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    93
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    94
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    95
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    96
ifeq "$(MEMMODEL)" "direct"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    97
CFG_MM := CFG_MMDirect
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    98
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
    99
ifeq "$(MEMMODEL)" "moving"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   100
CFG_MM := CFG_MMMoving
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   101
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   102
ifeq "$(MEMMODEL)" "multiple"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   103
CFG_MM := CFG_MMMultiple
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   104
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   105
ifeq "$(MEMMODEL)" "flexible"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   106
CFG_MM := CFG_MMFlexible
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   107
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   108
ifndef CFG_MM
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   109
$(error Memory model unknown)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   110
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   111
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   112
ASM_MACROS += $(CFG_MM)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   113
ifdef SMP
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   114
        ASM_MACROS += SMP
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   115
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   116
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   117
ifeq "$(CPU)" "x86"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   118
        ifndef BASEINCLUDES
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   119
                BASEINCLUDES := bootcpu.inc bootmacr.inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   120
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   121
        ifndef BASESOURCES
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   122
                BASESOURCES := bootmain.asm bootcpu.asm bootutil.asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   123
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   124
        GENINCLUDES := $(GENINCLUDES) x86boot.h
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   125
        ASMINCPATH := . 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   126
        ASM := tasm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   127
        LINK := tlink
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   128
        EXE2BIN := exe2bin
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   129
        SRCEXT := asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   130
        INCEXT := inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   131
        OBJEXT := obj
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   132
        EXEEXT := exe
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   133
        
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   134
        ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join /i,$(call slash2generic,$(dir))))   
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   135
        ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),/d$(macro)=1)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   136
        AFLAGS := /l /m3 /ML /W-PDC $(ASM_MACRO_CMD) $(ASMINCPATHCMD)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   137
        LFLAGS := /m /s /n /3 /c
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   138
        ASMTYP := TASM
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   139
        LINKFILE :=
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   140
        define do_asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   141
                cd $(EPOCBLDABS) && $(CP) $(call slash2generic,$<) .
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   142
                cd $(EPOCBLDABS) && $(ASM) $(AFLAGS) $(notdir $<)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   143
        endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   144
        define do_link
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   145
                cd $(EPOCBLDABS) && $(LINK) $(LFLAGS) $(filter %.$(OBJEXT),$(foreach obj,$^,$(notdir $(obj)))), temp.exe
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   146
                cd $(EPOCBLDABS) && $(COPY) temp.exe $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   147
                cd $(EPOCBLDABS) && $(ERASE) temp.exe
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   148
        endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   149
        define do_strip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   150
                cd $(EPOCBLDABS) && $(COPY) $< temp.exe
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   151
                cd $(EPOCBLDABS) && $(EXE2BIN) temp.exe temp.bin
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   152
                cd $(EPOCBLDABS) && $(COPY) temp.bin $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   153
                cd $(EPOCBLDABS) && $(ERASE) temp.exe temp.bin
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   154
        endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   155
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   156
ifeq "$(CPU)" "arm"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   157
        ifeq "$(TOOLVER)" "211"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   158
                ASM := armasm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   159
                LINK := armlink
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   160
                SRCEXT := s
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   161
                INCEXT := inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   162
                OBJEXT := o
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   163
                EXEEXT := in
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   164
                ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   165
                ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),-predefine "$(macro) SETL {TRUE}")
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   166
                AFLAGS := $(ASM_ARM211_VARIANTFLAGS) -apcs 3/32bit/nosw -Length 0 -Width 200 $(ASM_MACRO_CMD) $(ASMINCPATHCMD)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   167
                LFLAGS := -Base $(LINKBASE) -Data 0xf0000000 -Entry $(LINKBASE) -Bin -map
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   168
                SYMOPT := -symbols
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   169
                ASMTYP := ARMASM
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   170
                LINKFILE :=
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   171
                define do_asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   172
                        $(ASM) $(AFLAGS) -o $@ -LIST $(join $(basename $@),.lst) $<
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   173
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   174
                define do_link
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   175
                        $(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   176
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   177
                define do_strip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   178
                        @if exist $@ $(ERASE) $(call slash2generic,$@) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   179
                        $(COPY) $< $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   180
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   181
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   182
        ifeq "$(TOOLVER)" "RVCT"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   183
                ASM_MACROS += USE_CXSF
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   184
                ASM := armasm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   185
                LINK := armlink
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   186
                FROMELF := fromelf
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   187
                SRCEXT := s
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   188
                INCEXT := inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   189
                OBJEXT := o
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   190
                EXEEXT := in
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   191
                ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   192
                ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),$(OP)predefine "$(macro) SETL {TRUE}")
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   193
                AFLAGS := -g $(OP)keep $(ASM_MACRO_CMD) $(ASMINCPATHCMD) $(ASM_RVCT_VARIANTFLAGS)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   194
                LFLAGS := $(OP)ro-base $(LINKBASE) $(OP)entry $(LINKBASE) $(OP)map
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   195
                SYMOPT := $(OP)symdefs
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   196
                ASMTYP := ARMASM
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   197
                LINKFILE :=
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   198
                define do_asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   199
                        $(ASM) $(AFLAGS) -o $@ $(OP)LIST $(join $(basename $@),.lst) $<
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   200
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   201
                define do_link
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   202
                        $(LINK) $(LFLAGS) $(SYMOPT) $(join $(basename $@),.sym) -o $@ $(filter %.$(OBJEXT),$^)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   203
                        $(COPY) $@ $(join $(basename $(TRG)),.sym)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   204
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   205
                define do_strip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   206
                        $(FROMELF) $(OP)bin $(OP)output $@ $<
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   207
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   208
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   209
        ifeq "$(TOOLVER)" "GCC"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   210
                ASM_MACROS += USE_CXSF GNU_ASM
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   211
                ASM := as
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   212
                LINK := ld
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   213
                STRIP := strip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   214
                SRCEXT := s
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   215
                INCEXT := ginc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   216
                OBJEXT := o
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   217
                EXEEXT := in
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   218
                ASMINCPATHCMD := $(foreach dir,$(ASMINCPATH),$(join -I ,$(dir)))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   219
                ASM_MACRO_CMD := $(foreach macro,$(ASM_MACROS),--defsym $(macro)=1 )
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   220
                AFLAGS := -mapcs-32 -R -n $(ASM_MACRO_CMD) -I- $(ASMINCPATHCMD)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   221
                LFLAGS := -n -x --section-alignment 4 --file-alignment 2 -no-whole-archive
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   222
                SYMOPT := -symdefs
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   223
                ASMTYP := AS
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   224
                PROCESS_INCLUDES := 1
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   225
                ifndef LINKFILE
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   226
                        LINKFILE := bootstrap.lnk
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   227
                endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   228
                define do_asm
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   229
                        perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $(join $(basename $@),.ss)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   230
                        $(ASM) $(AFLAGS) -acdhlms=$(join $(basename $@),.lst) -o $@ $(join $(basename $@),.ss)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   231
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   232
                define do_link
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   233
                        if exist $(join $(basename $@),.lnk) $(ERASE) $(call slash2generic,$(join $(basename $@),.lnk)) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   234
                        $(COPY) $(subst /,\,$(filter %.lnk,$^)) $(join $(basename $@),.lnk)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   235
                        $(LINK) -M -o $@ $(filter %.$(OBJEXT),$^) $(LFLAGS) --script=$(join $(basename $@),.lnk) >$(join $(basename $@),.map)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   236
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   237
                define do_strip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   238
                        $(STRIP) -O binary -o $(TEMPTRG) $<
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   239
                        $(COPY) $(TEMPTRG) $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   240
                        $(ERASE) $(call slash2generic,$(TEMPTRG)) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   241
                endef
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   242
        endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   243
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   244
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   245
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   246
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   247
# Generic source files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   248
ifndef BASESOURCES
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   249
BASESOURCES := bootmain.s bootcpu.s bootutils.s
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   250
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   251
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   252
# Path for generic source files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   253
ifndef BASESRCPATH
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   254
BASESRCPATH := $(E32PATH)/eka/kernel/$(CPU)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   255
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   256
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   257
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   258
# Generated include files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   259
GENINCLUDES := $(foreach f,$(GENINCLUDES),$(basename $(f)).$(INCEXT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   260
GENINCLUDES := $(GENINCLUDES) e32rom.$(INCEXT) kernboot.$(INCEXT)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   261
GENINCLUDES := $(GENINCLUDES) bootdefs.$(INCEXT)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   262
ifneq "$(MEMMODEL)" "direct"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   263
GENINCLUDES := $(GENINCLUDES) mmboot.$(INCEXT)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   264
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   265
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   266
# Headers from which GENINCLUDES are generated
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   267
GENHEADERS = $(foreach inc,$(GENINCLUDES),$(basename $(inc)).h)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   268
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   269
# Non-generated generic include files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   270
ifndef BASEINCLUDES
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   271
BASEINCLUDES := bootcpu.inc bootmacro.inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   272
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   273
BASEINCLUDES := $(foreach f,$(BASEINCLUDES),$(basename $(f)).$(INCEXT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   274
INCLUDES := $(foreach f,$(INCLUDES),$(basename $(f)).$(INCEXT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   275
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   276
# Generic object files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   277
BASEOBJECTS = $(foreach src, $(BASESOURCES), $(basename $(src)).$(OBJEXT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   278
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   279
# Platform specific object files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   280
OBJECTS = $(foreach src, $(SOURCES), $(basename $(src)).$(OBJEXT))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   281
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   282
# Object files with paths
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   283
FULLBASEOBJECTS = $(addprefix $(EPOCBLDABS)/,$(BASEOBJECTS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   284
FULLOBJECTS = $(addprefix $(EPOCBLDABS)/,$(OBJECTS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   285
LINKOBJECTS = $(FULLBASEOBJECTS) $(FULLOBJECTS)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   286
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   287
# Generated include files with paths
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   288
FULLGENINCLUDES = $(addprefix $(EPOCBLDABS)/,$(GENINCLUDES))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   289
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   290
# Tell make where to look for things
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   291
vpath %.h . $(EXTRA_INC_PATH) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   292
vpath %.inc . $(EXTRA_INC_PATH) $(EXTENSION_ROOT) $(EPOCINC) $(EPOCKERNINC) $(EPOCCPUINC) $(EPOCMMINC) $(EPOCBLDABS)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   293
vpath %.ginc $(EPOCBLDABS)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   294
vpath %.$(SRCEXT) . $(EXTRA_SRC_PATH) $(EXTENSION_ROOT) $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   295
vpath %.$(OBJEXT) $(EPOCBLDABS)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   296
vpath %.lnk . $(EXTENSION_ROOT) $(EPOCCPUINC)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   297
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   298
# How to link the object files 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   299
$(EPOCBLDABS)/$(NAME).$(EXEEXT): $(LINKOBJECTS) $(LINKFILE) $(call pipe,$(EPOCBLDABS)) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   300
	$(do_link)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   301
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   302
# How to strip linked object to binary
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   303
$(TRG): $(EPOCBLDABS)/$(NAME).$(EXEEXT)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   304
	$(do_strip)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   305
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   306
# How to assemble the source files
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   307
ifdef PROCESS_INCLUDES
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   308
FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   309
FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   310
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   311
$(FULLBASEINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   312
	perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   313
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   314
$(FULLINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.inc $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   315
	perl $(EPOCROOT)epoc32/tools/armasm2as.pl $< $@
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   316
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   317
$(FULLBASEOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   318
	$(do_asm)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   319
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   320
$(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLINCLUDES) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   321
	$(do_asm)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   322
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   323
else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   324
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   325
ifeq "$(CPU)" "x86"
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   326
FULLBASEINCLUDES := $(addprefix $(EPOCBLDABS)/,$(BASEINCLUDES))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   327
FULLINCLUDES := $(addprefix $(EPOCBLDABS)/,$(INCLUDES))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   328
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   329
$(FULLBASEINCLUDES) $(FULLINCLUDES) : $(EPOCBLDABS)/%.inc : %.inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   330
	$(CP) $(call slash2generic,$<) $(call slash2generic,$@) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   331
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   332
$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(FULLBASEINCLUDES) $(FULLGENINCLUDES) $(FULLINCLUDES)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   333
	$(do_asm)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   334
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   335
else
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   336
$(FULLBASEOBJECTS) $(FULLOBJECTS) : $(EPOCBLDABS)/%.$(OBJEXT) : %.$(SRCEXT) $(BASEINCLUDES) $(FULLGENINCLUDES) $(INCLUDES) $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   337
	$(do_asm)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   338
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   339
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   340
endif
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   341
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   342
# How to translate the .h files to .inc
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   343
$(FULLGENINCLUDES) : $(EPOCBLDABS)/%.$(INCEXT) : %.h $(call pipe,$(EPOCBLDABS))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   344
	perl $(EPOCROOT)epoc32/tools/h2inc.pl $< $@ $(ASMTYP)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   345
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   346
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   347
# How to make the working directories
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   348
$(EPOCBLDABS) $(EPOCTRG) :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   349
	$(call ifnotexistd,$(call slash2generic,$@))
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   350
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   351
# Makmake targets
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   352
.PHONY : MAKMAKE FREEZE LIB CLEANLIB RESOURCE FINAL BLD SAVESPACE RELEASABLES CLEAN
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   353
.PHONY : build skip
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   354
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   355
MAKMAKE :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   356
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   357
	echo $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   358
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   359
FREEZE :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   360
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   361
	echo $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   362
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   363
LIB :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   364
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   365
	echo $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   366
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   367
CLEANLIB :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   368
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   369
	echo $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   370
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   371
RESOURCE :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   372
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   373
	echo $(BASESRCPATH)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   374
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   375
FINAL :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   376
	echo Nothing to do
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   377
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   378
BLD SAVESPACE : $(PROCEED)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   379
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   380
RELEASABLES :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   381
	@echo $(TRG)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   382
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   383
CLEAN :
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   384
	-$(ERASE) $(call slash2generic,$(TRG)) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   385
	-$(ERASE) $(call slash2generic,$(EPOCBLDABS)/*.*) 
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   386
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   387
build: $(EPOCTRG) $(EPOCBLDABS) $(TRG)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   388
	echo Bootstrap built for $(PLATFORM) $(CFG)
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   389
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   390
skip:
d57b86b1867a 201035_03
hgs
parents:
diff changeset
   391
	echo Bootstrap build skipped for $(PLATFORM) $(CFG)