Browse Source

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.
tags/v0.2.20^2
Ashwin Sekhar T K 8 years ago
parent
commit
0d5c8e5386
4 changed files with 34 additions and 34 deletions
  1. +3
    -20
      Makefile.arm
  2. +16
    -8
      Makefile.system
  3. +15
    -1
      c_check
  4. +0
    -5
      common_arm.h

+ 3
- 20
Makefile.arm 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) 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

+ 16
- 8
Makefile.system 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
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)


+ 15
- 1
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]/;


+ 0
- 5
common_arm.h View File

@@ -111,11 +111,6 @@ REALNAME:


#define PROFCODE #define PROFCODE


#ifdef __ARM_PCS
//-mfloat-abi=softfp
#define SOFT_FLOAT_ABI
#endif

#endif #endif






Loading…
Cancel
Save