aboutsummaryrefslogtreecommitdiffstats
path: root/target/toolchain
diff options
context:
space:
mode:
authorJames <>2015-11-04 11:49:21 +0000
committerJames <>2015-11-04 11:49:21 +0000
commit716ca530e1c4515d8683c9d5be3d56b301758b66 (patch)
tree700eb5bcc1a462a5f21dcec15ce7c97ecfefa772 /target/toolchain
downloadtrunk-47381-716ca530e1c4515d8683c9d5be3d56b301758b66.tar.gz
trunk-47381-716ca530e1c4515d8683c9d5be3d56b301758b66.tar.bz2
trunk-47381-716ca530e1c4515d8683c9d5be3d56b301758b66.zip
trunk-47381HEADmaster
Diffstat (limited to 'target/toolchain')
-rw-r--r--target/toolchain/Config.in8
-rw-r--r--target/toolchain/Makefile70
-rw-r--r--target/toolchain/files/README.TOOLCHAIN2
-rwxr-xr-xtarget/toolchain/files/wrapper.sh95
4 files changed, 175 insertions, 0 deletions
diff --git a/target/toolchain/Config.in b/target/toolchain/Config.in
new file mode 100644
index 0000000..5a6ecef
--- /dev/null
+++ b/target/toolchain/Config.in
@@ -0,0 +1,8 @@
+config MAKE_TOOLCHAIN
+ bool "Package the OpenWrt-based Toolchain"
+ depends on !EXTERNAL_TOOLCHAIN
+ help
+ Package the created toolchain as a tarball under the bin/ directory as
+ OpenWrt-Toolchain-$(BOARD)-for-$(ARCH)$(ARCH_SUFFIX)-gcc-$(GCCV)$(DIR_SUFFIX).
+ For example, a toolchain for the MIPS architecture might be named
+ OpenWrt-Toolchain-malta-for-mipsel_mips32-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2.
diff --git a/target/toolchain/Makefile b/target/toolchain/Makefile
new file mode 100644
index 0000000..67c9085
--- /dev/null
+++ b/target/toolchain/Makefile
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2008-2009 Industrie Dial Face S.p.A.
+# Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
+# Copyright (C) 2006-2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+include $(INCLUDE_DIR)/host.mk
+
+override MAKEFLAGS=
+
+TOOLCHAIN_NAME:=OpenWrt-Toolchain-$(if $(CONFIG_VERSION_FILENAMES),$(VERSION_NUMBER)-)$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))_gcc-$(GCCV)$(DIR_SUFFIX).$(HOST_OS)-$(HOST_ARCH)
+TOOLCHAIN_BUILD_DIR:=$(BUILD_DIR)/$(TOOLCHAIN_NAME)
+EXCLUDE_DIRS:=*/ccache \
+ */initial \
+ */stamp \
+ */stampfiles \
+ */man \
+ */info
+
+all: compile
+
+TOOLCHAIN_PREFIX:=$(TOOLCHAIN_BUILD_DIR)/toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
+
+$(BIN_DIR)/$(TOOLCHAIN_NAME).tar.bz2: clean
+ mkdir -p $(TOOLCHAIN_BUILD_DIR)
+ $(TAR) -cf - -C $(TOPDIR)/staging_dir/ \
+ $(foreach exclude,$(EXCLUDE_DIRS),--exclude="$(exclude)") \
+ toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX) | \
+ $(TAR) -xf - -C $(TOOLCHAIN_BUILD_DIR)
+
+ $(CP) $(TOPDIR)/LICENSE ./files/README.TOOLCHAIN \
+ $(TOOLCHAIN_BUILD_DIR)/
+
+ $(CP) ./files/wrapper.sh $(TOOLCHAIN_PREFIX)/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh
+ chmod +x $(TOOLCHAIN_PREFIX)/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh
+ (cd $(TOOLCHAIN_PREFIX)/bin; \
+ for app in cc gcc g++ c++ cpp ld as ; do \
+ [ -f $(REAL_GNU_TARGET_NAME)-$${app} ] && mv $(REAL_GNU_TARGET_NAME)-$${app} $(REAL_GNU_TARGET_NAME)-$${app}.bin ; \
+ ln -sf $(REAL_GNU_TARGET_NAME)-wrapper.sh $(REAL_GNU_TARGET_NAME)-$${app} ; \
+ done; \
+ )
+
+ @-( \
+ find \
+ $(TOOLCHAIN_BUILD_DIR)/*/bin \
+ $(TOOLCHAIN_BUILD_DIR)/*/*/bin \
+ $(TOOLCHAIN_BUILD_DIR)/*/libexec \
+ -type f; \
+ ) | xargs strip 2>/dev/null >/dev/null
+
+ echo REVISION:="$(REVISION)" > $(TOOLCHAIN_BUILD_DIR)/version.mk
+ find $(TOOLCHAIN_BUILD_DIR) -name .git | $(XARGS) rm -rf
+ find $(TOOLCHAIN_BUILD_DIR) -name .svn | $(XARGS) rm -rf
+ find $(TOOLCHAIN_BUILD_DIR) -name CVS | $(XARGS) rm -rf
+ (cd $(BUILD_DIR); \
+ tar cfj $@ $(TOOLCHAIN_NAME); \
+ )
+
+download:
+prepare:
+compile: $(BIN_DIR)/$(TOOLCHAIN_NAME).tar.bz2
+install: compile
+
+clean:
+ rm -rf $(TOOLCHAIN_BUILD_DIR) $(BIN_DIR)/$(TOOLCHAIN_NAME).tar.bz2
diff --git a/target/toolchain/files/README.TOOLCHAIN b/target/toolchain/files/README.TOOLCHAIN
new file mode 100644
index 0000000..40bfccc
--- /dev/null
+++ b/target/toolchain/files/README.TOOLCHAIN
@@ -0,0 +1,2 @@
+This is the OpenWrt SDK. It contains just the toolchain created
+by buildroot.
diff --git a/target/toolchain/files/wrapper.sh b/target/toolchain/files/wrapper.sh
new file mode 100755
index 0000000..2b76084
--- /dev/null
+++ b/target/toolchain/files/wrapper.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# 2009 (C) Copyright Industrie Dial Face S.p.A.
+# Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
+#
+# Based on original idea from WindRiver
+#
+# Toolchain wrapper script.
+#
+# This script allows us to use a small number of GCC / binutils cross-tools
+# (one toolchain per instruction set architecture) to implement a larger
+# number of processor- or board-specific tools. The wrapper script is
+# configured at install time with information covering basic CFLAGS,
+# LD options and the toolchain triplet name.
+#
+
+PROGNAME=$0
+REALNAME=`readlink -f $0`
+
+REALNAME_BASE=`basename $REALNAME`
+REALNAME_DIR=`dirname $REALNAME`
+
+TARGET_FUNDAMENTAL_ASFLAGS=''
+TARGET_FUNDAMENTAL_CFLAGS=''
+TARGET_ROOTFS_CFLAGS=''
+TARGET_FUNDAMENTAL_LDFLAGS=''
+TARGET_TOOLCHAIN_TRIPLET=${REALNAME_BASE%-*}
+
+# Parse our tool name, splitting it at '-' characters.
+BINARY=${PROGNAME##*-}
+
+# Parse our tool name, splitting it at '-' characters.
+IFS=- read TOOLCHAIN_ARCH TOOLCHAIN_BUILDROOT TOOLCHAIN_OS TOOLCHAIN_PLATFORM PROGNAME << EOF
+$REALNAME_BASE
+EOF
+
+#
+# We add the directory this was executed from to the PATH
+# The toolchains (links) should be in this directory or in the users
+# PATH.
+#
+TOOLCHAIN_BIN_DIR="$REALNAME_DIR/"
+
+# Set the PATH so that our run-time location is first
+# (get_feature is run from the path, so this has to be set)
+export PATH="$TOOLCHAIN_BIN_DIR":$PATH
+export GCC_HONOUR_COPTS
+
+TOOLCHAIN_SYSROOT="$TOOLCHAIN_BIN_DIR/../.."
+if [ ! -d "$TOOLCHAIN_SYSROOT" ]; then
+ echo "Error: Unable to determine sysroot (looking for $TOOLCHAIN_SYSROOT)!" >&2
+ exit 1
+fi
+
+# -Wl,--dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0
+# --dynamic-linker=$TOOLCHAIN_SYSROOT/lib/ld-uClibc.so.0
+
+case $TOOLCHAIN_PLATFORM in
+ gnu|glibc|eglibc)
+ GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ ;;
+ uclibc)
+ GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ ;;
+ musl)
+ GCC_SYSROOT_FLAGS="--sysroot=$TOOLCHAIN_SYSROOT -Wl,-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ LD_SYSROOT_FLAGS="-rpath=$TOOLCHAIN_SYSROOT/lib:$TOOLCHAIN_SYSROOT/usr/lib"
+ ;;
+ *)
+ GCC_SYSROOT_FLAGS=""
+ LD_SYSROOT_FLAGS=""
+ ;;
+esac
+
+#
+# Run the cross-tool.
+#
+case $BINARY in
+ cc|gcc|g++|c++|cpp)
+ exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $GCC_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_CFLAGS $TARGET_ROOTFS_CFLAGS "$@"
+ ;;
+ ld)
+ exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $LD_SYSROOT_FLAGS $TARGET_FUNDAMENTAL_LDFLAGS "$@"
+ ;;
+ as)
+ exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin $TARGET_FUNDAMENTAL_ASFLAGS "$@"
+ ;;
+ *)
+ exec $TARGET_TOOLCHAIN_TRIPLET-$BINARY.bin "$@"
+ ;;
+esac
+
+exit 0