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:
parent
ac141eb667
commit
44aa03f2f9
7 changed files with 161 additions and 2 deletions
|
@ -329,6 +329,7 @@ source "toolchain/Config.in"
|
||||||
|
|
||||||
source "target/imagebuilder/Config.in"
|
source "target/imagebuilder/Config.in"
|
||||||
source "target/sdk/Config.in"
|
source "target/sdk/Config.in"
|
||||||
|
source "target/toolchain/Config.in"
|
||||||
|
|
||||||
source "tmp/.config-package.in"
|
source "tmp/.config-package.in"
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
#
|
#
|
||||||
curdir:=target
|
curdir:=target
|
||||||
|
|
||||||
$(curdir)/builddirs:=linux sdk imagebuilder
|
$(curdir)/builddirs:=linux sdk imagebuilder toolchain
|
||||||
$(curdir)/builddirs-default:=linux
|
$(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
|
$(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
|
$(GCC_MAKE) -C $(HOST_BUILD_DIR2) install
|
||||||
# Set up the symlinks to enable lying about target name.
|
# Set up the symlinks to enable lying about target name.
|
||||||
set -e; \
|
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; \
|
(cd $(TOOLCHAIN_DIR)/usr; \
|
||||||
ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
|
ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
|
||||||
cd bin; \
|
cd bin; \
|
||||||
|
@ -253,6 +255,10 @@ define Stage2/Install
|
||||||
ln -sf $$$${app} \
|
ln -sf $$$${app} \
|
||||||
$(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \
|
$(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \
|
||||||
done; \
|
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))
|
$(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch))
|
||||||
endef
|
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
|
Loading…
Reference in a new issue