[coreboot] [PATCH]add arm toolchain support
Hamo
hamo.by at gmail.com
Mon May 23 14:14:46 CEST 2011
This patch added arm toolchain support for coreboot building system.
xcompile will find the different toolchain for X86 and ARM
architectures and when
we decided the target architecture using `make menuconfig` or so, makefile will
choose the right toolchain.
Signed-off-by: Yang Bai <hamo.by at gmail.com>
Index: src/Kconfig
===================================================================
--- src/Kconfig (revision 6567)
+++ src/Kconfig (working copy)
@@ -116,10 +116,19 @@
bool
default n
+# This option is used to set the architecture of a mainboard to ARM.
+config ARCH_ARM
+ bool
+ default n
+
if ARCH_X86
source src/arch/x86/Kconfig
endif
+if ARCH_ARM
+source src/arch/arm/Kconfig
+endif
+
menu "Chipset"
comment "CPU"
Index: src/arch/arm/Kconfig
===================================================================
--- src/arch/arm/Kconfig (revision 0)
+++ src/arch/arm/Kconfig (revision 0)
@@ -0,0 +1,3 @@
+menu "Architecture (ARM)"
+
+endmenu
Index: util/xcompile/xcompile
===================================================================
--- util/xcompile/xcompile (revision 6567)
+++ util/xcompile/xcompile (working copy)
@@ -3,6 +3,7 @@
# This file is part of the coreboot project.
#
# Copyright (C) 2007-2010 coresystems GmbH
+# Copyright (C) 2011 Yang Bai <hamo.by at gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -34,20 +35,27 @@
fi
done
-GCCPREFIX=invalid
-TMPFILE=`mktemp /tmp/temp.XXXX 2>/dev/null || echo /tmp/temp.78gOIUGz`
-touch $TMPFILE
+TWIDTH=32
+for TARCH in i386 littlearm; do
-# This should be a loop over all supported architectures
-TARCH=i386
-TWIDTH=32
-for gccprefixes in `pwd`/util/crossgcc/xgcc/bin/${TARCH}-elf-
${TARCH}-elf- ""; do
+ GCCPREFIX=invalid
+
+ if [ ${TARCH} == "i386" ]; then
+ CARCH=${TARCH}-elf
+ elif [ ${TARCH} == "littlearm" ]; then
+ CARCH=arm-none-eabi
+ fi
+
+ TMPFILE=`mktemp /tmp/temp.XXXX 2>/dev/null || echo /tmp/temp.78gOIUGz`
+ touch $TMPFILE
+
+ for gccprefixes in `pwd`/util/crossgcc/xgcc/bin/${CARCH}- ${CARCH}- ""; do
if ! which ${gccprefixes}as 2>/dev/null >/dev/null; then
- continue
+ continue
fi
rm -f ${TMPFILE}.o
if ${gccprefixes}as -o ${TMPFILE}.o ${TMPFILE}; then
- TYPE=`${gccprefixes}objdump -p ${TMPFILE}.o`
+ TYPE=`${gccprefixes}objdump -p ${TMPFILE}.o | grep "file format"`
if [ ${TYPE##* } == "elf${TWIDTH}-${TARCH}" ]; then
GCCPREFIX=$gccprefixes
ASFLAGS=
@@ -56,47 +64,44 @@
break
fi
fi
- if ${gccprefixes}as --32 -o ${TMPFILE}.o ${TMPFILE}; then
- TYPE=`${gccprefixes}objdump -p ${TMPFILE}.o`
+ if [ ${TARCH} == "i386" ]; then
+ if ${gccprefixes}as --32 -o ${TMPFILE}.o ${TMPFILE}; then
+ TYPE=`${gccprefixes}objdump -p ${TMPFILE}.o | grep "file format"`
if [ ${TYPE##* } == "elf${TWIDTH}-${TARCH}" ]; then
- GCCPREFIX=$gccprefixes
- ASFLAGS=--32
- CFLAGS="-m32 "
- LDFLAGS="-b elf32-i386"
- break
+ GCCPREFIX=$gccprefixes
+ ASFLAGS=--32
+ CFLAGS="-m32 "
+ LDFLAGS="-b elf32-i386"
+ break
fi
+ fi
fi
-done
-rm -f $TMPFILE ${TMPFILE}.o
+ done
+ rm -f $TMPFILE ${TMPFILE}.o
-if [ "$GCCPREFIX" = "invalid" ]; then
- echo '$(error no suitable gcc found)'
- exit 1
-fi
-
-CC="${GCCPREFIX}gcc"
-testcc "$CC" "$CFLAGS-Wa,--divide " && CFLAGS="$CFLAGS-Wa,--divide "
-testcc "$CC" "$CFLAGS-fno-stack-protector " &&
CFLAGS="$CFLAGS-fno-stack-protector "
-testcc "$CC" "$CFLAGS-Wl,--build-id=none " &&
CFLAGS="$CFLAGS-Wl,--build-id=none "
-
-if which gcc 2>/dev/null >/dev/null; then
- HOSTCC=gcc
-else
- HOSTCC=cc
-fi
-
-cat << EOF
+ if [ "$GCCPREFIX" != "invalid" ]; then
+ CC="${GCCPREFIX}gcc"
+ testcc "$CC" "$CFLAGS-Wa,--divide " && CFLAGS="$CFLAGS-Wa,--divide "
+ testcc "$CC" "$CFLAGS-fno-stack-protector " &&
CFLAGS="$CFLAGS-fno-stack-protector "
+ testcc "$CC" "$CFLAGS-Wl,--build-id=none " &&
CFLAGS="$CFLAGS-Wl,--build-id=none "
+ cat << EOF
# elf${TWIDTH}-${TARCH} toolchain
-AS:=${GCCPREFIX}as ${ASFLAGS}
-CC:=${GCCPREFIX}gcc ${CFLAGS}
-AR:=${GCCPREFIX}ar
-LD:=${GCCPREFIX}ld ${LDFLAGS}
-STRIP:=${GCCPREFIX}strip
-NM:=${GCCPREFIX}nm
-OBJCOPY:=${GCCPREFIX}objcopy
-OBJDUMP:=${GCCPREFIX}objdump
-
-# native toolchain
-HOSTCC:=${HOSTCC}
+AS_${TARCH}:=${GCCPREFIX}as ${ASFLAGS}
+CC_${TARCH}:=${GCCPREFIX}gcc ${CFLAGS}
+AR_${TARCH}:=${GCCPREFIX}ar
+LD_${TARCH}:=${GCCPREFIX}ld ${LDFLAGS}
+STRIP_${TARCH}:=${GCCPREFIX}strip
+NM_${TARCH}:=${GCCPREFIX}nm
+OBJCOPY_${TARCH}:=${GCCPREFIX}objcopy
+OBJDUMP_${TARCH}:=${GCCPREFIX}objdump
EOF
+ else
+ cat <<EOF
+# elf${TWIDTH}-${TARCH} toolchain
+NO_${TARCH}_TOOLCHAIN:=1
+EOF
+ fi
+unset AS CC AR LD STRIP NM OBJCOPY OBJDUMP GCCPREFIX ASFLAGS CFLAGS
LDFLAGS CARCH
+
+done
Index: Makefile
===================================================================
--- Makefile (revision 6567)
+++ Makefile (working copy)
@@ -101,7 +101,42 @@
include $(HAVE_DOTCONFIG)
+# Set the toolchain variables
+# FOR X86
+ifeq ($(CONFIG_ARCH_X86),y)
+ifeq ($(NO_i386_TOOLCHAIN),1)
+$(error No suitable gcc for X86 found)
+else
ifneq ($(INNER_SCANBUILD),y)
+CC:=$(CC_i386)
+endif
+AS:=$(AS_i386)
+AR:=$(AR_i386)
+LD:=$(LD_i386)
+STRIP:=$(STRIP_i386)
+NM:=$(NM_i386)
+OBJCOPY:=$(OBJCOPY_i386)
+OBJDUMP:=$(OBJDUMP_i386)
+endif
+endif
+
+# FOR ARM
+ifeq ($(CONFIG_ARCH_ARM),y)
+ifeq ($(NO_littlearm_TOOLCHAIN),1)
+$(error No suitable gcc for ARM found)
+else
+CC:=$(CC_littlearm)
+AS:=$(AS_littlearm)
+AR:=$(AR_littlearm)
+LD:=$(LD_littlearm)
+STRIP:=$(STRIP_littlearm)
+NM:=$(NM_littlearm)
+OBJCOPY:=$(OBJCOPY_littlearm)
+OBJDUMP:=$(OBJDUMP_littlearm)
+endif
+endif
+
+ifneq ($(INNER_SCANBUILD),y)
ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y)
CC:=clang -m32
HOSTCC:=clang
--
"""
Keep It Simple,Stupid.
"""
Chinese Name: 白杨
Nick Name: Hamo
Homepage: http://hamobai.com/
GPG KEY ID: 0xA4691A33
Key fingerprint = 09D5 2D78 8E2B 0995 CF8E 4331 33C4 3D24 A469 1A33
More information about the coreboot
mailing list