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:
Alexey Neyman 2017-09-02 10:08:47 -07:00
parent 1e4eeb5c3b
commit 602304b230
12 changed files with 123 additions and 22 deletions

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
reporter_name="YEM"
reporter_url="http://ymorin.is-a-geek.org/"
reporter_comment="EXPERIMENTAL Super-H sh4 sample."

View File

@ -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() {

View File

@ -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}";;

View File

@ -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

View File

@ -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_!