diff options
| -rw-r--r-- | Config.in | 4 | ||||
| -rw-r--r-- | package/base-files/Makefile | 300 | ||||
| -rw-r--r-- | rules.mk | 72 | ||||
| -rw-r--r-- | toolchain/Config.in | 88 | ||||
| -rw-r--r-- | toolchain/Makefile | 8 | 
5 files changed, 410 insertions, 62 deletions
| @@ -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.  # See /LICENSE for more information. @@ -138,6 +138,7 @@ config SHADOW_PASSWORDS  choice  	prompt "Binary stripping method" +	default USE_STRIP   if EXTERNAL_TOOLCHAIN  	default USE_STRIP   if USE_GLIBC || USE_EGLIBC  	default USE_SSTRIP  	help @@ -231,7 +232,6 @@ endmenu  menuconfig DEVEL  	bool "Advanced configuration options (for developers)"  	default n -	select TOOLCHAINOPTS if !NATIVE_TOOLCHAIN  config BROKEN  	bool diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 15920d52b..3e30b7073 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -61,26 +61,69 @@ define Package/base-files/description   This package contains a base filesystem and system scripts for OpenWrt.  endef +  define Package/gcc/Default    SECTION:=libs    CATEGORY:=Base system -  DEPENDS:=@!NATIVE_TOOLCHAIN    URL:=http://gcc.gnu.org/    VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE)  endef +  define Package/libgcc  $(call Package/gcc/Default)    TITLE:=GCC support library    DEPENDS+=@!(TARGET_avr32||TARGET_coldfire)  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  $(call Package/gcc/Default)    DEPENDS+=@SSP_SUPPORT    TITLE:=GCC support library  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  $(call Package/gcc/Default)    NAME:=libstdc++ @@ -88,30 +131,114 @@ $(call Package/gcc/Default)    DEPENDS+=@INSTALL_LIBSTDCPP  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    SECTION:=libs    CATEGORY:=Base system -  DEPENDS:=@!NATIVE_TOOLCHAIN    VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE)    URL:=$(LIBC_URL)  endef +  define Package/libc  $(call Package/libc/Default)    TITLE:=C library  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  $(call Package/libc/Default)    TITLE:=POSIX thread library    DEPENDS:= +librt  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  $(call Package/libc/Default)    TITLE:=POSIX.1b RealTime extension library  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  $(call Package/libc/Default)    SECTION:=utils @@ -119,6 +246,27 @@ $(call Package/libc/Default)    TITLE:=LDD trace utility  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  $(call Package/libc/Default)    SECTION:=utils @@ -126,6 +274,26 @@ $(call Package/libc/Default)    TITLE:=Shared library path configuration  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  	mkdir -p $(PKG_BUILD_DIR) @@ -200,26 +368,28 @@ define Package/base-files/install  	done  endef -define Package/libgcc/install +ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) + +  define Package/libgcc/install  	$(INSTALL_DIR) $(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  	$(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  	$(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_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_libutil=$(if $(CONFIG_USE_GLIBC)$(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil) +  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) -define Package/glibc/install +  define Package/glibc/install  	$(INSTALL_DIR) $(1)/lib  	$(CP) $(TOOLCHAIN_DIR)/lib/ld*.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-$(LIBC_SO_VERSION).so $(1)/lib/; \  	done -endef +  endef -define Package/eglibc/install -$(call Package/glibc/install,$1) -endef +  define Package/eglibc/install +    $(call Package/glibc/install,$1) +  endef -define Package/uClibc/install +  define Package/uClibc/install  	$(INSTALL_DIR) $(1)/lib  	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-$(LIBC_SO_VERSION).so $(1)/lib/; \  	done -endef +  endef -define Package/libc/install -$(call Package/$(LIBC)/install,$1) -endef +  define Package/libc/install +    $(call Package/$(LIBC)/install,$1) +  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/  	$(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 -endef +  endef -define Package/libpthread/install +  define Package/libpthread/install  	$(INSTALL_DIR) $(1)/lib  	$(CP) $(TOOLCHAIN_DIR)/lib/libpthread.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  	$(CP) $(TOOLCHAIN_DIR)/lib/librt.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/  	$(CP) $(TOOLCHAIN_DIR)/usr/bin/ldd $(1)/usr/bin/ -endef +  endef -define Package/ldconfig/install +  define Package/ldconfig/install  	$(INSTALL_DIR) $(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)    -include $(PLATFORM_DIR)/base-files.mk @@ -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.  # See /LICENSE for more information. @@ -34,9 +34,6 @@ BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))  TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))  TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_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})  OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH)) @@ -52,13 +49,32 @@ BIN_DIR:=$(TOPDIR)/bin  INCLUDE_DIR:=$(TOPDIR)/include  SCRIPT_DIR:=$(TOPDIR)/scripts  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_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 -TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/toolchain-$(ARCH)_gcc-$(GCCV)_$(LIBC)-$(LIBCV) -PACKAGE_DIR:=$(BIN_DIR)/packages/$(BOARD)_$(LIBC)-$(LIBCV) +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) +  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_HOST=$(BUILD_DIR_HOST)/stamp  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)  BUILD_LOG_DIR:=$(TOPDIR)/logs -TARGET_PATH:=$(TOOLCHAIN_DIR)/usr/bin:$(STAGING_DIR_HOST)/bin:$(PATH) -TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH) +TARGET_PATH:=$(STAGING_DIR_HOST)/bin:$(PATH)  TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3)  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))  ifndef DUMP -ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) -  -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_CFLAGS+= -fhonour-copts -endif +  ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) +    -include $(TOOLCHAIN_DIR)/info.mk +    TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) +    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 +TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(TARGET_PATH)  ifeq ($(CONFIG_SOFT_FLOAT),y)    SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft diff --git a/toolchain/Config.in b/toolchain/Config.in index cf08ae9ca..84b50bbd0 100644 --- a/toolchain/Config.in +++ b/toolchain/Config.in @@ -1,14 +1,90 @@  # -config NATIVE_TOOLCHAIN + +menuconfig EXTERNAL_TOOLCHAIN  	bool -	prompt "Use host's toolchain" if DEVEL && BROKEN -	default n +	prompt "Use external toolchain"  if DEVEL  	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 -	bool "Toolchain Options" if DEVEL -	depends !NATIVE_TOOLCHAIN +	bool "Toolchain Options"  if DEVEL +	depends NEED_TOOLCHAIN  menuconfig EXTRA_TARGET_ARCH  	bool diff --git a/toolchain/Makefile b/toolchain/Makefile index 456b731fb..161b139d7 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -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.  # See /LICENSE for more information. @@ -28,13 +28,13 @@  curdir:=toolchain  # 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-install:=$($(curdir)/builddirs-compile)  # builddir dependencies -$(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install -ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) +ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) +  $(curdir)/$(LIBC)/prepare:=$(curdir)/kernel-headers/install    $(curdir)/gcc/prepare:=$(curdir)/binutils/install    $(curdir)/kernel-headers/install:=$(curdir)/gcc/prepare    $(curdir)/gcc/compile:=$(curdir)/$(LIBC)/prepare | 
