1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-10-01 09:11:59 +03: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,26 +368,28 @@ define Package/base-files/install
done done
endef endef
define Package/libgcc/install ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
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/
endef endef
define Package/libssp/install define Package/libssp/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
$(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libssp.so.* $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib$(LIB_SUFFIX)/libssp.so.* $(1)/lib/
endef endef
define Package/libstdcpp/install define Package/libstdcpp/install
$(INSTALL_DIR) $(1)/usr/lib $(INSTALL_DIR) $(1)/usr/lib
$(CP) $(TOOLCHAIN_DIR)/usr/lib$(LIB_SUFFIX)/libstdc++.so.* $(1)/usr/lib/ $(CP) $(TOOLCHAIN_DIR)/usr/lib$(LIB_SUFFIX)/libstdc++.so.* $(1)/usr/lib/
endef endef
use_libutil=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil) use_libutil=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil)
use_libnsl=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_NIS),libnsl) use_libnsl=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_NIS),libnsl)
use_nsswitch=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_NSSWITCH),libnss_dns libnss_files) use_nsswitch=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_NSSWITCH),libnss_dns libnss_files)
define Package/glibc/install define Package/glibc/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
$(CP) $(TOOLCHAIN_DIR)/lib/ld*.so.* $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/ld*.so.* $(1)/lib/
$(CP) $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_SO_VERSION).so $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/ld-$(LIBC_SO_VERSION).so $(1)/lib/
@ -227,51 +397,119 @@ define Package/glibc/install
$(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \
$(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so $(1)/lib/; \ $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so $(1)/lib/; \
done done
endef endef
define Package/eglibc/install define Package/eglibc/install
$(call Package/glibc/install,$1) $(call Package/glibc/install,$1)
endef endef
define Package/uClibc/install define Package/uClibc/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
for file in ld$(LIB_SUFFIX)-uClibc libc libcrypt libdl libm libnsl libresolv libuClibc libutil; do \ for file in ld$(LIB_SUFFIX)-uClibc libc libcrypt libdl libm libnsl libresolv libuClibc libutil; do \
$(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \
$(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so $(1)/lib/; \ $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so $(1)/lib/; \
done done
endef endef
define Package/libc/install define Package/libc/install
$(call Package/$(LIBC)/install,$1) $(call Package/$(LIBC)/install,$1)
endef endef
define Package/libc/install_lib define Package/libc/install_lib
$(CP) $(filter-out %/libdl_pic.a,$(wildcard $(TOOLCHAIN_DIR)/usr/lib/lib*.a)) $(1)/lib/ $(CP) $(filter-out %/libdl_pic.a,$(wildcard $(TOOLCHAIN_DIR)/usr/lib/lib*.a)) $(1)/lib/
$(if $(wildcard $(TOOLCHAIN_DIR)/usr/lib/libc_so.a),$(CP) $(TOOLCHAIN_DIR)/usr/lib/libc_so.a $(1)/lib/libc_pic.a) $(if $(wildcard $(TOOLCHAIN_DIR)/usr/lib/libc_so.a),$(CP) $(TOOLCHAIN_DIR)/usr/lib/libc_so.a $(1)/lib/libc_pic.a)
$(CP) $(TOOLCHAIN_DIR)/usr/lib/gcc/*/*/libgcc.a $(1)/lib/libgcc_s_pic.a $(CP) $(TOOLCHAIN_DIR)/usr/lib/gcc/*/*/libgcc.a $(1)/lib/libgcc_s_pic.a
endef endef
define Package/libpthread/install define Package/libpthread/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
$(CP) $(TOOLCHAIN_DIR)/lib/libpthread.so.* $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/libpthread.so.* $(1)/lib/
$(CP) $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so $(1)/lib/
endef endef
define Package/librt/install define Package/librt/install
$(INSTALL_DIR) $(1)/lib $(INSTALL_DIR) $(1)/lib
$(CP) $(TOOLCHAIN_DIR)/lib/librt.so.* $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/librt.so.* $(1)/lib/
$(CP) $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so $(1)/lib/ $(CP) $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so $(1)/lib/
endef endef
define Package/ldd/install define Package/ldd/install
$(INSTALL_DIR) $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/bin/
$(CP) $(TOOLCHAIN_DIR)/usr/bin/ldd $(1)/usr/bin/ $(CP) $(TOOLCHAIN_DIR)/usr/bin/ldd $(1)/usr/bin/
endef endef
define Package/ldconfig/install define Package/ldconfig/install
$(INSTALL_DIR) $(1)/sbin/ $(INSTALL_DIR) $(1)/sbin/
$(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

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
TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
PACKAGE_DIR:=$(BIN_DIR)/packages/$(BOARD)_$(LIBC)-$(LIBCV) 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)
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)) TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux TARGET_CFLAGS+= -fhonour-copts
TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include -I$(TOOLCHAIN_DIR)/include
TARGET_CFLAGS+= -fhonour-copts TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib
endif 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
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 @@
# #
config NATIVE_TOOLCHAIN
menuconfig EXTERNAL_TOOLCHAIN
bool bool
prompt "Use host's toolchain" if DEVEL && BROKEN prompt "Use external toolchain" if DEVEL
default n
help help
If enabled, OpenWrt will compile using your existing toolchain instead of compiling one If enabled, OpenWrt will compile using an existing toolchain instead of compiling one
config NATIVE_TOOLCHAIN
bool
prompt "Use host's toolchain" if DEVEL
depends EXTERNAL_TOOLCHAIN
select NO_STRIP
help
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
$(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) $(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install
$(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