1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box
PKG_VERSION:=1.12.22
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=6c4333c3f53a07cc96b63a801fdf6c156820d51cd2eb05e44ea78df290a45377
PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Van Waholtz <brvphoenix@gmail.com>
PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16
GO_PKG:=github.com/sagernet/sing-box
GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/sing-box
GO_PKG_LDFLAGS_X:=$(GO_PKG)/constant.Version=$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
include ../../lang/golang/golang-package.mk
define Package/sing-box-default
TITLE:=The universal proxy platform
SECTION:=net
CATEGORY:=Network
URL:=https://sing-box.sagernet.org
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +kmod-inet-diag +kmod-tun
USERID:=sing-box=5566:sing-box=5566
endef
define Package/sing-box
$(Package/sing-box-default)
TITLE+= (full)
VARIANT:=full
DEFAULT_VARIANT:=1
endef
define Package/sing-box/description
Sing-box is a universal proxy platform which supports hysteria, SOCKS, Shadowsocks,
ShadowTLS, Tor, trojan, VLess, VMess, WireGuard and so on.
endef
define Package/sing-box-tiny
$(Package/sing-box-default)
TITLE+= (tiny)
PROVIDES:=sing-box
VARIANT:=tiny
CONFLICTS:=sing-box
endef
Package/sing-box-tiny/description:=$(Package/sing-box/description)
define Package/sing-box/config
menu "Select build options"
depends on PACKAGE_sing-box
config SINGBOX_WITH_ACME
bool "Build with ACME TLS certificate issuer support"
config SINGBOX_WITH_CLASH_API
bool "Build with Clash API support"
default y
config SINGBOX_WITH_DHCP
bool "Build with DHCP support, see DHCP DNS transport."
config SINGBOX_WITH_EMBEDDED_TOR
bool "Build with embedded Tor support"
config SINGBOX_WITH_GRPC
bool "Build with standard gRPC support"
config SINGBOX_WITH_GVISOR
bool "Build with gVisor support"
default y
config SINGBOX_WITH_QUIC
bool "Build with QUIC support"
default y
config SINGBOX_WITH_TAILSCALE
bool "Build with Tailscale support"
default y
config SINGBOX_WITH_UTLS
bool "Build with uTLS support for TLS outbound"
default y
config SINGBOX_WITH_V2RAY_API
bool "Build with V2Ray API support"
config SINGBOX_WITH_WIREGUARD
bool "Build with WireGuard support"
default y
endmenu
endef
PKG_CONFIG_DEPENDS:= \
CONFIG_SINGBOX_WITH_ACME \
CONFIG_SINGBOX_WITH_CLASH_API \
CONFIG_SINGBOX_WITH_DHCP \
CONFIG_SINGBOX_WITH_EMBEDDED_TOR \
CONFIG_SINGBOX_WITH_GRPC \
CONFIG_SINGBOX_WITH_GVISOR \
CONFIG_SINGBOX_WITH_QUIC \
CONFIG_SINGBOX_WITH_TAILSCALE \
CONFIG_SINGBOX_WITH_UTLS \
CONFIG_SINGBOX_WITH_V2RAY_API \
CONFIG_SINGBOX_WITH_WIREGUARD
ifeq ($(BUILD_VARIANT),tiny)
ifeq ($(CONFIG_SMALL_FLASH),)
GO_PKG_TAGS:=with_gvisor
endif
GO_PKG_TAGS:=$(GO_PKG_TAGS),with_quic,with_utls,with_clash_api
else
GO_PKG_TAGS:=$(subst $(space),$(comma),$(strip \
$(if $(CONFIG_SINGBOX_WITH_ACME),with_acme) \
$(if $(CONFIG_SINGBOX_WITH_CLASH_API),with_clash_api) \
$(if $(CONFIG_SINGBOX_WITH_DHCP),with_dhcp) \
$(if $(CONFIG_SINGBOX_WITH_EMBEDDED_TOR),with_embedded_tor) \
$(if $(CONFIG_SINGBOX_WITH_GRPC),with_grpc) \
$(if $(CONFIG_SINGBOX_WITH_GVISOR),with_gvisor) \
$(if $(CONFIG_SINGBOX_WITH_QUIC),with_quic) \
$(if $(CONFIG_SINGBOX_WITH_TAILSCALE),with_tailscale) \
$(if $(CONFIG_SINGBOX_WITH_UTLS),with_utls) \
$(if $(CONFIG_SINGBOX_WITH_V2RAY_API),with_v2ray_api) \
$(if $(CONFIG_SINGBOX_WITH_WIREGUARD),with_wireguard) \
))
endif
define Package/sing-box/conffiles
/etc/config/sing-box
/etc/sing-box/
endef
Package/sing-box-tiny/conffiles=$(Package/sing-box/conffiles)
define Package/sing-box/install
$(INSTALL_DIR) $(1)/usr/bin/
$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/sing-box $(1)/usr/bin/sing-box
$(INSTALL_DIR) $(1)/etc/sing-box
$(INSTALL_DATA) $(PKG_BUILD_DIR)/release/config/config.json $(1)/etc/sing-box
$(INSTALL_DIR) $(1)/etc/config/
$(INSTALL_CONF) ./files/sing-box.conf $(1)/etc/config/sing-box
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) ./files/sing-box.init $(1)/etc/init.d/sing-box
endef
Package/sing-box-tiny/install=$(Package/sing-box/install)
$(eval $(call BuildPackage,sing-box))
$(eval $(call BuildPackage,sing-box-tiny))
|