[OpenWrt-Devel] [PATCH 1/2] toolchain: add support for custom toolchains

Hauke Mehrtens hauke at hauke-m.de
Sun Jun 9 03:49:15 EDT 2019


On 6/5/19 6:15 PM, John Crispin wrote:
> The requirement for being able to add custom src toolchains to the build
> system has been brought forward by the members of the prpl foundation.
> This patch tries to address this requirement by allowing a ned folder to be
> loaded into the tree call toolchain_custom. The subfolders contained within
> have the same layout as the toolchain folder. By placing optional Makefiles
> into these subfolders It is possible to override the versions of the various
> toolchain components aswell as their patch sets and make templates.
> 
> Signed-off-by: John Crispin <john at phrozen.org>
> ---
>  rules.mk                       | 5 +++++
>  toolchain/Config.in            | 5 +++++
>  toolchain/Makefile             | 2 ++
>  toolchain/binutils/Makefile    | 4 ++++
>  toolchain/gcc/common.mk        | 6 ++++++
>  toolchain/gcc/initial/Makefile | 4 ++++
>  toolchain/gcc/minimal/Makefile | 4 ++++
>  toolchain/gdb/Makefile         | 4 ++++
>  toolchain/musl/Makefile        | 2 ++
>  toolchain/musl/common.mk       | 2 ++
>  10 files changed, 38 insertions(+)
> 
> diff --git a/rules.mk b/rules.mk
> index 80cb3d63f4..7596250388 100644
> --- a/rules.mk
> +++ b/rules.mk
> @@ -119,8 +119,13 @@ INCLUDE_DIR:=$(TOPDIR)/include
>  SCRIPT_DIR:=$(TOPDIR)/scripts
>  BUILD_DIR_BASE:=$(TOPDIR)/build_dir
>  ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
> + ifeq ($(CONFIG_CUSTOM_TOOLCHAIN),)
>    GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
>    LIBC:=$(call qstrip,$(CONFIG_LIBC))
> + else
> +  GCCV:=$(call qstrip,$(CONFIG_CUSTOM_GCC_VERSION))
> +  LIBC:=$(call qstrip,$(CONFIG_CUSTOM_LIBC))
> + endif
>    REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
>    GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
>    DIR_SUFFIX:=_$(LIBC)$(if $(CONFIG_arm),_eabi)
> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index 82dddbc209..cad492aa1e 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -155,6 +155,11 @@ menuconfig EXTERNAL_TOOLCHAIN
>  		  Specify additional directories searched for libraries (override LDFLAGS).
>  		  Use ./DIR for directories relative to the root above.
>  
> +config CUSTOM_TOOLCHAIN
> +	depends on DEVEL
> +
> +source "toolchain_custom/*.in"
> +
>  config NEED_TOOLCHAIN
>  	bool
>  	depends on DEVEL
> diff --git a/toolchain/Makefile b/toolchain/Makefile
> index 0336b2f72c..f067cb9c93 100644
> --- a/toolchain/Makefile
> +++ b/toolchain/Makefile
> @@ -93,6 +93,8 @@ endif
>  
>  $(curdir)/install: $(curdir)/compile
>  
> +include $(wildcard toolchain_custom/*.mk)
> +
>  $(eval $(call stampfile,$(curdir),toolchain,compile,$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed,,$(TOOLCHAIN_DIR)))
>  $(eval $(call stampfile,$(curdir),toolchain,check,$(TMP_DIR)/.build))
>  $(eval $(call subdir,$(curdir)))
> diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile
> index 24eaf70566..04620a8769 100644
> --- a/toolchain/binutils/Makefile
> +++ b/toolchain/binutils/Makefile
> @@ -31,6 +31,8 @@ HOST_BUILD_PARALLEL:=1
>  
>  PATCH_DIR:=./patches/$(PKG_VERSION)
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/binutils/*.var)
> +
>  include $(INCLUDE_DIR)/toolchain-build.mk
>  
>  HOST_CONFIGURE_ARGS = \
> @@ -99,4 +101,6 @@ define Host/Clean
>  		$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME)
>  endef
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/binutils/*.build)
> +
>  $(eval $(call HostBuild))
> diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk
> index 6e0edfb36a..d6ca9b872f 100644
> --- a/toolchain/gcc/common.mk
> +++ b/toolchain/gcc/common.mk
> @@ -47,6 +47,8 @@ PKGVERSION=OpenWrt GCC $(PKG_VERSION) $(REVISION)
>  
>  HOST_BUILD_PARALLEL:=1
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/*.var)
> +
>  include $(INCLUDE_DIR)/toolchain-build.mk
>  
>  HOST_SOURCE_DIR:=$(HOST_BUILD_DIR)
> @@ -189,6 +191,8 @@ GCC_MAKE:= \
>  		CXXFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
>  		GOCFLAGS_FOR_TARGET="$(TARGET_CFLAGS)"
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/*.build)
> +
>  define Host/SetToolchainInfo
>  	$(SED) 's,TARGET_CROSS=.*,TARGET_CROSS=$(REAL_GNU_TARGET_NAME)-,' $(TOOLCHAIN_DIR)/info.mk
>  	$(SED) 's,GCC_VERSION=.*,GCC_VERSION=$(GCC_VERSION),' $(TOOLCHAIN_DIR)/info.mk
> @@ -229,3 +233,5 @@ define Host/Clean
>  		$(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc* \
>  		$(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c*
>  endef
> +
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/*.build)

Is this included twice intentionally?

> diff --git a/toolchain/gcc/initial/Makefile b/toolchain/gcc/initial/Makefile
> index c71b17dd87..b9ada19ec1 100644
> --- a/toolchain/gcc/initial/Makefile
> +++ b/toolchain/gcc/initial/Makefile
> @@ -1,6 +1,8 @@
>  GCC_VARIANT:=initial
>  GCC_PREPARE=$(CONFIG_USE_MUSL)
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/initial/*.var)
> +
>  include ../common.mk
>  
>  GCC_CONFIGURE += \
> @@ -33,4 +35,6 @@ define Host/Install
>  	$$(call file_copy,$(TOOLCHAIN_DIR)/initial/.,$(TOOLCHAIN_DIR)/)
>  endef
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/initial/*.build)
> +
>  $(eval $(call HostBuild))
> diff --git a/toolchain/gcc/minimal/Makefile b/toolchain/gcc/minimal/Makefile
> index 31d6f675ab..0b5c485dd8 100644
> --- a/toolchain/gcc/minimal/Makefile
> +++ b/toolchain/gcc/minimal/Makefile
> @@ -1,6 +1,8 @@
>  GCC_VARIANT:=minimal
>  GCC_PREPARE=$(if $(CONFIG_USE_MUSL),,1)
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/minimal/*.var)
> +
>  include ../common.mk
>  
>  GCC_CONFIGURE += \
> @@ -26,4 +28,6 @@ define Host/Clean
>  		$(GCC_BUILD_DIR)
>  endef
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gcc/minimal/*.build)
> +
>  $(eval $(call HostBuild))
> diff --git a/toolchain/gdb/Makefile b/toolchain/gdb/Makefile
> index 3b884f9e79..63cdc073fd 100644
> --- a/toolchain/gdb/Makefile
> +++ b/toolchain/gdb/Makefile
> @@ -29,6 +29,8 @@ HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(GDB_DIR)
>  
>  HOST_BUILD_PARALLEL:=1
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gdb/*.var)
> +
>  include $(INCLUDE_DIR)/toolchain-build.mk
>  
>  HOST_CONFIGURE_VARS += \
> @@ -65,4 +67,6 @@ define Host/Clean
>  		$(TOOLCHAIN_DIR)/bin/$(GNU_TARGET_NAME)-gdb
>  endef
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/gdb/*.build)
> +
>  $(eval $(call HostBuild))
> diff --git a/toolchain/musl/Makefile b/toolchain/musl/Makefile
> index 2b9312bcbf..aec678ebbe 100644
> --- a/toolchain/musl/Makefile
> +++ b/toolchain/musl/Makefile
> @@ -28,4 +28,6 @@ define Host/Install
>  	$(CP) ./include $(TOOLCHAIN_DIR)/
>  endef
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/musl/*.build)

Should this also be added for uclibc and glibc?

> +
>  $(eval $(call HostBuild))
> diff --git a/toolchain/musl/common.mk b/toolchain/musl/common.mk
> index ae7758e8b5..6c63ffa9bf 100644
> --- a/toolchain/musl/common.mk
> +++ b/toolchain/musl/common.mk
> @@ -25,6 +25,8 @@ BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN)
>  HOST_BUILD_PREFIX:=$(TOOLCHAIN_DIR)
>  HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME)-$(PKG_VERSION)
>  
> +include $(wildcard $(TOPDIR)/toolchain_custom/musl/*.var)
> +
>  include $(INCLUDE_DIR)/host-build.mk
>  include $(INCLUDE_DIR)/hardening.mk
>  
> 


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list