From ec3f682d79a38b29ef51b7cdbc9fb9afbe2c9c63 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Wed, 22 Oct 2014 12:06:37 -0500 Subject: rework toolchain support for ARM. Use --with-cpu for gcc to have optimized code for requested ARM cpus. Add some basic support for cortex-m3. --- Config.in | 2 +- target/arm/Makefile | 3 +++ target/config/Config.in.arm.choice | 27 ++++++++++++++++----------- target/config/Config.in.arm.default | 15 --------------- target/config/Config.in.cpu | 3 +++ target/config/Config.in.qemu | 8 ++++++++ target/config/Config.in.target | 7 ++++--- target/config/Config.in.toolchain | 5 +++-- toolchain/gcc/Makefile | 22 +++++++--------------- 9 files changed, 45 insertions(+), 47 deletions(-) diff --git a/Config.in b/Config.in index 6f606c0c8..223c3dacb 100644 --- a/Config.in +++ b/Config.in @@ -18,8 +18,8 @@ source "target/config/Config.in.kernel" source "target/config/Config.in.arch" source "target/config/Config.in.system" source "target/config/Config.in.endian" -source "target/config/Config.in.abi" source "target/config/Config.in.arm" +source "target/config/Config.in.abi" source "target/config/Config.in.cris" source "target/config/Config.in.x86" source "target/config/Config.in.qemu" diff --git a/target/arm/Makefile b/target/arm/Makefile index 9ba6366e3..391afe6e4 100644 --- a/target/arm/Makefile +++ b/target/arm/Makefile @@ -28,6 +28,9 @@ endif ifeq ($(ADK_TARGET_QEMU_ARM_MODEL_VEXPRESS_A9),y) QEMU_ARGS+=-M vexpress-a9 -cpu cortex-a9 -net user -net nic,model=lan9118 endif +ifeq ($(ADK_TARGET_QEMU_ARM_MODEL_STELLARIS_M3),y) +QEMU_ARGS+=-M lm3s6965evb -cpu cortex-m3 +endif ifeq ($(ADK_TARGET_QEMU_WITH_VIRTIO),y) QEMU_ARGS+=-drive file=qemu-${ADK_TARGET_CPU_ARCH}.img,if=virtio,index=0 -net nic,model=virtio -net user endif diff --git a/target/config/Config.in.arm.choice b/target/config/Config.in.arm.choice index d732b5f7a..eaae2fe5e 100644 --- a/target/config/Config.in.arm.choice +++ b/target/config/Config.in.arm.choice @@ -2,21 +2,26 @@ # material, please see the LICENCE file in the top-level directory. choice ADK_TARGET_ARM_CPU_ARCH -prompt "CPU architecture" +prompt "CPU architecture and family" depends on ADK_TARGET_TOOLCHAIN && ADK_LINUX_ARM -default ADK_CPU_ARMV7A -config ADK_CPU_ARMV5TE - boolean "armv5te" - select ADK_armv5te +config ADK_CPU_ARMV7A_CORTEX_A9 + boolean "cortex-a9 (armv7-a)" + select ADK_CPU_CORTEX_A9 -config ADK_CPU_ARMV6 - boolean "armv6" - select ADK_armv6 +config ADK_CPU_ARMV7M_CORTEX_M3 + boolean "cortex-m3 (armv7-m)" + select ADK_CPU_CORTEX_M3 + select ADK_LINUX_ARM_WITH_THUMB + select ADK_TARGET_UCLINUX -config ADK_CPU_ARMV7A - boolean "armv7-a" - select ADK_armv7a +config ADK_CPU_ARMV6_ARM1176JZF_S + boolean "arm1176jzf-s (armv6)" + select ADK_CPU_ARM1176JZF_S + +config ADK_CPU_ARMV5TE_ARM926EJ_S + boolean "arm926ej-s (armv5te)" + select ADK_CPU_ARM926EJ_S endchoice diff --git a/target/config/Config.in.arm.default b/target/config/Config.in.arm.default index 50a05b674..3e6dac47b 100644 --- a/target/config/Config.in.arm.default +++ b/target/config/Config.in.arm.default @@ -1,21 +1,6 @@ # This file is part of the OpenADK project. OpenADK is copyrighted # material, please see the LICENCE file in the top-level directory. -config ADK_armv5te - boolean - -config ADK_armv6 - boolean - -config ADK_armv7a - boolean - -config ADK_TARGET_ARM_CPU - string - default "armv5te" if ADK_armv5te - default "armv6" if ADK_armv6 - default "armv7-a" if ADK_armv7a - config ADK_soft_float boolean diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu index b8fb302cb..afb99ebc9 100644 --- a/target/config/Config.in.cpu +++ b/target/config/Config.in.cpu @@ -113,6 +113,9 @@ config ADK_CPU_ARM926EJ_S config ADK_CPU_ARM1176JZF_S boolean +config ADK_CPU_CORTEX_M3 + boolean + config ADK_CPU_CORTEX_A9 boolean diff --git a/target/config/Config.in.qemu b/target/config/Config.in.qemu index edffbc955..4f1ec85a4 100644 --- a/target/config/Config.in.qemu +++ b/target/config/Config.in.qemu @@ -56,6 +56,14 @@ config ADK_TARGET_QEMU_ARM_MODEL_VEXPRESS_A9 boolean "ARM Ltd. Versatile Express for Cortex-A9" select ADK_CPU_CORTEX_A9 +config ADK_TARGET_QEMU_ARM_MODEL_STELLARIS_M3 + boolean "Stellaris LM3S6965EVB" + select ADK_soft_float + select ADK_eabi + select ADK_CPU_CORTEX_M3 + select ADK_LINUX_ARM_WITH_THUMB + depends on ADK_TARGET_ARM_SOFT_FLOAT + config ADK_TARGET_QEMU_ARM_MODEL_VERSATILEPB boolean "ARM Ltd. Versatile/PB" select ADK_soft_float diff --git a/target/config/Config.in.target b/target/config/Config.in.target index 0415e0ce5..623874606 100644 --- a/target/config/Config.in.target +++ b/target/config/Config.in.target @@ -22,7 +22,7 @@ config ADK_TARGET_CFLAGS default "-march=atom" if ADK_CPU_ATOM default "-march=amdfam10" if ADK_CPU_AMDFAM10 default "-mcpu=v8" if ADK_CPU_SPARC_V8 - default "-m64 -mcpu=ultrasparc" if ADK_CPU_SPARC_V9 + default "-mcpu=ultrasparc -m64" if ADK_CPU_SPARC_V9 default "-march=loongson2f -Wa,-mfix-loongson2f-nop" if ADK_CPU_LOONGSON2F default "-march=mips32" if ADK_CPU_MIPS32 default "-march=mips64" if ADK_CPU_MIPS64 @@ -32,8 +32,9 @@ config ADK_TARGET_CFLAGS default "-march=armv5te -mtune=arm926ej-s -mfloat-abi=hard" if ADK_CPU_ARM926EJ_S && ADK_hard_float default "-march=armv6 -mtune=arm1176jzf-s -mfloat-abi=soft" if ADK_CPU_ARM1176JZF_S && ADK_soft_float default "-march=armv6 -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard" if ADK_CPU_ARM1176JZF_S && ADK_hard_float - default "-march=armv7-a -mtune=cortex-a9 -mfloat-abi=soft" if ADK_CPU_CORTEX_A9 && ADK_soft_float - default "-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard" if ADK_CPU_CORTEX_A9 && ADK_hard_float + default "-mcpu=cortex-m3 -mfloat-abi=soft" if ADK_CPU_CORTEX_M3 && ADK_soft_float + default "-mcpu=cortex-a9 -mfloat-abi=soft" if ADK_CPU_CORTEX_A9 && ADK_soft_float + default "-mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard" if ADK_CPU_CORTEX_A9 && ADK_hard_float default "-march=armv5te" if ADK_CPU_ARMV5TE default "-march=armv6" if ADK_CPU_ARMV6 default "-march=armv7-a" if ADK_CPU_ARMV7A diff --git a/target/config/Config.in.toolchain b/target/config/Config.in.toolchain index 16c075212..a5c91f0f7 100644 --- a/target/config/Config.in.toolchain +++ b/target/config/Config.in.toolchain @@ -130,11 +130,12 @@ config ADK_TARGET_CFLAGS_OPT_O0 endchoice config ADK_LINUX_ARM_WITH_THUMB - prompt "Use THUMB2 ARM mode" + prompt "Use THUMB2 only mode" boolean - depends on ADK_CPU_CORTEX_A9 && ADK_TARGET_LIB_GLIBC select ADK_KERNEL_THUMB2_KERNEL default n + help + Experimental option. Use with care. config ADK_TOOLCHAIN_WITH_SSP boolean diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index dc59bfd35..110ef9d16 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -126,28 +126,20 @@ GCC_CONFOPTS+= --with-fpu=$(ADK_TARGET_FPU) endif endif -ifeq ($(ADK_CPU_ARMV5TE),y) -GCC_CONFOPTS+= --with-arch=armv5te -endif - -ifeq ($(ADK_CPU_ARMV6),y) -GCC_CONFOPTS+= --with-arch=armv6 -endif - -ifeq ($(ADK_CPU_ARMV7A),y) -GCC_CONFOPTS+= --with-arch=armv7-a -endif - ifeq ($(ADK_CPU_ARM926EJ_S),y) -GCC_CONFOPTS+= --with-arch=armv5te --with-tune=arm926ej-s +GCC_CONFOPTS+= --with-cpu=arm926ej-s endif ifeq ($(ADK_CPU_ARM1176JZF_S),y) -GCC_CONFOPTS+= --with-arch=armv6 --with-tune=arm1176jzf-s +GCC_CONFOPTS+= --with-cpu=arm1176jzf-s +endif + +ifeq ($(ADK_CPU_CORTEX_M3),y) +GCC_CONFOPTS+= --with-cpu=cortex-m3 endif ifeq ($(ADK_CPU_CORTEX_A9),y) -GCC_CONFOPTS+= --with-arch=armv7-a --with-tune=cortex-a9 +GCC_CONFOPTS+= --with-cpu=cortex-a9 endif ifeq ($(ADK_CPU_SPARC_V9),y) -- cgit v1.2.3