[OpenBIOS] [PATCH] switch-arch: select 64bit compiler if 32bit compiler is not found

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Fri Jul 10 00:12:15 CEST 2015


On 06/07/15 13:09, Laurent Vivier wrote:

> On Fedora, powerpc64 cross-compiler is part of the distro, not
> the powerpc32 compiler.
> 
> As I'm lazy and powerpc64 cross-compiler is able to generate
> 32bit binaries, this patch modifies switch-arch to allow
> to use cross-compiler from a list of architectures instead of
> only the target architecture.
> 
> I've modified only the powerpc32 target, as I'm not able to test
> the other architectures (and Fedora provides only cross-compiler
> for powerpc).
> 
> Signed-off-by: Laurent Vivier <laurent at vivier.eu>
> ---
>  config/scripts/switch-arch | 28 +++++++++++++++-------------
>  1 file changed, 15 insertions(+), 13 deletions(-)
> 
> diff --git a/config/scripts/switch-arch b/config/scripts/switch-arch
> index d5e2f77..7b8b457 100755
> --- a/config/scripts/switch-arch
> +++ b/config/scripts/switch-arch
> @@ -99,23 +99,25 @@ archname()
>  
>  select_prefix()
>  {
> -    TARGETS="${1}-unknown-linux-gnu- ${1}-linux-gnu- ${1}-linux- ${1}-elf- ${1}-eabi-"
> +    for target_arch ; do
> +        TARGETS="${target_arch}-unknown-linux-gnu- ${target_arch}-linux-gnu- ${target_arch}-linux- ${target_arch}-elf- ${target_arch}-eabi-"
>  
> -    if [ x"$CROSS_COMPILE" != "x" ]; then
> -        TARGETS=$CROSS_COMPILE
> -    fi
> +        if [ x"$CROSS_COMPILE" != "x" ]; then
> +            TARGETS=$CROSS_COMPILE
> +        fi
>  
> -    for TARGET in $TARGETS
> -    do
> -        if type ${TARGET}gcc > /dev/null 2>&1
> -        then
> +        for TARGET in $TARGETS
> +        do
> +            if type ${TARGET}gcc > /dev/null 2>&1
> +            then
> +                return
> +            fi
> +        done
> +        if [ "$ARCH" = "$HOSTARCH" ]; then
>              return
>          fi
>      done
> -    if [ "$ARCH" = "$HOSTARCH" ]; then
> -        return
> -    fi
> -    echo "ERROR: no ${1} cross-compiler found !" 1>&2
> +    echo "ERROR: no $* cross-compiler found !" 1>&2
>      exit 1
>  }
>  
> @@ -251,7 +253,7 @@ for ARCH in $arch_list; do
>          ;;
>  
>          ppc)
> -        select_prefix powerpc
> +        select_prefix powerpc powerpc64
>          if [ "$unix" = "no" ]; then
>              CFLAGS="-m32 -msoft-float -fno-builtin-bcopy -fno-builtin-log2"
>              AS_FLAGS="-m32"
> 

Thanks for the patch - a brief test here shows that I can build my
existing OpenBIOS images without any issues. I'll aim to commit this
over the weekend if no-one else objects.

Incidentally I did try applying the same change to SPARC, however that
seems not to work:

toke: wrote 850 bytes to bytecode file 'QEMU,cgthree.bin'
  GEN   openbios-sparc32.dict
  GEN   target/include/static-dict.h
  CC    target/arch/sparc32/builtin.o
/home/build/src/openbios/openbios-git/openbios-devel/arch/sparc32/builtin.c:1:0:
error: -m32 is not supported by this configuration
 /* tag: openbios forth starter for builtin dictionary for sparc32
 ^
make[1]: *** [target/arch/sparc32/builtin.o] Error 1
make[1]: Leaving directory
`/home/build/src/openbios/openbios-git/openbios-devel/obj-sparc32'
make: *** [build] Error 1
build at kentang:~/src/openbios/openbios-git/openbios-devel$

Is there a way of building a SPARC64 compiler that emits 32-bit code
with -m32 in a similar way?


ATB,

Mark.




More information about the OpenBIOS mailing list