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_DEFAULT_32
## select ARCH_USE_MMU ## select ARCH_USE_MMU
## select ARCH_SUPPORTS_EITHER_ENDIAN ## select ARCH_SUPPORTS_EITHER_ENDIAN
## select ARCH_DEFAULT_LE_BE ## select ARCH_DEFAULT_LE
## select ARCH_REQUIRES_MULTILIB ## select ARCH_REQUIRES_MULTILIB
## select ARCH_SUPPORTS_WITH_ENDIAN ## select ARCH_SUPPORTS_WITH_ENDIAN
## select ARCH_SUPPORTS_WITH_CPU
## ##
## help The Super-H architecture, as defined by: ## 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/ ## 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 bool
prompt "unspecified" prompt "unspecified"
select ARCH_SUPPORTS_BOTH_ENDIAN select ARCH_SUPPORTS_BOTH_ENDIAN
select ARCH_SUPPORTS_WITH_CPU
help help
If left unspecified, GCC will determine the set of multilibs to compile automatically If left unspecified, GCC will determine the set of multilibs to compile automatically
based on selected endianness, FPU mode and OS. based on selected endianness, FPU mode and OS.

View File

@ -1,9 +1,10 @@
CT_ARCH_SH=y CT_ARCH_SH=y
CT_ARCH_SH_SH4=y CT_ARCH_CPU="sh4"
CT_ARCH_LE_BE=y
CT_TARGET_VENDOR="multilib" CT_TARGET_VENDOR="multilib"
CT_KERNEL_LINUX=y CT_KERNEL_LINUX=y
CT_BINUTILS_PLUGINS=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_CC_LANG_CXX=y
CT_DEBUG_GDB=y CT_DEBUG_GDB=y
# CT_GDB_CROSS_PYTHON is not set # CT_GDB_CROSS_PYTHON is not set

View File

@ -1,10 +1,11 @@
CT_ARCH_SH=y CT_ARCH_SH=y
CT_ARCH_SH_SH4=y CT_ARCH_CPU="sh4"
CT_ARCH_LE_BE=y
CT_TARGET_VENDOR="multilib" CT_TARGET_VENDOR="multilib"
CT_KERNEL_LINUX=y CT_KERNEL_LINUX=y
CT_BINUTILS_PLUGINS=y CT_BINUTILS_PLUGINS=y
CT_LIBC_UCLIBC=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_CC_LANG_CXX=y
CT_DEBUG_GDB=y CT_DEBUG_GDB=y
# CT_GDB_CROSS_PYTHON is not set # CT_GDB_CROSS_PYTHON is not set

View File

@ -1,4 +1,5 @@
CT_ARCH_SH=y CT_ARCH_SH=y
CT_ARCH_LE_BE=y
CT_BINUTILS_PLUGINS=y CT_BINUTILS_PLUGINS=y
CT_CC_LANG_CXX=y CT_CC_LANG_CXX=y
CT_GETTEXT=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 # Helper for uClibc configurators: select the architecture
# Usage: CT_DoArchUClibcSelectArch <config-file> <architecture> # Usage: CT_DoArchUClibcSelectArch <config-file> <architecture>
CT_DoArchUClibcSelectArch() { CT_DoArchUClibcSelectArch() {

View File

@ -15,14 +15,14 @@ CT_DoArchTupleValues () {
CT_ARCH_FLOAT_CFLAG= CT_ARCH_FLOAT_CFLAG=
case "${CT_ARCH_SH_VARIANT}" in case "${CT_ARCH_SH_VARIANT}" in
sh3) CT_ARCH_ARCH_CFLAG=-m3;; sh3) CT_ARCH_ARCH_CFLAG=-m3;;
sh4*) sh4*|sh2*)
# softfp is not possible for SuperH, no need to test for it. # softfp is not possible for SuperH, no need to test for it.
case "${CT_ARCH_FLOAT}" in case "${CT_ARCH_FLOAT}" in
hard) hard)
CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh4}" CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}"
;; ;;
soft) soft)
CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh4}-nofpu" CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}-nofpu"
;; ;;
esac esac
;; ;;
@ -38,13 +38,19 @@ CT_DoArchMultilibList() {
# the default CPU. E.g. if configuring for sh4-*-*, we need to remove # the default CPU. E.g. if configuring for sh4-*-*, we need to remove
# "sh4" or "m4" from the multilib list. Otherwise, the resulting compiler # "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 ..." # 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=, IFS=,
for x in ${CT_CC_GCC_MULTILIB_LIST}; do for x in ${CT_CC_GCC_MULTILIB_LIST}; do
if [ "${x}" = "${CT_ARCH_SH_VARIANT}" -o "sh${x#m}" = "${CT_ARCH_SH_VARIANT}" ]; then 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" CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
continue continue
fi 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}" new="${new:+${new},}${x}"
done done
IFS="${save_ifs}" IFS="${save_ifs}"
@ -52,15 +58,110 @@ CT_DoArchMultilibList() {
CT_DoLog DEBUG "Adjusted CT_CC_GCC_MULTILIB_LIST to '${CT_CC_GCC_MULTILIB_LIST}'" 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() { CT_DoArchUClibcConfig() {
local cfg="${1}" local cfg="${1}"
# FIXME: uclibc (!ng) seems to support sh64 (sh5), too
CT_DoArchUClibcSelectArch "${cfg}" "sh" CT_DoArchUClibcSelectArch "${cfg}" "sh"
CT_KconfigDisableOption "CONFIG_SH2" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH2A" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH3" "${cfg}" CT_KconfigDisableOption "CONFIG_SH3" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH4" "${cfg}" CT_KconfigDisableOption "CONFIG_SH4" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}" CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}"
case "${CT_ARCH_SH_VARIANT}" in case "${CT_ARCH_SH_VARIANT}" in
sh2) CT_KconfigEnableOption "CONFIG_SH2" "${cfg}";;
sh2a) CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}";;
sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";; sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";;
sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";; sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";;
sh4a) CT_KconfigEnableOption "CONFIG_SH4A" "${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 # 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, # 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 # 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. # conservative choice, i486.
i386-*) i386-*)
if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then

View File

@ -211,6 +211,7 @@ do_libc_backend_once() {
;; ;;
esac esac
done done
CT_DoArchGlibcAdjustConfigure extra_config "${glibc_cflags}"
# ./configure is mislead by our tools override wrapper for bash # ./configure is mislead by our tools override wrapper for bash
# so just tell it where the real bash is _on_the_target_! # so just tell it where the real bash is _on_the_target_!