sbsv1_os/e32toolp/platform/GCCE.mk
author Mike Kinghan <mikek@symbian.org>
Tue, 16 Nov 2010 14:32:12 +0000
branchGCC_SURGE
changeset 79 f7dee603db09
parent 0 83f4b4db085c
child 10 d4b442d23379
permissions -rw-r--r--
[GCCE] We need a way for the HAL config extension to parameterise the HAL config file (.hcf) that will be used, depending upon the toolchain we are building with. E.g. if we are building BeagleBoard with RVCT we can configure hardware floating point because we have ARM's vfp math libraries; if we are building it with GCC, we lack this library support.

# Copyright (c) 1997-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:
# This file provides the definition of variables that are used by the component specific makefile
# This is for the BPABI (Base Platform ABI) platform using the GCCE compiler.
# Functions added as the part of Plugin Architecture
# 
#

#function to find the include path
define find-inc-path
	$(subst /bin/../,/,$(subst libgcc.a,%,$(shell $(CC) -print-libgcc-file-name)))
endef

#function to find the installation path
define find_install_path
	$(subst /bin/../lib/gcc/arm-none-symbianelf/3.4.3,,$(subst libgcc.a,,$(shell $(CC) -print-libgcc-file-name)))
endef

#function to include the version info
define find-version-info
$(strip $(shell $(CC) $(VERSION_OPTION)))
endef

#function to find the library path
#function to determine the libgcc path
define find-gcclib-path
	"$(patsubst %libgcc.a,%,$(shell $(CC) -print-libgcc-file-name))"
endef

#function to determine the libsupc++ path
define find-libsupc-path
	"$(patsubst %/libsupc++.a,%,$(shell $(CC) -print-file-name=libsupc++.a))"
endef

#---------------
# Path Settings
#---------------

# Compiler Installation Location
CC_INSTALL_PATH=$(strip $(call find_install_path))

#----------------------------------
# Programs used from the ToolChain
#----------------------------------

# C++ Compiler
CC=arm-none-symbianelf-g++

# Linker
LD=arm-none-symbianelf-ld

# Assembler
ASM=arm-none-symbianelf-as

# Archiver
AR=arm-none-symbianelf-ar

# Translator to translate the GCC inline assembler code
TRANASM=

#--------------------
# Option Prefix
#--------------------

# This value will be used by the backend to segregate one option from the other.
# If option prefix is one among '+','*','.'or '?' (these metacharacters have specific predefined meaning 
# for pattern matching in Perl) then it should be preceded with '\'.
OPTION_PREFIX=

#------------------
# Compiler Options
#------------------

# Flag whether the compiler requires Unix slashes for absolute paths
UNIX_SLASH_FOR_CC_ABS_PATHS=1

#-------------------
# Debug Mode Options
#-------------------

# Optimization Level in DEBUG mode
DEBUG_OPTIMISATION=

# Option to produce debug information:
#   -g1: little information.
#   -g2: more information.
#   -g : same as -g2.
#   -g3: maximum amount of information. For example, at this level information
#        about macros is created.
DEBUG_OPTION=-g3

# Option to set the debug format.
#
# GCC doesn't support the full DWARF3 format.
DEBUG_FORMAT:=-gdwarf-2

# Specific compiler options for a UDEB build
SYMBIAN_UDEB_CCFLAGS= $(DEBUG_OPTION) $(DEBUG_FORMAT)

#-------------------------
# Target Processor Options 
#-------------------------

# Option to select the appropriate target processor
TARGET_ARCH_OPTION=-march=armv5t

# Option to generate the approproate ARM instruction set.
ARM_INSTRUCTION_SET=-marm

# Option to generate the approproate thumb instruction set.
THUMB_INSTRUCTION_SET=-mthumb

# Compiler define for thumb instruction set
COMPILER_THUMB_DEFINES=-D__MARM_THUMB__

# Compiler define for interwork
COMPILER_INTERWORK_DEFINES=-D__MARM_INTERWORK__

# Option to specify the floating point conformance. 
FPMODE_OPTION=

# Compiler option to select softvfp mode
SOFTVFPMODE_OPTION=-msoft-float

# Compiler option to select hardware floating point unit
VFP2MODE_OPTION=

# Option to force all enumerations to be stored in as integers. 
ENUM_OPTION=

#---------------------------------
# Options controlling C++ Features
#---------------------------------

# Option for handling Virtual functions and Virtual Tables
EXPORT_VTBL_OPTION=

