summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2015-02-14 11:36:56 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2015-02-14 11:47:20 +0100
commit4345869df894faae79f68d4a835e2e825a4778f7 (patch)
tree3db23ff72aed2caf0bf24d505fe13ffd9ccad43d
parent176ed2d7b246a39cb0b9bc3f6cc3bfe3335b250f (diff)
rework float support
ARM, MIPS and PPC have support for soft or hard float configuration of toolchain and system. Generalize the support for this in OpenADK.
-rw-r--r--Config.in1
-rw-r--r--target/config/Config.in.arm.default21
-rw-r--r--target/config/Config.in.float5
-rw-r--r--target/config/Config.in.float.choice18
-rw-r--r--target/config/Config.in.float.default14
-rw-r--r--target/config/Config.in.mips.choice14
-rw-r--r--target/config/Config.in.mips.default10
-rw-r--r--toolchain/gcc/Makefile40
-rw-r--r--toolchain/uclibc-ng/Makefile47
9 files changed, 79 insertions, 91 deletions
diff --git a/Config.in b/Config.in
index 7a7af0604..4e2d7b823 100644
--- a/Config.in
+++ b/Config.in
@@ -25,6 +25,7 @@ source "target/config/Config.in.kernel"
source "target/config/Config.in.arch"
source "target/config/Config.in.system"
source "target/config/Config.in.endian"
+source "target/config/Config.in.float"
source "target/config/Config.in.arm"
source "target/config/Config.in.cris"
source "target/config/Config.in.mips"
diff --git a/target/config/Config.in.arm.default b/target/config/Config.in.arm.default
index 53ddb76be..4e1e17c7e 100644
--- a/target/config/Config.in.arm.default
+++ b/target/config/Config.in.arm.default
@@ -1,33 +1,12 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-config ADK_soft_float
- bool
-
-config ADK_hard_float
- bool
-
config ADK_fpu_neon
bool
config ADK_fpu_vfp
bool
-config ADK_TARGET_ARM_HARD_FLOAT
- bool
- select ADK_hard_float
- default y if ADK_TARGET_ABI_EABIHF
-
-config ADK_TARGET_ARM_SOFT_FLOAT
- bool
- select ADK_soft_float
- default y if ADK_TARGET_ABI_EABI
-
-config ADK_TARGET_FLOAT
- string
- default "hard" if ADK_hard_float
- default "soft" if ADK_soft_float
-
config ADK_TARGET_FPU
string
default "vfp" if ADK_fpu_vfp
diff --git a/target/config/Config.in.float b/target/config/Config.in.float
new file mode 100644
index 000000000..c193a9f2d
--- /dev/null
+++ b/target/config/Config.in.float
@@ -0,0 +1,5 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+source target/config/Config.in.float.choice
+source target/config/Config.in.float.default
diff --git a/target/config/Config.in.float.choice b/target/config/Config.in.float.choice
new file mode 100644
index 000000000..c071e1744
--- /dev/null
+++ b/target/config/Config.in.float.choice
@@ -0,0 +1,18 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+choice ADK_TARGET_FLOAT
+prompt "Float configuration"
+depends on ADK_TARGET_ARCH_ARM || \
+ ADK_TARGET_ARCH_MIPS || \
+ ADK_TARGET_ARCH_PPC
+
+config ADK_TARGET_HARD_FLOAT
+ bool "hard-float"
+ select ADK_hard_float
+
+config ADK_TARGET_SOFT_FLOAT
+ bool "soft-float"
+ select ADK_soft_float
+
+endchoice
diff --git a/target/config/Config.in.float.default b/target/config/Config.in.float.default
new file mode 100644
index 000000000..087a79fff
--- /dev/null
+++ b/target/config/Config.in.float.default
@@ -0,0 +1,14 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+config ADK_soft_float
+ bool
+
+config ADK_hard_float
+ bool
+
+config ADK_TARGET_FLOAT
+ string
+ default "hard" if ADK_hard_float
+ default "soft" if ADK_soft_float
+
diff --git a/target/config/Config.in.mips.choice b/target/config/Config.in.mips.choice
index 0e1c80475..71e6c8ea2 100644
--- a/target/config/Config.in.mips.choice
+++ b/target/config/Config.in.mips.choice
@@ -14,17 +14,3 @@ config ADK_CPU_MIPS_MIPS32R2
select ADK_CPU_MIPS32R2
endchoice
-
-choice ADK_TARGET_MIPS_FLOAT
-prompt "Float configuration"
-depends on ADK_TARGET_ARCH_MIPS
-
-config ADK_TARGET_MIPS_HARD_FLOAT
- bool "hard-float"
- select ADK_hard_float
-
-config ADK_TARGET_MIPS_SOFT_FLOAT
- bool "soft-float"
- select ADK_soft_float
-
-endchoice
diff --git a/target/config/Config.in.mips.default b/target/config/Config.in.mips.default
index 3241681ce..43df6220c 100644
--- a/target/config/Config.in.mips.default
+++ b/target/config/Config.in.mips.default
@@ -1,13 +1,3 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-config ADK_soft_float
- bool
-
-config ADK_hard_float
- bool
-
-config ADK_TARGET_FLOAT
- string
- default "hard" if ADK_hard_float
- default "soft" if ADK_soft_float
diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile
index eb36c49b6..f1b8c4455 100644
--- a/toolchain/gcc/Makefile
+++ b/toolchain/gcc/Makefile
@@ -69,6 +69,26 @@ GCC_FINAL_CONFOPTS+= --enable-shared='libstdc++,libgcc'
endif
endif
+ifeq ($(ADK_TOOLCHAIN_WITH_SSP),y)
+GCC_FINAL_CONFOPTS+= --enable-libssp
+else
+GCC_FINAL_CONFOPTS+= --disable-libssp
+endif
+
+ifeq ($(ADK_TOOLCHAIN_WITH_LTO),y)
+GCC_CONFOPTS+= --enable-lto
+else
+GCC_CONFOPTS+= --disable-lto
+endif
+
+#
+# architecture specific
+#
+
+ifneq ($(ADK_TARGET_ARCH_ARM)$(ADK_TARGET_ARCH_MIPS)$(ADK_TARGET_ARCH_PPC),)
+GCC_CONFOPTS+= --with-float=$(ADK_TARGET_FLOAT)
+endif
+
ifeq ($(ADK_TARGET_ARCH_M68K)$(ADK_TARGET_ARCH_SH)$(ADK_TARGET_ARCH_X86_64)$(ADK_TARGET_ARCH_X86),)
GCC_FINAL_CONFOPTS+= --disable-biarch --disable-multilib
endif
@@ -99,31 +119,11 @@ GCC_FINAL_CONFOPTS+= --disable-biarch --disable-multilib
endif
endif
-ifeq ($(ADK_TOOLCHAIN_WITH_SSP),y)
-GCC_FINAL_CONFOPTS+= --enable-libssp
-else
-GCC_FINAL_CONFOPTS+= --disable-libssp
-endif
-
-ifeq ($(ADK_TOOLCHAIN_WITH_LTO),y)
-GCC_CONFOPTS+= --enable-lto
-else
-GCC_CONFOPTS+= --disable-lto
-endif
-
ifeq ($(ADK_TARGET_ARCH_PPC),y)
GCC_CONFOPTS+= --with-long-double-64 --enable-secureplt
-ifneq ($(ADK_TARGET_CPU_WITH_FPU),y)
-GCC_CONFOPTS+= --with-float=soft
-endif
-endif
-
-ifeq ($(ADK_TARGET_ARCH_MIPS),y)
-GCC_CONFOPTS+= --with-float=$(ADK_TARGET_FLOAT)
endif
ifeq ($(ADK_TARGET_ARCH_ARM),y)
-GCC_CONFOPTS+= --with-float=$(ADK_TARGET_FLOAT)
ifneq ($(ADK_TARGET_FPU),)
GCC_CONFOPTS+= --with-fpu=$(ADK_TARGET_FPU)
endif
diff --git a/toolchain/uclibc-ng/Makefile b/toolchain/uclibc-ng/Makefile
index b9c53e960..2adc0859e 100644
--- a/toolchain/uclibc-ng/Makefile
+++ b/toolchain/uclibc-ng/Makefile
@@ -30,6 +30,14 @@ else
$(SED) 's/.*\(ARCH_LITTLE_ENDIAN\).*/# \1 is not set/' ${WRKBUILD}/.config
$(SED) 's/.*\(ARCH_WANTS_LITTLE_ENDIAN\).*/# \1 is not set/' ${WRKBUILD}/.config
endif
+ifeq ($(ADK_TARGET_SOFT_FLOAT),y)
+ $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/# \1 is not set/' ${WRKBUILD}/.config
+ $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/#\1=y/' ${WRKBUILD}/.config
+endif
+ifeq ($(ADK_TARGET_HARD_FLOAT),y)
+ $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
+ $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
+endif
ifeq ($(ADK_TARGET_BINFMT_FLAT),y)
$(SED) 's/.*\(UCLIBC_FORMAT_FLAT_SEP_DATA\).*/\1=y/' ${WRKBUILD}/.config
endif
@@ -67,32 +75,29 @@ ifeq ($(ADK_TARGET_USE_SSP),y)
echo "UCLIBC_BUILD_SSP=y" >> ${WRKBUILD}/.config
endif
+#
# architecture specific options
+#
+
# arm
ifeq ($(ADK_TARGET_ARCH_ARM),y)
-ifeq ($(ADK_TARGET_ABI_EABI),y)
- $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/# \1 is not set/' ${WRKBUILD}/.config
- $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/#\1=y/' ${WRKBUILD}/.config
-
-endif
-ifeq ($(ADK_TARGET_ABI_EABIHF),y)
- $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
- $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
-endif
ifeq ($(ADK_TARGET_ARCH_ARM_WITH_THUMB),y)
$(SED) 's/.*\(COMPILE_IN_THUMB_MODE\).*/\1=y/' ${WRKBUILD}/.config
endif
endif
-# mips/mips64
-ifeq ($(ADK_TARGET_ARCH_MIPS64),y)
- $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS64\).*/\1=y/' ${WRKBUILD}/.config
- $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS32\).*/# \1 is not set/' ${WRKBUILD}/.config
-endif
+
+# mips
ifeq ($(ADK_TARGET_ARCH_MIPS),y)
- $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS32\).*/\1=y/' ${WRKBUILD}/.config
- $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS64\).*/# \1 is not set/' ${WRKBUILD}/.config
+ifeq ($(ADK_CPU_MIPS32R2),y)
+ $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS32 \).*/# \1 is not set/' ${WRKBUILD}/.config
+ $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS32R2\).*/\1=y/' ${WRKBUILD}/.config
endif
+endif
+
+# mips64
ifeq ($(ADK_TARGET_ARCH_MIPS64),y)
+ $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS64\).*/\1=y/' ${WRKBUILD}/.config
+ $(SED) 's/.*\(CONFIG_MIPS_ISA_MIPS32\).*/# \1 is not set/' ${WRKBUILD}/.config
ifeq ($(ADK_n64),y)
$(SED) 's/.*\(CONFIG_MIPS_N64_ABI\).*/\1=y/' ${WRKBUILD}/.config
$(SED) 's/.*\(CONFIG_MIPS_O32_ABI\).*/# \1 is not set/' ${WRKBUILD}/.config
@@ -109,16 +114,6 @@ ifeq ($(ADK_o32),y)
$(SED) 's/.*\(CONFIG_MIPS_N64_ABI\).*/# \1 is not set/' ${WRKBUILD}/.config
endif
endif
-# powerpc
-ifeq ($(ADK_TARGET_ARCH_PPC),y)
-ifeq ($(ADK_TARGET_CPU_WITH_FPU),y)
- $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/\1=y/' ${WRKBUILD}/.config
- $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/# \1 is not set/' ${WRKBUILD}/.config
-else
- $(SED) 's/.*\(UCLIBC_HAS_FPU\).*/# \1 is not set/' ${WRKBUILD}/.config
- $(SED) 's/.*\(UCLIBC_HAS_SOFT_FLOAT\).*/#\1=y/' ${WRKBUILD}/.config
-endif
-endif
echo N|PATH='$(HOST_PATH)' $(MAKE) ${UCLIBC_MAKEOPTS} -C $(WRKBUILD) \
PREFIX=$(STAGING_TARGET_DIR) \
DEVEL_PREFIX=/usr/ \