[OpenWrt-Devel,1/2] toolchain: add support for custom toolchains
diff mbox series

Message ID 20190605161522.24420-1-john@phrozen.org
State New
Delegated to: John Crispin
Headers show
Series
  • [OpenWrt-Devel,1/2] toolchain: add support for custom toolchains
Related show

Commit Message

John Crispin June 5, 2019, 4:15 p.m. UTC
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@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(+)

Comments

Karl Palsson June 5, 2019, 4:42 p.m. UTC | #1
John Crispin <john@phrozen.org> 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@phrozen.org>
> ---
> 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"


Could we add help text here, based on the commit comment that
says how this option is to be used?

Sincerely,
Karl Palsson
John Crispin June 5, 2019, 4:46 p.m. UTC | #2
On 05/06/2019 18:42, Karl Palsson wrote:
> John Crispin <john@phrozen.org> 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@phrozen.org>
>> ---
>> 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"
>
> Could we add help text here, based on the commit comment that
> says how this option is to be used?
>
> Sincerely,
> Karl Palsson
>
It is a dummy place holder, overridden by the toolchain_custom/Config.in 
wildcard include. It is not meant to have a help text as its not really 
there until there is a custom toolchain installed. As you know we have 
piles of these transient symbols, none of which have a help text.

     John
Hauke Mehrtens June 9, 2019, 7:49 a.m. UTC | #3
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@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
>  
>

Patch
diff mbox series

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)
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)
+
 $(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