# Disables unused virtual function elimination (VFE) in C++ mode. --vfe is the default
VFE_OPTION= 

# Option to turn on exception handling
EXCEPTIONS=-fexceptions
NO_EXCEPTIONS=-fno-exceptions

#-------------------------------------------------------------------------
# Options controlling the ARM Architecture Procedure Call Standard (AAPCS)
#-------------------------------------------------------------------------

# This Option is for ARM Architecture Procedure Call Standard with the 
# qualifier to support calls between the ARM and Thumb instruction sets.
AAPCS_OPTION=-mapcs -mthumb-interwork

#-----------------------------------------------------------
# Options controlling generation of Compiler Warnings/Errors 
#-----------------------------------------------------------

# Option to control the Compiler warnings
CC_WARNINGS_CONTROL_OPTION=-Wall -Wno-unknown-pragmas

# Option to control the Compiler warnings for building Standard C++ application
CC_STDCPP_WARNINGS_CONTROL_OPTION=-Wall -Wno-unknown-pragmas

# Option to suppress the Compiler errors
CC_ERRORS_CONTROL_OPTION=

# Option to suppress the Compiler errors for building Standard C++
CC_STDCPP_ERRORS_CONTROL_OPTION=

# Option to modify the Compiler warnings and errors for Symbian OS
SYMBIAN_CC_MESSAGE_OPTION=$(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION)

#-----------------
# Optional Options
#-----------------

# Compiler option to avoid the generation of the intermediate files. (Optional)
TEMP_FILES_OPTION=-pipe

# Library Option
OWN_LIBRARY_OPTION=

# Option to generate the Object File
COMPILE_ONLY_OPTION=-c

# Option to generate the Preprocessed File
PREPROCESSOR_OPTION=-E

# Other additional Options to be passed to the compiler
EXTRA_CC_OPTION=

#---------------------
# Preprocessor Options
#---------------------

# Prefix Header File passed to the preprocessor
PREFIXFILE=$(EPOCROOT)EPOC32\INCLUDE\GCCE\GCCE.h

# For .cpp Source files
CPP_LANG_OPTION=-x c++ -Wno-ctor-dtor-privacy

# For .c Source files
C_LANG_OPTION=-x c

# For .cia Source files
CIA_LANG_OPTION=-x c++ -S -Wa,-adln

#-------------------
# Assembler Options
#-------------------

# Option to generate the Assembler instructions
ASSEMBLER_LISTING_OPTION=-S

# Output option used to pass the output file name
ASM_OUTPUT_OPTION=-o

#------------------
# Translator Options
#------------------

# Flags to be passed to the translator
TRANASM_FLAGS=-n -s 

# Output option used to pass the output file name
TRANASM_OUTPUT_OPTION=-o=

# Input option used to pass the input file name
TRANASM_INPUT_OPTION=

#---------------------------
# Include Options and Files
#---------------------------

# Option to specify the location of the header files
INCLUDE_OPTION=-I

# Preinclude file for that compiler that contains all the compiler specific definitions
# required by the Symbian OS source code.
PREINCLUDE_OPTION=-include $(EPOCROOT)EPOC32/INCLUDE/GCCE/GCCE.h

# Include options required by Function Call Logger  
FC_LOGGER_INCLUDE_OPTION=-I
FC_LOGGER_DICTIONARY_FILE_NAME=--dictionary_file_name
FC_LOGGER_GENERATED_C_FILE_NAME=--gen_c_file_name

# Preinclude file to be passed to the Function Call Logger which uses EDG compiler 
PREINCLUDE_OPTION_FCLOGGER=$(FC_LOGGER_INCLUDE_OPTION) $(EPOCROOT)EPOC32/INCLUDE/GCCE --preinclude edg_gcce.h

# Option to control the search for the header files. For example, if we do not want to do a search in the
# standard include directory of C++, then can restrict it by providing the appropriate option.
HEADER_FILES_CONTROL_OPTION=-nostdinc

# Path to pick the header files from the Compiler installation directory
COMPILER_INCLUDE_PATH=$(call find-inc-path)include

# Fetches the version of the tools from the installation directory
VERSION_OPTION=-dumpversion
VERSION_INFO:=$(call find-version-info)

GCC_MAJOR:=$(word 1,$(subst ., , $(VERSION_INFO)))
GCC_MINOR:=$(word 2,$(subst ., , $(VERSION_INFO)))

