Files
small-packages/AdGuardHome/Makefile
T
2026-09-26 17:00:06 +08:00

150 lines
5.7 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#
# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE.txt for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=AdGuardHome
PKG_VERSION:=0.107.79
PKG_RELEASE:=1
# 上游自 v0.107 起为“单二进制 + go:embed 前端”:前端由 client_v2 (npm/webpack)
# 构建到源码根的 build/ 目录,再由 main.go 的 //go:embed build 打包进二进制。
# 这里使用官方 codeload 源码包(比 git clone 快,且可用 PKG_HASH 校验收包)。
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/AdGuardHome/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=5f4fa119f24ea741bb8cecfa74203165fe6b86b904cef05ff429fb227b07d425
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-3.0-only
PKG_LICENSE_FILES:=LICENSE.txt
PKG_MAINTAINER:=Yang Feng <yangfeng229@gmail.com>
PKG_CONFIG_DEPENDS:=CONFIG_ADGUARDHOME_COMPRESS_UPX
# ---------------------------------------------------------------------------
# 工具链说明
#
# 本包不使用 OpenWrt 的 golang/host 与 node/host:
# * AdGuardHome 的 go.mod 要求 go >= 1.26.6,而 OpenWrt 24.10 的 golang feed
# 仍是 1.23.x;
# * node/host 需要从源码编译 Node,代价极高。
# 因此直接调用外部工具链(默认优先取容器内预装的 ~/.openwrt/tools),
# 可用下列变量覆盖:
# ADGH_GO Go 可执行文件(需 >= 1.26)
# ADGH_NODE_DIR 含 node/npm 的目录
# ADGH_NPM npm 可执行文件
# ADGH_NPM_REGISTRY npm 源(默认 npmmirror,国内更快)
# ADGH_GOPROXY Go 模块代理(默认 goproxy.cn)
# 工具链准备方式见 .devcontainer/README.md。
# ---------------------------------------------------------------------------
ADGH_TOOLS_DIR ?= $(HOME)/.openwrt/tools
ADGH_GO ?= $(if $(wildcard $(ADGH_TOOLS_DIR)/go/bin/go),$(ADGH_TOOLS_DIR)/go/bin/go,go)
ADGH_NODE_DIR ?= $(if $(wildcard $(ADGH_TOOLS_DIR)/node/bin/node),$(ADGH_TOOLS_DIR)/node/bin,$(if $(wildcard /usr/bin/node),/usr/bin,/usr/local/bin))
ADGH_NPM ?= $(ADGH_NODE_DIR)/npm
ADGH_NPM_REGISTRY ?= https://registry.npmmirror.com
ADGH_GOPROXY ?= https://goproxy.cn,direct
# OpenWrt ARCH -> GOARCH:纯 Go 交叉编译(CGO_ENABLED=0),无需 target 工具链
ifeq ($(ARCH),x86_64)
ADGH_GOARCH:=amd64
else ifeq ($(ARCH),i386)
ADGH_GOARCH:=386
else ifneq ($(filter aarch64%,$(ARCH)),)
ADGH_GOARCH:=arm64
else ifneq ($(filter arm%,$(ARCH)),)
ADGH_GOARCH:=arm
ADGH_GOARM:=$(if $(findstring _v5,$(ARCH)),5,$(if $(findstring _v6,$(ARCH)),6,7))
else ifneq ($(filter mips64el%,$(ARCH)),)
ADGH_GOARCH:=mips64le
ADGH_GOMIPS:=softfloat
else ifneq ($(filter mipsel%,$(ARCH)),)
ADGH_GOARCH:=mipsle
ADGH_GOMIPS:=softfloat
else ifneq ($(filter mips64%,$(ARCH)),)
ADGH_GOARCH:=mips64
ADGH_GOMIPS:=softfloat
else ifneq ($(filter mips%,$(ARCH)),)
ADGH_GOARCH:=mips
ADGH_GOMIPS:=softfloat
else ifneq ($(filter riscv64%,$(ARCH)),)
ADGH_GOARCH:=riscv64
else ifneq ($(filter powerpc64%,$(ARCH)),)
ADGH_GOARCH:=ppc64
else ifneq ($(filter powerpc%,$(ARCH)),)
ADGH_GOARCH:=ppc
else
ADGH_GOARCH:=unsupported
endif
ADGH_VERSION_PKG:=github.com/AdguardTeam/AdGuardHome/internal/version
ADGH_LDFLAGS:=-s -w \
-X $(ADGH_VERSION_PKG).version=v$(PKG_VERSION) \
-X $(ADGH_VERSION_PKG).channel=release \
-X $(ADGH_VERSION_PKG).committime=$(if $(SOURCE_DATE_EPOCH),$(SOURCE_DATE_EPOCH),0) \
$(if $(ADGH_GOARM),-X $(ADGH_VERSION_PKG).goarm=$(ADGH_GOARM)) \
$(if $(ADGH_GOMIPS),-X $(ADGH_VERSION_PKG).gomips=$(ADGH_GOMIPS))
include $(INCLUDE_DIR)/package.mk
define Package/AdGuardHome
SECTION:=net
CATEGORY:=Network
TITLE:=Network-wide ads and trackers blocking DNS server
URL:=https://github.com/AdguardTeam/AdGuardHome
DEPENDS:=+ca-bundle
endef
define Package/AdGuardHome/description
Free and open source, powerful network-wide ads and trackers blocking DNS server.
endef
define Package/$(PKG_NAME)/config
config ADGUARDHOME_COMPRESS_UPX
bool "Compress executable files with UPX"
default n
endef
define Build/Compile
@if ! $(ADGH_GO) version 2>/dev/null | grep -qE 'go1\.(2[6-9]|[3-9][0-9])'; then \
echo "ERROR: AdGuardHome $(PKG_VERSION) 需要 Go >= 1.26(go.mod 要求 1.26.6)"; \
echo " 当前工具链: $$($(ADGH_GO) version 2>&1)"; \
echo " 可用 ADGH_GO=/path/to/go 指定,准备方法见 .devcontainer/README.md"; \
exit 1; \
fi
@echo "AdGuardHome: 构建前端 client_v2 (npm)"
cd $(PKG_BUILD_DIR)/client_v2 && \
PATH="$(ADGH_NODE_DIR):$(PATH)" $(ADGH_NPM) ci \
--registry=$(ADGH_NPM_REGISTRY) --no-audit --no-fund && \
PATH="$(ADGH_NODE_DIR):$(PATH)" $(ADGH_NPM) run build-prod
@echo "AdGuardHome: 编译后端 (GOARCH=$(ADGH_GOARCH))"
cd $(PKG_BUILD_DIR) && \
CGO_ENABLED=0 GOOS=linux GOARCH=$(ADGH_GOARCH) \
GOARM=$(ADGH_GOARM) GOMIPS=$(ADGH_GOMIPS) \
GOPROXY=$(ADGH_GOPROXY) GOTOOLCHAIN=local \
$(ADGH_GO) build -trimpath -ldflags "$(ADGH_LDFLAGS)" \
-o $(PKG_BUILD_DIR)/AdGuardHome .
ifeq ($(CONFIG_ADGUARDHOME_COMPRESS_UPX),y)
@if [ -x $(STAGING_DIR_HOST)/bin/upx ]; then \
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(PKG_BUILD_DIR)/AdGuardHome; \
else \
echo "WARNING: upx 不可用,跳过压缩"; \
fi
endif
endef
# luci 插件默认使用 /etc/config/adGuardConfig/AdGuardHome(uci: binpath),
# 因此二进制装到该路径;/usr/bin/AdGuardHome 以符号链接提供命令行入口,
# 避免在 ipk 里重复打包 40MB 的二进制。
define Package/AdGuardHome/install
$(INSTALL_DIR) $(1)/etc/config/adGuardConfig
$(INSTALL_BIN) $(PKG_BUILD_DIR)/AdGuardHome $(1)/etc/config/adGuardConfig/AdGuardHome
$(INSTALL_DIR) $(1)/usr/bin
$(LN) /etc/config/adGuardConfig/AdGuardHome $(1)/usr/bin/AdGuardHome
endef
$(eval $(call BuildPackage,AdGuardHome))