Add a target (CONFIG_MAKE_CONFIG) that creates an exportable toolchain. The toolchain will zipped and saved under $(TOPDIR)/bin directory.
Signed-off-by: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> SVN-Revision: 18419
This commit is contained in:
		| @@ -329,6 +329,7 @@ source "toolchain/Config.in" | ||||
|  | ||||
| source "target/imagebuilder/Config.in" | ||||
| source "target/sdk/Config.in" | ||||
| source "target/toolchain/Config.in" | ||||
|  | ||||
| source "tmp/.config-package.in" | ||||
|  | ||||
|   | ||||
| @@ -6,9 +6,9 @@ | ||||
| # | ||||
| curdir:=target | ||||
|  | ||||
| $(curdir)/builddirs:=linux sdk imagebuilder | ||||
| $(curdir)/builddirs:=linux sdk imagebuilder toolchain | ||||
| $(curdir)/builddirs-default:=linux | ||||
| $(curdir)/builddirs-install:=linux $(if $(CONFIG_SDK),sdk) $(if $(CONFIG_IB),imagebuilder) | ||||
| $(curdir)/builddirs-install:=linux $(if $(CONFIG_SDK),sdk) $(if $(CONFIG_IB),imagebuilder) $(if $(CONFIG_MAKE_TOOLCHAIN),toolchain) | ||||
|  | ||||
| $(curdir)/imagebuilder/prepare:=$(curdir)/linux/install | ||||
|  | ||||
|   | ||||
							
								
								
									
										6
									
								
								target/toolchain/Config.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								target/toolchain/Config.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| config MAKE_TOOLCHAIN | ||||
| 	bool "Build the OpenWrt based Toolchain" | ||||
| 	depends !EXTERNAL_TOOLCHAIN | ||||
| 	help | ||||
| 	  This is essentially the toolchain created by OpenWrt. | ||||
|  | ||||
							
								
								
									
										53
									
								
								target/toolchain/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								target/toolchain/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| # | ||||
| # 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= | ||||
|  | ||||
| PKG_OS:=$(shell uname -s) | ||||
| PKG_CPU:=$(shell uname -m) | ||||
|  | ||||
| TOOLCHAIN_NAME:=OpenWrt-Toolchain-$(BOARD)-for-$(ARCH)-gcc-$(GCCV)_$(LIBC)-$(LIBCV) | ||||
| TOOLCHAIN_BUILD_DIR:=$(BUILD_DIR)/$(TOOLCHAIN_NAME) | ||||
| EXCLUDE_DIRS:=*/ccache \ | ||||
| 	*/stamp \ | ||||
| 	*/stampfiles \ | ||||
| 	*/man \ | ||||
| 	*/info | ||||
|  | ||||
| all: compile | ||||
|  | ||||
| $(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)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) | \ | ||||
| 	       $(TAR) -xf - -C $(TOOLCHAIN_BUILD_DIR) | ||||
|  | ||||
| 	$(CP)  $(TOPDIR)/LICENSE ./files/README.TOOLCHAIN \ | ||||
| 		$(TOOLCHAIN_BUILD_DIR)/ | ||||
|  | ||||
| 	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 | ||||
							
								
								
									
										2
									
								
								target/toolchain/files/README.TOOLCHAIN
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								target/toolchain/files/README.TOOLCHAIN
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| This is the OpenWrt SDK. It contains just the toolchain created  | ||||
| by buildroot. | ||||
| @@ -246,6 +246,8 @@ define Stage2/Install | ||||
| 	$(GCC_MAKE) -C $(HOST_BUILD_DIR2) install | ||||
| 	# Set up the symlinks to enable lying about target name. | ||||
| 	set -e; \ | ||||
| 	$(CP) ./files/wrapper.sh $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh | ||||
| 	chmod +x $(TOOLCHAIN_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-wrapper.sh | ||||
| 	(cd $(TOOLCHAIN_DIR)/usr; \ | ||||
| 		ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \ | ||||
| 		cd bin; \ | ||||
| @@ -253,6 +255,10 @@ define Stage2/Install | ||||
| 			ln -sf $$$${app} \ | ||||
| 		   	$(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \ | ||||
| 		done; \ | ||||
| 		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; \ | ||||
| 	); | ||||
| 	$(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch)) | ||||
| endef | ||||
|   | ||||
							
								
								
									
										91
									
								
								toolchain/gcc/files/wrapper.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										91
									
								
								toolchain/gcc/files/wrapper.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| #!/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" | ||||
|        ;; | ||||
|    *) | ||||
| 	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 | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau