golang: Add option to use external bootstrap Go
The default bootstrap Go (Go 1.4) can only be compiled on a limited number of platforms compared to newer versions of Go. This adds a config option to use an external bootstrap Go, e.g. installed through the build system's package manager or downloaded from golang.org. See: https://github.com/openwrt/packages/issues/11731 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
This commit is contained in:
parent
c5e30e529e
commit
49a2ff493b
|
@ -154,6 +154,23 @@ This package provides an assembler, compiler, linker, and compiled
|
||||||
libraries for the Go programming language.
|
libraries for the Go programming language.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Package/golang/config
|
||||||
|
menu "Configuration"
|
||||||
|
|
||||||
|
config GOLANG_EXTERNAL_BOOTSTRAP_ROOT
|
||||||
|
string "External bootstrap Go root directory"
|
||||||
|
help
|
||||||
|
Path to a working Go tree (>= Go 1.4), with bin, pkg, and src
|
||||||
|
subdirectories and the Go compiler at bin/go.
|
||||||
|
|
||||||
|
If specified, the existing Go installation will be used to
|
||||||
|
compile host (buildroot) Go.
|
||||||
|
|
||||||
|
Leave blank to compile the default bootstrap Go.
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
endef
|
||||||
|
|
||||||
define Package/golang-doc
|
define Package/golang-doc
|
||||||
$(call Package/golang/Default)
|
$(call Package/golang/Default)
|
||||||
TITLE+= (documentation)
|
TITLE+= (documentation)
|
||||||
|
@ -177,22 +194,29 @@ This package provides the Go programming language source files needed
|
||||||
for cross-compilation.
|
for cross-compilation.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
EXTERNAL_BOOTSTRAP_DIR:=$(call qstrip,$(CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT))
|
||||||
|
USE_DEFAULT_BOOTSTRAP:=$(if $(EXTERNAL_BOOTSTRAP_DIR),,1)
|
||||||
|
|
||||||
define Download/golang-bootstrap
|
define Download/golang-bootstrap
|
||||||
FILE:=$(BOOTSTRAP_SOURCE)
|
FILE:=$(BOOTSTRAP_SOURCE)
|
||||||
URL:=$(BOOTSTRAP_SOURCE_URL)
|
URL:=$(BOOTSTRAP_SOURCE_URL)
|
||||||
HASH:=$(BOOTSTRAP_HASH)
|
HASH:=$(BOOTSTRAP_HASH)
|
||||||
endef
|
endef
|
||||||
$(eval $(call Download,golang-bootstrap))
|
|
||||||
|
|
||||||
$(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
|
|
||||||
$(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH),$(HOST_GO_INSTALL_SUFFIX)))
|
$(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH),$(HOST_GO_INSTALL_SUFFIX)))
|
||||||
$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$(PKG_GO_VERSION_ID),$(GO_OS_ARCH),$(PKG_GO_INSTALL_SUFFIX)))
|
$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$(PKG_GO_VERSION_ID),$(GO_OS_ARCH),$(PKG_GO_INSTALL_SUFFIX)))
|
||||||
|
|
||||||
define Host/Prepare
|
ifeq ($(USE_DEFAULT_BOOTSTRAP),1)
|
||||||
|
$(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
|
||||||
|
|
||||||
|
$(eval $(call Download,golang-bootstrap))
|
||||||
|
|
||||||
|
define Host/Prepare
|
||||||
$(call Host/Prepare/Default)
|
$(call Host/Prepare/Default)
|
||||||
mkdir -p $(BOOTSTRAP_BUILD_DIR)
|
mkdir -p $(BOOTSTRAP_BUILD_DIR)
|
||||||
$(BOOTSTRAP_UNPACK)
|
$(BOOTSTRAP_UNPACK)
|
||||||
endef
|
endef
|
||||||
|
endif
|
||||||
|
|
||||||
# when https://github.com/golang/go/issues/31544 is fixed,
|
# when https://github.com/golang/go/issues/31544 is fixed,
|
||||||
# we should be able to set GO_LDFLAGS=-buildmode=pie for host make
|
# we should be able to set GO_LDFLAGS=-buildmode=pie for host make
|
||||||
|
@ -212,7 +236,7 @@ define Host/Compile
|
||||||
)
|
)
|
||||||
|
|
||||||
$(call GoCompiler/Host/Make, \
|
$(call GoCompiler/Host/Make, \
|
||||||
GOROOT_BOOTSTRAP=$(BOOTSTRAP_BUILD_DIR) \
|
GOROOT_BOOTSTRAP=$(if $(USE_DEFAULT_BOOTSTRAP),$(BOOTSTRAP_BUILD_DIR),$(EXTERNAL_BOOTSTRAP_DIR)) \
|
||||||
GOCACHE=$(HOST_GO_CACHE_DIR) \
|
GOCACHE=$(HOST_GO_CACHE_DIR) \
|
||||||
CC=$(HOSTCC_NOCACHE) \
|
CC=$(HOSTCC_NOCACHE) \
|
||||||
CXX=$(HOSTCXX_NOCACHE) \
|
CXX=$(HOSTCXX_NOCACHE) \
|
||||||
|
|
Loading…
Reference in New Issue