[coreboot] [PATCH]add arm toolchain support

Marc Jones marcj303 at gmail.com
Mon May 23 21:54:06 CEST 2011


Hi Hamo,

Thanks for the patch. I know you need this for your ARM development,
but we should wait for an ARM target before committing this.

This fundamentally changes how .xcompile is used and included by
coreboot. I think that I would prefer that the xcompile script accept
a flag for using the ARM toolchain over the x86 tools and still set
the compiler variables.

Marc


On Mon, May 23, 2011 at 6:14 AM, Hamo <hamo.by at gmail.com> wrote:
> 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>
...

> -       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
>

Be careful with whitespace changes. Try not to put to many in with
code changes.

> -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

I think that these makefile changes shouldn't be needed as long as
coreboot is including the correct settings from the .xcompile file.

Marc
-- 
http://se-eng.com




More information about the coreboot mailing list