# # Copyright (C) 2019-2021 Xingwang Liao # # 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_VERSION:=4.42.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? PKG_HASH:=70ffcb2719dd4d692266de75d40009d94a1374ced72546fbd9b0dba33b9bb3ea PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE PKG_MAINTAINER:=Xingwang Liao PKG_BUILD_DEPENDS:=golang/host PACKAGE_v2ray-core-mini:upx/host PKG_BUILD_PARALLEL:=1 PKG_USE_MIPS16:=0 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_json_v2ctl \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_json_internal \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_json_none \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_exclude_v2ctl \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_exclude_assets \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_compress_upx \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_custom_features \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dns \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_fakedns \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_log \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_tls \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_udp \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_policy \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_reverse \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_routing \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_statistics \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_blackhole_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dns_proxy \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dokodemo_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_freedom_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_mtproto_proxy \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_http_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_shadowsocks_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_socks_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_trojan_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_vmess_proto \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_tcp_trans \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_mkcp_trans \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_websocket_trans \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_http2_trans \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_domain_socket_trans \ CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_quic_trans GO_PKG:=github.com/v2fly/v2ray-core/v4 GO_PKG_LDFLAGS:=-s -w GO_PKG_LDFLAGS_X:= \ github.com/v2fly/v2ray-core/v4.version=$(PKG_VERSION) \ github.com/v2fly/v2ray-core/v4.build=R$(PKG_RELEASE) \ github.com/v2fly/v2ray-core/v4.codename=OpenWrt include $(INCLUDE_DIR)/package.mk include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk define Package/v2ray-core/Default TITLE:=A platform for building proxies to bypass network restrictions. URL:=https://www.v2fly.org SECTION:=net CATEGORY:=Network SUBMENU:=Project V DEPENDS:=$(GO_ARCH_DEPENDS) +ca-certificates endef define Package/v2ray-core/Default/description Project V is a set of network tools that help you to build your own computer network. It secures your network connections and thus protects your privacy. endef define Package/v2ray-core $(call Package/v2ray-core/Default) TITLE+= (Full) VARIANT:=full DEFAULT_VARIANT:=1 PROVIDES:=v2ray endef define Package/v2ray-core/description $(call Package/v2ray-core/Default/description) This package contains v2ray, v2ctl, geoip.dat and geosite.dat. endef define Package/v2ray-core-mini $(call Package/v2ray-core/Default) TITLE+= (Minimal) VARIANT:=mini PROVIDES:=v2ray endef define Package/v2ray-core-mini/description $(call Package/v2ray-core/Default/description) This package contains only v2ray. endef define Package/v2ray-core-mini/config source "$(SOURCE)/Config-mini.in" endef V2RAY_SED_ARGS:= ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_json_v2ctl),y) V2RAY_SED_ARGS += \ s,// \(_ "github.com/v2fly/v2ray-core/v4/main/json"\),\1,; \ s,_ "github.com/v2fly/v2ray-core/v4/main/jsonem",// &,; else ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_json_none),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/main/jsonem",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_custom_features),y) ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dns),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/dns",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/app/dns/fakedns",// &,; else ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_fakedns),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/dns/fakedns",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_log),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/log",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/app/log/command",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_tls),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/tls",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_udp),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/udp",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_policy),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/policy",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_reverse),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/reverse",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_routing),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/router",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_statistics),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/app/stats",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/app/stats/command",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_blackhole_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/blackhole",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dns_proxy),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/dns",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_dokodemo_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/dokodemo",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_freedom_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/freedom",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_mtproto_proxy),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/mtproto",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_http_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/http",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_shadowsocks_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/shadowsocks",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_socks_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/socks",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_trojan_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/trojan",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_vmess_proto),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/vmess/inbound",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/proxy/vmess/outbound",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_tcp_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/tcp",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_mkcp_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/kcp",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_websocket_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/websocket",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_http2_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/http",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/http",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_domain_socket_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/domainsocket",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_quic_trans),y) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/quic",// &,; endif ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_mkcp_trans)$(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_without_quic_trans),yy) V2RAY_SED_ARGS += \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/noop",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/srtp",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/tls",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/utp",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/wechat",// &,; \ s,_ "github.com/v2fly/v2ray-core/v4/transport/internet/headers/wireguard",// &,; endif endif # custom features GEOIP_VER:=latest GEOIP_FILE:=geoip-$(GEOIP_VER).dat define Download/geoip.dat URL:=https://github.com/v2fly/geoip/releases/$(GEOIP_VER)/download URL_FILE:=geoip.dat FILE:=$(GEOIP_FILE) HASH:=530c8a8490f51eb5c2b9d24e4f4f114341f015a5193422aa20df0cf0cb2f50ca endef GEOSITE_VER:=latest GEOSITE_FILE:=geosite-$(GEOSITE_VER).dat define Download/geosite.dat URL:=https://github.com/v2fly/domain-list-community/releases/$(GEOSITE_VER)/download URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) HASH:=523a4e641ff07638f2105a62d900791e21503b579ce6956c07259818dbb22836 endef define Build/Prepare $(call Build/Prepare/Default) ifneq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_exclude_assets),y) # move file to make sure download new file every build mv -f $(DL_DIR)/$(GEOIP_FILE) $(PKG_BUILD_DIR)/release/config/geoip.dat mv -f $(DL_DIR)/$(GEOSITE_FILE) $(PKG_BUILD_DIR)/release/config/geosite.dat endif ifneq ($(V2RAY_SED_ARGS),) ( \ $(SED) \ '$(V2RAY_SED_ARGS)' \ $(PKG_BUILD_DIR)/main/distro/all/all.go ; \ ) endif endef define Build/Compile $(eval GO_PKG_BUILD_PKG:=github.com/v2fly/v2ray-core/v4/main) $(call GoPackage/Build/Compile) mv -f $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ray ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_compress_upx),y) $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/v2ray || true endif ifneq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_exclude_v2ctl),y) $(eval GO_PKG_BUILD_PKG:=github.com/v2fly/v2ray-core/v4/infra/control/main) $(call GoPackage/Build/Compile) mv -f $(GO_PKG_BUILD_BIN_DIR)/main $(GO_PKG_BUILD_BIN_DIR)/v2ctl ifeq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_compress_upx),y) $(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/v2ctl || true endif endif endef define Package/v2ray-core/install $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ray $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ctl $(1)/usr/bin $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) files/etc/config/v2ray $(1)/etc/config/v2ray $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) files/etc/init.d/v2ray $(1)/etc/init.d/v2ray $(INSTALL_DIR) $(1)/etc/v2ray $(INSTALL_CONF) files/etc/v2ray/config.json $(1)/etc/v2ray/config.json $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/release/config/{geoip,geosite}.dat \ $(1)/usr/bin endef define Package/v2ray-core-mini/install $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ray $(1)/usr/bin $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) files/etc/config/v2ray $(1)/etc/config/v2ray $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) files/etc/init.d/v2ray $(1)/etc/init.d/v2ray $(INSTALL_DIR) $(1)/etc/v2ray $(INSTALL_CONF) files/etc/v2ray/config.json $(1)/etc/v2ray/config.json ifneq ($(CONFIG_PACKAGE_v2ray_mini_exclude_v2ctl),y) $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/v2ctl $(1)/usr/bin endif ifneq ($(CONFIG_PACKAGE_v2ray_mini_exclude_assets),y) $(INSTALL_DATA) \ $(PKG_BUILD_DIR)/release/config/{geoip,geosite}.dat \ $(1)/usr/bin endif endef ifneq ($(CONFIG_PACKAGE_v2ray_$(BUILD_VARIANT)_exclude_assets),y) $(eval $(call Download,geoip.dat)) $(eval $(call Download,geosite.dat)) endif $(eval $(call GoBinPackage,v2ray-core)) $(eval $(call BuildPackage,v2ray-core)) $(eval $(call GoBinPackage,v2ray-core-mini)) $(eval $(call BuildPackage,v2ray-core-mini))