mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-01-29 15:44:03 +00:00
Use the new SuperH fixes in the two multilib samples
- Glibc configure args and tuple need adjustment on SuperH - Only allow "both endian" and "with CPU" for unspecified arch variant. May reconsider endianness (was breaking things before adjusting glibc tuple) - Retire non-multilib sample, it should be a subset of the multilib one now. Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
parent
1e4eeb5c3b
commit
602304b230
@ -4,10 +4,9 @@
|
||||
## select ARCH_DEFAULT_32
|
||||
## select ARCH_USE_MMU
|
||||
## select ARCH_SUPPORTS_EITHER_ENDIAN
|
||||
## select ARCH_DEFAULT_LE_BE
|
||||
## select ARCH_DEFAULT_LE
|
||||
## select ARCH_REQUIRES_MULTILIB
|
||||
## select ARCH_SUPPORTS_WITH_ENDIAN
|
||||
## select ARCH_SUPPORTS_WITH_CPU
|
||||
##
|
||||
## help The Super-H architecture, as defined by:
|
||||
## help http://www.renesas.com/fmwk.jsp?cnt=superh_family_landing.jsp&fp=/products/mpumcu/superh_family/
|
||||
@ -23,6 +22,7 @@ config ARCH_SH_SH
|
||||
bool
|
||||
prompt "unspecified"
|
||||
select ARCH_SUPPORTS_BOTH_ENDIAN
|
||||
select ARCH_SUPPORTS_WITH_CPU
|
||||
help
|
||||
If left unspecified, GCC will determine the set of multilibs to compile automatically
|
||||
based on selected endianness, FPU mode and OS.
|
||||
|
@ -1,9 +1,10 @@
|
||||
CT_ARCH_SH=y
|
||||
CT_ARCH_SH_SH4=y
|
||||
CT_ARCH_CPU="sh4"
|
||||
CT_ARCH_LE_BE=y
|
||||
CT_TARGET_VENDOR="multilib"
|
||||
CT_KERNEL_LINUX=y
|
||||
CT_BINUTILS_PLUGINS=y
|
||||
CT_CC_GCC_MULTILIB_LIST="m4a"
|
||||
CT_CC_GCC_MULTILIB_LIST="m4-nofpu,m4a,m3"
|
||||
CT_CC_LANG_CXX=y
|
||||
CT_DEBUG_GDB=y
|
||||
# CT_GDB_CROSS_PYTHON is not set
|
@ -1,10 +1,11 @@
|
||||
CT_ARCH_SH=y
|
||||
CT_ARCH_SH_SH4=y
|
||||
CT_ARCH_CPU="sh4"
|
||||
CT_ARCH_LE_BE=y
|
||||
CT_TARGET_VENDOR="multilib"
|
||||
CT_KERNEL_LINUX=y
|
||||
CT_BINUTILS_PLUGINS=y
|
||||
CT_LIBC_UCLIBC=y
|
||||
CT_CC_GCC_MULTILIB_LIST="m4a,m3"
|
||||
CT_CC_GCC_MULTILIB_LIST="sh3,sh4,sh4a,sh4a-nofpu"
|
||||
CT_CC_LANG_CXX=y
|
||||
CT_DEBUG_GDB=y
|
||||
# CT_GDB_CROSS_PYTHON is not set
|
@ -1,4 +1,5 @@
|
||||
CT_ARCH_SH=y
|
||||
CT_ARCH_LE_BE=y
|
||||
CT_BINUTILS_PLUGINS=y
|
||||
CT_CC_LANG_CXX=y
|
||||
CT_GETTEXT=y
|
||||
|
@ -1,7 +0,0 @@
|
||||
CT_ARCH_SH=y
|
||||
CT_ARCH_SH_SH4=y
|
||||
CT_KERNEL_LINUX=y
|
||||
CT_BINUTILS_PLUGINS=y
|
||||
CT_CC_LANG_CXX=y
|
||||
CT_DEBUG_GDB=y
|
||||
# CT_GDB_CROSS_PYTHON is not set
|
@ -1,3 +0,0 @@
|
||||
reporter_name="YEM"
|
||||
reporter_url="http://ymorin.is-a-geek.org/"
|
||||
reporter_comment="EXPERIMENTAL Super-H sh4 sample."
|
@ -22,6 +22,12 @@ CT_DoArchGlibcAdjustTuple() {
|
||||
:;
|
||||
}
|
||||
|
||||
# Multilib: Adjust configure arguments for GLIBC
|
||||
# Usage: CT_DoArchGlibcAdjustConfigure <configure-args-array-name> <cflags>
|
||||
CT_DoArchGlibcAdjustConfigure() {
|
||||
:;
|
||||
}
|
||||
|
||||
# Helper for uClibc configurators: select the architecture
|
||||
# Usage: CT_DoArchUClibcSelectArch <config-file> <architecture>
|
||||
CT_DoArchUClibcSelectArch() {
|
||||
|
@ -15,14 +15,14 @@ CT_DoArchTupleValues () {
|
||||
CT_ARCH_FLOAT_CFLAG=
|
||||
case "${CT_ARCH_SH_VARIANT}" in
|
||||
sh3) CT_ARCH_ARCH_CFLAG=-m3;;
|
||||
sh4*)
|
||||
sh4*|sh2*)
|
||||
# softfp is not possible for SuperH, no need to test for it.
|
||||
case "${CT_ARCH_FLOAT}" in
|
||||
hard)
|
||||
CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh4}"
|
||||
CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}"
|
||||
;;
|
||||
soft)
|
||||
CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh4}-nofpu"
|
||||
CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}-nofpu"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@ -38,13 +38,19 @@ CT_DoArchMultilibList() {
|
||||
# the default CPU. E.g. if configuring for sh4-*-*, we need to remove
|
||||
# "sh4" or "m4" from the multilib list. Otherwise, the resulting compiler
|
||||
# will fail when that CPU is selected explicitly "sh4-multilib-linux-gnu-gcc -m4 ..."
|
||||
# as it will fail to find the sysroot with that suffix.
|
||||
# as it will fail to find the sysroot with that suffix. This applies to both
|
||||
# the CPU type inferred from the target tuple (CT_ARCH_SH_VARIANT) as well as
|
||||
# the default CPU configured with --with-cpu (CT_ARCH_CPU).
|
||||
IFS=,
|
||||
for x in ${CT_CC_GCC_MULTILIB_LIST}; do
|
||||
if [ "${x}" = "${CT_ARCH_SH_VARIANT}" -o "sh${x#m}" = "${CT_ARCH_SH_VARIANT}" ]; then
|
||||
CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
|
||||
continue
|
||||
fi
|
||||
if [ "${x}" = "${CT_ARCH_CPU}" -o "sh${x#m}" = "${CT_ARCH_CPU}" ]; then
|
||||
CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
|
||||
continue
|
||||
fi
|
||||
new="${new:+${new},}${x}"
|
||||
done
|
||||
IFS="${save_ifs}"
|
||||
@ -52,15 +58,110 @@ CT_DoArchMultilibList() {
|
||||
CT_DoLog DEBUG "Adjusted CT_CC_GCC_MULTILIB_LIST to '${CT_CC_GCC_MULTILIB_LIST}'"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Get multilib architecture-specific target
|
||||
# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
|
||||
CT_DoArchMultilibTarget ()
|
||||
{
|
||||
local target_var="${1}"; shift
|
||||
local -a multi_flags=( "$@" )
|
||||
local target_
|
||||
local newcpu
|
||||
|
||||
for m in "${multi_flags[@]}"; do
|
||||
case "${m}" in
|
||||
-m4*) newcpu=sh4;;
|
||||
-m3*) newcpu=sh3;;
|
||||
-m2*) newcpu=sh2;;
|
||||
-m1*) newcpu=sh1;;
|
||||
esac
|
||||
done
|
||||
|
||||
eval target_=\"\${${target_var}}\"
|
||||
|
||||
# Strip CPU name and append the new one if an option has been seen.
|
||||
if [ -n "${newcpu}" ]; then
|
||||
target_="${newcpu}-${target_#*-}"
|
||||
fi
|
||||
|
||||
# Set the target variable
|
||||
eval ${target_var}=\"${target_}\"
|
||||
}
|
||||
|
||||
# Adjust target tuple for GLIBC
|
||||
CT_DoArchGlibcAdjustTuple() {
|
||||
local target_var="${1}"
|
||||
local target_
|
||||
|
||||
eval target_=\"\${${target_var}}\"
|
||||
|
||||
case "${target_}" in
|
||||
sh-*)
|
||||
# Glibc does not build unless configured with 'shX-*' tuple.
|
||||
# Since we ended up here, no architecture variant has been
|
||||
# specified, so the only source of default is CT_ARCH_CPU.
|
||||
# GCC defaults to sh1, but this Glibc cannot compile for it.
|
||||
if [ -n "${CT_ARCH_CPU}" ]; then
|
||||
target_=${target_/#sh-/${CT_ARCH_CPU}-}
|
||||
CT_DoLog DEBUG "Adjusted target tuple ${target_}"
|
||||
else
|
||||
CT_Abort "GNU C library cannot build for sh1 (GCC default). " \
|
||||
"Specify architecture variant or the default CPU type."
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Set the target variable
|
||||
eval ${target_var}=\"${target_}\"
|
||||
}
|
||||
|
||||
# Multilib: Adjust configure arguments for GLIBC
|
||||
# Usage: CT_DoArchGlibcAdjustConfigure <configure-args-array-name> <cflags>
|
||||
CT_DoArchGlibcAdjustConfigure() {
|
||||
local -a add_args
|
||||
local array="${1}"
|
||||
local cflags="${2}"
|
||||
local opt
|
||||
|
||||
for opt in ${cflags}; do
|
||||
case "${opt}" in
|
||||
-m[1-5]*-nofpu)
|
||||
add_args+=( "--without-fp" )
|
||||
;;
|
||||
-m[1-5]*)
|
||||
add_args+=( "--with-fp" )
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# If architecture variant was specified, we'd have CT_ARCH_ARCH_CFLAG
|
||||
# and it would've been handled above. Our last resort: CT_ARCH_CPU
|
||||
if [ "${#add_args[@]}" = 0 ]; then
|
||||
case "${CT_ARCH_CPU}" in
|
||||
sh[34]*-nofpu)
|
||||
add_args+=( "--without-fp" )
|
||||
;;
|
||||
sh[34]*)
|
||||
add_args+=( "--with-fp" )
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
eval "${array}+=( \"\${add_args[@]}\" )"
|
||||
}
|
||||
|
||||
CT_DoArchUClibcConfig() {
|
||||
local cfg="${1}"
|
||||
|
||||
# FIXME: uclibc (!ng) seems to support sh64 (sh5), too
|
||||
CT_DoArchUClibcSelectArch "${cfg}" "sh"
|
||||
CT_KconfigDisableOption "CONFIG_SH2" "${cfg}"
|
||||
CT_KconfigDisableOption "CONFIG_SH2A" "${cfg}"
|
||||
CT_KconfigDisableOption "CONFIG_SH3" "${cfg}"
|
||||
CT_KconfigDisableOption "CONFIG_SH4" "${cfg}"
|
||||
CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}"
|
||||
case "${CT_ARCH_SH_VARIANT}" in
|
||||
sh2) CT_KconfigEnableOption "CONFIG_SH2" "${cfg}";;
|
||||
sh2a) CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}";;
|
||||
sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";;
|
||||
sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";;
|
||||
sh4a) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}";;
|
||||
|
@ -86,7 +86,7 @@ CT_DoArchGlibcAdjustTuple() {
|
||||
# x86 quirk: architecture name is i386, but glibc expects i[4567]86 - to
|
||||
# indicate the desired optimization. If it was a multilib variant of x86_64,
|
||||
# then it targets at least NetBurst a.k.a. i786, but we'll follow the model
|
||||
# above # and set the optimization to i686. Otherwise, replace with the most
|
||||
# above and set the optimization to i686. Otherwise, replace with the most
|
||||
# conservative choice, i486.
|
||||
i386-*)
|
||||
if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then
|
||||
|
@ -211,6 +211,7 @@ do_libc_backend_once() {
|
||||
;;
|
||||
esac
|
||||
done
|
||||
CT_DoArchGlibcAdjustConfigure extra_config "${glibc_cflags}"
|
||||
|
||||
# ./configure is mislead by our tools override wrapper for bash
|
||||
# so just tell it where the real bash is _on_the_target_!
|
||||
|
Loading…
x
Reference in New Issue
Block a user