#---------------------
# Release Mode Options
#---------------------

# Optimization Level in RELEASE mode
REL_OPTIMISATION=-O2 -fno-unit-at-a-time

# Specific compiler options for a UREL build
SYMBIAN_UREL_CCFLAGS=

#---------------------------------
# Symbol Attribute Setting Options
#---------------------------------

# Option to set the visibility of runtime symbols as DEFAULT (instead of HIDDEN)
RUNTIME_SYMBOL_VISIBILITY_OPTION=

# Option to specify the output of the toolchain
OUTPUT_OPTION=-o

# Options to be passed when building System Target(kernel)
KERNEL_OPTIONS=$(ARM_INSTRUCTION_SET) $(NO_EXCEPTIONS)

# Options to be passed when building in Arm mode
ARM_OPTIONS=$(ARM_INSTRUCTION_SET)

# Options to be passed when building in Thumb mode
THUMB_OPTIONS=$(THUMB_INSTRUCTION_SET)

# Common compiler options for Arm and Thumb mode
COMMON_OPTIONS=$(SYMBIAN_CC_MESSAGE_OPTION)

# Invariant Options which cannot be modified by the user from MMP file
INVARIANT_OPTIONS= $(TARGET_ARCH_OPTION) $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) $(EXPORT_VTBL_OPTION) $(VFE_OPTION) $(AAPCS_OPTION)

# Common compiler options for compiling programs targeted at Symbian OS
CCFLAGS=$(COMMON_OPTIONS)  $(INVARIANT_OPTIONS) $(TEMP_FILES_OPTION) $(HEADER_FILES_CONTROL_OPTION) $(COMPILE_ONLY_OPTION) $(EXTRA_CC_OPTION)

#------------------
# Linker Options
#------------------

# Output option used to pass the output file name
LINKER_OUTPUT_OPTION=-o

# Option to generate debug information
LINKER_DEBUG_OPTION=

# Option to *not* generate debug information.
LINKER_NODEBUG_OPTION=--strip-debug

#--------------------------------------------------------------
# Options to generate executables conforming to BPABI standards
#--------------------------------------------------------------

# Option to generate an executable conforming to the Base Platform ABI for the ARM Architecture
BPABI_OPTION=

# The `R_ARM_TARGET1' relocation is typically used for entries in the `.init_array' section. It is
# interpreted as either `R_ARM_REL32' or `R_ARM_ABS32', depending on the target. The following option
# override the default export relocations.
ifeq "$(GCC_MAJOR)" "3"
	TARGET_RELOCATION_OPTION:=--target1-abs
else
	TARGET_RELOCATION_OPTION:=--target1-rel
endif

#-------------------------------------
# Options to specify the output format
#-------------------------------------

# Option to create a relocatable ELF image. A relocatable image has a dynamic segment that contains 
# relocations that can be used to relocate the image post link-time.
RELOCATABLE_IMAGE_OPTION=

# Option to create an ELF shared object.
SHARED_OBJECT_OPTION=-shared

#-------------------------------------------
# Options to set the Start of RO/RW sections
#-------------------------------------------

# Option to set the start of the code section (RO Region)
CODE_SEGMENT_START=-Ttext

# Option to split object into RO and RW sections
SPLIT_OPTION=

# Option to set the start of the Data section (RW region)
RW_BASE_OPTION=-Tdata

# Option to be passed to the linker to set the start of the data section (RW region)
DATA_SEGMENT_START=$(SPLIT_OPTION) $(RW_BASE_OPTION)

#---------------------------------------------------------
# Options controlling generation of Linker Warnings/Errors 
#---------------------------------------------------------

# Option to control the Linker warnings
LD_WARNINGS_CONTROL_OPTION=

# Option to suppress the Linker errors
LD_ERRORS_CONTROL_OPTION=

# Option to modify the Linker warnings and errors for Symbian OS
SYMBIAN_LD_MESSAGE_OPTION=$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)

# Option to specify whether unresolved symbol references from regular object files can be allowed or not.
UNRESOLVED_SYMBOL_REF_OPTION=--no-undefined

# Option to specify the undefined reference
UNDEFINED_SYMBOL_REF_OPTION=-u

# Other additional Options to be passed to the Linker
EXTRA_LD_OPTION=

#-------------------
#Entry Point Options
#-------------------

# Option to pass the explicit symbol for beginning execution of the program
LINKER_ENTRY_OPTION=--entry

