ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/lang/golang/golang-compiler.mk b/external/subpack/lang/golang/golang-compiler.mk
new file mode 100644
index 0000000..c6c8360
--- /dev/null
+++ b/external/subpack/lang/golang/golang-compiler.mk
@@ -0,0 +1,186 @@
+#
+# Copyright (C) 2018, 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
+
+
+# $(1) valid GOOS_GOARCH combinations
+# $(2) go version id
+define GoCompiler/Default/CheckHost
+ $(if $(filter $(GO_HOST_OS_ARCH),$(1)),,$(error go-$(2) cannot be installed on $(GO_HOST_OS)/$(GO_HOST_ARCH)))
+endef
+
+# $(1) source go root
+# $(2) destination prefix
+# $(3) go version id
+# $(4) additional environment variables (optional)
+define GoCompiler/Default/Make
+ ( \
+ cd "$(1)/src" ; \
+ $(if $(2),GOROOT_FINAL="$(2)/lib/go-$(3)") \
+ $(4) \
+ $(BASH) make.bash --no-banner ; \
+ )
+endef
+
+# $(1) destination prefix
+# $(2) go version id
+define GoCompiler/Default/Install/make-dirs
+ $(INSTALL_DIR) "$(1)/lib/go-$(2)"
+ $(INSTALL_DIR) "$(1)/share/go-$(2)"
+endef
+
+# $(1) source go root
+# $(2) destination prefix
+# $(3) go version id
+# $(4) file/directory name
+define GoCompiler/Default/Install/install-share-data
+ $(CP) "$(1)/$(4)" "$(2)/share/go-$(3)/"
+ $(LN) "../../share/go-$(3)/$(4)" "$(2)/lib/go-$(3)/"
+endef
+
+# $(1) source go root
+# $(2) destination prefix
+# $(3) go version id
+# $(4) GOOS_GOARCH
+# $(5) install suffix (optional)
+define GoCompiler/Default/Install/Bin
+ $(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
+
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),api)
+
+ $(INSTALL_DATA) -p "$(1)/VERSION" "$(2)/lib/go-$(3)/"
+
+ for file in AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE PATENTS README.md SECURITY.md; do \
+ if [ -f "$(1)/$$$$file" ]; then \
+ $(INSTALL_DATA) -p "$(1)/$$$$file" "$(2)/share/go-$(3)/" ; \
+ fi ; \
+ done
+
+ $(INSTALL_DIR) "$(2)/lib/go-$(3)/bin"
+
+ ifeq ($(4),$(GO_HOST_OS_ARCH))
+ $(INSTALL_BIN) -p "$(1)/bin"/* "$(2)/lib/go-$(3)/bin/"
+ else
+ $(INSTALL_BIN) -p "$(1)/bin/$(4)"/* "$(2)/lib/go-$(3)/bin/"
+ endif
+
+ $(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg"
+ $(CP) "$(1)/pkg/$(4)$(if $(5),_$(5))" "$(2)/lib/go-$(3)/pkg/"
+
+ $(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg/tool/$(4)"
+ $(INSTALL_BIN) -p "$(1)/pkg/tool/$(4)"/* "$(2)/lib/go-$(3)/pkg/tool/$(4)/"
+endef
+
+# $(1) destination prefix
+# $(2) go version id
+define GoCompiler/Default/Install/BinLinks
+ $(INSTALL_DIR) "$(1)/bin"
+ $(LN) "../lib/go-$(2)/bin/go" "$(1)/bin/go"
+ $(LN) "../lib/go-$(2)/bin/gofmt" "$(1)/bin/gofmt"
+endef
+
+# $(1) source go root
+# $(2) destination prefix
+# $(3) go version id
+define GoCompiler/Default/Install/Doc
+ $(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
+
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),doc)
+endef
+
+# $(1) source go root
+# $(2) destination prefix
+# $(3) go version id
+define GoCompiler/Default/Install/Src
+ $(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
+
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),lib)
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),misc)
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),src)
+ $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),test)
+
+ $(FIND) \
+ "$(2)/share/go-$(3)/src/" \
+ \! -type d -a \( -name "*.bat" -o -name "*.rc" \) \
+ -delete
+
+ if [ -d "$(1)/pkg/include" ]; then \
+ $(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg" ; \
+ $(INSTALL_DIR) "$(2)/share/go-$(3)/pkg" ; \
+ $(CP) "$(1)/pkg/include" "$(2)/share/go-$(3)/pkg/" ; \
+ $(LN) "../../../share/go-$(3)/pkg/include" "$(2)/lib/go-$(3)/pkg/" ; \
+ fi
+endef
+
+# $(1) destination prefix
+# $(2) go version id
+define GoCompiler/Default/Uninstall
+ rm -rf "$(1)/lib/go-$(2)"
+ rm -rf "$(1)/share/go-$(2)"
+endef
+
+# $(1) destination prefix
+define GoCompiler/Default/Uninstall/BinLinks
+ rm -f "$(1)/bin/go"
+ rm -f "$(1)/bin/gofmt"
+endef
+
+
+# $(1) profile name
+# $(2) source go root
+# $(3) destination prefix
+# $(4) go version id
+# $(5) GOOS_GOARCH
+# $(6) install suffix (optional)
+define GoCompiler/AddProfile
+
+ # $$(1) valid GOOS_GOARCH combinations
+ define GoCompiler/$(1)/CheckHost
+ $$(call GoCompiler/Default/CheckHost,$$(1),$(4))
+ endef
+
+ # $$(1) additional environment variables (optional)
+ define GoCompiler/$(1)/Make
+ $$(call GoCompiler/Default/Make,$(2),$(3),$(4),$$(1))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Install/Bin
+ $$(call GoCompiler/Default/Install/Bin,$(2),$$(or $$(1),$(3)),$(4),$(5),$(6))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Install/BinLinks
+ $$(call GoCompiler/Default/Install/BinLinks,$$(or $$(1),$(3)),$(4))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Install/Doc
+ $$(call GoCompiler/Default/Install/Doc,$(2),$$(or $$(1),$(3)),$(4))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Install/Src
+ $$(call GoCompiler/Default/Install/Src,$(2),$$(or $$(1),$(3)),$(4))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Uninstall
+ $$(call GoCompiler/Default/Uninstall,$$(or $$(1),$(3)),$(4))
+ endef
+
+ # $$(1) override install prefix (optional)
+ define GoCompiler/$(1)/Uninstall/BinLinks
+ $$(call GoCompiler/Default/Uninstall/BinLinks,$$(or $$(1),$(3)))
+ endef
+
+endef