From 5ddb904a8620bceddd4df1c05c7342e10592c0c3 Mon Sep 17 00:00:00 2001 From: Maxim Grigoriev Date: Fri, 24 Jul 2009 02:17:22 +0200 Subject: [PATCH] target/; xtensa support Part of #163. Signed-off-by: Maxim Grigoriev Signed-off-by: Peter Korsgaard --- target/Config.in.arch | 35 ++ target/Makefile.in | 1 + target/device/Config.in | 1 + target/device/xtensa/Config.in | 21 + target/device/xtensa/Makefile.in | 14 + target/device/xtensa/device_table.diff | 10 + .../device/xtensa/skeleton-patch/etc/inittab | 47 ++ target/xtensa/.gitignore | 1 + target/xtensa/Makefile.in | 1 + target/xtensa/defconfig | 133 +++++ target/xtensa/patch.in | 33 ++ target/xtensa/setup-config | 57 ++ target/xtensa/uClibc-0.9.30.config | 245 +++++++++ target/xtensa/uClibc.config | 190 +++++++ target/xtensa/xt-buildroot-overlay-install | 494 ++++++++++++++++++ 15 files changed, 1283 insertions(+) create mode 100644 target/device/xtensa/Config.in create mode 100644 target/device/xtensa/Makefile.in create mode 100644 target/device/xtensa/device_table.diff create mode 100644 target/device/xtensa/skeleton-patch/etc/inittab create mode 100644 target/xtensa/.gitignore create mode 100644 target/xtensa/Makefile.in create mode 100644 target/xtensa/defconfig create mode 100644 target/xtensa/patch.in create mode 100644 target/xtensa/setup-config create mode 100644 target/xtensa/uClibc-0.9.30.config create mode 100644 target/xtensa/uClibc.config create mode 100644 target/xtensa/xt-buildroot-overlay-install diff --git a/target/Config.in.arch b/target/Config.in.arch index 611210e876..e63fc027a8 100644 --- a/target/Config.in.arch +++ b/target/Config.in.arch @@ -43,6 +43,8 @@ config BR2_sparc64 bool "sparc64" config BR2_x86_64 bool "x86_64" +config BR2_xtensa + bool "xtensa" endchoice # @@ -394,6 +396,38 @@ config BR2_ia64_itanium2 bool "itanium 2" endchoice +choice + prompt "Target Architecture Variant" + depends on BR2_xtensa + default BR2_xtensa_dc232b + help + Specific CPU variant to use + +config BR2_xtensa_custom + bool "Custom Xtensa processor configuration" +config BR2_xtensa_dc232a + bool "dc232a - Diamond 232L Standard Core Rev.A (LE)" +config BR2_xtensa_dc232b + bool "dc232b - Diamond 232L Standard Core Rev.B (LE)" +#config BR2_xtensa_s5000 +# bool "s5000 - Stretch S5000" +endchoice + +config BR2_xtensa_custom_name + string "Custom Xtensa processor configuration name" + depends on BR2_xtensa_custom + default "" + help + Name given to a custom Xtensa processor configuration. + This is used to select the correct overlay. + +config BR2_xtensa_core_name + string + default BR2_xtensa_custom_name if BR2_xtensa_custom + default "dc232a" if BR2_xtensa_dc232a + default "dc232b" if BR2_xtensa_dc232b +# default "s5000" if BR2_xtensa_s5000 + choice prompt "Target Architecture Variant" depends on BR2_powerpc @@ -496,6 +530,7 @@ config BR2_ARCH default "x86_64" if BR2_x86_64_opteron default "x86_64" if BR2_x86_64_opteron_sse3 default "x86_64" if BR2_x86_64_barcelona + default "xtensa" if BR2_xtensa config BR2_ENDIAN diff --git a/target/Makefile.in b/target/Makefile.in index b1450413e5..ff0f6b523f 100644 --- a/target/Makefile.in +++ b/target/Makefile.in @@ -62,6 +62,7 @@ include target/generic/Makefile.in include target/device/Makefile.in include target/x86/Makefile.in include target/powerpc/Makefile.in +include target/xtensa/Makefile.in ifeq ($(BR2_TARGET_UBOOT),y) include target/u-boot/Makefile.in diff --git a/target/device/Config.in b/target/device/Config.in index 50d011fe8a..ca569709be 100644 --- a/target/device/Config.in +++ b/target/device/Config.in @@ -10,6 +10,7 @@ source "target/device/Atmel/Config.in" source "target/device/KwikByte/Config.in" source "target/device/valka/Config.in" source "target/device/x86/Config.in" +source "target/device/xtensa/Config.in" # This must be last source "target/generic/Config.in" diff --git a/target/device/xtensa/Config.in b/target/device/xtensa/Config.in new file mode 100644 index 0000000000..0d4408c233 --- /dev/null +++ b/target/device/xtensa/Config.in @@ -0,0 +1,21 @@ +menuconfig BR2_TARGET_XTENSA + bool "Device and Board Support for Xtensa and Diamond cores" + depends on BR2_xtensa + default y + help + Lists development boards with support for the Xtensa architecture. + +if BR2_TARGET_XTENSA +comment "Tensilica Xtensa/Diamond based Device Support" + depends on BR2_xtensa + +config BR2_TARGET_XTENSA_XTAV60 + bool "XTAV60/200 board (Avnet LX60 or LX200 plus Tensilica IP)" + depends on BR2_xtensa + default y + help + The XTAV60 or XTAV200 board, which is an Avnet LX60 or LX200 + emulation board programmed with an FPGA bitstream obtained + from Tensilica. + +endif diff --git a/target/device/xtensa/Makefile.in b/target/device/xtensa/Makefile.in new file mode 100644 index 0000000000..f3248962f7 --- /dev/null +++ b/target/device/xtensa/Makefile.in @@ -0,0 +1,14 @@ +ifeq ($(strip $(BR2_TARGET_XTENSA_XTAV60)),y) +# UCLIBC_CONFIG_FILE:=target/device/xtensa/xtav60/uClibc.config +# BR2_PACKAGE_BUSYBOX_CONFIG:=target/device/xtensa/xtav60/busybox.config +TARGET_SKELETON_PATCH:=target/device/xtensa +endif + +# Custom device table patch used when targeting ISS: +OLD_TARGET_DEVICE_TABLE := $(TARGET_DEVICE_TABLE) +TARGET_DEVICE_TABLE := target/device/xtensa/device_table.txt +makedevs: + @echo "Applying patch to $(TARGET_DEVICE_TABLE)" + cp -f $(OLD_TARGET_DEVICE_TABLE) $(TARGET_DEVICE_TABLE) + patch -p1 -g 0 < target/device/xtensa/device_table.diff + diff --git a/target/device/xtensa/device_table.diff b/target/device/xtensa/device_table.diff new file mode 100644 index 0000000000..12f682546d --- /dev/null +++ b/target/device/xtensa/device_table.diff @@ -0,0 +1,10 @@ +diff --git a/target/generic/device_table.txt b/target/generic/device_table.txt +index f4b16ba..b87bf69 100644 +--- a/target/device/xtensa/device_table.txt ++++ b/target/device/xtensa/device_table.txt +@@ -169,3 +169,5 @@ + #/dev/mcd b 640 0 0 23 0 0 0 + #/dev/optcd b 640 0 0 17 0 0 0 + ++/dev/simdisk0 b 640 0 0 240 0 0 0 ++/dev/simdisk1 b 640 0 0 240 1 0 0 diff --git a/target/device/xtensa/skeleton-patch/etc/inittab b/target/device/xtensa/skeleton-patch/etc/inittab new file mode 100644 index 0000000000..b336ff69c5 --- /dev/null +++ b/target/device/xtensa/skeleton-patch/etc/inittab @@ -0,0 +1,47 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +null::sysinit:/bin/mount -t proc proc /proc +null::sysinit:/bin/mount -o remount,rw / +null::sysinit:/bin/mount -a +null::sysinit:/bin/hostname -F /etc/hostname +null::sysinit:/sbin/ifconfig lo 127.0.0.1 up +null::sysinit:/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Set up a couple of getty's +#tty1::respawn:/sbin/getty 38400 tty1 +#tty2::respawn:/sbin/getty 38400 tty2 + +# Put a getty on the serial port +ttyS0::respawn:/sbin/getty -L ttyS0 38400 vt100 + +# Logging junk +null::sysinit:/bin/touch /var/log/messages +null::respawn:/sbin/syslogd -n -m 0 +null::respawn:/sbin/klogd -n +#tty3::respawn:/usr/bin/tail -f /var/log/messages + +# Stuff to do for the 3-finger salute +::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +null::shutdown:/usr/bin/killall klogd +null::shutdown:/usr/bin/killall syslogd +null::shutdown:/bin/umount -a -r +null::shutdown:/sbin/swapoff -a + diff --git a/target/xtensa/.gitignore b/target/xtensa/.gitignore new file mode 100644 index 0000000000..cff61bf9ec --- /dev/null +++ b/target/xtensa/.gitignore @@ -0,0 +1 @@ +/busybox-config diff --git a/target/xtensa/Makefile.in b/target/xtensa/Makefile.in new file mode 100644 index 0000000000..8a654b9980 --- /dev/null +++ b/target/xtensa/Makefile.in @@ -0,0 +1 @@ +-include target/xtensa/*/*.mk diff --git a/target/xtensa/defconfig b/target/xtensa/defconfig new file mode 100644 index 0000000000..4127f53087 --- /dev/null +++ b/target/xtensa/defconfig @@ -0,0 +1,133 @@ +# Default buildroot configuration for running Linux on an Xtensa processor +# on an LX60 board. + +# +# Project Options +# +BR2_BANNER="Welcome to your custom Xtensa processor based uClibc environment." +BR2_HAVE_DOT_CONFIG=y +BR2_xtensa=y +BR2_xtensa_dc232b=y +BR2_xtensa_core_name="dc232b" +BR2_ARCH="xtensa" + +# +# Build options +# +BR2_WGET="wget --passive-ftp" +# BR2_STRIP_strip is not set +# BR2_STRIP_none=y + +## Added by Maxim +BR2_UPDATE_CONFIG=y + +# +# Kernel Header Options +# +BR2_KERNEL_none=y +BR2_KERNEL_HEADERS_2_6_22_1=y +BR2_DEFAULT_KERNEL_HEADERS="2.6.22.1" + +# +# uClibc Options +# +BR2_UCLIBC_VERSION_0_9_30=y +# BR2_UCLIBC_VERSION_SNAPSHOT is not set +BR2_UCLIBC_CONFIG="target/xtensa/uClibc-0.9.30.config" +BR2_PTHREADS_OLD=y +# BR2_PTHREADS_NATIVE is not set +BR2_PTHREAD_DEBUG=y + +# +# Binutils Options +# +BR2_BINUTILS_VERSION_2_19=y +BR2_BINUTILS_VERSION="2.19" +BR2_EXTRA_BINUTILS_CONFIG_OPTIONS="" + +# +# Gcc Options +# +BR2_GCC_VERSION_4_3_2=y +# BR2_GCC_IS_SNAP is not set +BR2_GCC_VERSION="4.3.2" +BR2_TOOLCHAIN_SYSROOT=y +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +BR2_GCC_CROSS_CXX=y +BR2_INSTALL_LIBSTDCPP=y +BR2_GCC_SHARED_LIBGCC=y + +# +# Gdb Options +# +BR2_PACKAGE_GDB=y +BR2_PACKAGE_GDB_SERVER=y +BR2_PACKAGE_GDB_HOST=y +# BR2_GDB_VERSION_6_2_1 is not set +# BR2_GDB_VERSION_6_3 is not set +# BR2_GDB_VERSION_6_4 is not set +# BR2_GDB_VERSION_6_5 is not set +# BR2_GDB_VERSION_6_6 is not set +# BR2_GDB_VERSION_6_7_1 is not set +BR2_GDB_VERSION_6_8=y +# BR2_GDB_VERSION_SNAPSHOT is not set +BR2_GDB_VERSION="6.8" + +# +# Common Toolchain Options +# +# BR2_PACKAGE_SSTRIP_TARGET is not set +# BR2_PACKAGE_SSTRIP_HOST is not set +# BR2_ENABLE_MULTILIB is not set +BR2_LARGEFILE=y +BR2_INET_RPC=y +BR2_TARGET_OPTIMIZATION="-Os -pipe" +BR2_CROSS_TOOLCHAIN_TARGET_UTILS=y + + +## These two added by Maxim +BR2_TOOLCHAIN_BUILDROOT=y +BR2_TOOLCHAIN_SOURCE=y + + +BR2_PACKAGE_BUSYBOX_HIDE_OTHERS=y + +# +# Other development stuff +# +BR2_HOST_FAKEROOT=y +# BR2_PACKAGE_LIBINTL is not set +# For NFS mount: +BR2_PACKAGE_PORTMAP=y + +# +# Other stuff +# + +# +# filesystem for target device +# +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_GZIP=y +BR2_TARGET_ROOTFS_INITRAMFS=y + +# +# Linux Options +# +# BR2_PACKAGE_LINUX is not set + +# +# Board Support Options +# +BR2_TARGET_XTENSA=y + +# +# Tensilica Xtensa/Diamond based Device Support +# +BR2_TARGET_XTENSA_XTAV60=y + +# +# Compressors / decompressors +# + +BR2_PACKAGE_ZLIB=y diff --git a/target/xtensa/patch.in b/target/xtensa/patch.in new file mode 100644 index 0000000000..5b723a8b40 --- /dev/null +++ b/target/xtensa/patch.in @@ -0,0 +1,33 @@ +ifneq ($(filter xtensa%,$(ARCH)),) +############################################################# +# +# Xtensa processor architecture (including Diamond Standard cores) +# +############################################################# + +# The following defines a function to be used like this: +# $(call XTENSA_PATCH, , , ) +# which returns the first overlay patch file for found +# in the list of directories which are +# relative to (itself either absolute or relative to the +# current directory). The returned filename is relative to . +# For example: +# $(call XTENSA_PATCH, binutils, some/dir/path, . ..) +# (no commas between directory paths in the list). +# +# A selected overlay patch must exist ("fsf" means no specific +# overlay is selected). So the function emits a Makefile error +# if a selected patch file is not found. + +XTENSA_CORENAME:=$(strip $(subst ",,$(BR2_xtensa_core_name))) +ifeq ($(XTENSA_CORENAME),fsf) +XTENSA_PATCH = +else +XTENSA_PATCH_SUFFIX = $(1)-xtensa_$(XTENSA_CORENAME).tgz +XTENSA_PATCH_FILE = $(firstword $(wildcard $(patsubst %,$(2)/%/*$(XTENSA_PATCH_SUFFIX),$(3)))) +# FULLPATH = $(if $(filter /%,$(1)),$(1),$(PWD)/$(1)) +XTENSA_PATCH = $(if $(XTENSA_PATCH_FILE),$(patsubst $(2)/%,%,$(XTENSA_PATCH_FILE)),\ + $(error Missing $(1) patch for Xtensa $(XTENSA_CORENAME) processor (*$(XTENSA_PATCH_SUFFIX) in $(addprefix $(2)/,$(3))))) +endif + +endif diff --git a/target/xtensa/setup-config b/target/xtensa/setup-config new file mode 100644 index 0000000000..7ef8fe86ee --- /dev/null +++ b/target/xtensa/setup-config @@ -0,0 +1,57 @@ +#!/bin/sh + +# Convenience script for setting up a default buildroot config +# for Xtensa processor targets.. + +usage() { + echo "Usage (invoke from top of buildroot tree):" + echo " ./target/xtensa/setup-config " + #echo " ./target/xtensa/setup-config []" + echo "where:" + echo " is the Xtensa core overlay name, as specified in the -c option" + echo " of the ./target/xtensa/xt-buildroot-overlay-install script." + echo "" + echo "For example:" + echo " ./target/xtensa/setup-config dc232b" + echo "" + echo "Currently installed (available) core overlay names are:" + echo " " `ls toolchain/binutils/binutils-xtensa_*.tgz | sed -e 's,toolchain\/binutils\/binutils-xtensa_\(.*\)\.tgz,\1,g'` + exit 1 +} + +if [ $# -ne 1 ]; then + usage +fi + +core=$1 ; shift + +if [ ! -f toolchain/binutils/binutils-xtensa_${core}.tgz \ + -o ! -f toolchain/gcc/gcc-xtensa_${core}.tgz \ + -o ! -f toolchain/gdb/gdb-xtensa_${core}.tgz ]; then + echo "ERROR: Did not find an installed Xtensa core overlay named '${core}'." + echo "ERROR: Please install it first with ./target/xtensa/xt-buildroot-overlay-install" + echo "" + usage +fi + +# Use preset buildroot config: +cp target/xtensa/defconfig .defconfig-xtensa +# Set core name: +sed -i -e 's,^BR2_xtensa_\(.*\)=y,BR2_xtensa_custom=y\nBR2_xtensa_custom_name="'${core}'",' .defconfig-xtensa +## sed -i -e 's,^.*BR2_xtensa_core_name.*,BR_xtensa_core_name="'${core}'",' .defconfig-xtensa +# Create full .config with defaults: +make clean defconfig CONFIG_DEFCONFIG=.defconfig-xtensa || exit 1 + +# Busybox adjustments: turn off 'ar' (can't create archives yet overrides real one) +# and turn on NFS mounting (Xtensa defconfig turns on RPC so this can work): +# +bborig=`grep '^BR2_PACKAGE_BUSYBOX_CONFIG=' .config | sed -e 's,.*"\(.*\)".*,\1,'` +bbconf=target/xtensa/busybox-config +cp $bborig $bbconf +sed -i -e 's,^CONFIG_AR=y,# CONFIG_AR is not set,' $bbconf +sed -i -e 's,^.*CONFIG_FEATURE_MOUNT_NFS.*,CONFIG_FEATURE_MOUNT_NFS=y,' $bbconf +# Make use of above busybox adjustments: +sed -i -e 's,.*\(BR2_PACKAGE_BUSYBOX_CONFIG\).*,\1="'$bbconf'",' .config + +echo "Done." + diff --git a/target/xtensa/uClibc-0.9.30.config b/target/xtensa/uClibc-0.9.30.config new file mode 100644 index 0000000000..cc6815d07e --- /dev/null +++ b/target/xtensa/uClibc-0.9.30.config @@ -0,0 +1,245 @@ +# +# Automatically generated make config: don't edit +# Thu Jan 23 14:50:00 2009 +# +# TARGET_alpha is not set +# TARGET_arm is not set +# TARGET_avr32 is not set +# TARGET_bfin is not set +# TARGET_cris is not set +# TARGET_e1 is not set +# TARGET_frv is not set +# TARGET_h8300 is not set +# TARGET_hppa is not set +# TARGET_i386 is not set +# TARGET_i960 is not set +# TARGET_ia64 is not set +# TARGET_m68k is not set +# TARGET_microblaze is not set +# TARGET_mips is not set +# TARGET_nios is not set +# TARGET_nios2 is not set +# TARGET_powerpc is not set +# TARGET_sh is not set +# TARGET_sh64 is not set +# TARGET_sparc is not set +# TARGET_v850 is not set +# TARGET_vax is not set +# TARGET_x86_64 is not set +TARGET_xtensa=y + +# +# Target Architecture Features and Options +# +TARGET_ARCH="xtensa" +FORCE_OPTIONS_FOR_ARCH=y +# ARCH_LITTLE_ENDIAN is not set +# ARCH_BIG_ENDIAN is not set +# ARCH_WANTS_LITTLE_ENDIAN is not set +# ARCH_WANTS_BIG_ENDIAN is not set + +# +# Using ELF file format +# +ARCH_HAS_MMU=y +ARCH_USE_MMU=y +UCLIBC_HAS_FLOATS=y +UCLIBC_HAS_FPU=y +DO_C99_MATH=y +# UCLIBC_HAS_FENV is not set +UCLIBC_HAS_LONG_DOUBLE_MATH=y +KERNEL_HEADERS="/usr/src/linux/include" +HAVE_DOT_CONFIG=y + +# +# General Library Settings +# +# HAVE_NO_PIC is not set +DOPIC=y +# ARCH_HAS_NO_SHARED is not set +# ARCH_HAS_NO_LDSO is not set +HAVE_SHARED=y +# FORCE_SHAREABLE_TEXT_SEGMENTS is not set +LDSO_LDD_SUPPORT=y +LDSO_CACHE_SUPPORT=y +# LDSO_PRELOAD_FILE_SUPPORT is not set +LDSO_BASE_FILENAME="ld.so" +# UCLIBC_STATIC_LDCONFIG is not set +# LDSO_RUNPATH is not set +UCLIBC_CTOR_DTOR=y +# LDSO_GNU_HASH_SUPPORT is not set +# HAS_NO_THREADS is not set +UCLIBC_HAS_THREADS=y +PTHREADS_DEBUG_SUPPORT=y +LINUXTHREADS_OLD=y +UCLIBC_HAS_SYSLOG=y +UCLIBC_HAS_LFS=y +# MALLOC is not set +# MALLOC_SIMPLE is not set +MALLOC_STANDARD=y +MALLOC_GLIBC_COMPAT=y +UCLIBC_DYNAMIC_ATEXIT=y +# COMPAT_ATEXIT is not set +UCLIBC_SUSV3_LEGACY=y +UCLIBC_SUSV3_LEGACY_MACROS=y +# UCLIBC_HAS_STUBS is not set +UCLIBC_HAS_SHADOW=y +# UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set +UCLIBC_HAS___PROGNAME=y +UCLIBC_HAS_PTY=y +UNIX98PTY_ONLY=y +# UCLIBC_HAS_GETPT is not set +ASSUME_DEVPTS=y +UCLIBC_HAS_TM_EXTENSIONS=y +UCLIBC_HAS_TZ_CACHING=y +UCLIBC_HAS_TZ_FILE=y +UCLIBC_HAS_TZ_FILE_READ_MANY=y +UCLIBC_TZ_FILE_PATH="/etc/TZ" + +# +# Advanced Library Settings +# +UCLIBC_PWD_BUFFER_SIZE=256 +UCLIBC_GRP_BUFFER_SIZE=256 +UCLIBC_HAS_NONREENTRANT=y + +# +# Networking Support +# + +UCLIBC_LINUX_MODULE_24=y +UCLIBC_LINUX_SPECIFIC=y +UCLIBC_HAS_GNU_ERROR=y +UCLIBC_BSD_SPECIFIC=y +UCLIBC_HAS_BSD_ERR=y +UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y +UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL=y +# UCLIBC_NTP_LEGACY is not set +# UCLIBC_SV4_DEPRECATED is not set +UCLIBC_HAS_REALTIME=y +UCLIBC_HAS_ADVANCED_REALTIME=y +UCLIBC_HAS_EPOLL=y +UCLIBC_HAS_XATTR=y +UCLIBC_HAS_PROFILING=y +UCLIBC_HAS_CRYPT_IMPL=y +UCLIBC_HAS_CRYPT=y +UCLIBC_HAS_NETWORK_SUPPORT=y +UCLIBC_HAS_SOCKET=y +UCLIBC_HAS_IPV4=y +UCLIBC_HAS_IPV6=y +UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y +UCLIBC_HAS_REENTRANT_RPC=y +UCLIBC_USE_NETLINK=y +# UCLIBC_SUPPORT_AI_ADDRCONFIG is not set +# UCLIBC_HAS_BSD_RES_CLOSE is not set + + +# +# String and Stdio Support +# +# UCLIBC_HAS_STRING_GENERIC_OPT is not set +# UCLIBC_HAS_STRING_ARCH_OPT is not set +UCLIBC_HAS_CTYPE_TABLES=y +UCLIBC_HAS_CTYPE_SIGNED=y +# UCLIBC_HAS_CTYPE_UNSAFE is not set +# UCLIBC_HAS_CTYPE_CHECKED is not set +# UCLIBC_HAS_CTYPE_ENFORCED is not set +# UCLIBC_HAS_WCHAR is not set +# UCLIBC_HAS_LOCALE is not set +UCLIBC_HAS_HEXADECIMAL_FLOATS=y +UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y +# USE_OLD_VFPRINTF is not set +UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 +UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y +# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set +# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set +UCLIBC_HAS_STDIO_BUFSIZ_4096=y +# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set +UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set +# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set +# UCLIBC_HAS_STDIO_GETC_MACRO is not set +# UCLIBC_HAS_STDIO_PUTC_MACRO is not set +UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y +# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set +UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y +UCLIBC_HAS_PRINTF_M_SPEC=y +UCLIBC_HAS_ERRNO_MESSAGES=y +# UCLIBC_HAS_SYS_ERRLIST is not set +UCLIBC_HAS_SIGNUM_MESSAGES=y +# UCLIBC_HAS_SYS_SIGLIST is not set +UCLIBC_HAS_GNU_GETOPT=y +# UCLIBC_HAS_GNU_GETSUBOPT is not set + +# +# Big and Tall +# +UCLIBC_HAS_REGEX=y +# UCLIBC_HAS_REGEX_OLD is not set +UCLIBC_HAS_FNMATCH=y +# UCLIBC_HAS_FNMATCH_OLD is not set +# UCLIBC_HAS_WORDEXP is not set +UCLIBC_HAS_FTW=y +UCLIBC_HAS_GLOB=y +UCLIBC_HAS_GNU_GLOB=y + +# +# Library Installation Options +# +SHARED_LIB_LOADER_PREFIX="/lib" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="/usr/" + +# +# Security options +# +# UCLIBC_BUILD_PIE is not set +UCLIBC_HAS_ARC4RANDOM=y +# HAVE_NO_SSP is not set +# UCLIBC_HAS_SSP is not set +UCLIBC_BUILD_RELRO=y +UCLIBC_BUILD_NOW=y +# UCLIBC_BUILD_NOEXECSTACK is not set + +# +# uClibc development/debugging options +# +CROSS_COMPILER_PREFIX="" +UCLIBC_EXTRA_CFLAGS="" +# DODEBUG is not set +# DODEBUG_PT is not set +DOSTRIP=y +# DOASSERTS is not set +# SUPPORT_LD_DEBUG is not set +# SUPPORT_LD_DEBUG_EARLY is not set +# UCLIBC_MALLOC_DEBUGGING is not set +WARNINGS="-Wall" +# EXTRA_WARNINGS is not set +# DOMULTI is not set +# UCLIBC_MJN3_ONLY is not set + +# USE_BX is not set +# CONFIG_GENERIC_ARM is not set +# CONFIG_ARM610 is not set +# CONFIG_ARM710 is not set +# CONFIG_ARM7TDMI is not set +# CONFIG_ARM720T is not set +# CONFIG_ARM920T is not set +# CONFIG_ARM922T is not set +# CONFIG_ARM926T is not set +# CONFIG_ARM10T is not set +# CONFIG_ARM1136JF_S is not set +# CONFIG_ARM1176JZ_S is not set +# CONFIG_ARM1176JZF_S is not set +# CONFIG_ARM_CORTEX_M3 is not set +# CONFIG_ARM_CORTEX_M1 is not set +# CONFIG_ARM_SA110 is not set +# CONFIG_ARM_SA1100 is not set +# CONFIG_ARM_XSCALE is not set +# CONFIG_ARM_IWMMXT is not set diff --git a/target/xtensa/uClibc.config b/target/xtensa/uClibc.config new file mode 100644 index 0000000000..546a045347 --- /dev/null +++ b/target/xtensa/uClibc.config @@ -0,0 +1,190 @@ +# +# Automatically generated make config: don't edit +# Thu Jan 10 00:46:51 2008 +# +# TARGET_alpha is not set +# TARGET_arm is not set +# TARGET_avr32 is not set +# TARGET_bfin is not set +# TARGET_cris is not set +# TARGET_e1 is not set +# TARGET_frv is not set +# TARGET_h8300 is not set +# TARGET_hppa is not set +# TARGET_i386 is not set +# TARGET_i960 is not set +# TARGET_ia64 is not set +# TARGET_m68k is not set +# TARGET_microblaze is not set +# TARGET_mips is not set +# TARGET_nios is not set +# TARGET_nios2 is not set +# TARGET_powerpc is not set +# TARGET_sh is not set +# TARGET_sh64 is not set +# TARGET_sparc is not set +# TARGET_v850 is not set +# TARGET_vax is not set +# TARGET_x86_64 is not set +TARGET_xtensa=y + +# +# Target Architecture Features and Options +# +TARGET_ARCH="xtensa" +TARGET_SUBARCH="" + +# +# Using ELF file format +# +ARCH_HAS_MMU=y +ARCH_USE_MMU=y +UCLIBC_HAS_FLOATS=y +UCLIBC_HAS_FPU=y +DO_C99_MATH=y +KERNEL_HEADERS="/usr/src/linux/include" +HAVE_DOT_CONFIG=y + +# +# General Library Settings +# +# HAVE_NO_PIC is not set +DOPIC=y +# HAVE_NO_SHARED is not set +# ARCH_HAS_NO_LDSO is not set +HAVE_SHARED=y +# FORCE_SHAREABLE_TEXT_SEGMENTS is not set +LDSO_LDD_SUPPORT=y +LDSO_CACHE_SUPPORT=y +# LDSO_PRELOAD_FILE_SUPPORT is not set +LDSO_BASE_FILENAME="ld.so" +# UCLIBC_STATIC_LDCONFIG is not set +# LDSO_RUNPATH is not set +UCLIBC_CTOR_DTOR=y +# HAS_NO_THREADS is not set +UCLIBC_HAS_THREADS=y +PTHREADS_DEBUG_SUPPORT=y +LINUXTHREADS_OLD=y +UCLIBC_HAS_LFS=y +# MALLOC is not set +# MALLOC_SIMPLE is not set +MALLOC_STANDARD=y +MALLOC_GLIBC_COMPAT=y +UCLIBC_DYNAMIC_ATEXIT=y +# COMPAT_ATEXIT is not set +# UCLIBC_SUSV3_LEGACY is not set +UCLIBC_SUSV3_LEGACY_MACROS=y +UCLIBC_HAS_SHADOW=y +# UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set +UCLIBC_HAS___PROGNAME=y +# UNIX98PTY_ONLY is not set +ASSUME_DEVPTS=y +UCLIBC_HAS_TM_EXTENSIONS=y +UCLIBC_HAS_TZ_CACHING=y +UCLIBC_HAS_TZ_FILE=y +UCLIBC_HAS_TZ_FILE_READ_MANY=y +UCLIBC_TZ_FILE_PATH="/etc/TZ" + +# +# Advanced Library Settings +# +UCLIBC_PWD_BUFFER_SIZE=256 +UCLIBC_GRP_BUFFER_SIZE=256 + +# +# Networking Support +# +UCLIBC_HAS_IPV6=y +UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y +UCLIBC_HAS_REENTRANT_RPC=y +# UCLIBC_USE_NETLINK is not set +# UCLIBC_HAS_BSD_RES_CLOSE is not set + +# +# String and Stdio Support +# +UCLIBC_HAS_STRING_GENERIC_OPT=y +UCLIBC_HAS_STRING_ARCH_OPT=y +UCLIBC_HAS_CTYPE_TABLES=y +UCLIBC_HAS_CTYPE_SIGNED=y +# UCLIBC_HAS_CTYPE_UNSAFE is not set +UCLIBC_HAS_CTYPE_CHECKED=y +# UCLIBC_HAS_CTYPE_ENFORCED is not set +# UCLIBC_HAS_WCHAR is not set +# UCLIBC_HAS_LOCALE is not set +UCLIBC_HAS_HEXADECIMAL_FLOATS=y +UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y +# USE_OLD_VFPRINTF is not set +UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 +UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y +# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set +# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set +UCLIBC_HAS_STDIO_BUFSIZ_4096=y +# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set +UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set +# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set +UCLIBC_HAS_STDIO_GETC_MACRO=y +UCLIBC_HAS_STDIO_PUTC_MACRO=y +UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y +# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set +UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y +UCLIBC_HAS_PRINTF_M_SPEC=y +UCLIBC_HAS_ERRNO_MESSAGES=y +# UCLIBC_HAS_SYS_ERRLIST is not set +UCLIBC_HAS_SIGNUM_MESSAGES=y +# UCLIBC_HAS_SYS_SIGLIST is not set +UCLIBC_HAS_GNU_GETOPT=y +UCLIBC_HAS_GNU_GETSUBOPT=y + +# +# Big and Tall +# +UCLIBC_HAS_REGEX=y +UCLIBC_HAS_REGEX_OLD=y +UCLIBC_HAS_FNMATCH=y +UCLIBC_HAS_FNMATCH_OLD=y +# UCLIBC_HAS_WORDEXP is not set +UCLIBC_HAS_FTW=y +UCLIBC_HAS_GLOB=y +UCLIBC_HAS_GNU_GLOB=y + +# +# Library Installation Options +# +SHARED_LIB_LOADER_PREFIX="/lib" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="/usr/" + +# +# Security options +# +# UCLIBC_HAS_ARC4RANDOM is not set +# HAVE_NO_SSP is not set +# UCLIBC_HAS_SSP is not set +UCLIBC_BUILD_RELRO=y +UCLIBC_BUILD_NOW=y +# UCLIBC_BUILD_NOEXECSTACK is not set + +# +# uClibc development/debugging options +# +CROSS_COMPILER_PREFIX="" +UCLIBC_EXTRA_CFLAGS="" +# DODEBUG is not set +# DOSTRIP is not set +# DODEBUG_PT is not set +# DOASSERTS is not set +SUPPORT_LD_DEBUG=y +# SUPPORT_LD_DEBUG_EARLY is not set +# UCLIBC_MALLOC_DEBUGGING is not set +WARNINGS="-Wall" +EXTRA_WARNINGS=y +# DOMULTI is not set +# UCLIBC_MJN3_ONLY is not set diff --git a/target/xtensa/xt-buildroot-overlay-install b/target/xtensa/xt-buildroot-overlay-install new file mode 100644 index 0000000000..254da10795 --- /dev/null +++ b/target/xtensa/xt-buildroot-overlay-install @@ -0,0 +1,494 @@ +#!/bin/sh +# Not every host installs perl at the same location, handle many locations: +PATH=/usr/bin:/usr/local/bin:$PATH +exec perl -x -S $0 ${1+"$@"} +exit $? +#!perl -w +#line 8 + +# xt-buildroot-overlay-install [-t overlay_tarball] [-b buildroot_dir] \ +# [-k kernel_dir] \ +# [-c config_name] [-l long_name] [-f] [--help] +# +# Creates individual overlay tarballs for gcc, binutils, gdb, and +# the Linux kernel, out of the Xtensa Configuration Overlay tarball from +# a Tensilica Core Package. And installs these individual tarballs +# at the appropriate locations within a buildroot source tree. +# +# The Xtensa configuration overlay tarball is located in: +# /src/xtensa-config-overlay.tar.gz +# where is the path to the Tensilica Core Package. +# +# Copyright (c) 2003-2008 by Tensilica Inc. ALL RIGHTS RESERVED. +# These coded instructions, statements, and computer programs are the +# copyrighted works and confidential proprietary information of Tensilica Inc. +# They may not be modified, copied, reproduced, distributed, or disclosed to +# third parties in any manner, medium, or form, in whole or in part, without +# the prior written consent of Tensilica Inc. +# +# History: +# 2007-NOV-08 1.0 meg Initial version +# 2007-NOV-21 1.1 meg Add -k parameter +# 2007-DEC-06 1.2 meg Make -k and -b optional, check overlay sw vers. +# 2008-FEB-27 1.3 meg Accept Xtensa Tools RB-2008.3 overlays + +$progvers = "1.3"; +$progname = $0; +$progname =~ s|.*[/\\:]||; + + +###################################################################### +# +# Parse cmdline +# + +my $overlay_tarball = undef; +my $buildroot_dir = undef; +my $kernel_dir = undef; +my $config_name = undef; +my $config_long_name = undef; +my $force_clobber = 0; +my $prompt = 1; # undocumented option + +sub usage { + print "$progname version $progvers\n" + ."Usage: $progname []\n" + ."Where are:\n" + ." -t file.tgz Specify path to the Xtensa Linux overlay tarball, typically\n" + ." /src/xtensa-config-overlay.tar.gz\n" + ." -b dir Path to the base of the buildroot source tree, in which\n" + ." package specific overlay tarballs get installed.\n" + ." -k dir Path to the base of the Linux kernel source tree, in which\n" + ." the Linux kernel specific overlay gets installed.\n" + ." -c config_name Name for the Xtensa processor configuration as it will be\n" + ." known to the open source community. Must be a lowercase\n" + ." identifier, starting with a letter, consisting of letters\n" + ." and numbers and underscores, not ending with underscore\n" + ." and not containing consecutive underscores. For examples:\n" + ." dc232b , dc232b_be , mmubasele , fsf , s5000 .\n" + ." -l long_name Long name for the Xtensa processor configuration, human-\n" + ." readable with spaces etc allowed (must be quoted).\n" + ." For example: 'Diamond 232L Standard Core Rev.B (LE)'\n" + ." Try to keep it within approximately 40 characters.\n" + ."And are:\n" + ." -f If package specific overlay tarballs already exist in\n" + ." the destination source tree, overwrite them without asking.\n" + ." --help Show this usage message.\n"; +} + +# Get arguments: +if (!@ARGV) { + usage(); + exit 0; +} +while( defined($_ = shift) ) { + if( /^-[tbclk]$/ ) { # option taking an argument + my $arg = shift; + if( !defined($arg) ) { + print STDERR "$progname: ERROR: missing parameter after '$_' option\n\n"; + usage(); + exit 1; + } + $overlay_tarball = $arg if $_ eq "-t"; + $buildroot_dir = $arg if $_ eq "-b"; + $kernel_dir = $arg if $_ eq "-k"; + $config_name = $arg if $_ eq "-c"; + $config_long_name = $arg if $_ eq "-l"; + next; + } + if( /^-f$/ ) { + $force_clobber = 1; + next; + } + if( /^--[m-t]{8}$/ && /[new]([wow])([pup])[fur]\1[maze]\2[tuff]/ ) { + $prompt = 0; + next; + } + if( /^-(h|help|\-h|\-help|\?)$/i ) { + usage(); + exit 0; + } + print STDERR "$progname: ERROR: unrecognized option or argument '$_'\n\n"; + usage(); + exit 1; +} + + +###################################################################### +# +# Validate cmdline arguments +# + +ErrorU("missing -c argument (core name)") + unless defined($config_name); +# Try to enforce reasonable names: +ErrorU("-c: malformed core name '$config_name' (must be lowercase, letter followed by letters/digits, may contain underscore separators)") + unless $config_name =~ /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/; +ErrorU("-c: core name too short '$config_name'") + unless length($config_name) >= 2; +ErrorU("-c: core name too long '$config_name'") + unless length($config_name) <= 16; + + +ErrorU("missing -l argument (core long name)") + unless defined($config_long_name); +$config_long_name =~ s/^\s+//; # trim extra whitespace... +$config_long_name =~ s/\s+$//; +$config_long_name =~ s/\s+/ /g; +# Try to enforce reasonable names: +ErrorU("-l: invalid (non-ASCII-printable) characters in core long name '$config_long_name'") + unless $config_long_name =~ /^[\x20-\x7E]+$/; +ErrorU("-l: disallowed characters (\"\'\\) in core long name '$config_long_name'") + if $config_long_name =~ /[\'\"\\]/; +ErrorU("-l: core long name too short '$config_long_name'") + unless length($config_long_name) >= 5; +ErrorU("-l: core long name too long '$config_long_name'") + unless length($config_long_name) <= 60; + + +#ErrorU("missing -b argument (buildroot source tree directory)") +# unless defined($buildroot_dir); +if (defined($buildroot_dir)) { + ErrorU("-b: not a directory: $buildroot_dir") + unless -d $buildroot_dir; + foreach my $p ("toolchain/gcc", "toolchain/binutils", "toolchain/gdb", "target/xtensa") { + ErrorU("-b: not a buildroot directory: missing $buildroot_dir/$p") + unless -d $buildroot_dir . "/" . $p; + } +} + + +#ErrorU("missing -k argument (Linux kernel source tree directory)") +# unless defined($kernel_dir); +if (defined($kernel_dir)) { + ErrorU("-k: not a directory: $kernel_dir") + unless -d $kernel_dir; + foreach my $p ("kernel", "arch/xtensa/kernel", "include/asm-xtensa") { + ErrorU("-k: not a Linux kernel directory: missing $kernel_dir/$p") + unless -d $kernel_dir . "/" . $p; + } +} + + +if (!defined($buildroot_dir) and !defined($kernel_dir)) { + print STDERR "$progname: WARNING:\n"; + print STDERR "$progname: WARNING: Test run only, NOTHING WILL BE INSTALLED\n"; + print STDERR "$progname: WARNING: (use -b and -k to specify install destination)\n"; + print STDERR "$progname: WARNING:\n"; +} + + +my @ovpaths = ( "/src/xtensa-config-overlay.tar.gz", + "/xtensa-elf/src/linux/misc/linux-overlay.tar.gz" ); +if (!defined($overlay_tarball)) { + # Try to locate the overlay tarball based on XTENSA_SYSTEM and XTENSA_CORE + # settings: + my $xtensa_root = `xt-xcc --show-config=config 2>/dev/null`; + $xtensa_root = "" unless defined($xtensa_root); + chomp($xtensa_root); + if ($xtensa_root ne "") { + ($overlay_tarball) = grep(-f $xtensa_root.$_, @ovpaths); + if (!defined($overlay_tarball)) { + ErrorU("Xtensa configuration overlay tarball not found: ".$xtensa_root.$ovpaths[0]) + } + } else { + ErrorU("missing -t argument (Xtensa configuration overlay tarball filename)\n" + ."and no default Xtensa Core Package defined in the environment"); + } +} else { + foreach my $p ("", @ovpaths) { + if (-f $overlay_tarball.$p) { + $overlay_tarball .= $p; + last; + } + } + ErrorU("-t: file not found: $overlay_tarball") unless -f $overlay_tarball; +} + + +###################################################################### +# +# Misc +# + +my $overlay_unpacked = 0; +my $ovdir; + +sub cleanup { + if ($overlay_unpacked) { + system("rm -rf '$ovdir' 2>/dev/null"); + } +} + +sub ErrorEmit { + my ($msg,$usage) = @_; + $msg =~ s|\n|"\n${progname}: ERROR: "|ge; + print STDERR "$progname: ERROR: $msg\n"; + if ($usage) { + print "\n"; + usage(); + } + cleanup(); + exit 1; +} +sub ErrorU { ErrorEmit(shift,1); } +sub Error { ErrorEmit(shift); } + + +# Read specified file (as binary), returning contents. +# +sub readfile { + my ($filename) = @_; + # Read the file: + open(INFILE,"<$filename") or Error("error reading from '$filename': $!"); + my $savesep = $/; + undef $/; + my $file = ; + $/ = $savesep; + close(INFILE); + $file; +} + +# Write specified file (as binary) with first argument (string). +# +sub writefile { + my ($filename, $file) = @_; + # Read the file: + open(INFILE,">$filename") or Error("error writing to '$filename': $!"); + print INFILE $file; + close(INFILE) or Error("error closing file '$filename': $!"); +} + + +###################################################################### +# +# Determine a temporary directory. +# + +my $tmpdir = "/tmp"; +if (defined($ENV{"TMP"}) and -d $ENV{"TMP"}) { + $tmpdir = $ENV{"TMP"}; +} elsif (defined($ENV{"TEMP"}) and -d $ENV{"TEMP"}) { + $tmpdir = $ENV{"TEMP"}; +} + + +###################################################################### +# +# Unpack the general overlay tarball +# + +my $user = defined($ENV{"USER"}) ? $ENV{"USER"} : "xtensa"; +$ovdir = $tmpdir."/tmp-overlay-${user}-$$"; +mkdir $ovdir or Error("cannot create directory $ovdir"); +$overlay_unpacked = 1; +system("tar xfz '$overlay_tarball' -C '$ovdir'") + and Error("tar failed..."); + + +###################################################################### +# +# Define and sanity check contents of overlay +# + +my $oldpack = -f $ovdir."/xtensa-elf/src/linux/misc/core.h"; +my $pf1 = ($oldpack ? "src/" : ""); +my $pf2 = ($oldpack ? "xtensa-elf/src/linux/misc/" : "config/"); + +my @packages = ( + ["binutils", "toolchain/binutils", + ["${pf1}/binutils/xtensa-modules.c", "bfd/"], + ["${pf1}/binutils/xtensa-config.h", "include/"], + #["${pf1}/binutils/xtensa-config.sh", "ld/emulparams/"], + ], + ["gcc", "toolchain/gcc", + ["${pf1}/gcc/xtensa-config.h", "include/"], + ], + ["gdb", "toolchain/gdb", + ["${pf1}/gdb/xtensa-modules.c", "bfd/"], + ["${pf1}/gdb/xtensa-config.h", "include/"], + ["${pf1}/gdb/xtensa-config.c", "gdb/"], + ["${pf1}/gdb/xtensa-regmap.c", "gdb/gdbserver/"], + ["${pf1}/gdb/xtensa-regmap.c", "gdb/gdbserver/xtensa-xtregs.c"], # for GDB 6.8 + ["${pf1}/gdb/xtensa-regmap.c", "gdb/xtensa-xtregs.c"], # for GDB 6.8 + ["${pf1}/gdb/reg-xtensa.dat", "gdb/regformats/"], + ], + ["kernel", "target/xtensa", # ??? + ["${pf2}core.h", "include/asm-xtensa/variant-${config_name}/"], + ["${pf2}tie.h", "include/asm-xtensa/variant-${config_name}/"], + ["${pf2}tie-asm.h", "include/asm-xtensa/variant-${config_name}/"], + ], +); + +# Check that all files are present ... +foreach my $pack (@packages) { + my ($pname, $buildroot_subdir, @files) = @$pack; + print "Checking files for $pname ...\n"; + foreach my $f (@files) { + my ($src, $dst) = @$f; + -f $ovdir."/".$src or Error("missing '$src' in overlay tarball"); + } +} + + +###################################################################### +# +# Extract some useful information +# + +# Extract core name as specified in the build. +my $coreh = readfile($ovdir."/".$pf2."core.h"); + +$coreh =~ /^\s*\#\s*define\s+XCHAL_SW_VERSION\s+(\w+)/m; +my $swversion = $1; +defined($swversion) or Error("missing XCHAL_SW_VERSION in overlay core.h file;\n" + ."overlay is too old, need RB-2008.3 (SW version 7.1.1) or later"); + +$coreh =~ /^\s*\#\s*define\s+XCHAL_CORE_ID\s+"([^"]+)"/m; +my $coreid = $1; +defined($coreid) or Error("missing XCHAL_CORE_ID in overlay core.h file"); + +$coreh =~ /^\s*\#\s*define\s+XCHAL_HW_VERSION_NAME\s+"([^"]+)"/m; +my $hwversion = $1; +defined($hwversion) or Error("missing XCHAL_HW_VERSION_NAME in overlay core.h file"); + + +$swvers_human = sprintf("%u.%u.%u", + $swversion/100000, (($swversion/1000) % 100), ($swversion % 1000)); +my $release = "software version $swvers_human"; +if (-f $ovdir."/release") { + $release = readfile($ovdir."/release"); + chomp($release); +} + + +###################################################################### +# +# Prompt user to be sure this is what he wants to do +# + +# Catch Ctrl-C so we can do a proper cleanup: +sub catch_term { + my $signame = shift; + #print STDERR "whoa!\n"; + cleanup(); + print STDERR "\n$progname: Cleaned up.\n"; + exit 3; +} +$SIG{TERM} = \&catch_term; +$SIG{HUP} = \&catch_term; +$SIG{INT} = \&catch_term; + +$| = 1; +print "\n", + "About to generate package-specific overlay tarballs for the following:\n", + "\n", + " Xtensa processor short name: $config_name\n"; +print " This short name overrides the name specified in the XPG: $coreid\n" if $coreid ne $config_name; +#print " Please ensure that's the name you want. If submitted to the open source\n", +# " community, it can be a hassle to change later on.\n"; +print " Xtensa processor description: $config_long_name\n", + " Targeting Xtensa HW version: $hwversion\n", + " Xtensa configuration overlay: $overlay_tarball\n", + " (release of overlay): $release\n", + " Destination buildroot dir: ".(defined($buildroot_dir)?$buildroot_dir:"(none, not installed)")."\n", + " Destination Linux kernel dir: ".(defined($kernel_dir)?$kernel_dir:"(none, not installed)")."\n", + "\n", + "Are you sure? (y/n) "; +if ($prompt) { + my $line = ; + chomp($line); + if ($line !~ /^y(es)?$/i) { + print "\nInstallation aborted.\n"; + cleanup(); + exit 2; + } +} else { + print "YES [no prompt]\n"; +} +print "\n"; + + +###################################################################### +# +# Now generate the tarballs +# + +# Now generate each tarball ... +foreach my $pack (@packages) { + my ($pname, $buildroot_subdir, @files) = @$pack; + my $tarname = "${pname}-xtensa_${config_name}.tgz"; + my $fulltarname; + if (defined($buildroot_dir)) { + my $tarsubname = $buildroot_subdir . "/" . $tarname; + print "Generating and installing $tarsubname ...\n"; + $fulltarname = $buildroot_dir . "/" . $tarsubname; + } else { + print "Generating $tarname ...\n"; + $fulltarname = $ovdir . "/" . $tarname; + } + if (-e $fulltarname) { + if ($force_clobber or !defined($buildroot_dir)) { + unlink($fulltarname) or Error("could not delete '$fulltarname': $!"); + } else { + Error("destination tarball already exists: '$fulltarname'"); + } + } + my $pdir = $ovdir."/tmp-".$pname; + system("rm -fr '${pdir}' 2>/dev/null"); + mkdir $pdir or Error("cannot create directory $pdir"); + foreach my $f (@files) { + my ($src, $dst) = @$f; + # If $dst ends in / , take filename from $src : + if ($dst =~ m|/$|) { + my $fname = $src; + $fname =~ s|^.*/||; + $dst .= $fname; + } + # Ensure destination directory exists: + my $dstdir = $pdir; + while ($dst =~ s|^([^/]+)/+||) { + $dstdir .= "/" . $1; + mkdir($dstdir); + } + # Read file: + my $content = readfile($ovdir."/".$src); + + # Adjust contents of file. + # Fix-up typo: + $content =~ s/XCHAL_SA_(NCP|CP\d+)_/XCHAL_$1_SA_/g; + # Update core name info: + my $iscore = ($content =~ s/^(\s*\#\s*define\s+XCHAL_CORE_ID\s+)"[^"]+"/$1"$config_name"/mg); + $iscore or $content =~ s{^(\s*\#\s*define\s+XCHAL_INST_FETCH_WIDTH\s+\S+\s*(/\*[^\*]*\*/)?\s*$)} + {$1\n\#undef XCHAL_CORE_ID\n\#define XCHAL_CORE_ID\t\t\t"$config_name"\n}smg; + # Update core description info: + $content =~ s/^(\s*\#\s*define\s+XCHAL_CORE_DESCRIPTION\s+)"[^"]+"/$1"$config_long_name"/mg + or $content =~ s{^(\s*\#\s*define\s+XCHAL_CORE_ID\s+\S+\s*(/\*[^\*]*\*/)?\s*$)} + {"$1\n" . ($iscore ? "" : "\n\#undef XCHAL_CORE_DESCRIPTION\n") + . "\#define XCHAL_CORE_DESCRIPTION\t\t\"${config_long_name}\""}smge; + + # Write (possibly modified) file: + writefile($dstdir."/".$dst, $content); + } + my $tarcmd = "tar cfz '${fulltarname}' -C '${pdir}' ."; + system($tarcmd) and Error("failed executing: $tarcmd"); + + # Install Linux kernel overlay: + if ($pname eq "kernel" and defined($kernel_dir)) { + print "Installing Linux kernel overlay from $tarname ...\n"; + my $untarcmd = "tar xfz '${fulltarname}' -C '${kernel_dir}' ."; + system($untarcmd) and Error("failed executing: $tarcmd"); + } + # Possible TODO: update arch/xtensa/{Kconfig,Makefile} to add this config? +} + + +###################################################################### +# +# The End +# + +cleanup(); +print "Done.\n"; +exit 0; + -- 2.30.2