1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-27 19:37:10 +02:00

[toolchain] add external toolchain support, enhance native toolchain support (special thanks to Luigi Mantellini for his help... and patience ;)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17682 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nico 2009-09-23 02:27:38 +00:00
parent e44638b110
commit 6a36104faa
5 changed files with 410 additions and 62 deletions

View File

@ -1,4 +1,4 @@
# Copyright (C) 2006-2007 OpenWrt.org # Copyright (C) 2006-2009 OpenWrt.org
# #
# This is free software, licensed under the GNU General Public License v2. # This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information. # See /LICENSE for more information.
@ -138,6 +138,7 @@ config SHADOW_PASSWORDS
choice choice
prompt "Binary stripping method" prompt "Binary stripping method"
default USE_STRIP if EXTERNAL_TOOLCHAIN
default USE_STRIP if USE_GLIBC || USE_EGLIBC default USE_STRIP if USE_GLIBC || USE_EGLIBC
default USE_SSTRIP default USE_SSTRIP
help help
@ -231,7 +232,6 @@ endmenu
menuconfig DEVEL menuconfig DEVEL
bool "Advanced configuration options (for developers)" bool "Advanced configuration options (for developers)"
default n default n
select TOOLCHAINOPTS if !NATIVE_TOOLCHAIN
config BROKEN config BROKEN
bool bool

View File

