@@ -15,6 +15,8 @@ HOST_GO_DEPENDENCIES = host-go-bootstrap
HOST_GO_HOST_CACHE = $(HOST_DIR)/usr/share/host-go-cache
HOST_GO_ROOT = $(HOST_DIR)/lib/go
HOST_GO_TARGET_CACHE = $(HOST_DIR)/usr/share/go-cache
+# used for go module downloads
+HOST_GO_GOPATH = $(DL_DIR)/go-module
ifeq ($(BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS),y)
@@ -43,13 +45,15 @@ else ifeq ($(BR2_mips64el),y)
GO_GOARCH = mips64le
endif
-# For the convienience of target packages.
+# For the convenience of target packages.
HOST_GO_TOOLDIR = $(HOST_GO_ROOT)/pkg/tool/linux_$(GO_GOARCH)
HOST_GO_TARGET_ENV = \
- GO111MODULE=off \
+ GO111MODULE=on \
GOARCH=$(GO_GOARCH) \
GOCACHE="$(HOST_GO_TARGET_CACHE)" \
+ GOPROXY=off \
GOROOT="$(HOST_GO_ROOT)" \
+ GOPATH="$(HOST_GO_GOPATH)" \
CC="$(TARGET_CC)" \
CXX="$(TARGET_CXX)" \
GOTOOLDIR="$(HOST_GO_TOOLDIR)"
@@ -35,8 +35,16 @@ GO_TARGET_ENV = \
$(GO_COMMON_ENV)
GO_HOST_ENV = \
+ CC=$(HOSTCC_NOCCACHE) \
+ CXX=$(HOSTCXX_NOCCACHE) \
CGO_CFLAGS="$(HOST_CFLAGS)" \
CGO_LDFLAGS="$(HOST_LDFLAGS)" \
+ GO111MODULE=on \
+ GOCACHE="$(HOST_GO_TARGET_CACHE)" \
+ GOPROXY=off \
+ GOROOT="$(HOST_GO_ROOT)" \
+ GOPATH="$(HOST_GO_GOPATH)" \
+ GOTOOLDIR="$(HOST_GO_TOOLDIR)" \
$(GO_COMMON_ENV)
################################################################################
@@ -60,6 +68,7 @@ $(2)_WORKSPACE ?= _gopath
$(2)_BUILD_OPTS += \
-ldflags "$$($(2)_LDFLAGS)" \
+ -mod=vendor \
-tags "$$($(2)_TAGS)" \
-trimpath \
-p $(PARALLEL_JOBS)
@@ -79,23 +88,23 @@ endif
$(2)_INSTALL_BINS ?= $(1)
-# Source files in Go should be extracted in a precise folder in the hierarchy
-# of GOPATH. It usually resolves around domain/vendor/software. By default, we
-# derive domain/vendor/software from the upstream URL of the project, but we
-# allow $(2)_SRC_SUBDIR to be overridden if needed.
+# Source files in Go usually use an import path resolved around
+# domain/vendor/software. We infer domain/vendor/software from the upstream URL
+# of the project. $(2)_GOMOD can be overridden.
$(2)_SRC_DOMAIN = $$(call domain,$$($(2)_SITE))
$(2)_SRC_VENDOR = $$(word 1,$$(subst /, ,$$(call notdomain,$$($(2)_SITE))))
$(2)_SRC_SOFTWARE = $$(word 2,$$(subst /, ,$$(call notdomain,$$($(2)_SITE))))
+$(2)_SRC_PATH = $$(@D)
-$(2)_SRC_SUBDIR ?= $$($(2)_SRC_DOMAIN)/$$($(2)_SRC_VENDOR)/$$($(2)_SRC_SOFTWARE)
-$(2)_SRC_PATH = $$(@D)/$$($(2)_WORKSPACE)/src/$$($(2)_SRC_SUBDIR)
+$(2)_GOMOD ?= $$($(2)_SRC_DOMAIN)/$$($(2)_SRC_VENDOR)/$$($(2)_SRC_SOFTWARE)
# Configure step. Only define it if not already defined by the package .mk
# file.
ifndef $(2)_CONFIGURE_CMDS
define $(2)_CONFIGURE_CMDS
- mkdir -p $$(dir $$($(2)_SRC_PATH))
- ln -sf $$(@D) $$($(2)_SRC_PATH)
+ if [ ! -f $$($(2)_SRC_PATH)/go.mod ] && [ -n "$$($(2)_GOMOD)" ]; then \
+ printf "module $$($(2)_GOMOD)\n" > $$($(2)_SRC_PATH)/go.mod; \
+ fi
endef
endif
@@ -113,11 +122,10 @@ define $(2)_BUILD_CMDS
$$(foreach d,$$($(2)_BUILD_TARGETS),\
cd $$($(2)_SRC_PATH); \
$$(GO_TARGET_ENV) \
- GOPATH="$$(@D)/$$($(2)_WORKSPACE)" \
$$($(2)_GO_ENV) \
$$(GO_BIN) build -v $$($(2)_BUILD_OPTS) \
-o $$(@D)/bin/$$(or $$($(2)_BIN_NAME),$$(notdir $$(d))) \
- ./$$(d)
+ $$(d)
)
endef
else
@@ -126,11 +134,10 @@ define $(2)_BUILD_CMDS
$$(foreach d,$$($(2)_BUILD_TARGETS),\
cd $$($(2)_SRC_PATH); \
$$(GO_HOST_ENV) \
- GOPATH="$$(@D)/$$($(2)_WORKSPACE)" \
$$($(2)_GO_ENV) \
$$(GO_BIN) build -v $$($(2)_BUILD_OPTS) \
-o $$(@D)/bin/$$(or $$($(2)_BIN_NAME),$$(notdir $$(d))) \
- ./$$(d)
+ $$(d)
)
endef
endif