|
|
- #
- # Copyright (C) 2020 Jeffery To
- #
- # This is free software, licensed under the GNU General Public License v2.
- # See /LICENSE for more information.
- #
-
- ifeq ($(origin GO_INCLUDE_DIR),undefined)
- GO_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
- endif
-
- include $(GO_INCLUDE_DIR)/golang-values.mk
-
-
- # these variables have the same meanings as in golang-package.mk
- GO_HOST_INSTALL_EXTRA?=$(GO_PKG_INSTALL_EXTRA)
- GO_HOST_INSTALL_ALL?=$(GO_PKG_INSTALL_ALL)
- GO_HOST_SOURCE_ONLY?=$(GO_PKG_SOURCE_ONLY)
- GO_HOST_BUILD_PKG?=$(GO_PKG_BUILD_PKG)
- GO_HOST_EXCLUDES?=$(GO_PKG_EXCLUDES)
- GO_HOST_GO_GENERATE?=$(GO_PKG_GO_GENERATE)
- GO_HOST_GCFLAGS?=$(GO_PKG_GCFLAGS)
- GO_HOST_LDFLAGS?=$(GO_PKG_LDFLAGS)
- GO_HOST_LDFLAGS_X?=$(GO_PKG_LDFLAGS_X)
- GO_HOST_TAGS?=$(GO_PKG_TAGS)
- GO_HOST_INSTALL_BIN_PATH?=/bin
-
-
- # need to repeat this here in case golang-package.mk is not included
- GO_PKG_BUILD_PKG?=$(strip $(GO_PKG))/...
-
- GO_HOST_WORK_DIR_NAME:=.go_work
- GO_HOST_BUILD_DIR=$(HOST_BUILD_DIR)/$(GO_HOST_WORK_DIR_NAME)/build
- GO_HOST_BUILD_BIN_DIR=$(GO_HOST_BUILD_DIR)/bin
-
- GO_HOST_BUILD_DEPENDS_PATH:=/share/gocode
- GO_HOST_BUILD_DEPENDS_SRC=$(STAGING_DIR_HOSTPKG)$(GO_HOST_BUILD_DEPENDS_PATH)/src
-
- GO_HOST_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
- GO_HOST_STAGING_DIR:=$(TMP_DIR)/host-stage-$(GO_HOST_DIR_NAME)
- GO_HOST_STAGING_FILES_LIST_DIR:=$(HOST_BUILD_PREFIX)/stamp
- GO_HOST_BIN_STAGING_FILES_LIST:=$(GO_HOST_STAGING_FILES_LIST_DIR)/$(GO_HOST_DIR_NAME)-bin.list
- GO_HOST_SRC_STAGING_FILES_LIST:=$(GO_HOST_STAGING_FILES_LIST_DIR)/$(GO_HOST_DIR_NAME)-src.list
-
- ifeq ($(GO_HOST_PIE_SUPPORTED),1)
- GO_HOST_ENABLE_PIE:=1
- endif
-
- GO_HOST_BUILD_CONFIG_VARS= \
- GO_PKG="$(strip $(GO_PKG))" \
- GO_INSTALL_EXTRA="$(strip $(GO_HOST_INSTALL_EXTRA))" \
- GO_INSTALL_ALL="$(strip $(GO_HOST_INSTALL_ALL))" \
- GO_SOURCE_ONLY="$(strip $(GO_HOST_SOURCE_ONLY))" \
- GO_BUILD_PKG="$(strip $(GO_HOST_BUILD_PKG))" \
- GO_EXCLUDES="$(strip $(GO_HOST_EXCLUDES))" \
- GO_GO_GENERATE="$(strip $(GO_HOST_GO_GENERATE))" \
- GO_INSTALL_BIN_PATH="$(strip $(GO_HOST_INSTALL_BIN_PATH))" \
- BUILD_DIR="$(HOST_BUILD_DIR)" \
- GO_BUILD_DIR="$(GO_HOST_BUILD_DIR)" \
- GO_BUILD_BIN_DIR="$(GO_HOST_BUILD_BIN_DIR)" \
- GO_BUILD_DEPENDS_PATH="$(GO_HOST_BUILD_DEPENDS_PATH)" \
- GO_BUILD_DEPENDS_SRC="$(GO_HOST_BUILD_DEPENDS_SRC)"
-
- GO_HOST_MORE_CFLAGS?= \
- -Wformat -Werror=format-security \
- -fstack-protector-strong \
- -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 \
- -Wl,-z,now -Wl,-z,relro \
- $(if $(GO_HOST_ENABLE_PIE),$(FPIC))
-
- GO_HOST_MORE_LDFLAGS?= \
- -znow -zrelro \
- $(if $(GO_HOST_ENABLE_PIE),$(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs)
-
- GO_HOST_TARGET_VARS= \
- CGO_ENABLED=1 \
- CC=gcc \
- CXX=g++ \
- PKG_CONFIG=pkg-config \
- CGO_CFLAGS="$(HOST_CFLAGS) $(GO_HOST_MORE_CFLAGS)" \
- CGO_CPPFLAGS="$(HOST_CPPFLAGS) $(GO_HOST_MORE_CPPFLAGS)" \
- CGO_CXXFLAGS="$(HOST_CFLAGS) $(GO_HOST_MORE_CFLAGS)" \
- CGO_LDFLAGS="$(HOST_LDFLAGS) $(GO_HOST_MORE_LDFLAGS)" \
- GO_GCC_HELPER_CC="$(HOSTCC)" \
- GO_GCC_HELPER_CXX="$(HOSTCXX)" \
- GO_GCC_HELPER_PATH="$$$$PATH" \
- PATH="$(STAGING_DIR_HOSTPKG)/lib/go-cross/openwrt:$$$$PATH"
-
- GO_HOST_BUILD_VARS= \
- GOPATH="$(GO_HOST_BUILD_DIR)" \
- GOCACHE="$(GO_BUILD_CACHE_DIR)" \
- GOMODCACHE="$(GO_MOD_CACHE_DIR)" \
- GOENV=off
-
- GO_HOST_VARS= \
- $(GO_HOST_TARGET_VARS) \
- $(GO_HOST_BUILD_VARS)
-
- GO_HOST_DEFAULT_LDFLAGS= \
- -linkmode external \
- -extldflags '$(patsubst -z%,-Wl$(comma)-z$(comma)%,$(HOST_LDFLAGS) $(GO_HOST_MORE_LDFLAGS))'
-
- GO_HOST_CUSTOM_LDFLAGS= \
- $(GO_HOST_LDFLAGS) \
- $(patsubst %,-X %,$(GO_HOST_LDFLAGS_X))
-
- GO_HOST_INSTALL_ARGS= \
- -v \
- -ldflags "all=$(GO_HOST_DEFAULT_LDFLAGS)" \
- $(if $(GO_HOST_ENABLE_PIE),-buildmode pie) \
- $(if $(strip $(GO_HOST_GCFLAGS)),-gcflags "$(GO_HOST_GCFLAGS)") \
- $(if $(strip $(GO_HOST_CUSTOM_LDFLAGS)),-ldflags "$(GO_HOST_CUSTOM_LDFLAGS) $(GO_HOST_DEFAULT_LDFLAGS)") \
- $(if $(strip $(GO_HOST_TAGS)),-tags "$(GO_HOST_TAGS)")
-
- define GoHost/Host/Configure
- $(GO_GENERAL_BUILD_CONFIG_VARS) \
- $(GO_HOST_BUILD_CONFIG_VARS) \
- $(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh configure
- endef
-
- # $(1) additional arguments for go command line (optional)
- define GoHost/Host/Compile
- $(GO_GENERAL_BUILD_CONFIG_VARS) \
- $(GO_HOST_BUILD_CONFIG_VARS) \
- $(GO_HOST_VARS) \
- $(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh build $(GO_HOST_INSTALL_ARGS) $(1)
- endef
-
- define GoHost/Host/Install/Bin
- rm -rf "$(GO_HOST_STAGING_DIR)"
- mkdir -p "$(GO_HOST_STAGING_DIR)" "$(GO_HOST_STAGING_FILES_LIST_DIR)"
-
- $(GO_GENERAL_BUILD_CONFIG_VARS) \
- $(GO_HOST_BUILD_CONFIG_VARS) \
- $(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_bin "$(GO_HOST_STAGING_DIR)"
-
- if [ -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ]; then \
- "$(SCRIPT_DIR)/clean-package.sh" \
- "$(GO_HOST_BIN_STAGING_FILES_LIST)" \
- "$(1)" ; \
- fi
-
- cd "$(GO_HOST_STAGING_DIR)" && find ./ > "$(GO_HOST_STAGING_DIR).files"
-
- $(call locked, \
- mv "$(GO_HOST_STAGING_DIR).files" "$(GO_HOST_BIN_STAGING_FILES_LIST)" && \
- $(CP) "$(GO_HOST_STAGING_DIR)"/* "$(1)/", \
- host-staging-dir \
- )
-
- rm -rf "$(GO_HOST_STAGING_DIR)"
- endef
-
- define GoHost/Host/Install/Src
- rm -rf "$(GO_HOST_STAGING_DIR)"
- mkdir -p "$(GO_HOST_STAGING_DIR)" "$(GO_HOST_STAGING_FILES_LIST_DIR)"
-
- $(GO_GENERAL_BUILD_CONFIG_VARS) \
- $(GO_HOST_BUILD_CONFIG_VARS) \
- $(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh install_src "$(GO_HOST_STAGING_DIR)"
-
- if [ -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ]; then \
- "$(SCRIPT_DIR)/clean-package.sh" \
- "$(GO_HOST_SRC_STAGING_FILES_LIST)" \
- "$(1)" ; \
- fi
-
- cd "$(GO_HOST_STAGING_DIR)" && find ./ > "$(GO_HOST_STAGING_DIR).files"
-
- $(call locked, \
- mv "$(GO_HOST_STAGING_DIR).files" "$(GO_HOST_SRC_STAGING_FILES_LIST)" && \
- $(CP) "$(GO_HOST_STAGING_DIR)"/* "$(1)/", \
- host-staging-dir \
- )
-
- rm -rf "$(GO_HOST_STAGING_DIR)"
- endef
-
- define GoHost/Host/Install
- $(if $(filter $(GO_HOST_SOURCE_ONLY),1),, \
- $(call GoHost/Host/Install/Bin,$(1)) \
- )
- $(call GoHost/Host/Install/Src,$(1))
- endef
-
- define GoHost/Host/Uninstall
- if [ -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ]; then \
- "$(SCRIPT_DIR)/clean-package.sh" \
- "$(GO_HOST_BIN_STAGING_FILES_LIST)" \
- "$(HOST_BUILD_PREFIX)" ; \
- rm -f "$(GO_HOST_BIN_STAGING_FILES_LIST)" ; \
- fi
-
- if [ -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ]; then \
- "$(SCRIPT_DIR)/clean-package.sh" \
- "$(GO_HOST_SRC_STAGING_FILES_LIST)" \
- "$(HOST_BUILD_PREFIX)" ; \
- rm -f "$(GO_HOST_SRC_STAGING_FILES_LIST)" ; \
- fi
- endef
-
-
- ifneq ($(strip $(GO_PKG)),)
- Host/Configure=$(call GoHost/Host/Configure)
- Host/Compile=$(call GoHost/Host/Compile)
- Hooks/HostCompile/Post+=Go/CacheCleanup
- Host/Uninstall=$(call GoHost/Host/Uninstall,$(1))
- endif
-
- define GoHostBuild
- Host/Install=$$(call GoHost/Host/Install,$$(1))
- endef
-
- define GoBinHostBuild
- Host/Install=$$(call GoHost/Host/Install/Bin,$$(1))
- endef
-
- define GoSrcHostBuild
- Host/Install=$$(call GoHost/Host/Install/Src,$$(1))
- endef
|