@ -61,26 +61,69 @@ define Package/base-files/description
This package contains a base filesystem and system scripts for OpenWrt. This package contains a base filesystem and system scripts for OpenWrt.
endef endef
define Package/gcc/Default define Package/gcc/Default
SECTION:=libs SECTION:=libs
CATEGORY:=Base system CATEGORY:=Base system
DEPENDS:=@!NATIVE_TOOLCHAIN
URL:=http://gcc.gnu.org/ URL:=http://gcc.gnu.org/
VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE) VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE)
endef endef
define Package/libgcc define Package/libgcc
$(call Package/gcc/Default) $(call Package/gcc/Default)
TITLE:=GCC support library TITLE:=GCC support library
DEPENDS+=@!(TARGET_avr32||TARGET_coldfire) DEPENDS+=@!(TARGET_avr32||TARGET_coldfire)
endef endef
define Package/libgcc/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc
config LIBGCC_ROOT_DIR
string
prompt "libgcc shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBGCC_FILE_SPEC
string
prompt "libgcc shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libgcc
default "./lib/libgcc_s.so.*"
endmenu
endef
define Package/libssp define Package/libssp
$(call Package/gcc/Default) $(call Package/gcc/Default)
DEPENDS+=@SSP_SUPPORT DEPENDS+=@SSP_SUPPORT
TITLE:=GCC support library TITLE:=GCC support library
endef endef
define Package/libssp/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp
config LIBSPP_ROOT_DIR
string
prompt "libssp shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBSSP_FILE_SPEC
string
prompt "libssp shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libssp
default "./lib/libssp.so.*"
endmenu
endef
define Package/libstdcpp define Package/libstdcpp
$(call Package/gcc/Default) $(call Package/gcc/Default)
NAME:=libstdc++ NAME:=libstdc++
@ -88,30 +131,114 @@ $(call Package/gcc/Default)
DEPENDS+=@INSTALL_LIBSTDCPP DEPENDS+=@INSTALL_LIBSTDCPP
endef endef
define Package/libstdcpp/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
config LIBSTDCPP_ROOT_DIR
string
prompt "libstdcpp shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBSTDCPP_FILE_SPEC
string
prompt "libstdc++ shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libstdcpp
default "./lib/libstdc++.so.*"
endmenu
endef
define Package/libc/Default define Package/libc/Default
SECTION:=libs SECTION:=libs
CATEGORY:=Base system CATEGORY:=Base system
DEPENDS:=@!NATIVE_TOOLCHAIN
VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE) VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE)
URL:=$(LIBC_URL) URL:=$(LIBC_URL)
endef endef
define Package/libc define Package/libc
$(call Package/libc/Default) $(call Package/libc/Default)
TITLE:=C library TITLE:=C library
endef endef
define Package/libc/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libc
config LIBC_ROOT_DIR
string
prompt "libc shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libc
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBC_FILE_SPEC
string
prompt "libc shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libc
default "./lib/ld{-*.so,-linux*.so.*} ./lib/lib{anl,c,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util}{-*.so,.so.*}"
endmenu
endef
define Package/libpthread define Package/libpthread
$(call Package/libc/Default) $(call Package/libc/Default)
TITLE:=POSIX thread library TITLE:=POSIX thread library
DEPENDS:= +librt DEPENDS:= +librt
endef endef
define Package/libpthread/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread
config LIBPTHREAD_ROOT_DIR
string
prompt "libpthread shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBPTHREAD_FILE_SPEC
string
prompt "libpthread shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_libpthread
default "./lib/libpthread{-*.so,.so.*}"
endmenu
endef
define Package/librt define Package/librt
$(call Package/libc/Default) $(call Package/libc/Default)
TITLE:=POSIX.1b RealTime extension library TITLE:=POSIX.1b RealTime extension library
endef endef
define Package/librt/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_librt
config LIBRT_ROOT_DIR
string
prompt "librt shared library base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_librt
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LIBRT_FILE_SPEC
string
prompt "librt shared library files (use wildcards)"
depends EXTERNAL_TOOLCHAIN && PACKAGE_librt
default "./lib/librt{-*.so,.so.*}"
endmenu
endef
define Package/ldd define Package/ldd
$(call Package/libc/Default) $(call Package/libc/Default)
SECTION:=utils SECTION:=utils
@ -119,6 +246,27 @@ $(call Package/libc/Default)
TITLE:=LDD trace utility TITLE:=LDD trace utility
endef endef
define Package/ldd/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd
config LDD_ROOT_DIR
string
prompt "ldd trace utility base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LDD_FILE_SPEC
string
prompt "ldd trace utility file"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldd
default "./usr/bin/ldd"
endmenu
endef
define Package/ldconfig define Package/ldconfig
$(call Package/libc/Default) $(call Package/libc/Default)
SECTION:=utils SECTION:=utils
@ -126,6 +274,26 @@ $(call Package/libc/Default)
TITLE:=Shared library path configuration TITLE:=Shared library path configuration
endef endef
define Package/ldconfig/config
menu "Configuration"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig
config LDCONFIG_ROOT_DIR
string
prompt "ldconfig base directory"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig
default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
default "/" if NATIVE_TOOLCHAIN
config LDCONFIG_FILE_SPEC
string
prompt "ldconfig file"
depends EXTERNAL_TOOLCHAIN && PACKAGE_ldconfig
default "./sbin/ldconfig"
endmenu
endef
define Build/Prepare define Build/Prepare
mkdir -p $(PKG_BUILD_DIR) mkdir -p $(PKG_BUILD_DIR)
@ -200,6 +368,8 @@ define Package/base-files/install
done done
endef endef
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
define Package/libgcc/install define Package/libgcc/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
$(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libgcc_s.so.* $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libgcc_s.so.* $(1)/lib/
@ -273,6 +443,74 @@ define Package/ldconfig/install
$(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/ $(CP) $(TOOLCHAIN_DIR)/sbin/ldconfig $(1)/sbin/
endef endef
else
define Package/libgcc/install
for file in $(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/libssp/install
for file in $(call qstrip,$(CONFIG_LIBSSP_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBSSP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/libstdcpp/install
for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBSTDCPP_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/libc/install
for file in $(call qstrip,$(CONFIG_LIBC_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBC_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/libpthread/install
for file in $(call qstrip,$(CONFIG_LIBPTHREAD_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBPTHREAD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/librt/install
for file in $(call qstrip,$(CONFIG_LIBRT_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LIBRT_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/ldd/install
for file in $(call qstrip,$(CONFIG_LDD_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LDD_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
define Package/ldconfig/install
for file in $(call qstrip,$(CONFIG_LDCONFIG_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
$(INSTALL_DIR) $(1)/$$$$dir ; \
$(CP) $(call qstrip,$(CONFIG_LDCONFIG_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
done
endef
endif
ifneq ($(DUMP),1) ifneq ($(DUMP),1)
-include $(PLATFORM_DIR)/base-files.mk -include $(PLATFORM_DIR)/base-files.mk
endif endif

View File

@ -1,5 +1,5 @@
# #
# Copyright (C) 2006-2008 OpenWrt.org # Copyright (C) 2006-2009 OpenWrt.org
# #
# This is free software, licensed under the GNU General Public License v2. # This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information. # See /LICENSE for more information.
@ -34,9 +34,6 @@ BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))
TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))
TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX)) TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX))
BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX)) BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX))
GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
LIBC:=$(call qstrip,$(CONFIG_LIBC))
LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION))
SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH)) OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH))
@ -52,13 +49,32 @@ BIN_DIR:=$(TOPDIR)/bin
INCLUDE_DIR:=$(TOPDIR)/include INCLUDE_DIR:=$(TOPDIR)/include
SCRIPT_DIR:=$(TOPDIR)/scripts SCRIPT_DIR:=$(TOPDIR)/scripts
BUILD_DIR_BASE:=$(TOPDIR)/build_dir BUILD_DIR_BASE:=$(TOPDIR)/build_dir
BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(ARCH)_$(LIBC)-$(LIBCV)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host BUILD_DIR_HOST:=$(BUILD_DIR_BASE)/host
BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV)
STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(ARCH)_$(LIBC)-$(LIBCV)
STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
LIBC:=$(call qstrip,$(CONFIG_LIBC))
LIBCV:=$(call qstrip,$(CONFIG_LIBC_VERSION))
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(ARCH)_$(LIBC)-$(LIBCV)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(ARCH)_$(LIBC)-$(LIBCV)
BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV)
TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV)
PACKAGE_DIR:=$(BIN_DIR)/packages/$(BOARD)_$(LIBC)-$(LIBCV) PACKAGE_DIR:=$(BIN_DIR)/packages/$(BOARD)_$(LIBC)-$(LIBCV)
else
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME))
else
GNU_TARGET_NAME=$(shell gcc -dumpmachine)
endif
REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME)
BUILD_DIR:=$(BUILD_DIR_BASE)/target-$(GNU_TARGET_NAME)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
STAGING_DIR:=$(TOPDIR)/staging_dir/target-$(GNU_TARGET_NAME)
BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/toolchain-$(GNU_TARGET_NAME)
TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(GNU_TARGET_NAME)
PACKAGE_DIR:=$(BIN_DIR)/packages/$(BOARD)_$(GNU_TARGET_NAME)
endif
STAMP_DIR:=$(BUILD_DIR)/stamp STAMP_DIR:=$(BUILD_DIR)/stamp
STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp
TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR)) TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR))
@ -67,22 +83,40 @@ STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD)
DEBUG_DIR:=$(BUILD_DIR)/debug-$(BOARD) DEBUG_DIR:=$(BUILD_DIR)/debug-$(BOARD)
BUILD_LOG_DIR:=$(TOPDIR)/logs BUILD_LOG_DIR:=$(TOPDIR)/logs
TARGET_PATH:=$(TOOLCHAIN_DIR)/usr/bin:$(STAGING_DIR_HOST)/bin:$(PATH) TARGET_PATH:=$(STAGING_DIR_HOST)/bin:$(PATH)
TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH)
TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3)
TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include
TARGET_LDFLAGS:=-L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a)) LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a))
ifndef DUMP ifndef DUMP
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
-include $(TOOLCHAIN_DIR)/info.mk -include $(TOOLCHAIN_DIR)/info.mk
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
TARGET_CFLAGS+= -fhonour-copts TARGET_CFLAGS+= -fhonour-copts
TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include -I$(TOOLCHAIN_DIR)/include
TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib
TARGET_PATH:=$(TOOLCHAIN_DIR)/usr/bin:$(TARGET_PATH)
else
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX))
TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT))
TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH)))
TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH)))
TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH)))
ifneq ($(TOOLCHAIN_BIN_DIRS),)
TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH)
endif
ifneq ($(TOOLCHAIN_INC_DIRS),)
TARGET_CPPFLAGS+= $(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS))
endif
ifneq ($(TOOLCHAIN_LIB_DIRS),)
TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS))
endif endif
endif endif
endif
endif
TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH)
ifeq ($(CONFIG_SOFT_FLOAT),y) ifeq ($(CONFIG_SOFT_FLOAT),y)
SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft

