2018-07-06 04:09:48 +02:00
# SPDX-License-Identifier: Apache-2.0
2018-05-02 21:40:01 +02:00
#
# Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
2018-05-14 04:21:20 +02:00
FILES := $( filter-out %/main.go,$( wildcard ../wireguard-go/*/*.go) $( wildcard ../wireguard-go/*.go) )
2018-02-07 19:19:20 +01:00
2018-04-25 14:36:33 +02:00
NDK_GO_ARCH_MAP_x86 := 386
NDK_GO_ARCH_MAP_x86_64 := amd64
NDK_GO_ARCH_MAP_arm := arm
NDK_GO_ARCH_MAP_arm64 := arm64
NDK_GO_ARCH_MAP_mips := mipsx
NDK_GO_ARCH_MAP_mips64 := mips64x
2018-02-07 19:19:20 +01:00
CLANG_FLAGS := --target= $( ANDROID_LLVM_TRIPLE) --gcc-toolchain= $( ANDROID_TOOLCHAIN_ROOT) --sysroot= $( ANDROID_SYSROOT)
export CGO_CFLAGS := $( CLANG_FLAGS) $( CFLAGS)
export CGO_LDFLAGS := $( CLANG_FLAGS) $( LDFLAGS)
export CC := $( ANDROID_C_COMPILER)
2018-04-25 14:36:33 +02:00
export GOARCH := $( NDK_GO_ARCH_MAP_$( ANDROID_ARCH_NAME) )
2018-02-07 19:19:20 +01:00
export GOOS := android
export CGO_ENABLED := 1
2018-04-24 15:19:53 +02:00
default : $( DESTDIR ) /libwg -go .so
2018-04-30 18:19:37 +02:00
GOBUILDARCH := $( NDK_GO_ARCH_MAP_$( shell uname -m) )
GOBUILDOS := $( shell uname -s | tr '[:upper:]' '[:lower:]' )
2018-05-02 03:55:18 +02:00
GOBUILDVERSION := 1.10.2
2018-04-30 18:19:37 +02:00
GOBUILDTARBALL := https://dl.google.com/go/go$( GOBUILDVERSION) .$( GOBUILDOS) -$( GOBUILDARCH) .tar.gz
2018-05-02 03:55:18 +02:00
GOBUILDVERSION_NEEDED := go version go$( GOBUILDVERSION) $( GOBUILDOS) /$( GOBUILDARCH)
2018-04-30 18:19:37 +02:00
2018-05-02 03:55:18 +02:00
GOBUILDVERSION_CURRENT := $( shell go version 2>/dev/null)
i f e q ( $( GOBUILDVERSION_NEEDED ) , $( GOBUILDVERSION_CURRENT ) )
2018-06-05 03:23:44 +02:00
$( info Using system Go )
2018-04-30 18:19:37 +02:00
e l s e
export GOROOT := $( CURDIR) /goroot
export PATH := $( GOROOT) /bin:$( PATH)
2018-05-02 03:55:18 +02:00
GOBUILDVERSION_CURRENT := $( shell $( GOROOT) /bin/go version 2>/dev/null)
i f n e q ( $( GOBUILDVERSION_NEEDED ) , $( GOBUILDVERSION_CURRENT ) )
$( shell rm -f $ ( GOROOT ) /bin /go )
e n d i f
2018-04-24 15:19:53 +02:00
$(GOROOT)/bin/go :
rm -rf " $( GOROOT) "
mkdir -p " $( GOROOT) "
2018-05-02 03:55:18 +02:00
curl " $( GOBUILDTARBALL) " | tar -C " $( GOROOT) " --strip-components= 1 -xzf - || { rm -rf " $( GOROOT) " ; exit 1; }
2018-06-05 03:23:44 +02:00
patch -p1 -f -N -r- -d " $( GOROOT) " < goruntime-boottime-over-monotonic.diff || { rm -rf " $( GOROOT) " ; exit 1; }
2018-05-02 03:55:18 +02:00
$(DESTDIR)/libwg-go.so : $( GOROOT ) /bin /go
2018-04-30 18:19:37 +02:00
e n d i f
2018-04-24 15:19:53 +02:00
2018-05-02 03:55:18 +02:00
$( shell test "$ $ ( cat .gobuildversion 2>/dev /null ) " = "$ ( GOBUILDVERSION_CURRENT ) " || rm -f "$ ( DESTDIR ) /libwg -go .so ")
2018-05-23 03:52:26 +02:00
$(DESTDIR)/libwg-go.so : $( FILES ) src /git .zx 2c 4.com /wireguard -go /api -android .go src /git .zx 2c 4.com /wireguard -go /tun /api -android .go src /git .zx 2c 4.com /wireguard -go /jni .c
2018-06-05 03:23:44 +02:00
@goroot= " $$ (go env GOROOT) " || exit 1; patch -p1 -f -R -s --dry-run -d " $$ goroot " < goruntime-boottime-over-monotonic.diff >/dev/null 2>& 1 || { echo " ERROR: Your system's Go is not patched to use the suspend-aware monotonic clock. Please try again after having run: \`patch -p1 -d \" $$ goroot\" < \" $( CURDIR) /goruntime-boottime-over-monotonic.diff\"\`. " ; exit 1; }
2018-02-07 19:19:20 +01:00
find . -name '*.go' -type l -delete
find . -type d -empty -delete
2018-05-23 03:52:26 +02:00
mkdir -p $( subst ../wireguard-go/,./src/git.zx2c4.com/wireguard-go/,$( dir $( FILES) ) )
$( foreach FILE,$( FILES) ,ln -sfrt $( subst ../wireguard-go/,./src/git.zx2c4.com/wireguard-go/,$( dir $( FILE) ) ) $( FILE) ; )
GOPATH = $( PWD) go get -v -d git.zx2c4.com/wireguard-go
2018-07-24 14:53:43 +02:00
GOPATH = $( PWD) go build -ldflags= " -X main.socketDirectory=/data/data/ $( ANDROID_PACKAGE_NAME) /cache/wireguard " -v -o $( DESTDIR) /libwg-go.so -buildmode c-shared git.zx2c4.com/wireguard-go
2018-05-02 03:55:18 +02:00
go version > .gobuildversion