diff options
author | Chris Zankel <chris@zankel.net> | 2013-07-24 15:10:47 -0700 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2015-11-13 09:08:53 +0300 |
commit | 81328ed1cbcfb7fbe77552aa9030cddd68ca97b9 (patch) | |
tree | f26c8b36cd483fbe77759f1ee3706dd57a6d6c90 /scripts | |
parent | 57de8dcf22d5ddddee6a44f87f45f2c279fdb1ac (diff) | |
download | crosstool-ng-81328ed1cbcfb7fbe77552aa9030cddd68ca97b9.tar.gz crosstool-ng-81328ed1cbcfb7fbe77552aa9030cddd68ca97b9.tar.bz2 crosstool-ng-81328ed1cbcfb7fbe77552aa9030cddd68ca97b9.zip |
xtensa: add support for the configurable Xtensa architecture.
The Xtensa processor architecture is a configurable, extensible,
and synthesizable 32-bit RISC processor core. Processor and SOC vendors
can select from various processor options and even create customized
instructions in addition to a base ISA to tailor the processor for
a particular application.
Because of the configurability, the build process requires one additional
step for gcc, binutils, and gdb to update the default configuration.
These configurations are packed into an 'overlay' tar image, and are
simply untarred on top of the default configuration during the build.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/build/arch/xtensa.sh | 78 | ||||
-rw-r--r-- | scripts/build/binutils/binutils.sh | 4 | ||||
-rw-r--r-- | scripts/build/cc/100-gcc.sh | 4 | ||||
-rw-r--r-- | scripts/build/debug/300-gdb.sh | 4 | ||||
-rw-r--r-- | scripts/build/libc/newlib.sh | 9 |
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 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 } |