View File

@ -1,14 +1,90 @@
# #
menuconfig EXTERNAL_TOOLCHAIN
bool
prompt "Use external toolchain" if DEVEL
help
If enabled, OpenWrt will compile using an existing toolchain instead of compiling one
config NATIVE_TOOLCHAIN config NATIVE_TOOLCHAIN
bool bool
prompt "Use host's toolchain" if DEVEL && BROKEN prompt "Use host's toolchain" if DEVEL
default n depends EXTERNAL_TOOLCHAIN
select NO_STRIP
help help
If enabled, OpenWrt will compile using your existing toolchain instead of compiling one If enabled, OpenWrt will compile using the native toolchain for your host instead of compiling one
config TARGET_NAME
string
prompt "Target name" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "arm-unknown-linux-gnu" if arm
default "armeb-unknown-linux-gnu" if armeb
default "i486-unknown-linux-gnu" if i386
default "mips-unknown-linux-gnu" if mips
default "mipsel-unknown-linux-gnu" if mipsel
default "powerpc-unknown-linux-gnu" if powerpc
default "x86_64-unknown-linux-gnu" if x86_64
config TOOLCHAIN_PREFIX
string
prompt "Toolchain prefix" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "arm-unknown-linux-gnu-" if arm
default "armeb-unknown-linux-gnu-" if armeb
default "i486-unknown-linux-gnu-" if i386
default "mips-unknown-linux-gnu-" if mips
default "mipsel-unknown-linux-gnu-" if mipsel
default "powerpc-unknown-linux-gnu-" if powerpc
default "x86_64-unknown-linux-gnu-" if x86_64
config TOOLCHAIN_ROOT
string
prompt "Toolchain root" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "/opt/cross/arm-unknown-linux-gnu" if arm
default "/opt/cross/armeb-unknown-linux-gnu" if armeb
default "/opt/cross/i486-unknown-linux-gnu" if i386
default "/opt/cross/mips-unknown-linux-gnu" if mips
default "/opt/cross/mipsel-unknown-linux-gnu" if mipsel
default "/opt/cross/powerpc-unknown-linux-gnu" if powerpc
default "/opt/cross/x86_64-unknown-linux-gnu" if x86_64
config TOOLCHAIN_BIN_PATH
string
prompt "Toolchain program path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/bin ./bin"
help
Specify additional directories searched for toolchain binaries (override PATH)
Use ./DIR for directories relative to the root above
config TOOLCHAIN_INC_PATH
string
prompt "Toolchain include path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/include ./include"
help
Specify additional directories searched for header files (override CPPFLAGS)
Use ./DIR for directories relative to the root above
config TOOLCHAIN_LIB_PATH
string
prompt "Toolchain library path" if DEVEL
depends EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
default "./usr/lib ./lib"
help
Specify additional directories searched for libraries (override LDFLAGS)
Use ./DIR for directories relative to the root above
config NEED_TOOLCHAIN
bool
depends DEVEL
default y if !EXTERNAL_TOOLCHAIN
menuconfig TOOLCHAINOPTS menuconfig TOOLCHAINOPTS
bool "Toolchain Options" if DEVEL bool "Toolchain Options" if DEVEL
depends !NATIVE_TOOLCHAIN depends NEED_TOOLCHAIN
menuconfig EXTRA_TARGET_ARCH menuconfig EXTRA_TARGET_ARCH
bool bool