# Symbol used to denote the Start of the gouped archives.
START_GROUP_SYMBOL=

# Symbol used to denote the End of the gouped archives.
END_GROUP_SYMBOL=

#-------------------------	
# Library Specific Options
#-------------------------

# Option to control the search in the standard libraries
STDLIB_OPTION=-nostdlib

# Additional static libraries that should be supplied to the linker to be linked with
STATIC_LIBS_LIST=-lsupc++ -lgcc

# Option to pass the path from where the runtime libraries should be picked up
STATIC_LIBS_PATH=-L

# Fetches the library path from the installation directory, here the functions will return null if the 
# proper installation path is not set in the Environment Variable
STATIC_LIBRARY_PATH=$(STATIC_LIBS_PATH)$(call find-gcclib-path) $(STATIC_LIBS_PATH)$(call find-libsupc-path)
STATIC_LIBS=$(STATIC_LIBRARY_PATH)

# Additional runtime libraries that should be supplied to the linker to be linked with
# Provide the libraries separated by space, scppnwdl.dso should come before drtrvct2_2.dso
RUNTIME_LIBS_LIST=dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso
ifeq "$(GCC_MAJOR)" "3" 
	RUNTIME_LIBS_LIST=dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso drtrvct2_2.dso
else
	RUNTIME_LIBS_LIST=drtaeabi.dso dfpaeabi.dso drtrvct3_1.dso dfprvct3_1.dso 
endif

# The library that contains operator new and operator delete.
SYM_NEW_LIB=scppnwdl.dso

# Option to pass the path from where the runtime libraries should be picked up
RUNTIME_LIBS_PATH=

# Option to turn on implicit symbol versioning
SYMVER_OPTION=--default-symver

# Option to specify the shared object name that is stored in the executable
SO_NAME_OPTION=-soname

# Option to generate the map file that provides information about the linking
LINKER_SYMBOLS_OPTION=-Map

# Option to specify the Symbols file
LINKER_SYMBOLS_FILE_OPTION=

# Option to produce the Map file that provides information about linking
LINKER_SYMBOLS_MAP_OPTION=$(LINKER_SYMBOLS_OPTION) $(LINKER_SYMBOLS_FILE_OPTION)

# Option to specify the linker script file
LINKER_SCRIPT_FILE_OPTION=-T

#Via file prefix and suffix 
VIA_FILE_PREFIX=-(
VIA_FILE_SUFFIX=-)	

# option to take object file names from other(via) file, here the condition check for 
# GCCE compiler version is done as the via option differs for different versions in GCCE
ifeq ($(shell $(CC) -dumpversion),3.4.3)
	COMMANDFILE_OPTION=
else 
	COMMANDFILE_OPTION=@
endif

# Linker options which can be customized from BSF 
LD_OPTIONS=$(SYMBIAN_LD_MESSAGE_OPTION)$(UNRESOLVED_SYMBOL_REF_OPTION) $(STDLIB_OPTION) $(EXTRA_LD_OPTION)

# Linker option common to all link commands for UREL build
SYMBIAN_UREL_LINK_FLAGS=$(BPABI_OPTION) $(RELOCATABLE_IMAGE_OPTION) $(TARGET_RELOCATION_OPTION) $(LD_OPTIONS)

# Linker option common to all link commands for UDEB build
SYMBIAN_UDEB_LINK_FLAGS=$(BPABI_OPTION) $(RELOCATABLE_IMAGE_OPTION) $(TARGET_RELOCATION_OPTION) $(LD_OPTIONS)

#-----------------
# Archiver Options
#-----------------

# ARCHIVER variable should be set since there is a dependency for this variable in e32test.
ARCHIVER= $(AR)

ARCHIVER_CREATE_OPTION=cr

# Archiver options which can be set from BSF files
AR_OPTIONS=

#--------------------------------------
# Compiler and Platform specific macros
#--------------------------------------

# Macro definitions required to identify the compiler. Allows for conditional compilation based on compiler
PLATFORM_DEFINES=-D__MARM_ARMV5__

COMPILER_DEFINES=-D__GCCE__

# Compiler target option
COMPILER_PLAT=GCCE

#--------------------------------------
# Function Call Logger Options
#--------------------------------------
FC_LOGGER_OPTION=--wchar_t_keyword --microsoft_version=1300 --diag_suppress 66,161,611,654,815,830,997,1152,1300,1390 

# Defines for Function Call Logger 
FC_LOGGER_DEFINES=

