diff --git a/package/go/go-bin.hash b/package/go/go-bin.hash deleted file mode 100644 index cc87cac3a6..0000000000 --- a/package/go/go-bin.hash +++ /dev/null @@ -1,9 +0,0 @@ -# sha256 checksum from https://go.dev/dl/ -sha256 36930162a93df417d90bd22c6e14daff4705baac2b02418edda671cdfa9cd07f go1.23.2.src.tar.gz -sha256 cb1ed4410f68d8be1156cee0a74fcfbdcd9bca377c83db3a9e1b07eebc6d71ef go1.23.2.linux-386.tar.gz -sha256 542d3c1705f1c6a1c5a80d5dc62e2e45171af291e755d591c5e6531ef63b454e go1.23.2.linux-amd64.tar.gz -sha256 f626cdd92fc21a88b31c1251f419c17782933a42903db87a174ce74eeecc66a9 go1.23.2.linux-arm64.tar.gz -sha256 e3286bdde186077e65e961cbe18874d42a461e5b9c472c26572b8d4a98d15c40 go1.23.2.linux-armv6l.tar.gz -sha256 c164ce7d894b10fd861d7d7b96f1dbea3f993663d9f0c30bc4f8ae3915db8b0c go1.23.2.linux-ppc64le.tar.gz -sha256 de1f94d7dd3548ba3036de1ea97eb8243881c22a88fcc04cc08c704ded769e02 go1.23.2.linux-s390x.tar.gz -sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE diff --git a/package/go/go-bin.mk b/package/go/go-bin.mk deleted file mode 100644 index a0f1e26e8f..0000000000 --- a/package/go/go-bin.mk +++ /dev/null @@ -1,20 +0,0 @@ -################################################################################ -# -# go-bin -# -################################################################################ - -GO_BIN_SITE = https://go.dev/dl -GO_BIN_SOURCE = go$(GO_VERSION).linux-$(call qstrip, $(BR2_PACKAGE_HOST_GO_BIN_HOST_ARCH)).tar.gz -GO_BIN_DL_SUBDIR = go -HOST_GO_BIN_ACTUAL_SOURCE_TARBALL = go$(GO_VERSION).src.tar.gz -GO_BIN_LICENSE = BSD-3-Clause -GO_BIN_LICENSE_FILES = LICENSE - -HOST_GO_BIN_PROVIDES = host-go - -define HOST_GO_BIN_INSTALL_CMDS - $(GO_BINARIES_INSTALL) -endef - -$(eval $(host-generic-package)) diff --git a/package/go/go.mk b/package/go/go.mk new file mode 100644 index 0000000000..33dc681358 --- /dev/null +++ b/package/go/go.mk @@ -0,0 +1,141 @@ +################################################################################ +# +# go +# +################################################################################ + +GO_VERSION = 1.23.2 + +HOST_GO_GOPATH = $(HOST_DIR)/share/go-path +HOST_GO_HOST_CACHE = $(HOST_DIR)/share/host-go-cache +HOST_GO_ROOT = $(HOST_DIR)/lib/go +HOST_GO_TARGET_CACHE = $(HOST_DIR)/share/go-cache + +# We pass an empty GOBIN, otherwise "go install: cannot install +# cross-compiled binaries when GOBIN is set" +HOST_GO_COMMON_ENV = \ + GO111MODULE=on \ + GOFLAGS=-mod=vendor \ + GOROOT="$(HOST_GO_ROOT)" \ + GOPATH="$(HOST_GO_GOPATH)" \ + GOCACHE="$(HOST_GO_TARGET_CACHE)" \ + GOMODCACHE="$(HOST_GO_GOPATH)/pkg/mod" \ + GOPROXY=off \ + GOTOOLCHAIN=local \ + PATH=$(BR_PATH) \ + GOBIN= \ + CGO_ENABLED=$(HOST_GO_CGO_ENABLED) + +ifeq ($(BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS),y) + +ifeq ($(BR2_arm),y) +GO_GOARCH = arm +ifeq ($(BR2_ARM_CPU_ARMV5),y) +GO_GOARM = 5 +else ifeq ($(BR2_ARM_CPU_ARMV6),y) +GO_GOARM = 6 +else ifeq ($(BR2_ARM_CPU_ARMV7A),y) +GO_GOARM = 7 +else ifeq ($(BR2_ARM_CPU_ARMV8A),y) +# Go doesn't support 32-bit GOARM=8 (https://github.com/golang/go/issues/29373) +# but can still benefit from armv7 optimisations +GO_GOARM = 7 +endif +else ifeq ($(BR2_aarch64),y) +GO_GOARCH = arm64 +else ifeq ($(BR2_i386),y) +GO_GOARCH = 386 +# i386: use softfloat if no SSE2: https://golang.org/doc/go1.16#386 +ifneq ($(BR2_X86_CPU_HAS_SSE2),y) +GO_GO386 = softfloat +endif +else ifeq ($(BR2_x86_64),y) +GO_GOARCH = amd64 +else ifeq ($(BR2_powerpc64),y) +GO_GOARCH = ppc64 +else ifeq ($(BR2_powerpc64le),y) +GO_GOARCH = ppc64le +else ifeq ($(BR2_mips64),y) +GO_GOARCH = mips64 +else ifeq ($(BR2_mips64el),y) +GO_GOARCH = mips64le +else ifeq ($(BR2_riscv),y) +GO_GOARCH = riscv64 +else ifeq ($(BR2_s390x),y) +GO_GOARCH = s390x +endif + +# For the convenience of target packages. +HOST_GO_TOOLDIR = $(HOST_GO_ROOT)/pkg/tool/linux_$(GO_GOARCH) +HOST_GO_TARGET_ENV = \ + $(HOST_GO_COMMON_ENV) \ + GOOS="linux" \ + GOARCH=$(GO_GOARCH) \ + $(if $(GO_GO386),GO386=$(GO_GO386)) \ + $(if $(GO_GOARM),GOARM=$(GO_GOARM)) \ + CC="$(TARGET_CC)" \ + CXX="$(TARGET_CXX)" \ + CGO_CFLAGS="$(TARGET_CFLAGS)" \ + CGO_CXXFLAGS="$(TARGET_CXXFLAGS)" \ + CGO_LDFLAGS="$(TARGET_LDFLAGS)" \ + GOTOOLDIR="$(HOST_GO_TOOLDIR)" + +# Allow packages to use cgo support if it is available for the target. They +# will need the toolchain for cgo support; for convenence, include that +# dependency here. +# +# Note that any target package needing cgo support must include 'depends on +# BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS' in its config file. +ifeq ($(BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS),y) +HOST_GO_DEPENDENCIES_CGO += toolchain +HOST_GO_CGO_ENABLED = 1 +else +HOST_GO_CGO_ENABLED = 0 +endif +else # !BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS +ifeq ($(BR2_PACKAGE_HOST_GO_HOST_CGO_LINKING_SUPPORTS),y) +HOST_GO_CGO_ENABLED = 1 +else # !BR2_PACKAGE_HOST_GO_HOST_CGO_LINKING_SUPPORTS +HOST_GO_CGO_ENABLED = 0 +endif # BR2_PACKAGE_HOST_GO_HOST_CGO_LINKING_SUPPORTS +endif # BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS +# Ensure the toolchain is available, whatever the provider +HOST_GO_DEPENDENCIES += $(HOST_GO_DEPENDENCIES_CGO) + +# For the convenience of host golang packages +HOST_GO_HOST_ENV = \ + $(HOST_GO_COMMON_ENV) \ + GOOS="" \ + GOARCH="" \ + GOCACHE="$(HOST_GO_HOST_CACHE)" \ + CC="$(HOSTCC_NOCCACHE)" \ + CXX="$(HOSTCXX_NOCCACHE)" \ + CGO_CFLAGS="$(HOST_CFLAGS)" \ + CGO_CXXFLAGS="$(HOST_CXXFLAGS)" \ + CGO_LDFLAGS="$(HOST_LDFLAGS)" + +define GO_BINARIES_INSTALL + $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_ROOT)/bin/go + $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_ROOT)/bin/gofmt + + mkdir -p $(HOST_DIR)/bin + ln -sf ../lib/go/bin/go $(HOST_DIR)/bin/ + ln -sf ../lib/go/bin/gofmt $(HOST_DIR)/bin/ + + cp -a $(@D)/lib $(HOST_GO_ROOT)/ + + mkdir -p $(HOST_GO_ROOT)/pkg + cp -a $(@D)/pkg/include $(HOST_GO_ROOT)/pkg/ + cp -a $(@D)/pkg/tool $(HOST_GO_ROOT)/pkg/ + + # The Go sources must be installed to the host/ tree for the Go stdlib. + cp -a $(@D)/src $(HOST_GO_ROOT)/ + + # Set file timestamps to prevent the Go compiler from rebuilding the stdlib + # when compiling other programs. + find $(HOST_GO_ROOT) -type f -exec touch -r $(@D)/bin/go {} \; +endef + +$(eval $(host-virtual-package)) + +include $(sort $(wildcard package/go/*/*.mk))