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

View File

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

16
c_check
View File

@ -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]/;

View File

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