summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/target.in21
-rw-r--r--scripts/build/libc/glibc-eglibc.sh-common1
-rw-r--r--scripts/functions4
3 files changed, 26 insertions, 0 deletions
diff --git a/config/target.in b/config/target.in
index d38e4c1..b94db3c 100644
--- a/config/target.in
+++ b/config/target.in
@@ -15,6 +15,7 @@ config ARCH_SUPPORT_ABI
config ARCH_SUPPORT_CPU
config ARCH_SUPPORT_TUNE
config ARCH_SUPPORT_FPU
+config ARCH_SUPPORT_SOFTFP
config ARCH_DEFAULT_HAS_MMU
config ARCH_DEFAULT_BE
@@ -144,6 +145,9 @@ config ARCH_SUPPORT_TUNE
config ARCH_SUPPORT_FPU
bool
+config ARCH_SUPPORT_SOFTFP
+ bool
+
config ARCH_ARCH
string
prompt "Architecture level"
@@ -271,6 +275,22 @@ config ARCH_FLOAT_SW
If your processor has no FPU, then you most probably want this, as it
is faster than emulating the FPU in the kernel.
+config ARCH_FLOAT_SOFTFP
+ bool
+ prompt "softfp"
+ depends on ARCH_SUPPORT_SOFTFP
+ help
+ Emit hardware floating point opcodes but use the software
+ floating point calling convention.
+
+ Architectures such as ARM use different registers for passing
+ floating point values depending on if they're in software mode
+ or hardware mode. softfp emits FPU instructions but uses the
+ software FP calling convention allowing softfp code to
+ interoperate with legacy software only code.
+
+ If in doubt, use 'software' or 'hardware' mode instead.
+
endchoice
config TARGET_CFLAGS
@@ -300,6 +320,7 @@ config ARCH_FLOAT
string
default "hard" if ARCH_FLOAT_HW
default "soft" if ARCH_FLOAT_SW
+ default "softfp" if ARCH_FLOAT_SOFTFP
source "config.gen/arch.in.2"
diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common
index d306fd0..8929f5c 100644
--- a/scripts/build/libc/glibc-eglibc.sh-common
+++ b/scripts/build/libc/glibc-eglibc.sh-common
@@ -135,6 +135,7 @@ do_libc_backend() {
case "${CT_ARCH_FLOAT}" in
hard) extra_config+=("--with-fp");;
soft) extra_config+=("--without-fp");;
+ softfp) extra_config+=("--with-fp");;
esac
if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then
diff --git a/scripts/functions b/scripts/functions
index f4b19ca..63c0423 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -993,6 +993,10 @@ CT_DoBuildTargetTuple() {
CT_ARCH_FLOAT_CFLAG="-msoft-float"
CT_ARCH_WITH_FLOAT="--with-float=soft"
;;
+ softfp)
+ CT_ARCH_FLOAT_CFLAG="-mfloat-abi=softfp"
+ CT_ARCH_WITH_FLOAT="--with-float=softfp"
+ ;;
esac
# Build the default kernel tuple part