View File

@ -1,5 +1,5 @@
# #
# Copyright (C) 2007-2008 OpenWrt.org # Copyright (C) 2007-2009 OpenWrt.org
# #
# This is free software, licensed under the GNU General Public License v2. # This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information. # See /LICENSE for more information.
@ -28,13 +28,13 @@
curdir:=toolchain curdir:=toolchain
# subdirectories to descend into # subdirectories to descend into
$(curdir)/builddirs := kernel-headers $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_INSIGHT),insight) $(if $(CONFIG_NATIVE_TOOLCHAIN),,binutils gcc $(LIBC) $(if $(CONFIG_GLIBC_PORTS),glibc-ports)) $(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_INSIGHT),insight) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),,kernel-headers binutils gcc $(LIBC) $(if $(CONFIG_GLIBC_PORTS),glibc-ports))
$(curdir)/builddirs-compile:=$($(curdir)/builddirs-prepare) $(curdir)/builddirs-compile:=$($(curdir)/builddirs-prepare)
$(curdir)/builddirs-install:=$($(curdir)/builddirs-compile) $(curdir)/builddirs-install:=$($(curdir)/builddirs-compile)
# builddir dependencies # builddir dependencies
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
$(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install $(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
$(curdir)/gcc/prepare:=$(curdir)/binutils/install $(curdir)/gcc/prepare:=$(curdir)/binutils/install
$(curdir)/kernel-headers/install:=$(curdir)/gcc/prepare $(curdir)/kernel-headers/install:=$(curdir)/gcc/prepare
$(curdir)/gcc/compile:=$(curdir)/$(LIBC)/prepare $(curdir)/gcc/compile:=$(curdir)/$(LIBC)/prepare