summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/arch/xtensa.in20
-rw-r--r--config/arch/xtensa.in.230
-rw-r--r--scripts/build/arch/xtensa.sh78
-rw-r--r--scripts/build/binutils/binutils.sh4
-rw-r--r--scripts/build/cc/100-gcc.sh4
-rw-r--r--scripts/build/debug/300-gdb.sh4
-rw-r--r--scripts/build/libc/newlib.sh9
7 files changed, 149 insertions, 0 deletions
diff --git a/config/arch/xtensa.in b/config/arch/xtensa.in
new file mode 100644
index 0000000..dfe6d16
--- /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 0000000..730ca03
--- /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 0000000..7e49312
--- /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 a23b94a..dcaf37d 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 6515f96..2e824d9 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 93086b9..984aea3 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 ba3d969..4c395d0 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
}