#------------
# OE Options
#------------

# Options to export all the globol symbols and import undefined references, required by OE
OE_OPTIONS=-fvisibility=default

# OE Glue code libs
OE_EXE_LIBS=libcrt0.lib
OE_EXE_LIBS_WCHAR=libwcrt0.lib

# OE Import Libs
OE_IMPORT_LIBS=euser.lib

# The library that contains operator new and operator delete.
OE_NEW_LIB=stdnew.dso

#-----------------------------------------------------------------------------------------------------
#This section defines the interface with Symbian tools 
#This SHOULD NOT be changed as any changes in this section will not be picked up by the tools back end
#-----------------------------------------------------------------------------------------------------

# Programs used from the ToolChain
export  CC
export  LD
export  ASM
export  AR
export  TRANASM

# Preprocessor Options
export  PREFIXFILE
export  CPP_LANG_OPTION
export  C_LANG_OPTION
export  CIA_LANG_OPTION

# Option Prefix
export OPTION_PREFIX

# Compiler Options
export	PREPROCESSOR_OPTION
export  ASSEMBLER_LISTING_OPTION
export  ASM_OUTPUT_OPTION
export  INCLUDE_OPTION
export  PREINCLUDE_OPTION
export  HEADER_FILES_CONTROL_OPTION
export  COMPILER_INCLUDE_PATH
export  SYMBIAN_UREL_CCFLAGS
export  SYMBIAN_UDEB_CCFLAGS
export  REL_OPTIMISATION
export  DEBUG_OPTIMISATION
export  ARM_OPTIONS
export  THUMB_OPTIONS
export  COMMON_OPTIONS
export  INVARIANT_OPTIONS
export  KERNEL_OPTIONS
export  COMPILER_THUMB_DEFINES
export  COMPILER_INTERWORK_DEFINES
export  SOFTVFPMODE_OPTION
export  VFP2MODE_OPTION
export  RUNTIME_SYMBOL_VISIBILITY_OPTION
export  OUTPUT_OPTION
export  CCFLAGS
export  UNIX_SLASH_FOR_CC_ABS_PATHS
export  EXCEPTIONS
export  NO_EXCEPTIONS
export 	VERSION_INFO

# Linker Options
export  LINKER_OUTPUT_OPTION
export  LINKER_DEBUG_OPTION
export  LINKER_NODEBUG_OPTION
export  CODE_SEGMENT_START
export  DATA_SEGMENT_START
export  UNDEFINED_SYMBOL_REF_OPTION
export  LINKER_ENTRY_OPTION
export  START_GROUP_SYMBOL
export  END_GROUP_SYMBOL
export  SHARED_OBJECT_OPTION
export  STDLIB_OPTION
export  STATIC_LIBS_LIST
export  STATIC_LIBS_PATH
export 	STATIC_LIBRARY_PATH
export  STATIC_LIBS
export  RUNTIME_LIBS_LIST
export  RUNTIME_LIBS_PATH
export  SYM_NEW_LIB
export  SYMVER_OPTION
export  SO_NAME_OPTION
export  LINKER_SYMBOLS_MAP_OPTION
export  COMMANDFILE_OPTION
export	VIA_FILE_PREFIX
export	VIA_FILE_SUFFIX
export  SYMBIAN_UREL_LINK_FLAGS
export  SYMBIAN_UDEB_LINK_FLAGS
export  LD_OPTIONS

# Archiver Options
export  ARCHIVER
export  ARCHIVER_CREATE_OPTION
export  AR_OPTIONS

# Compiler Specific Defines
export  COMPILER_DEFINES
export  COMPILER_PLAT

# Platform Specific Defines
export  PLATFORM_DEFINES

# Translator Options
export  TRANASM_FLAGS
export  TRANASM_OUTPUT_OPTION
export  TRANASM_INPUT_OPTION

# Function Call Logger options
export PREINCLUDE_OPTION_FCLOGGER
export FC_LOGGER_OPTION
export FC_LOGGER_DEFINES
export FC_LOGGER_INCLUDE_OPTION
export FC_LOGGER_DICTIONARY_FILE_NAME
export FC_LOGGER_GENERATED_C_FILE_NAME

#OE Options
export OE_OPTIONS
export OE_EXE_LIBS
export OE_EXE_LIBS_WCHAR
export OE_IMPORT_LIBS
export OE_NEW_LIB

#-----------------------------------------------------------------------------------------------------