summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorBryan Hundven <bryanhundven@gmail.com>2015-11-13 09:47:08 (GMT)
committerBryan Hundven <bryanhundven@gmail.com>2015-11-13 09:47:08 (GMT)
commite78251b75158689ace2194e8c87aa7b7bb5ec951 (patch)
tree6cabb898a31c4b9f5a6a1e02a2a04ead624873f6 /scripts
parentc96d5df1866ca7d2898cf4877d8efbaed1751616 (diff)
parentd1578acf3cd00754f560e0bbfc3fc5f957f940f1 (diff)
Merge pull request #253 from jcmvbkbc/xtensa-for-mainline-20151113
Add support for Xtensa architecture
Diffstat (limited to 'scripts')
-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
5 files changed, 99 insertions, 0 deletions
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
}