From 4b31a55a95ad18bda6e066fa3bfc90f401bbf271 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Wed, 30 Jan 2019 18:38:40 +0100 Subject: [PATCH] Add shadowsocks v2ray plugin from source --- golang-protobuf/Makefile | 43 +++ golang/golang-compiler.mk | 186 ++++++++++ golang/golang-golang-x-crypto/Makefile | 47 +++ golang/golang-golang-x-net/Makefile | 58 ++++ golang/golang-golang-x-sys/Makefile | 46 +++ golang/golang-golang-x-text/Makefile | 47 +++ golang/golang-package.mk | 320 ++++++++++++++++++ golang/golang-values.mk | 72 ++++ golang/golang-version.mk | 14 + golang/golang/Makefile | 274 +++++++++++++++ golang/golang/files/go-gcc-helper | 23 ++ .../luasrc/view/openmptcprouter/settings.htm | 18 + shadowsocks-v2ray-plugin-bin/Makefile | 66 ---- shadowsocks-v2ray-plugin/Makefile | 54 +++ v2ray-core/Makefile | 43 +++ v2ray-ext/Makefile | 43 +++ 16 files changed, 1288 insertions(+), 66 deletions(-) create mode 100644 golang-protobuf/Makefile create mode 100644 golang/golang-compiler.mk create mode 100644 golang/golang-golang-x-crypto/Makefile create mode 100644 golang/golang-golang-x-net/Makefile create mode 100644 golang/golang-golang-x-sys/Makefile create mode 100644 golang/golang-golang-x-text/Makefile create mode 100644 golang/golang-package.mk create mode 100644 golang/golang-values.mk create mode 100644 golang/golang-version.mk create mode 100644 golang/golang/Makefile create mode 100644 golang/golang/files/go-gcc-helper delete mode 100644 shadowsocks-v2ray-plugin-bin/Makefile create mode 100644 shadowsocks-v2ray-plugin/Makefile create mode 100644 v2ray-core/Makefile create mode 100644 v2ray-ext/Makefile diff --git a/golang-protobuf/Makefile b/golang-protobuf/Makefile new file mode 100644 index 0000000000..04cc930f4d --- /dev/null +++ b/golang-protobuf/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=golang-protobuf +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/golang/protobuf.git +PKG_SOURCE_VERSION:=347cf4a86c1cb8d262994d8ef5924d4576c5b331 +PKG_SOURCE_DATE:=20190109 + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=github.com/golang/protobuf +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang/golang-package.mk + +define Package/golang-protobuf-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go support for Google protocol buffers + URL:=https://github.com/golang/protobuf + DEPENDS:=$(GO_ARCH_DEPENDS) +protobuf + PKGARCH:=all +endef + +define Package/golang-protobuf-dev/description +Go support for Google protocol buffers +endef + +$(eval $(call GoSrcPackage,golang-protobuf-dev)) +$(eval $(call BuildPackage,golang-protobuf-dev)) diff --git a/golang/golang-compiler.mk b/golang/golang-compiler.mk new file mode 100644 index 0000000000..5e7fe689d3 --- /dev/null +++ b/golang/golang-compiler.mk @@ -0,0 +1,186 @@ +# +# Copyright (C) 2018 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 +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 README.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) $(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) + $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),favicon.ico) + $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),robots.txt) +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 +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)) + 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 diff --git a/golang/golang-golang-x-crypto/Makefile b/golang/golang-golang-x-crypto/Makefile new file mode 100644 index 0000000000..e787e04c5e --- /dev/null +++ b/golang/golang-golang-x-crypto/Makefile @@ -0,0 +1,47 @@ +# +# Copyright (C) 2018 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=golang-golang-x-crypto +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/golang/crypto.git +PKG_SOURCE_VERSION:=a49355c7e3f8fe157a85be2f77e6e269a0f89602 +PKG_SOURCE_DATE:=20180620 +PKG_MIRROR_HASH:=80b16b203736ac56883d0610edbc5981eb78f15b7b35d11b5ca639f7c3814214 + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jeffery To + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=golang.org/x/crypto +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang-package.mk + +define Package/golang-golang-x-crypto-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go supplementary cryptography libraries + URL:=https://godoc.org/golang.org/x/crypto + DEPENDS:=$(GO_ARCH_DEPENDS) \ + +golang-golang-x-net-dev \ + +golang-golang-x-sys-dev + PKGARCH:=all +endef + +define Package/golang-golang-x-crypto-dev/description +Supplementary Go cryptography libraries. +endef + +$(eval $(call GoSrcPackage,golang-golang-x-crypto-dev)) +$(eval $(call BuildPackage,golang-golang-x-crypto-dev)) diff --git a/golang/golang-golang-x-net/Makefile b/golang/golang-golang-x-net/Makefile new file mode 100644 index 0000000000..979d9be7fa --- /dev/null +++ b/golang/golang-golang-x-net/Makefile @@ -0,0 +1,58 @@ +# +# Copyright (C) 2018 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=golang-golang-x-net +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/golang/net.git +PKG_SOURCE_VERSION:=afe8f62b1d6bbd81f31868121a50b06d8188e1f9 +PKG_SOURCE_DATE:=20180620 +PKG_MIRROR_HASH:=9a8bb3bf21ea60121d7e87f1bd1af9effbdcd908f758be99457653172d13eb1e + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jeffery To + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=golang.org/x/net +# exclude http2/h2i to break circular dependency with golang-golang-x-crypto-dev +# since there are no other binaries, can skip compilation +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang-package.mk + +define Package/golang-golang-x-net-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go supplementary network libraries + URL:=https://godoc.org/golang.org/x/net + DEPENDS:=$(GO_ARCH_DEPENDS) +golang-golang-x-text-dev + PKGARCH:=all +endef + +define Package/golang-golang-x-net-dev/description +Supplementary Go networking libraries. +endef + +# http2/testdata/draft-ietf-httpbis-http2.xml is a non-free document +# http2/z_spec_test.go uses http2/testdata/draft-ietf-httpbis-http2.xml +define Package/golang-golang-x-net-dev/install + $(call GoPackage/Package/Install/Src,$(1)) + + rm -f $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/testdata/draft-ietf-httpbis-http2.xml + rmdir $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/testdata/ + + rm -f $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/z_spec_test.go +endef + +$(eval $(call GoSrcPackage,golang-golang-x-net-dev)) +$(eval $(call BuildPackage,golang-golang-x-net-dev)) diff --git a/golang/golang-golang-x-sys/Makefile b/golang/golang-golang-x-sys/Makefile new file mode 100644 index 0000000000..5350f3cbe6 --- /dev/null +++ b/golang/golang-golang-x-sys/Makefile @@ -0,0 +1,46 @@ +# +# Copyright (C) 2018 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=golang-golang-x-sys +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/golang/sys.git +PKG_SOURCE_VERSION:=63fc586f45fe72d95d5240a5d5eb95e6503907d3 +PKG_SOURCE_DATE:=20180621 +PKG_MIRROR_HASH:=3afe7936fb9fb291ef9b9cfa88f51576cdc19abbd34240232ce284958ac7dbaf + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jeffery To + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=golang.org/x/sys +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang-package.mk + +define Package/golang-golang-x-sys-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go packages for interaction with the OS + URL:=https://godoc.org/golang.org/x/sys + DEPENDS:=$(GO_ARCH_DEPENDS) + PKGARCH:=all +endef + +define Package/golang-golang-x-sys-dev/description +Supplementary Go packages for low-level interactions with the operating +system. +endef + +$(eval $(call GoSrcPackage,golang-golang-x-sys-dev)) +$(eval $(call BuildPackage,golang-golang-x-sys-dev)) diff --git a/golang/golang-golang-x-text/Makefile b/golang/golang-golang-x-text/Makefile new file mode 100644 index 0000000000..e3b1120b98 --- /dev/null +++ b/golang/golang-golang-x-text/Makefile @@ -0,0 +1,47 @@ +# +# Copyright (C) 2018 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=golang-golang-x-text +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/golang/text.git +PKG_SOURCE_VERSION:=5cec4b58c438bd98288aeb248bab2c1840713d21 +PKG_SOURCE_DATE:=20180520 +PKG_MIRROR_HASH:=6c541a59f32f57afa54a2216045ddf16a077f8fe2e823fbbe77723eca04ddddb + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jeffery To + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=golang.org/x/text +# exclude gotext (and message/pipeline) to avoid dependency on golang.org/x/tools +# since there are no other binaries, can skip compilation +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang-package.mk + +define Package/golang-golang-x-text-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go text processing support + URL:=https://godoc.org/golang.org/x/text + DEPENDS:=$(GO_ARCH_DEPENDS) + PKGARCH:=all +endef + +define Package/golang-golang-x-text-dev/description +Supplementary Go libraries for text processing, many involving Unicode. +endef + +$(eval $(call GoSrcPackage,golang-golang-x-text-dev)) +$(eval $(call BuildPackage,golang-golang-x-text-dev)) diff --git a/golang/golang-package.mk b/golang/golang-package.mk new file mode 100644 index 0000000000..1df4c3fec5 --- /dev/null +++ b/golang/golang-package.mk @@ -0,0 +1,320 @@ +# +# Copyright (C) 2018 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 + + +# Variables (all optional, except GO_PKG) to be set in package +# Makefiles: +# +# GO_PKG (required) - name of Go package +# +# Go name of the package. +# +# e.g. GO_PKG:=golang.org/x/text +# +# +# GO_PKG_INSTALL_EXTRA - list of regular expressions, default empty +# +# Additional files/directories to install. By default, only these +# files are installed: +# +# * Files with one of these extensions: +# .go, .c, .cc, .h, .hh, .proto, .s +# +# * Files in any 'testdata' directory +# +# e.g. GO_PKG_INSTALL_EXTRA:=example.toml marshal_test.toml +# +# +# GO_PKG_INSTALL_ALL - boolean (0 or 1), default false +# +# If true, install all files regardless of extension or directory. +# +# e.g. GO_PKG_INSTALL_ALL:=1 +# +# +# GO_PKG_SOURCE_ONLY - boolean (0 or 1), default false +# +# If true, 'go install' will not be called. If the package does not +# (or should not) build any binaries, then specifying this option will +# save build time. +# +# e.g. GO_PKG_SOURCE_ONLY:=1 +# +# +# GO_PKG_BUILD_PKG - list of build targets, default GO_PKG/... +# +# Build targets for compiling this Go package, i.e. arguments passed +# to 'go install' +# +# e.g. GO_PKG_BUILD_PKG:=github.com/debian/ratt/cmd/... +# +# +# GO_PKG_EXCLUDES - list of regular expressions, default empty +# +# Patterns to exclude from the build targets expanded from +# GO_PKG_BUILD_PKG. +# +# e.g. GO_PKG_EXCLUDES:=examples/ +# +# +# GO_PKG_GO_GENERATE - boolean (0 or 1), default false +# +# If true, 'go generate' will be called on all build targets (as +# determined by GO_PKG_BUILD_PKG and GO_PKG_EXCLUDES). This is usually +# not necessary. +# +# e.g. GO_PKG_GO_GENERATE:=1 + +# Credit for this package build process (GoPackage/Build/Configure and +# GoPackage/Build/Compile) belong to Debian's dh-golang completely. +# https://anonscm.debian.org/cgit/pkg-go/packages/dh-golang.git + + +# for building packages, not user code +GO_PKG_PATH:=/usr/share/gocode + +GO_PKG_BUILD_PKG?=$(GO_PKG)/... + +GO_PKG_WORK_DIR_NAME:=.go_work +GO_PKG_WORK_DIR:=$(PKG_BUILD_DIR)/$(GO_PKG_WORK_DIR_NAME) + +GO_PKG_BUILD_DIR:=$(GO_PKG_WORK_DIR)/build +GO_PKG_CACHE_DIR:=$(GO_PKG_WORK_DIR)/cache +GO_PKG_TMP_DIR:=$(GO_PKG_WORK_DIR)/tmp + +GO_PKG_BUILD_BIN_DIR:=$(GO_PKG_BUILD_DIR)/bin$(if \ + $(GO_HOST_TARGET_DIFFERENT),/$(GO_OS)_$(GO_ARCH)) + +GO_PKG_BUILD_DEPENDS_SRC:=$(STAGING_DIR)$(GO_PKG_PATH)/src + +# sstrip causes corrupted section header size +ifneq ($(CONFIG_USE_SSTRIP),) + ifneq ($(CONFIG_DEBUG),) + GO_PKG_STRIP_ARGS:=--strip-unneeded --remove-section=.comment --remove-section=.note + else + GO_PKG_STRIP_ARGS:=--strip-all + endif + STRIP:=$(TARGET_CROSS)strip $(GO_PKG_STRIP_ARGS) + RSTRIP= \ + export CROSS="$(TARGET_CROSS)" \ + $(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \ + $(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \ + $(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \ + NM="$(TARGET_CROSS)nm" \ + STRIP="$(STRIP)" \ + STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \ + PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf" \ + $(SCRIPT_DIR)/rstrip.sh +endif + +define GoPackage/GoSubMenu + SUBMENU:=Go + SECTION:=lang + CATEGORY:=Languages +endef + +define GoPackage/Environment + GOOS=$(GO_OS) \ + GOARCH=$(GO_ARCH) \ + GO386=$(GO_386) \ + GOARM=$(GO_ARM) \ + GOMIPS=$(GO_MIPS) \ + GOMIPS64=$(GO_MIPS64) \ + CGO_ENABLED=1 \ + CGO_CFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CFLAGS))" \ + CGO_CPPFLAGS="$(TARGET_CPPFLAGS)" \ + CGO_CXXFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CXXFLAGS))" +endef + +# false if directory does not exist +GoPackage/is_dir_not_empty=$$$$($(FIND) $(1) -maxdepth 0 -type d \! -empty 2>/dev/null) + +GoPackage/has_binaries=$(call GoPackage/is_dir_not_empty,$(GO_PKG_BUILD_BIN_DIR)) + +define GoPackage/Build/Configure + ( \ + cd $(PKG_BUILD_DIR) ; \ + mkdir -p $(GO_PKG_BUILD_DIR)/bin $(GO_PKG_BUILD_DIR)/src \ + $(GO_PKG_CACHE_DIR) $(GO_PKG_TMP_DIR) ; \ + \ + files=$$$$($(FIND) ./ \ + -type d -a \( -path './.git' -o -path './$(GO_PKG_WORK_DIR_NAME)' \) -prune -o \ + \! -type d -print | \ + sed 's|^\./||') ; \ + \ + if [ "$(GO_PKG_INSTALL_ALL)" != 1 ]; then \ + code=$$$$(echo "$$$$files" | grep '\.\(c\|cc\|go\|h\|hh\|proto\|s\)$$$$') ; \ + testdata=$$$$(echo "$$$$files" | grep '\(^\|/\)testdata/') ; \ + \ + for pattern in $(GO_PKG_INSTALL_EXTRA); do \ + extra=$$$$(echo "$$$$extra"; echo "$$$$files" | grep "$$$$pattern") ; \ + done ; \ + \ + files=$$$$(echo "$$$$code"; echo "$$$$testdata"; echo "$$$$extra") ; \ + files=$$$$(echo "$$$$files" | grep -v '^[[:space:]]*$$$$' | sort -u) ; \ + fi ; \ + \ + echo "Copying files from $(PKG_BUILD_DIR) into $(GO_PKG_BUILD_DIR)/src/$(GO_PKG)" ; \ + for file in $$$$files; do \ + echo $$$$file ; \ + dest=$(GO_PKG_BUILD_DIR)/src/$(GO_PKG)/$$$$file ; \ + mkdir -p $$$$(dirname $$$$dest) ; \ + $(CP) $$$$file $$$$dest ; \ + done ; \ + echo ; \ + \ + link_contents() { \ + local src=$$$$1 ; \ + local dest=$$$$2 ; \ + local dirs dir base ; \ + \ + if [ -n "$$$$($(FIND) $$$$src -mindepth 1 -maxdepth 1 -name '*.go' \! -type d)" ]; then \ + echo "$$$$src is already a Go library" ; \ + return 1 ; \ + fi ; \ + \ + dirs=$$$$($(FIND) $$$$src -mindepth 1 -maxdepth 1 -type d) ; \ + for dir in $$$$dirs; do \ + base=$$$$(basename $$$$dir) ; \ + if [ -d $$$$dest/$$$$base ]; then \ + case $$$$dir in \ + *$(GO_PKG_PATH)/src/$(GO_PKG)) \ + echo "$(GO_PKG) is already installed. Please check for circular dependencies." ;; \ + *) \ + link_contents $$$$src/$$$$base $$$$dest/$$$$base ;; \ + esac ; \ + else \ + echo "...$$$${src#$(GO_PKG_BUILD_DEPENDS_SRC)}/$$$$base" ; \ + $(LN) $$$$src/$$$$base $$$$dest/$$$$base ; \ + fi ; \ + done ; \ + } ; \ + \ + if [ "$(GO_PKG_SOURCE_ONLY)" != 1 ]; then \ + if [ -d $(GO_PKG_BUILD_DEPENDS_SRC) ]; then \ + echo "Symlinking directories from $(GO_PKG_BUILD_DEPENDS_SRC) into $(GO_PKG_BUILD_DIR)/src" ; \ + link_contents $(GO_PKG_BUILD_DEPENDS_SRC) $(GO_PKG_BUILD_DIR)/src ; \ + else \ + echo "$(GO_PKG_BUILD_DEPENDS_SRC) does not exist, skipping symlinks" ; \ + fi ; \ + else \ + echo "Not building binaries, skipping symlinks" ; \ + fi ; \ + echo ; \ + ) +endef + +# $(1) additional arguments for go command line (optional) +define GoPackage/Build/Compile + ( \ + cd $(GO_PKG_BUILD_DIR) ; \ + export GOPATH=$(GO_PKG_BUILD_DIR) \ + GOCACHE=$(GO_PKG_CACHE_DIR) \ + GOTMPDIR=$(GO_PKG_TMP_DIR) \ + GOROOT_FINAL=$(GO_TARGET_ROOT) \ + CC=$(TARGET_CC) \ + CXX=$(TARGET_CXX) \ + $(call GoPackage/Environment) ; \ + \ + echo "Finding targets" ; \ + targets=$$$$(go list $(GO_PKG_BUILD_PKG)) ; \ + for pattern in $(GO_PKG_EXCLUDES); do \ + targets=$$$$(echo "$$$$targets" | grep -v "$$$$pattern") ; \ + done ; \ + echo ; \ + \ + if [ "$(GO_PKG_GO_GENERATE)" = 1 ]; then \ + echo "Calling go generate" ; \ + go generate -v $(1) $$$$targets ; \ + echo ; \ + fi ; \ + \ + if [ "$(GO_PKG_SOURCE_ONLY)" != 1 ]; then \ + echo "Building targets" ; \ + case $(GO_ARCH) in \ + arm) installsuffix="-installsuffix v$(GO_ARM)" ;; \ + mips|mipsle) installsuffix="-installsuffix $(GO_MIPS)" ;; \ + mips64|mips64le) installsuffix="-installsuffix $(GO_MIPS64)" ;; \ + esac ; \ + trimpath="all=-trimpath=$(GO_PKG_BUILD_DIR)" ; \ + ldflags="all=-linkmode external -extldflags '$(TARGET_LDFLAGS)'" ; \ + go install \ + $$$$installsuffix \ + -gcflags "$$$$trimpath" \ + -asmflags "$$$$trimpath" \ + -ldflags "$$$$ldflags" \ + -v \ + $(1) \ + $$$$targets ; \ + retval=$$$$? ; \ + echo ; \ + \ + if [ "$$$$retval" -eq 0 ] && [ -z "$(call GoPackage/has_binaries)" ]; then \ + echo "No binaries were generated, consider adding GO_PKG_SOURCE_ONLY:=1 to Makefile" ; \ + echo ; \ + fi ; \ + \ + echo "Cleaning module download cache (golang/go#27455)" ; \ + go clean -modcache ; \ + echo ; \ + fi ; \ + exit $$$$retval ; \ + ) +endef + +define GoPackage/Build/InstallDev + $(call GoPackage/Package/Install/Src,$(1)) +endef + +define GoPackage/Package/Install/Bin + if [ -n "$(call GoPackage/has_binaries)" ]; then \ + $(INSTALL_DIR) $(1)/usr/bin ; \ + $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/* $(1)/usr/bin/ ; \ + fi +endef + +define GoPackage/Package/Install/Src + dir=$$$$(dirname $(GO_PKG)) ; \ + $(INSTALL_DIR) $(1)$(GO_PKG_PATH)/src/$$$$dir ; \ + $(CP) $(GO_PKG_BUILD_DIR)/src/$(GO_PKG) $(1)$(GO_PKG_PATH)/src/$$$$dir/ +endef + +define GoPackage/Package/Install + $(call GoPackage/Package/Install/Bin,$(1)) + $(call GoPackage/Package/Install/Src,$(1)) +endef + + +ifneq ($(GO_PKG),) + Build/Configure=$(call GoPackage/Build/Configure) + Build/Compile=$(call GoPackage/Build/Compile) + Build/InstallDev=$(call GoPackage/Build/InstallDev,$(1)) +endif + +define GoPackage + ifndef Package/$(1)/install + Package/$(1)/install=$$(call GoPackage/Package/Install,$$(1)) + endif +endef + +define GoBinPackage + ifndef Package/$(1)/install + Package/$(1)/install=$$(call GoPackage/Package/Install/Bin,$$(1)) + endif +endef + +define GoSrcPackage + ifndef Package/$(1)/install + Package/$(1)/install=$$(call GoPackage/Package/Install/Src,$$(1)) + endif +endef diff --git a/golang/golang-values.mk b/golang/golang-values.mk new file mode 100644 index 0000000000..893f9296de --- /dev/null +++ b/golang/golang-values.mk @@ -0,0 +1,72 @@ +# +# Copyright (C) 2018 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-version.mk + + +unexport \ + GOARCH GOBIN GOCACHE GODEBUG GOHOSTARCH GOOS GOPATH GORACE GOROOT GOTMPDIR GCCGO \ + CGO_ENABLED \ + CGO_CFLAGS CGO_CFLAGS_ALLOW CGO_CFLAGS_DISALLOW \ + CGO_CPPFLAGS CGO_CPPFLAGS_ALLOW CGO_CPPFLAGS_DISALLOW \ + CGO_CXXFLAGS CGO_CXXFLAGS_ALLOW CGO_CXXFLAGS_DISALLOW \ + CGO_FFLAGS CGO_FFLAGS_ALLOW CGO_FFLAGS_DISALLOW \ + CGO_LDFLAGS CGO_LDFLAGS_ALLOW CGO_LDFLAGS_DISALLOW \ + GOARM GO386 GOMIPS GOMIPS64 \ + GOROOT_FINAL GO_EXTLINK_ENABLED GIT_ALLOW_PROTOCOL \ + CC_FOR_TARGET CXX_FOR_TARGET GO_DISTFLAGS GO_GCFLAGS GO_LDFLAGS GOBUILDTIMELOGFILE GOROOT_BOOTSTRAP \ + BOOT_GO_GCFLAGS GOEXPERIMENT GOBOOTSTRAP_TOOLEXEC + # there are more magic environment variables to track down, but ain't nobody got time for that + +go_arch=$(subst \ + aarch64,arm64,$(subst \ + i386,386,$(subst \ + mipsel,mipsle,$(subst \ + mips64el,mips64le,$(subst \ + powerpc64,ppc64,$(subst \ + x86_64,amd64,$(1))))))) + +GO_OS:=linux +GO_ARCH:=$(call go_arch,$(ARCH)) +GO_OS_ARCH:=$(GO_OS)_$(GO_ARCH) + +GO_HOST_OS:=$(call tolower,$(HOST_OS)) +GO_HOST_ARCH:=$(call go_arch,$(subst \ + armv6l,arm,$(subst \ + armv7l,arm,$(subst \ + i486,i386,$(subst \ + i586,i386,$(subst \ + i686,i386,$(HOST_ARCH))))))) +GO_HOST_OS_ARCH:=$(GO_HOST_OS)_$(GO_HOST_ARCH) + +GO_HOST_TARGET_SAME:=$(if $(and $(findstring $(GO_OS_ARCH),$(GO_HOST_OS_ARCH)),$(findstring $(GO_HOST_OS_ARCH),$(GO_OS_ARCH))),1) +GO_HOST_TARGET_DIFFERENT:=$(if $(GO_HOST_TARGET_SAME),,1) + +# ensure binaries can run on older CPUs +GO_386:=387 + +GO_ARM:=$(if $(CONFIG_arm_v7),7,$(if $(CONFIG_arm_v6),6,$(if $(findstring $(GO_ARCH),arm),5,))) + +GO_MIPS:=$(if $(filter $(GO_ARCH),mips mipsle),$(if $(CONFIG_HAS_FPU),hardfloat,softfloat),) + +GO_MIPS64:=$(if $(filter $(GO_ARCH),mips64 mips64le),$(if $(CONFIG_HAS_FPU),hardfloat,softfloat),) + +# -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors +# -mips32r2: conflicts with -march=mips32 set by go +GO_CFLAGS_TO_REMOVE:=$(if \ +$(filter $(GO_ARCH),386),-fno-plt,$(if \ +$(filter $(GO_ARCH),mips mipsle),-mips32r2,)) + +GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||powerpc64||x86_64) + +GO_TARGET_PREFIX:=/usr +GO_TARGET_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR) +GO_TARGET_ROOT:=$(GO_TARGET_PREFIX)/lib/go-$(GO_TARGET_VERSION_ID) diff --git a/golang/golang-version.mk b/golang/golang-version.mk new file mode 100644 index 0000000000..494111452d --- /dev/null +++ b/golang/golang-version.mk @@ -0,0 +1,14 @@ +# +# Copyright (C) 2018 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 + + +GO_VERSION_MAJOR_MINOR:=1.11 +GO_VERSION_PATCH:=5 diff --git a/golang/golang/Makefile b/golang/golang/Makefile new file mode 100644 index 0000000000..49e69a5850 --- /dev/null +++ b/golang/golang/Makefile @@ -0,0 +1,274 @@ +# +# Copyright (C) 2018 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include ../golang-version.mk + +PKG_NAME:=golang +PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH)) +PKG_RELEASE:=1 + +GO_SOURCE_URLS:=https://dl.google.com/go/ \ + https://mirrors.ustc.edu.cn/golang/ \ + https://mirrors.nju.edu.cn/golang/ + +PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz +PKG_SOURCE_URL:=$(GO_SOURCE_URLS) +PKG_HASH:=bc1ef02bb1668835db1390a2e478dcbccb5dd16911691af9d75184bbe5aa943e + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Jeffery To + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION) +PKG_BUILD_PARALLEL:=1 +PKG_USE_MIPS16:=0 + +PKG_GO_WORK_DIR:=$(PKG_BUILD_DIR)/.go_work +PKG_GO_HOST_CACHE_DIR:=$(PKG_GO_WORK_DIR)/host_cache +PKG_GO_TARGET_CACHE_DIR:=$(PKG_GO_WORK_DIR)/target_cache +PKG_GO_TMP_DIR:=$(PKG_GO_WORK_DIR)/tmp + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/go-$(PKG_VERSION) +HOST_BUILD_PARALLEL:=1 + +HOST_GO_PREFIX:=$(STAGING_DIR_HOSTPKG) +HOST_GO_VERSION_ID:=cross +HOST_GO_ROOT:=$(HOST_GO_PREFIX)/lib/go-$(HOST_GO_VERSION_ID) + +HOST_GO_VALID_OS_ARCH:= \ + android_arm \ + darwin_386 darwin_amd64 darwin_arm darwin_arm64 \ + dragonfly_amd64 \ + freebsd_386 freebsd_amd64 freebsd_arm \ + linux_386 linux_amd64 linux_arm linux_arm64 \ + netbsd_386 netbsd_amd64 netbsd_arm \ + openbsd_386 openbsd_amd64 openbsd_arm \ + plan9_386 plan9_amd64 \ + solaris_amd64 \ + windows_386 windows_amd64 \ + \ + linux_ppc64 linux_ppc64le linux_mips linux_mipsle linux_mips64 linux_mips64le + +BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz +BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS) +BOOTSTRAP_HASH:=f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52 + +BOOTSTRAP_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap + +BOOTSTRAP_GO_VALID_OS_ARCH:= \ + darwin_386 darwin_amd64 \ + dragonfly_386 dragonfly_amd64 \ + freebsd_386 freebsd_amd64 freebsd_arm \ + linux_386 linux_amd64 linux_arm \ + netbsd_386 netbsd_amd64 netbsd_arm \ + openbsd_386 openbsd_amd64 \ + plan9_386 plan9_amd64 \ + solaris_amd64 \ + windows_386 windows_amd64 + +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk +include ../golang-compiler.mk +include ../golang-package.mk + +PKG_UNPACK:=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE) +HOST_UNPACK:=$(HOST_TAR) -C $(HOST_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE) +BOOTSTRAP_UNPACK:=$(HOST_TAR) -C $(BOOTSTRAP_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(BOOTSTRAP_SOURCE) + +# don't strip ELF executables in test data (and go itself) +RSTRIP:=: +STRIP:=: + +define Package/golang/Default +$(call GoPackage/GoSubMenu) + TITLE:=Go programming language + URL:=https://golang.org/ + DEPENDS:=$(GO_ARCH_DEPENDS) +endef + +define Package/golang/Default/description +The Go programming language is an open source project to make +programmers more productive. + +Go is expressive, concise, clean, and efficient. Its concurrency +mechanisms make it easy to write programs that get the most out of +multicore and networked machines, while its novel type system enables +flexible and modular program construction. Go compiles quickly to +machine code yet has the convenience of garbage collection and the power +of run-time reflection. It's a fast, statically typed, compiled language +that feels like a dynamically typed, interpreted language. +endef + +# go tool requires source present: +# https://github.com/golang/go/issues/4635 +define Package/golang +$(call Package/golang/Default) + TITLE+= (compiler) + DEPENDS+= +golang-src +endef + +define Package/golang/description +$(call Package/golang/Default/description) + +This package provides an assembler, compiler, linker, and compiled +libraries for the Go programming language. +endef + +define Package/golang-doc +$(call Package/golang/Default) + TITLE+= (documentation) +endef + +define Package/golang-doc/description +$(call Package/golang/Default/description) + +This package provides the documentation for the Go programming language. +endef + +define Package/golang-src +$(call Package/golang/Default) + TITLE+= (source files) +endef + +define Package/golang-src/description +$(call Package/golang/Default/description) + +This package provides the Go programming language source files needed +for cross-compilation. +endef + +define Download/golang-bootstrap + FILE:=$(BOOTSTRAP_SOURCE) + URL:=$(BOOTSTRAP_SOURCE_URL) + HASH:=$(BOOTSTRAP_HASH) +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))) +$(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(GO_TARGET_PREFIX),$(GO_TARGET_VERSION_ID),$(GO_OS_ARCH))) + +define Host/Prepare + $(call Host/Prepare/Default) + mkdir -p $(BOOTSTRAP_BUILD_DIR) + $(BOOTSTRAP_UNPACK) +endef + +define Host/Compile + $(call GoCompiler/Bootstrap/CheckHost,$(BOOTSTRAP_GO_VALID_OS_ARCH)) + $(call GoCompiler/Host/CheckHost,$(HOST_GO_VALID_OS_ARCH)) + + $(call GoCompiler/Bootstrap/Make, \ + CC=$(HOSTCC_NOCACHE) \ + CXX=$(HOSTCXX_NOCACHE) \ + ) + + $(call GoCompiler/Host/Make, \ + GOROOT_BOOTSTRAP=$(BOOTSTRAP_BUILD_DIR) \ + CC=$(HOSTCC_NOCACHE) \ + CXX=$(HOSTCXX_NOCACHE) \ + ) +endef + +# if host and target os/arch are the same, +# when go compiles a program, it will use the host std lib +# so remove it now and force go to rebuild std for target later +define Host/Install + $(call Host/Uninstall) + + $(call GoCompiler/Host/Install/Bin,) + $(call GoCompiler/Host/Install/Src,) + + $(call GoCompiler/Host/Install/BinLinks,) + + rm -rf $(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH) + + $(INSTALL_DIR) $(HOST_GO_ROOT)/openwrt + $(INSTALL_BIN) ./files/go-gcc-helper $(HOST_GO_ROOT)/openwrt/ + $(LN) go-gcc-helper $(HOST_GO_ROOT)/openwrt/gcc + $(LN) go-gcc-helper $(HOST_GO_ROOT)/openwrt/g++ +endef + +define Host/Uninstall + rm -rf $(HOST_GO_ROOT)/openwrt + + $(call GoCompiler/Host/Uninstall/BinLinks,) + + $(call GoCompiler/Host/Uninstall,) +endef + +define Build/Compile + mkdir -p \ + $(PKG_GO_HOST_CACHE_DIR) \ + $(PKG_GO_TARGET_CACHE_DIR) \ + $(PKG_GO_TMP_DIR) + + @echo "Building target Go first stage" + + $(call GoCompiler/Package/Make, \ + GOROOT_BOOTSTRAP=$(HOST_GO_ROOT) \ + GOCACHE=$(PKG_GO_HOST_CACHE_DIR) \ + GOTMPDIR=$(PKG_GO_TMP_DIR) \ + GO_GCC_HELPER_CC="$(HOSTCC)" \ + GO_GCC_HELPER_CXX="$(HOSTCXX)" \ + GO_GCC_HELPER_PATH=$$$$PATH \ + CC=gcc \ + CXX=g++ \ + PKG_CONFIG=pkg-config \ + PATH=$(HOST_GO_ROOT)/openwrt:$$$$PATH \ + ) + + @echo "Building target Go second stage" + + ( \ + cd $(PKG_BUILD_DIR)/bin ; \ + $(CP) go go-host ; \ + GOROOT_FINAL=$(GO_TARGET_ROOT) \ + GOCACHE=$(PKG_GO_TARGET_CACHE_DIR) \ + GOTMPDIR=$(PKG_GO_TMP_DIR) \ + GO_GCC_HELPER_CC="$(TARGET_CC)" \ + GO_GCC_HELPER_CXX="$(TARGET_CXX)" \ + GO_GCC_HELPER_PATH=$$$$PATH \ + CC=gcc \ + CXX=g++ \ + PKG_CONFIG=pkg-config \ + PATH=$(HOST_GO_ROOT)/openwrt:$$$$PATH \ + $(call GoPackage/Environment) \ + ./go-host install -a -v std cmd ; \ + retval=$$$$? ; \ + rm -f go-host ; \ + exit $$$$retval ; \ + ) +endef + +define Package/golang/install + $(call GoCompiler/Package/Install/Bin,$(1)$(GO_TARGET_PREFIX)) + $(call GoCompiler/Package/Install/BinLinks,$(1)$(GO_TARGET_PREFIX)) +endef + +define Package/golang-doc/install + $(call GoCompiler/Package/Install/Doc,$(1)$(GO_TARGET_PREFIX)) +endef + +define Package/golang-src/install + $(call GoCompiler/Package/Install/Src,$(1)$(GO_TARGET_PREFIX)) +endef + +# src/debug contains ELF executables as test data +# and they reference these libraries +# we need to call this in Package/$(1)/extra_provides +# to pass CheckDependencies in include/package-ipkg.mk +define Package/golang-src/extra_provides + echo 'libc.so.6' +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,golang)) +$(eval $(call BuildPackage,golang-doc)) +$(eval $(call BuildPackage,golang-src)) diff --git a/golang/golang/files/go-gcc-helper b/golang/golang/files/go-gcc-helper new file mode 100644 index 0000000000..3d3f8935d5 --- /dev/null +++ b/golang/golang/files/go-gcc-helper @@ -0,0 +1,23 @@ +#!/bin/sh + +me=go-gcc-helper +name=$(basename $0) + +case $name in +gcc) + cmd=$GO_GCC_HELPER_CC + ;; +g++) + cmd=$GO_GCC_HELPER_CXX + ;; +*) + echo "$me: unknown command \"$name\"" + exit 1 + ;; +esac + +export PATH="$GO_GCC_HELPER_PATH" + +echo "$me: running $cmd $@" + +$cmd "$@" diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index f040db055d..34067b1bda 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -57,6 +57,11 @@

