From 0d5c8e53861adbb54ee9952ed76c2e8dd029ca96 Mon Sep 17 00:00:00 2001 From: Ashwin Sekhar T K Date: Fri, 30 Jun 2017 12:43:13 +0530 Subject: [PATCH] arm: Determine the abi from compiler if not specified on command line If ARM abi is not explicitly mentioned on the command line, then set the arm abi to softfp or hard according to the compiler environment. This assumes that compiler sets the defines __ARM_PCS and __ARM_PCS_VFP accordingly. --- Makefile.arm | 23 +++-------------------- Makefile.system | 24 ++++++++++++++++-------- c_check | 16 +++++++++++++++- common_arm.h | 5 ----- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Makefile.arm b/Makefile.arm index c189b0c47..eedd39b73 100644 --- a/Makefile.arm +++ b/Makefile.arm @@ -1,5 +1,4 @@ -#ifeq logical or -ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15)) +ifeq ($(CORE), $(filter $(CORE),ARMV7 CORTEXA9 CORTEXA15)) ifeq ($(OSNAME), Android) CCOMMON_OPT += -mfpu=neon -march=armv7-a FCOMMON_OPT += -mfpu=neon -march=armv7-a @@ -9,28 +8,12 @@ FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a endif endif -ifeq ($(CORE), ARMV7) -ifeq ($(OSNAME), Android) -ifeq ($(ARM_SOFTFP_ABI), 1) -CCOMMON_OPT += -mfpu=neon -march=armv7-a -FCOMMON_OPT += -mfpu=neon -march=armv7-a -else -CCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch -FCOMMON_OPT += -mfpu=neon -march=armv7-a -Wl,--no-warn-mismatch -endif -else -CCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a -FCOMMON_OPT += -mfpu=vfpv3 -march=armv7-a -endif -endif - ifeq ($(CORE), ARMV6) CCOMMON_OPT += -mfpu=vfp -march=armv6 FCOMMON_OPT += -mfpu=vfp -march=armv6 endif - ifeq ($(CORE), ARMV5) -CCOMMON_OPT += -marm -march=armv5 -FCOMMON_OPT += -marm -march=armv5 +CCOMMON_OPT += -march=armv5 +FCOMMON_OPT += -march=armv5 endif diff --git a/Makefile.system b/Makefile.system index 29d3efd53..2cae5f1c9 100644 --- a/Makefile.system +++ b/Makefile.system @@ -242,6 +242,10 @@ EXTRALIB += -lm NO_EXPRECISION = 1 endif +ifeq ($(OSNAME), Android) +EXTRALIB += -lm +endif + ifeq ($(OSNAME), AIX) EXTRALIB += -lm endif @@ -483,16 +487,20 @@ ifeq ($(ARCH), arm) NO_BINARY_MODE = 1 BINARY_DEFINED = 1 -CCOMMON_OPT += -marm -FCOMMON_OPT += -marm - -ifeq ($(ARM_SOFTFP_ABI), 1) -CCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI -FCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI +# If ABI is specified on command line use it. Else use the automatically detected ABI. +ifeq ($(ARM_SOFTFP_ABI),1) +ARM_ABI = softfp else -CCOMMON_OPT += -mfloat-abi=hard -FCOMMON_OPT += -mfloat-abi=hard +ifeq ($(ARM_HARD_ABI),1) +ARM_ABI = hard +else +ARM_ABI=$(ARM_ABI_AUTO) endif +endif +export ARM_ABI_AUTO +CCOMMON_OPT += -marm -mfloat-abi=$(ARM_ABI) +FCOMMON_OPT += -marm -mfloat-abi=$(ARM_ABI) + endif ifeq ($(ARCH), arm64) diff --git a/c_check b/c_check index 20da288be..2e7e08cfb 100644 --- a/c_check +++ b/c_check @@ -94,7 +94,17 @@ if ($architecture eq "mips64") { $defined = 1; } -if (($architecture eq "arm") || ($architecture eq "arm64")) { +if ($architecture eq "arm") { + $defined = 1; + $data = `$compiler_name -dM -E ctest2.c | grep -w __ARM_PCS_VFP`; + if ($data ne "") { + $abi = "hard"; + } else { + $abi = "softfp"; + } +} + +if ($architecture eq "arm64") { $defined = 1; } @@ -287,6 +297,10 @@ print MAKEFILE "CEXTRALIB=$linker_L $linker_l $linker_a\n"; print MAKEFILE "HAVE_MSA=1\n" if $have_msa eq 1; print MAKEFILE "MSA_FLAGS=$msa_flags\n" if $have_msa eq 1; +if ($architecture eq "arm") { + print MAKEFILE "ARM_ABI_AUTO=$abi\n"; +} + $os =~ tr/[a-z]/[A-Z]/; $architecture =~ tr/[a-z]/[A-Z]/; $compiler =~ tr/[a-z]/[A-Z]/; diff --git a/common_arm.h b/common_arm.h index a17acb448..27fa76b76 100644 --- a/common_arm.h +++ b/common_arm.h @@ -111,11 +111,6 @@ REALNAME: #define PROFCODE -#ifdef __ARM_PCS -//-mfloat-abi=softfp -#define SOFT_FLOAT_ABI -#endif - #endif