1
1
# SPDX-License-Identifier: MIT
2
2
#
3
- # Copyright (C) 2018-2019 Jason A. Donenfeld <[email protected] >. All Rights Reserved.
3
+ # Copyright (C) 2018-2020 Jason A. Donenfeld <[email protected] >. All Rights Reserved.
4
4
5
5
# These are generally passed to us by xcode, but we set working defaults for standalone compilation too.
6
6
ARCHS ?= x86_64 arm64
@@ -21,40 +21,56 @@ GOARCH_x86_64 := amd64
21
21
GOOS_macosx := darwin
22
22
GOOS_iphoneos := ios
23
23
24
+ GO_VERSION := 1.17.13
25
+ GO_PLATFORM := $(shell uname -s | tr '[:upper:]' '[:lower:]') -$(GOARCH_$(shell uname -m) )
26
+ GO_TARBALL := go$(GO_VERSION ) .$(GO_PLATFORM ) .tar.gz
27
+ GO_HASH_darwin-amd64 := 0fea4e2498067dcf199c71be78bb940f7861efd8ae03c672992d2d65d31f9fc8
28
+ GO_HASH_darwin-arm64 := e4ccc9c082d91eaa0b866078b591fc97d24b91495f12deb3dd2d8eda4e55a6ea
29
+
24
30
build : $(DESTDIR ) /libwg-go.a
25
31
version-header : $(DESTDIR ) /wireguard-go-version.h
26
32
27
- REAL_GOROOT := $(shell go env GOROOT 2>/dev/null)
28
- export GOROOT := $(BUILDDIR ) /goroot
29
- $(GOROOT ) /.prepared :
30
- [ -n " $( REAL_GOROOT) " ]
31
- mkdir -p " $( GOROOT) "
32
- rsync -a --delete --exclude=pkg/obj/go-build " $( REAL_GOROOT) /" " $( GOROOT) /"
33
- cat goruntime-* .diff | patch -p1 -f -N -r- -d " $( GOROOT) "
34
- touch " $@ "
33
+ $(BUILDDIR ) /$(GO_TARBALL ) :
34
+ mkdir -p " $( @D) "
35
+ flock " $@ .lock" -c ' \
36
+ [ -f " $@ " ] && exit 0; \
37
+ curl -o " $@ .tmp" " https://dl.google.com/go/$( GO_TARBALL) " && \
38
+ echo " $( GO_HASH_$( GO_PLATFORM) ) $@ .tmp" | sha256sum -c && \
39
+ mv " $@ .tmp" " $@ " '
40
+
41
+ $(BUILDDIR ) /go-$(GO_VERSION ) /.prepared : $(BUILDDIR ) /$(GO_TARBALL )
42
+ mkdir -p " $( @D) "
43
+ flock " $@ .lock" -c ' \
44
+ [ -f " $@ " ] && exit 0; \
45
+ tar -C " $( @D) " --strip-components=1 -xzf " $^" && \
46
+ patch -p1 -f -N -r- -d " $( @D) " < goruntime-boottime-over-monotonic.diff && \
47
+ touch " $@ " '
35
48
36
49
define libwg-go-a
37
50
$(BUILDDIR ) /libwg-go-$(1 ) .a: export CGO_ENABLED := 1
38
51
$(BUILDDIR ) /libwg-go-$(1 ) .a: export CGO_CFLAGS := $(CFLAGS_PREFIX ) $(ARCH )
39
52
$(BUILDDIR ) /libwg-go-$(1 ) .a: export CGO_LDFLAGS := $(CFLAGS_PREFIX ) $(ARCH )
40
53
$(BUILDDIR ) /libwg-go-$(1 ) .a: export GOOS := $(GOOS_$(PLATFORM_NAME ) )
41
54
$(BUILDDIR ) /libwg-go-$(1 ) .a: export GOARCH := $(GOARCH_$(1 ) )
42
- $(BUILDDIR ) /libwg-go-$(1 ) .a: $(GOROOT ) /.prepared go.mod
55
+ $(BUILDDIR ) /libwg-go-$(1 ) .a: $(BUILDDIR ) /go- $( GO_VERSION ) /.prepared go.mod
43
56
go build -ldflags=-w -trimpath -v -o "$(BUILDDIR ) /libwg-go-$(1 ) .a" -buildmode c-archive
44
- rm -f "$(BUILDDIR ) /libwg-go-$(1 ) .h"
57
+ $( RM ) "$(BUILDDIR ) /libwg-go-$(1 ) .h"
45
58
endef
46
59
$(foreach ARCH,$(ARCHS),$(eval $(call libwg-go-a,$(ARCH))))
47
60
48
- $(DESTDIR ) /wireguard-go-version.h : go.mod $( GOROOT ) /.prepared
61
+ $(DESTDIR ) /wireguard-go-version.h : $( BUILDDIR ) /go- $( GO_VERSION ) /.prepared go.mod
49
62
sed -E -n ' s/.*golang\.zx2c4\.com\/wireguard +v[0-9.]+-[0-9]+-([0-9a-f]{8})[0-9a-f]{4}.*/#define WIREGUARD_GO_VERSION "\1"/p' " $<" > " $@ "
50
63
64
+ $(DESTDIR ) /llibwg-go.a : export PATH := $(BUILDDIR ) /go-$(GO_VERSION ) /bin/:$(PATH )
51
65
$(DESTDIR ) /libwg-go.a : $(foreach ARCH,$(ARCHS ) ,$(BUILDDIR ) /libwg-go-$(ARCH ) .a)
52
66
@mkdir -vp " $( DESTDIR) "
53
67
$(LIPO ) -create -output " $@ " $^
54
68
55
69
clean :
56
- rm -rf " $( BUILDDIR) " " $( DESTDIR) /libwg-go.a" " $( DESTDIR) /wireguard-go-version.h"
70
+ $( RM ) -r " $( BUILDDIR) " " $( DESTDIR) /libwg-go.a" " $( DESTDIR) /wireguard-go-version.h"
57
71
58
72
install : build
59
73
60
- .PHONY : clean build version-header install
74
+ .PHONY : clean build version-header install prepared gotarball
75
+
76
+ .DELETE_ON_ERROR :
0 commit comments