|
| 1 | +# SPDX-License-Identifier: GPL-2.0-only |
| 2 | +# |
| 3 | +# Copyright (C) 2023 ImmortalWrt.org |
| 4 | + |
| 5 | +include $(TOPDIR)/rules.mk |
| 6 | + |
| 7 | +PKG_NAME:=dae |
| 8 | +PKG_VERSION:=0.6.0rc2 |
| 9 | +PKG_RELEASE:=1 |
| 10 | + |
| 11 | +PKG_SOURCE_PROTO:=git |
| 12 | +PKG_SOURCE_URL:=https://github.com/daeuniverse/dae.git |
| 13 | +PKG_SOURCE_VERSION:=b5ebd4f8cb82c5a0b44a49b53f3e9df4f01419c8 |
| 14 | +PKG_MIRROR_HASH:=skip |
| 15 | + |
| 16 | +PKG_LICENSE:=AGPL-3.0-only |
| 17 | +PKG_LICENSE_FILE:=LICENSE |
| 18 | +PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org> |
| 19 | + |
| 20 | +PKG_BUILD_DEPENDS:=golang/host bpf-headers |
| 21 | +PKG_BUILD_PARALLEL:=1 |
| 22 | +PKG_USE_MIPS16:=0 |
| 23 | +PKG_BUILD_FLAGS:=no-mips16 |
| 24 | + |
| 25 | +GO_PKG:=github.com/daeuniverse/dae |
| 26 | +GO_PKG_LDFLAGS_X:= \ |
| 27 | + $(GO_PKG)/cmd.Version=$(PKG_VERSION) \ |
| 28 | + $(GO_PKG)/common/consts.MaxMatchSetLen_=64 |
| 29 | + |
| 30 | +include $(INCLUDE_DIR)/package.mk |
| 31 | +include $(INCLUDE_DIR)/bpf.mk |
| 32 | +include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk |
| 33 | + |
| 34 | +define Package/dae/Default |
| 35 | + SECTION:=net |
| 36 | + CATEGORY:=Network |
| 37 | + SUBMENU:=Web Servers/Proxies |
| 38 | + URL:=https://github.com/daeuniverse/dae |
| 39 | +endef |
| 40 | + |
| 41 | +define Package/dae |
| 42 | + $(call Package/dae/Default) |
| 43 | + TITLE:=A lightweight and high-performance transparent proxy solution |
| 44 | + # You need enable KERNEL_DEBUG_INFO_BTF and KERNEL_BPF_EVENTS |
| 45 | + DEPENDS:=$(GO_ARCH_DEPENDS) $(BPF_DEPENDS) \ |
| 46 | + +ca-bundle +kmod-sched-core +kmod-sched-bpf +kmod-xdp-sockets-diag +kmod-veth |
| 47 | +endef |
| 48 | + |
| 49 | +define Package/dae-geoip |
| 50 | + $(call Package/dae/Default) |
| 51 | + TITLE:=geoip for dae |
| 52 | + DEPENDS:=+v2ray-geoip |
| 53 | + PKGARCH:=all |
| 54 | +endef |
| 55 | + |
| 56 | +define Package/dae-geosite |
| 57 | + $(call Package/dae/Default) |
| 58 | + TITLE:=geosite for dae |
| 59 | + DEPENDS:=+v2ray-geosite |
| 60 | + PKGARCH:=all |
| 61 | +endef |
| 62 | + |
| 63 | +define Package/dae/description |
| 64 | + dae, means goose, is a lightweight and high-performance transparent |
| 65 | + proxy solution. |
| 66 | + |
| 67 | + In order to improve the traffic diversion performance as much as possible, |
| 68 | + dae runs the transparent proxy and traffic diversion suite in the linux |
| 69 | + kernel by eBPF. Therefore, we have the opportunity to make the direct |
| 70 | + traffic bypass the forwarding by proxy application and achieve true direct |
| 71 | + traffic through. Under such a magic trick, there is almost no performance |
| 72 | + loss and additional resource consumption for direct traffic. |
| 73 | +endef |
| 74 | + |
| 75 | +define Package/dae/conffiles |
| 76 | +/etc/dae/config.dae |
| 77 | +/etc/config/dae |
| 78 | +endef |
| 79 | + |
| 80 | +DAE_CFLAGS:= \ |
| 81 | + -O2 -Wall -Werror \ |
| 82 | + -DMAX_MATCH_SET_LEN=64 \ |
| 83 | + -I$(BPF_HEADERS_DIR)/tools/lib \ |
| 84 | + -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic |
| 85 | + |
| 86 | +define Build/Compile |
| 87 | + ( \ |
| 88 | + export $(GO_GENERAL_BUILD_CONFIG_VARS) \ |
| 89 | + $(GO_PKG_BUILD_CONFIG_VARS) \ |
| 90 | + $(GO_PKG_BUILD_VARS) \ |
| 91 | + BPF_CLANG="$(CLANG)" \ |
| 92 | + BPF_STRIP_FLAG="-strip=$(LLVM_STRIP)" \ |
| 93 | + BPF_CFLAGS="$(DAE_CFLAGS)" \ |
| 94 | + BPF_TARGET="bpfel,bpfeb" \ |
| 95 | + BPF_TRACE_TARGET="$(GO_ARCH)" ; \ |
| 96 | + go generate $(PKG_BUILD_DIR)/control/control.go ; \ |
| 97 | + go generate $(PKG_BUILD_DIR)/trace/trace.go ; \ |
| 98 | + $(call GoPackage/Build/Compile) ; \ |
| 99 | + ) |
| 100 | +endef |
| 101 | + |
| 102 | +define Package/dae/install |
| 103 | + $(call GoPackage/Package/Install/Bin,$(1)) |
| 104 | + |
| 105 | + $(INSTALL_DIR) $(1)/etc/dae/ |
| 106 | + $(INSTALL_CONF) $(PKG_BUILD_DIR)/example.dae $(1)/etc/dae/ |
| 107 | + |
| 108 | + $(INSTALL_DIR) $(1)/etc/config |
| 109 | + $(INSTALL_CONF) $(CURDIR)/files/dae.config $(1)/etc/config/dae |
| 110 | + |
| 111 | + $(INSTALL_DIR) $(1)/etc/init.d |
| 112 | + $(INSTALL_BIN) $(CURDIR)/files/dae.init $(1)/etc/init.d/dae |
| 113 | +endef |
| 114 | + |
| 115 | +define Package/dae-geoip/install |
| 116 | + $(INSTALL_DIR) $(1)/usr/share/dae |
| 117 | + $(LN) ../v2ray/geoip.dat $(1)/usr/share/dae/geoip.dat |
| 118 | +endef |
| 119 | + |
| 120 | +define Package/dae-geosite/install |
| 121 | + $(INSTALL_DIR) $(1)/usr/share/dae |
| 122 | + $(LN) ../v2ray/geosite.dat $(1)/usr/share/dae/geosite.dat |
| 123 | +endef |
| 124 | + |
| 125 | +$(eval $(call GoBinPackage,dae)) |
| 126 | +$(eval $(call BuildPackage,dae)) |
| 127 | +$(eval $(call BuildPackage,dae-geoip)) |
| 128 | +$(eval $(call BuildPackage,dae-geosite)) |
0 commit comments