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.
This commit is contained in:
Ashwin Sekhar T K 2017-06-30 12:43:13 +05:30
parent 482015f8d6
commit 0d5c8e5386
4 changed files with 34 additions and 34 deletions

View File

@ -1,5 +1,4 @@
#ifeq logical or ifeq ($(CORE), $(filter $(CORE),ARMV7 CORTEXA9 CORTEXA15))
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
ifeq ($(OSNAME), Android) ifeq ($(OSNAME), Android)
CCOMMON_OPT += -mfpu=neon -march=armv7-a CCOMMON_OPT += -mfpu=neon -march=armv7-a
FCOMMON_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
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) ifeq ($(CORE), ARMV6)
CCOMMON_OPT += -mfpu=vfp -march=armv6 CCOMMON_OPT += -mfpu=vfp -march=armv6
FCOMMON_OPT += -mfpu=vfp -march=armv6 FCOMMON_OPT += -mfpu=vfp -march=armv6
endif endif
ifeq ($(CORE), ARMV5) ifeq ($(CORE), ARMV5)
CCOMMON_OPT += -marm -march=armv5 CCOMMON_OPT += -march=armv5
FCOMMON_OPT += -marm -march=armv5 FCOMMON_OPT += -march=armv5
endif endif

View File

@ -242,6 +242,10 @@ EXTRALIB += -lm
NO_EXPRECISION = 1 NO_EXPRECISION = 1
endif endif
ifeq ($(OSNAME), Android)
EXTRALIB += -lm
endif
ifeq ($(OSNAME), AIX) ifeq ($(OSNAME), AIX)
EXTRALIB += -lm EXTRALIB += -lm
endif endif
@ -483,16 +487,20 @@ ifeq ($(ARCH), arm)
NO_BINARY_MODE = 1 NO_BINARY_MODE = 1
BINARY_DEFINED = 1 BINARY_DEFINED = 1
CCOMMON_OPT += -marm # If ABI is specified on command line use it. Else use the automatically detected ABI.
FCOMMON_OPT += -marm ifeq ($(ARM_SOFTFP_ABI),1)
ARM_ABI = softfp
ifeq ($(ARM_SOFTFP_ABI), 1)
CCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
FCOMMON_OPT += -mfloat-abi=softfp -DARM_SOFTFP_ABI
else else
CCOMMON_OPT += -mfloat-abi=hard ifeq ($(ARM_HARD_ABI),1)
FCOMMON_OPT += -mfloat-abi=hard ARM_ABI = hard
else
ARM_ABI=$(ARM_ABI_AUTO)
endif endif
endif
export ARM_ABI_AUTO
CCOMMON_OPT += -marm -mfloat-abi=$(ARM_ABI)
FCOMMON_OPT += -marm -mfloat-abi=$(ARM_ABI)
endif endif
ifeq ($(ARCH), arm64) ifeq ($(ARCH), arm64)

16
c_check
View File

@ -94,7 +94,17 @@ if ($architecture eq "mips64") {
$defined = 1; $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; $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 "HAVE_MSA=1\n" if $have_msa eq 1;
print MAKEFILE "MSA_FLAGS=$msa_flags\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]/; $os =~ tr/[a-z]/[A-Z]/;
$architecture =~ tr/[a-z]/[A-Z]/; $architecture =~ tr/[a-z]/[A-Z]/;
$compiler =~ tr/[a-z]/[A-Z]/; $compiler =~ tr/[a-z]/[A-Z]/;

View File

@ -111,11 +111,6 @@ REALNAME:
#define PROFCODE #define PROFCODE
#ifdef __ARM_PCS
//-mfloat-abi=softfp
#define SOFT_FLOAT_ABI
#endif
#endif #endif