From d532f025420de029914fb43734dec6be9b7128f6 Mon Sep 17 00:00:00 2001 From: Dan Tejada Date: Wed, 22 Apr 2020 23:25:04 -0400 Subject: Experimental: Add support for the Texas Instruments C6X (TMS320C6000 series) DSPs -- c6x: Add support for c6x product families to pass on to uClibC-ng -- c6x: Fix multilib support -- c6x: Add patch fix internal instruction error (GCC 57295) Signed-off-by: Dan Tejada --- scripts/build/arch/c6x.sh | 81 +++++++++++++++++++++++++++++++++++++++++++ scripts/build/kernel/linux.sh | 2 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 scripts/build/arch/c6x.sh (limited to 'scripts') diff --git a/scripts/build/arch/c6x.sh b/scripts/build/arch/c6x.sh new file mode 100644 index 00000000..27133897 --- /dev/null +++ b/scripts/build/arch/c6x.sh @@ -0,0 +1,81 @@ +# Compute c6x-specific values + +CT_DoArchUClibcConfig() { + local cfg="${1}" + + CT_DoArchUClibcSelectArch "${cfg}" "c6x" +} + +CT_DoArchTupleValues() { + CT_TARGET_ARCH="tic6x" + #binutils does not like uclibc in the tuple + if [ "${CT_TARGET_SYS}" = "uclibc" ]; then + CT_TARGET_SYS= + fi +} + +CT_DoArchUClibcHeaderDir() { + local dir_var="${1}" + local cflags="${2}" + + # If it is non-default multilib, add a suffix with architecture (reported by gcc) + # to the headers installation path. + if [ -n "${cflags}" ]; then + eval "${dir_var}="$( ${CT_TARGET}-${CT_CC} -print-multiarch ${cflags} ) + fi +} + +CT_DoArchUClibcCflags() { + local cfg="${1}" + local cflags="${2}" + local f + + # Set default little endian options + CT_KconfigDisableOption "ARCH_BIG_ENDIAN" "${cfg}" + CT_KconfigDisableOption "ARCH_WANTS_BIG_ENDIAN" "${cfg}" + CT_KconfigEnableOption "ARCH_LITTLE_ENDIAN" "${cfg}" + CT_KconfigEnableOption "ARCH_WANTS_LITTLE_ENDIAN" "${cfg}" + + # Set arch options based on march switch + CT_KconfigDisableOption "CONFIG_TMS320C674X" "${cfg}" + CT_KconfigDisableOption "CONFIG_TMS320C64XPLUS" "${cfg}" + CT_KconfigDisableOption "CONFIG_TMS320C64X" "${cfg}" + CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}" + CT_KconfigEnableOption "CONFIG_GENERIC_C6X" "${cfg}" + + for f in ${cflags}; do + case "${f}" in + -march=*) + case "${f#-march=}" in + c674x) + CT_KconfigEnableOption "CONFIG_TMS320C674X" "${cfg}" + CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}" + CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}" + ;; + c64x+) + CT_KconfigEnableOption "CONFIG_TMS320C64XPLUS" "${cfg}" + CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}" + ;; + c64x) + CT_KconfigEnableOption "CONFIG_TMS320C64X" "${cfg}" + CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}" + ;; + c67x) + CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}" + ;; + c62x) + ;; + *) CT_Abort "Unsupported architecture: ${f#-march=}";; + esac + ;; + -mlittle-endian) + ;; + -mbig-endian) + CT_KconfigEnableOption "ARCH_BIG_ENDIAN" "${cfg}" + CT_KconfigEnableOption "ARCH_WANTS_BIG_ENDIAN" "${cfg}" + CT_KconfigDisableOption "ARCH_LITTLE_ENDIAN" "${cfg}" + CT_KconfigDisableOption "ARCH_WANTS_LITTLE_ENDIAN" "${cfg}" + ;; + esac + done +} diff --git a/scripts/build/kernel/linux.sh b/scripts/build/kernel/linux.sh index bfeadf07..4c962577 100644 --- a/scripts/build/kernel/linux.sh +++ b/scripts/build/kernel/linux.sh @@ -10,7 +10,7 @@ CT_DoKernelTupleValues() # should be added here when someone starts to care about them. case "${CT_ARCH}" in arm*) CT_TARGET_KERNEL="linux" ;; - m68k|xtensa*) CT_TARGET_KERNEL="uclinux" ;; + c6x|m68k|xtensa*) CT_TARGET_KERNEL="uclinux" ;; *) CT_Abort "Unsupported no-mmu arch '${CT_ARCH}'" esac fi -- cgit v1.2.3 From 3a3e645245d4cc84957209ec4313bfd6635acdec Mon Sep 17 00:00:00 2001 From: Dan Tejada Date: Mon, 2 Nov 2020 16:21:26 -0500 Subject: c6x: Remove multilib requirement Restore tuple config check Add sample configuration Signed-off-by: Dan Tejada --- config/arch/c6x.in | 24 +----------------------- samples/tic6x-uclinux-uclibc/crosstool.config | 14 ++++++++++++++ samples/tic6x-uclinux-uclibc/reported.by | 3 +++ scripts/build/arch/c6x.sh | 2 -- 4 files changed, 18 insertions(+), 25 deletions(-) create mode 100644 samples/tic6x-uclinux-uclibc/crosstool.config create mode 100644 samples/tic6x-uclinux-uclibc/reported.by (limited to 'scripts') diff --git a/config/arch/c6x.in b/config/arch/c6x.in index ade8de9b..93a8993f 100644 --- a/config/arch/c6x.in +++ b/config/arch/c6x.in @@ -7,31 +7,9 @@ ## select ARCH_DEFAULT_LE ## select ARCH_SUPPORTS_FLAT_FORMAT ## select ARCH_SUPPORTS_WITH_CPU -## select TARGET_SKIP_CONFIG_SUB -## select ARCH_REQUIRES_MULTILIB ## depends on EXPERIMENTAL ## ## help The TI C6x (TMS320C6000) architecture ## help https://www.ti.com/processors/digital-signal-processors +## help For linux, kernel must be 3.7 or later (or custom) -#choice -# prompt "Target Processor Type" -# default GENERIC_C6X -# -#config GENERIC_C6X -# bool -# prompt "Generic C6X DSP" -# -#config TMS320C64X -# bool -# prompt "TMS320C64X" -# -#config TMS320C64XPLUS -# bool -# prompt "TMS320C64X+" -# -#config TMS320C674X -# bool -# prompt "TMS320C674X or TMS320C66XX" -# -#endchoice diff --git a/samples/tic6x-uclinux-uclibc/crosstool.config b/samples/tic6x-uclinux-uclibc/crosstool.config new file mode 100644 index 00000000..cd4af2c5 --- /dev/null +++ b/samples/tic6x-uclinux-uclibc/crosstool.config @@ -0,0 +1,14 @@ +CT_CONFIG_VERSION="3" +CT_EXPERIMENTAL=y +CT_ARCH_C6X=y +CT_OMIT_TARGET_VENDOR=y +CT_KERNEL_LINUX=y +CT_MULTILIB=y +CT_LIBC_UCLIBC=y +CT_THREADS="linuxthreads" +CT_UCLIBC_NG_DEVEL_VCS_git=y +CT_UCLIBC_NG_DEVEL_URL="https://github.com/DspHack/uclibc-ng.git" +CT_ARCH_BINFMT_FDPIC=y +CT_CC_LANG_CXX=y +CT_ARCH_ENDIAN="little" + diff --git a/samples/tic6x-uclinux-uclibc/reported.by b/samples/tic6x-uclinux-uclibc/reported.by new file mode 100644 index 00000000..e51f6949 --- /dev/null +++ b/samples/tic6x-uclinux-uclibc/reported.by @@ -0,0 +1,3 @@ +reporter_name="Dan Tejada " +reporter_url="https://www.cantada.com/" +reporter_comment="Tested with uclibc and linux kernel from http://linux-c6x.org" diff --git a/scripts/build/arch/c6x.sh b/scripts/build/arch/c6x.sh index 27133897..3eb40e47 100644 --- a/scripts/build/arch/c6x.sh +++ b/scripts/build/arch/c6x.sh @@ -68,8 +68,6 @@ CT_DoArchUClibcCflags() { *) CT_Abort "Unsupported architecture: ${f#-march=}";; esac ;; - -mlittle-endian) - ;; -mbig-endian) CT_KconfigEnableOption "ARCH_BIG_ENDIAN" "${cfg}" CT_KconfigEnableOption "ARCH_WANTS_BIG_ENDIAN" "${cfg}" -- cgit v1.2.3