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.tags/v0.2.20^2
@@ -1,5 +1,4 @@ | |||||
#ifeq logical or | |||||
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15)) | |||||
ifeq ($(CORE), $(filter $(CORE),ARMV7 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 | |||||
FCOMMON_OPT += -marm -march=armv5 | |||||
CCOMMON_OPT += -march=armv5 | |||||
FCOMMON_OPT += -march=armv5 | |||||
endif | endif |
@@ -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 | |||||
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 | 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 | 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) | ||||
@@ -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]/; | ||||
@@ -111,11 +111,6 @@ REALNAME: | |||||
#define PROFCODE | #define PROFCODE | ||||
#ifdef __ARM_PCS | |||||
//-mfloat-abi=softfp | |||||
#define SOFT_FLOAT_ABI | |||||
#endif | |||||
#endif | #endif | ||||