-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.cross-compiles
More file actions
109 lines (95 loc) · 5.64 KB
/
Copy pathMakefile.cross-compiles
File metadata and controls
109 lines (95 loc) · 5.64 KB
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
## 简单的跨平台构建脚本
##
## 使用方式(在仓库根目录):
## make -f Makefile.cross-compiles all # 构建所有平台的二进制 + 压缩包 + AAR
## make -f Makefile.cross-compiles app # 构建各平台(二进制 + zip)
## make -f Makefile.cross-compiles android-aar # 只构建 Android AAR
GO ?= go
GOMOBILE ?= gomobile
BUILD_DIR ?= release
os-archs := linux:amd64 linux:arm:7 linux:arm64 windows:amd64 darwin:amd64
SERVER_BIN_PREFIX := $(BUILD_DIR)/forward-server
AGENT_BIN_PREFIX := $(BUILD_DIR)/forward-agent
# Android AAR 相关文件名
ANDROID_AAR_DIR := $(BUILD_DIR)
ANDROID_AAR_RAW_FILE := portforward_raw.aar
ANDROID_AAR_FILE := portforward.aar
.PHONY: all deps gomobile-deps app android-aar clean
all: deps app android-aar
## 依赖下载(多模块一次性处理)
deps:
cd forward-core && $(GO) mod download all
cd forward-server && $(GO) mod download all
cd forward-agent && $(GO) mod download all
## gomobile 相关依赖(仅用于生成 AAR)
## 不自动执行,仅在需要时手动运行:
## make -f Makefile.cross-compiles gomobile-deps
gomobile-deps:
cd forward-agent && $(GO) get golang.org/x/mobile/bind
cd forward-agent && $(GO) mod tidy
app:
mkdir -p $(BUILD_DIR)
@for n in $(os-archs); do \
os=$$(echo "$$n" | cut -d : -f 1); \
arch=$$(echo "$$n" | cut -d : -f 2); \
extra=$$(echo "$$n" | cut -d : -f 3); \
flags=""; \
target_suffix="$${os}-$${arch}"; \
bin_ext=""; \
if [ "$$os" = "windows" ]; then bin_ext=".exe"; fi; \
if [ "$$os" = "linux" ] && [ "$$arch" = "arm" ] && [ "$$extra" != "" ]; then \
if [ "$$extra" = "7" ]; then \
flags="GOARM=7"; \
target_suffix="$${os}-arm-hf"; \
elif [ "$$extra" = "5" ]; then \
flags="GOARM=5"; \
target_suffix="$${os}-arm"; \
fi; \
elif [ "$$os" = "linux" ] && ([ "$$arch" = "mips" ] || [ "$$arch" = "mipsle" ]) && [ "$$extra" != "" ]; then \
flags="GOMIPS=$${extra}"; \
fi; \
echo "Build $$os-$$arch$${extra:+ ($$extra)} forward-server..."; \
cd "$(CURDIR)/forward-server" && env CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch $$flags $(GO) build -trimpath -o "../$(SERVER_BIN_PREFIX).$${target_suffix}$${bin_ext}"; \
echo "Build $$os-$$arch$${extra:+ ($$extra)} forward-agent..."; \
cd "$(CURDIR)/forward-agent" && env CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch $$flags $(GO) build -trimpath -o "../$(AGENT_BIN_PREFIX).$${target_suffix}$${bin_ext}"; \
echo "Package $$os-$$arch$${extra:+ ($$extra)} forward-server..."; \
rm -rf "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}"; \
mkdir -p "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}/forward-server"; \
cp "$(CURDIR)/$(SERVER_BIN_PREFIX).$${target_suffix}$${bin_ext}" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}/forward-server/forward-server$${bin_ext}"; \
cp -r "$(CURDIR)/forward-server/conf" "$(CURDIR)/forward-server/static" "$(CURDIR)/forward-server/views" "$(CURDIR)/forward-server/data" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}/forward-server/"; \
if [ "$$os" = "windows" ]; then \
cp "$(CURDIR)/forward-server/start.bat" "$(CURDIR)/forward-server/stop.bat" "$(CURDIR)/README.md" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}/forward-server/"; \
else \
cp "$(CURDIR)/forward-server/start.sh" "$(CURDIR)/forward-server/stop.sh" "$(CURDIR)/README.md" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}/forward-server/"; \
fi; \
cd "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}" && zip -r "../forward-server.$${target_suffix}.zip" forward-server; \
rm -rf "$(CURDIR)/$(BUILD_DIR)/tmp-forward-server-$${target_suffix}"; \
rm -f "$(CURDIR)/$(SERVER_BIN_PREFIX).$${target_suffix}$${bin_ext}"; \
echo "Package $$os-$$arch$${extra:+ ($$extra)} forward-agent..."; \
rm -rf "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}"; \
mkdir -p "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}/forward-agent"; \
cp "$(CURDIR)/$(AGENT_BIN_PREFIX).$${target_suffix}$${bin_ext}" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}/forward-agent/forward-agent$${bin_ext}"; \
cp -r "$(CURDIR)/forward-agent/conf" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}/forward-agent/"; \
if [ "$$os" = "windows" ]; then \
cp "$(CURDIR)/forward-agent/start.bat" "$(CURDIR)/forward-agent/stop.bat" "$(CURDIR)/README.md" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}/forward-agent/"; \
else \
cp "$(CURDIR)/forward-agent/start.sh" "$(CURDIR)/forward-agent/stop.sh" "$(CURDIR)/README.md" "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}/forward-agent/"; \
fi; \
cd "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}" && zip -r "../forward-agent.$${target_suffix}.zip" forward-agent; \
rm -rf "$(CURDIR)/$(BUILD_DIR)/tmp-forward-agent-$${target_suffix}"; \
rm -f "$(CURDIR)/$(AGENT_BIN_PREFIX).$${target_suffix}$${bin_ext}"; \
echo "Build $$os-$$arch$${extra:+ ($$extra)} done"; \
done
## ============ Android AAR (gomobile bind) ============
##
## 样式参考 frp:不在这里指定 x/mobile 版本,
## 只依赖已经安装好的 gomobile/gobind 和模块依赖。
android-aar: deps
mkdir -p $(ANDROID_AAR_DIR)
@echo "Build Android raw AAR (gomobile bind)..."
cd forward-agent && env CGO_ENABLED=1 GOOS=android GOMOBILE_JAVACFLAGS="-encoding UTF-8" $(GOMOBILE) bind -target=android -javapkg com.android.portforward -o ../$(ANDROID_AAR_DIR)/$(ANDROID_AAR_RAW_FILE) ./mobile
@echo "Convert raw AAR to dex AAR ($(ANDROID_AAR_FILE))..."
@./make_frp_dex_aar.sh "$(ANDROID_AAR_DIR)" "$(ANDROID_AAR_RAW_FILE)" "$(ANDROID_AAR_FILE)"
## ============ Clean =============
clean:
rm -rf $(BUILD_DIR)