<%=servername%>

<% end) %> + <% + local obfs_installed = nixio.fs.access("/usr/bin/obfs-local") + local v2ray_installed = nixio.fs.access("/usr/bin/obfs-local") + if obfs_installed or v2ray_installed then + %>
@@ -71,11 +76,24 @@

<%=servername%>

+ <% + end + %>
diff --git a/shadowsocks-v2ray-plugin-bin/Makefile b/shadowsocks-v2ray-plugin-bin/Makefile deleted file mode 100644 index a8ea52c00f..0000000000 --- a/shadowsocks-v2ray-plugin-bin/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -# -# Copyright (C) 2018-2019 chenhw2 -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=v2ray-plugin -PKG_VERSION:=1.0 -PKG_RELEASE:=8cea1a3 -PKG_MAINTAINER:=chenhw2 - -# OpenWrt ARCH: arm, i386, x86_64, mips, mipsel -# Golang ARCH: arm[5-7], 386, amd64, mips, mipsle -PKG_ARCH:=$(ARCH) -BIN_ARCH:=$(ARCH) -ifeq ($(ARCH),mipsel) - PKG_ARCH:=mips - BIN_ARCH:=mipsle -endif -ifeq ($(ARCH),i386) - PKG_ARCH:=386 - BIN_ARCH:=386 -endif -ifeq ($(ARCH),x86_64) - PKG_ARCH:=amd64 - BIN_ARCH:=amd64 -endif -ifeq ($(ARCH),arm) - BIN_ARCH:=arm7 -endif - -PKG_SOURCE:=v2ray-plugin-linux-$(PKG_ARCH)-$(PKG_RELEASE).tar.gz -PKG_SOURCE_URL:=https://github.com/shadowsocks/v2ray-plugin/releases/download/v$(PKG_VERSION)/ -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) -PKG_HASH:=skip - -include $(INCLUDE_DIR)/package.mk - -define Package/v2ray-plugin - SECTION:=net - CATEGORY:=Network - TITLE:=SIP003 plugin for shadowsocks, based on v2ray - URL:=https://github.com/shadowsocks/v2ray-plugin -endef - -define Package/v2ray-plugin/description - Yet another SIP003 plugin for shadowsocks, based on v2ray -endef - -define Build/Prepare - gzip -dc "$(DL_DIR)/$(PKG_SOURCE)" | tar -C $(PKG_BUILD_DIR)/ -xf - -endef - -define Build/Compile - echo "$(PKG_NAME)Compile Skiped!" -endef - -define Package/v2ray-plugin/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/v2ray-plugin_linux_$(BIN_ARCH) $(1)/usr/bin/v2ray-plugin -endef - -$(eval $(call BuildPackage,v2ray-plugin)) diff --git a/shadowsocks-v2ray-plugin/Makefile b/shadowsocks-v2ray-plugin/Makefile new file mode 100644 index 0000000000..4c9d150844 --- /dev/null +++ b/shadowsocks-v2ray-plugin/Makefile @@ -0,0 +1,54 @@ +# +# Copyright (C) 2018-2019 chenhw2 +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=v2ray-plugin +PKG_MAINTAINER:=chenhw2 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/shadowsocks/v2ray-plugin.git +PKG_SOURCE_VERSION:=8cea1a3 + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DEPENDS:=golang/host +GO_PKG:=github.com/shadowsocks/v2ray-plugin +#GO_PKG_BUILD_PKG:=github.com/shadowsocks/v2ray-plugin + +include $(INCLUDE_DIR)/package.mk +include ../golang/golang-package.mk + +define Package/v2ray-plugin + SECTION:=net + CATEGORY:=Network + TITLE:=SIP003 plugin for shadowsocks, based on v2ray + URL:=https://github.com/shadowsocks/v2ray-plugin + DEPENDS:=$(GO_ARCH_DEPENDS) \ + +golang-protobuf-dev +v2ray-core-dev +v2ray-ext-dev +golang-golang-x-crypto-dev + PKGARCH:=all +endef + +define Package/v2ray-plugin/description + Yet another SIP003 plugin for shadowsocks, based on v2ray +endef + +#define Build/Prepare +# gzip -dc "$(DL_DIR)/$(PKG_SOURCE)" | tar -C $(PKG_BUILD_DIR)/ -xf - +#endef + +#define Build/Compile +# echo "$(PKG_NAME)Compile Skiped!" +#endef + +#define Package/v2ray-plugin/install +# $(INSTALL_DIR) $(1)/usr/bin +# $(INSTALL_BIN) $(PKG_BUILD_DIR)/v2ray-plugin $(1)/usr/bin/v2ray-plugin +#endef + +$(eval $(call GoBinPackage,v2ray-plugin)) +$(eval $(call BuildPackage,v2ray-plugin)) diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile new file mode 100644 index 0000000000..43cb8f4596 --- /dev/null +++ b/v2ray-core/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=v2ray-core +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/v2ray/v2ray-core.git +PKG_SOURCE_VERSION:=7bb5db712d8db179dc4b18d74331d3adaa9a8303 +PKG_SOURCE_DATE:=20190127 + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=v2ray.com/core +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang/golang-package.mk + +define Package/v2ray-core-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go support for Google protocol buffers + URL:=https://github.com/golang/protobuf + DEPENDS:=$(GO_ARCH_DEPENDS) +protobuf + PKGARCH:=all +endef + +define Package/v2ray-core-dev/description +Go support for Google protocol buffers +endef + +$(eval $(call GoSrcPackage,v2ray-core-dev)) +$(eval $(call BuildPackage,v2ray-core-dev)) diff --git a/v2ray-ext/Makefile b/v2ray-ext/Makefile new file mode 100644 index 0000000000..2611395e18 --- /dev/null +++ b/v2ray-ext/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=v2ray-ext +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/v2ray/ext.git +PKG_SOURCE_VERSION:=a9580865a30708e7b8214d95b3338bf132d94ad9 +PKG_SOURCE_DATE:=20190118 + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=v2ray.com/ext +GO_PKG_SOURCE_ONLY:=1 + +include $(INCLUDE_DIR)/package.mk +include ../golang/golang-package.mk + +define Package/v2ray-ext-dev +$(call GoPackage/GoSubMenu) + TITLE:=Go support for Google protocol buffers + URL:=https://github.com/golang/protobuf + DEPENDS:=$(GO_ARCH_DEPENDS) +protobuf + PKGARCH:=all +endef + +define Package/v2ray-ext-dev/description +Go support for Google protocol buffers +endef + +$(eval $(call GoSrcPackage,v2ray-ext-dev)) +$(eval $(call BuildPackage,v2ray-ext-dev))