# Compute sh-specific values CT_DoArchTupleValues () { # The architecture part of the tuple: CT_TARGET_ARCH="${CT_ARCH_SH_VARIANT}${CT_ARCH_SUFFIX:-${target_endian_eb}}" # Endianness stuff (uses non-standard CFLAGS). If both are compiled, let the # compiler's default or multilib iterator be used. case "${CT_ARCH_ENDIAN}" in big) CT_ARCH_ENDIAN_CFLAG=-mb;; little) CT_ARCH_ENDIAN_CFLAG=-ml;; esac # Instead of -m{soft,hard}-float, uses CPU type CT_ARCH_FLOAT_CFLAG= case "${CT_ARCH_SH_VARIANT}" in sh3) CT_ARCH_ARCH_CFLAG=-m3;; sh4*) # 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}" ;; soft) CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh4}-nofpu" ;; esac ;; esac } CT_DoArchMultilibList() { local save_ifs="${IFS}" local new local x # In a configuration for SuperH, GCC list of multilibs shall not include # 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. 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 new="${new:+${new},}${x}" done IFS="${save_ifs}" CT_CC_GCC_MULTILIB_LIST="${new}" CT_DoLog DEBUG "Adjusted CT_CC_GCC_MULTILIB_LIST to '${CT_CC_GCC_MULTILIB_LIST}'" } CT_DoArchUClibcConfig() { local cfg="${1}" # FIXME: uclibc (!ng) seems to support sh64 (sh5), too CT_DoArchUClibcSelectArch "${cfg}" "sh" CT_KconfigDisableOption "CONFIG_SH3" "${cfg}" CT_KconfigDisableOption "CONFIG_SH4" "${cfg}" CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}" case "${CT_ARCH_SH_VARIANT}" in sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";; sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";; sh4a) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}";; esac } CT_DoArchUClibcCflags() { local cfg="${1}" local cflags="${2}" local f for f in ${cflags}; do case "${f}" in -ml) CT_KconfigDisableOption "ARCH_BIG_ENDIAN" "${dst}" CT_KconfigDisableOption "ARCH_WANTS_BIG_ENDIAN" "${dst}" CT_KconfigEnableOption "ARCH_LITTLE_ENDIAN" "${dst}" CT_KconfigEnableOption "ARCH_WANTS_LITTLE_ENDIAN" "${dst}" ;; -mb) CT_KconfigEnableOption "ARCH_BIG_ENDIAN" "${dst}" CT_KconfigEnableOption "ARCH_WANTS_BIG_ENDIAN" "${dst}" CT_KconfigDisableOption "ARCH_LITTLE_ENDIAN" "${dst}" CT_KconfigDisableOption "ARCH_WANTS_LITTLE_ENDIAN" "${dst}" ;; -m2|-m2a|-m2a-nofpu|-m3|-m4|-m4-nofpu|-m4a|-m4a-nofpu) 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}" CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}" case "${f}" in -m2) CT_KconfigEnableOption "CONFIG_SH2" "${cfg}" ;; -m2a) CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}" CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}" ;; -m2a-nofpu) CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}" ;; -m3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}" ;; -m4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}" CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}" ;; -m4-nofpu) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}" ;; -m4a) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}" CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}" ;; -m4a-nofpu) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}" ;; esac ;; esac done }