diff --git a/config/arch/xtensa.in b/config/arch/xtensa.in new file mode 100644 index 00000000..dfe6d161 --- /dev/null +++ b/config/arch/xtensa.in @@ -0,0 +1,20 @@ +# xtensa specific configuration file + +## select ARCH_SUPPORTS_32 +## select ARCH_SUPPORTS_BOTH_MMU +## select ARCH_DEFAULT_HAS_MMU +## +## help The xtensa architecture +## help +## help Xtensa is a configurable and extensible processor architecture. +## help Supporting a specific configuration typically requires minor +## help modifications to a small set of configuration files in various +## help development tools. This process is automated and only requires +## help a configuration specific 'overlay' file. +## help +## help For a custom configuration, select the XTENSA_CUSTOM option and +## help provide the name of the overlay file through the +## help CT_ARCH_XTENSA_CUSTOM_NAME option. +## help +## help The default option (ARCH_xtensa_fsf) uses a built-in configuration, +## help which may or may not work for a particular Xtensa processor. diff --git a/config/arch/xtensa.in.2 b/config/arch/xtensa.in.2 new file mode 100644 index 00000000..730ca034 --- /dev/null +++ b/config/arch/xtensa.in.2 @@ -0,0 +1,30 @@ +choice + prompt "Target Architecture Variant" + default ARCH_xtensa_fsf +config XTENSA_CUSTOM + bool "Custom Xtensa processor configuration" + +config ARCH_xtensa_fsf + bool "fsf - Default configuration" + +endchoice + +config ARCH_XTENSA_CUSTOM_NAME + string "Custom Xtensa process configuration file name" + depends on XTENSA_CUSTOM + default "" + help + Enter the name of the custom processor configuration + overlay file or leave blank to use the default 'xtensa-overlay.tar'. + For more information about this option, please also consult + the 'help' section of the 'Target Architecture Variant' + option above. + +config ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION + string "Full path to custom Xtensa processor configurations" + depends on XTENSA_CUSTOM + default "" + help + Enter the path to the directory for the custom processor + configuration file or leave blank to use the default location: + CT_CUSTOM_LOCATION_ROOT_DIR diff --git a/scripts/build/arch/xtensa.sh b/scripts/build/arch/xtensa.sh new file mode 100644 index 00000000..7e493127 --- /dev/null +++ b/scripts/build/arch/xtensa.sh @@ -0,0 +1,78 @@ +# Compute Xtensa-specific values + +CT_DoArchTupleValues() { + # The architecture part of the tuple: + CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX}" + # The system part of the tuple: + case "${CT_LIBC}" in + *glibc) CT_TARGET_SYS=gnu;; + uClibc) CT_TARGET_SYS=uclibc;; + esac +} + +# This function updates the specified component (binutils, gcc, gdb, etc.) +# with the processor specific configuration. +CT_ConfigureXtensa() { + local component="${1}" + local version="${2}" + local custom_overlay="xtensa_${CT_ARCH_XTENSA_CUSTOM_NAME}.tar" + local custom_location="${CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION}" + + if [ -z "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then + custom_overlay="xtensa-overlay.tar" + fi + + if [ -n "${CT_CUSTOM_LOCATION_ROOT_DIR}" \ + -a -z "${custom_location}" ]; then + custom_location="${CT_CUSTOM_LOCATION_ROOT_DIR}" + fi + + CT_TestAndAbort "${custom_overlay}: CT_CUSTOM_LOCATION_ROOT_DIR or CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION must be set." \ + -z "${CT_CUSTOM_LOCATION_ROOT_DIR}" -a -z "${custom_location}" + + local full_file="${custom_location}/${custom_overlay}" + local basename="${component}-${version}" + local ext + + ext=${full_file/*./.} + + if [ -z "${ext}" ] ; then + CT_DoLog WARN "'${full_file}' not found" + return 1 + fi + + if [ -e "${CT_SRC_DIR}/.${basename}.configuring" ]; then + CT_DoLog ERROR "The '${basename}' source were partially configured." + CT_DoLog ERROR "Please remove first:" + CT_DoLog ERROR " - the source dir for '${basename}', in '${CT_SRC_DIR}'" + CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.extracted'" + CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.patch'" + CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.configuring'" + CT_Abort + fi + + CT_DoLog EXTRA "Using '${custom_overlay}' from ${custom_location}" + CT_DoExecLog DEBUG ln -sf "${custom_location}/${custom_overlay}" \ + "${CT_TARBALLS_DIR}/${custom_overlay}" + + CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.${basename}.configuring" + + CT_Pushd "${CT_SRC_DIR}/${basename}" + + tar_opts=( "--strip-components=1" ) + tar_opts+=( "-xv" ) + + case "${ext}" in + .tar) CT_DoExecLog FILE tar "${tar_opts[@]}" -f "${full_file}" "${component}";; + .gz|.tgz) gzip -dc "${full_file}" | CT_DoExecLog FILE tar "${tar_opts[@]}" -f - "${component}";; + .bz2) bzip2 -dc "${full_file}" | CT_DoExecLog FILE tar "${tar_opts[@]}" -f - "${component}";; + *) CT_DoLog WARN "Don't know how to handle '${basename}${ext}': unknown extension" + return 1 + ;; + esac + + CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.${basename}.configured" + CT_DoExecLog DEBUG rm -f "${CT_SRC_DIR}/.${basename}.configuring" + + CT_Popd +} diff --git a/scripts/build/binutils/binutils.sh b/scripts/build/binutils/binutils.sh index a23b94a0..dcaf37da 100644 --- a/scripts/build/binutils/binutils.sh +++ b/scripts/build/binutils/binutils.sh @@ -46,6 +46,10 @@ do_binutils_extract() { CT_Patch "elf2flt" "${CT_ELF2FLT_GIT_CSET}" fi fi + + if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then + CT_ConfigureXtensa "binutils" "${CT_BINUTILS_VERSION}" + fi } # Build binutils for build -> target diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index 6515f96c..2e824d98 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -63,6 +63,10 @@ do_gcc_extract() { ]; then CT_DoExecLog ALL cp -v "${CT_TARBALLS_DIR}/ecj-latest.jar" "${CT_SRC_DIR}/gcc-${CT_CC_GCC_VERSION}/ecj.jar" fi + + if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then + CT_ConfigureXtensa "gcc" "${CT_CC_GCC_VERSION}" + fi } #------------------------------------------------------------------------------ diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index 93086b97..984aea31 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -100,6 +100,10 @@ do_debug_gdb_extract() { CT_Extract "expat-${CT_DEBUG_GDB_EXPAT_VERSION}" CT_Patch "expat" "${CT_DEBUG_GDB_EXPAT_VERSION}" fi + + if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then + CT_ConfigureXtensa "gdb" "${CT_GDB_VERSION}" + fi } do_debug_gdb_build() { diff --git a/scripts/build/libc/newlib.sh b/scripts/build/libc/newlib.sh index ba3d9699..4c395d0d 100644 --- a/scripts/build/libc/newlib.sh +++ b/scripts/build/libc/newlib.sh @@ -38,6 +38,10 @@ do_libc_extract() { CT_Extract "newlib-${CT_LIBC_VERSION}" CT_Patch "newlib" "${CT_LIBC_VERSION}" + + if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then + CT_ConfigureXtensa "newlib" "${CT_LIBC_VERSION}" + fi } do_libc_check_config() { @@ -48,6 +52,11 @@ do_libc_start_files() { CT_DoStep INFO "Installing C library headers & start files" CT_DoExecLog ALL cp -a "${CT_SRC_DIR}/newlib-${CT_LIBC_VERSION}/newlib/libc/include/." \ "${CT_HEADERS_DIR}" + if [ "${CT_ARCH_xtensa}" = "y" ]; then + CT_DoLog EXTRA "Installing Xtensa headers" + CT_DoExecLog ALL cp -r "${CT_SRC_DIR}/newlib-${CT_LIBC_VERSION}/newlib/libc/sys/xtensa/include/." \ + "${CT_HEADERS_DIR}" + fi CT_EndStep }