-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathMakefile
More file actions
142 lines (116 loc) · 5.96 KB
/
Makefile
File metadata and controls
142 lines (116 loc) · 5.96 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
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
BUILDDIR=$(CURDIR)/build
TOOLSDIR=$(CURDIR)/tools
GOBIN=$(CURDIR)/bin
GOMOBILE=$(GOBIN)/gomobile
GOPATCHOVERLAY=$(GOBIN)/go-patch-overlay
IMPORT_PATH=github.com/celzero/firestack
ELECTRON_PATH=$(IMPORT_PATH)/outline/electron
XGO=$(GOBIN)/xgo
COMMIT_ID=$(shell git rev-parse --short HEAD)
DATESTR=$(shell date -u +'%Y%m%d%H%M%S')
XGO_LDFLAGS='-s -w -X main.version=$(COMMIT_ID)'
# github.com/xjasonlyu/tun2socks/blob/bf745d0e0/Makefile#L14
LDFLAGS_DEBUG='-checklinkname=0 -buildid= -X $(IMPORT_PATH)/intra/core.Date=$(DATESTR) -X $(IMPORT_PATH)/intra/core.Commit=$(COMMIT_ID)'
# checklinkname to override runtime.secureMode; see: core/overreach.go
# github.com/golang/go/issues/69868
LDFLAGS='-checklinkname=0 -w -s -buildid= -X $(IMPORT_PATH)/intra/core.Date=$(DATESTR) -X $(IMPORT_PATH)/intra/core.Commit=$(COMMIT_ID)'
CGO_LDFLAGS="$(CGO_LDFLAGS) -s -w -Wl,-z,max-page-size=16384"
# build overlay json via recipe
BUILD_OVERLAY=$(BUILDDIR)/overlay.json
# github.com/golang/mobile/blob/a1d90793fc/cmd/gomobile/bind.go#L36
GOBIND=bind -trimpath -v -x -a -javapkg com.celzero.firestack
# -work: keep the temporary directory for debugging
ANDROID23=-androidapi 23 -target=android -tags='android' -work
# -tags debuglog to enable runtime crash logging output with "<< begin log" prefix
# example debug log: github.com/golang/go/issues/69629#issuecomment-2389297820
# build-time tags may be required in somecases
# github.com/golang/go/blob/e2fef50def98/src/runtime/HACKING.md?plain=1#L524
# github.com/golang/go/blob/e2fef50def98/src/runtime/debuglog.go#L63-L64
ANDROID23_DEBUG=-androidapi 23 -target=android -tags='android,debuglog' -work
WINDOWS_BUILDDIR=$(BUILDDIR)/windows
LINUX_BUILDDIR=$(BUILDDIR)/linux
# NDK llvm-objcopy for extracting / stripping debug symbols from .so files
# ANDROID_NDK_HOME is exported by make-aar (or set in the environment)
NDK_ROOT ?= $(ANDROID_NDK_HOME)
LLVM_OBJCOPY ?= $(NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy
ARCHS = armeabi-v7a arm64-v8a x86 x86_64
DEBUG_SYMBOLS_DIR = $(BUILDDIR)/intra/debug-symbols
DEBUG_SYMBOLS_ZIP = $(BUILDDIR)/intra/tun2socks-debug-symbols.zip
# stack traces are not affected by ldflags -s -w: github.com/golang/go/issues/25035#issuecomment-495004689
# trimpath: github.com/skycoin/skycoin/issues/719
ANDROID_BUILD_CMD=env PATH=$(GOBIN):$(PATH) $(GOMOBILE) $(GOBIND) $(ANDROID23) \
-overlay=$(BUILD_OVERLAY) -ldflags $(LDFLAGS) -gcflags='-trimpath'
# built without stripping dwarf/symbols
ANDROID_DEBUG_BUILD_CMD=env PATH=$(GOBIN):$(PATH) $(GOMOBILE) $(GOBIND) $(ANDROID23_DEBUG) \
-overlay=$(BUILD_OVERLAY) -ldflags $(LDFLAGS_DEBUG)
# exported pkgs
INTRA_BUILD_CMD=$(IMPORT_PATH)/intra $(IMPORT_PATH)/intra/backend $(IMPORT_PATH)/intra/settings
$(BUILDDIR)/intra/tun2socks.aar: $(GOMOBILE) $(BUILD_OVERLAY)
mkdir -p $(BUILDDIR)/intra
$(ANDROID_BUILD_CMD) -o $@ $(INTRA_BUILD_CMD)
$(BUILDDIR)/intra/tun2socks-debug.aar: $(GOMOBILE) $(BUILD_OVERLAY)
env NDK_DEBUG=1
mkdir -p $(BUILDDIR)/intra
$(ANDROID_DEBUG_BUILD_CMD) -o $@ $(INTRA_BUILD_CMD)
$(BUILDDIR)/android/tun2socks.aar: $(GOMOBILE) $(BUILD_OVERLAY)
env NDK_DEBUG=1
mkdir -p $(BUILDDIR)/android
$(ANDROID_BUILD_CMD) -o $@ $(IMPORT_PATH)/outline/android $(IMPORT_PATH)/outline/shadowsocks
$(BUILD_OVERLAY): $(TOOLSDIR)/runtime_write_err_android.patch
mkdir -p $(BUILDDIR)
env PATH=$(GOBIN):$(PATH) $(GOPATCHOVERLAY) -overlay $(BUILDDIR) $(TOOLSDIR)/runtime_write_err_android.patch
$(LINUX_BUILDDIR)/tun2socks: $(XGO)
$(XGO) -ldflags $(XGO_LDFLAGS) --targets=linux/amd64 -dest $(LINUX_BUILDDIR) $(ELECTRON_PATH)
mv $(LINUX_BUILDDIR)/electron-linux-amd64 $@
$(WINDOWS_BUILDDIR)/tun2socks.exe: $(XGO)
$(XGO) -ldflags $(XGO_LDFLAGS) --targets=windows/386 -dest $(WINDOWS_BUILDDIR) $(ELECTRON_PATH)
mv $(WINDOWS_BUILDDIR)/electron-windows-4.0-386.exe $@
# MACOSX_DEPLOYMENT_TARGET and -iosversion should match what outline-client supports.
$(BUILDDIR)/apple/Tun2socks.xcframework: $(GOMOBILE)
export MACOSX_DEPLOYMENT_TARGET=10.14; $(GOMOBILE) $(GOBIND) -iosversion=9.0 -target=ios,iossimulator,macos -o $@ -ldflags '-s -w' -bundleid org.outline.tun2socks $(IMPORT_PATH)/outline/apple $(IMPORT_PATH)/outline/shadowsocks
go.mod: tools/tools.go
go mod tidy
touch go.mod
$(GOMOBILE): go.mod
env GOBIN=$(GOBIN) go install golang.org/x/mobile/cmd/gomobile@latest
env GOBIN=$(GOBIN) go install github.com/felixge/go-patch-overlay@latest
env PATH=$(GOBIN):$(PATH) $(GOMOBILE) init
$(XGO): go.mod
env GOBIN=$(GOBIN) go install github.com/crazy-max/xgo
# Extract per-arch debug symbols from the unstripped debug AAR, then strip the
# .so files in-place and repack the AAR. The resulting AAR is stripped (smaller
# for distribution) and the symbol files are bundled into a separate zip.
# ref: github.com/tailscale/tailscale-android/commit/24d737834a1ff57eaa1daeb52708c918c7cd2e48
$(DEBUG_SYMBOLS_ZIP): $(BUILDDIR)/intra/tun2socks-debug.aar
mkdir -p $(DEBUG_SYMBOLS_DIR)
@set -e; \
tmpdir=$$(mktemp -d); \
trap "rm -rf $$tmpdir" EXIT; \
unzip -q $< -d $$tmpdir; \
for arch in $(ARCHS); do \
so=$$tmpdir/jni/$$arch/libgojni.so; \
[ -f $$so ] || continue; \
mkdir -p $(DEBUG_SYMBOLS_DIR)/jni/$$arch; \
$(LLVM_OBJCOPY) --only-keep-debug $$so $(DEBUG_SYMBOLS_DIR)/jni/$$arch/libgojni.so; \
$(LLVM_OBJCOPY) --strip-debug --strip-unneeded $$so; \
echo "stripped $$arch/libgojni.so, debug symbols -> jni/$$arch/libgojni.so"; \
done; \
ls -Rltr $$tmpdir; \
rm -f $<; (cd $$tmpdir && zip -qr $< .); \
(cd $(DEBUG_SYMBOLS_DIR) && zip -qr $@ jni/) \
&& echo "created debug symbols zip: $@" \
ls -Rltr ${DEBUG_SYMBOLS_DIR}
.PHONY: android intra linux apple windows debugsymbols clean clean-all
all: android intra linux apple windows
android: $(BUILDDIR)/android/tun2socks.aar
intra: $(BUILDDIR)/intra/tun2socks.aar
intradebug: $(BUILDDIR)/intra/tun2socks-debug.aar debugsymbols
debugsymbols: $(DEBUG_SYMBOLS_ZIP)
apple: $(BUILDDIR)/apple/Tun2socks.xcframework
linux: $(LINUX_BUILDDIR)/tun2socks
windows: $(WINDOWS_BUILDDIR)/tun2socks.exe
clean:
rm -rf $(BUILDDIR)
go clean
clean-all: clean
rm -rf $(GOBIN)