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:
parent
482015f8d6
commit
0d5c8e5386
23
Makefile.arm
23
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
|
||||
|
|
|
@ -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
16
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]/;
|
||||
|
|
|
@ -111,11 +111,6 @@ REALNAME:
|
|||
|
||||
#define PROFCODE
|
||||
|
||||
#ifdef __ARM_PCS
|
||||
//-mfloat-abi=softfp
|
||||
#define SOFT_FLOAT_ABI
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue