diff options
-rw-r--r-- | config/target.in | 21 | ||||
-rw-r--r-- | scripts/build/libc/glibc-eglibc.sh-common | 1 | ||||
-rw-r--r-- | scripts/functions | 4 |
3 files changed, 26 insertions, 0 deletions
diff --git a/config/target.in b/config/target.in index d38e4c19..b94db3c1 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 d306fd06..8929f5c2 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 f4b19ca1..63c0423f 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 |