2
0
mirror of synced 2025-02-24 15:28:28 +00:00

21 Commits

Author SHA1 Message Date
Elias Naur
54bca60619 app,cmd/gomobile,exp/gl/glutil: support target architectures for iOS build and bind
While we're here, add 386 to the list of supported architectures
on iOS.

To support gomobile build for amd64 and 386, use the "ios" tag to
distinguish between iOS and macOS builds.

Change-Id: Ie09a432794bd8d9853950115349f8d3b57cf43f5
Reviewed-on: https://go-review.googlesource.com/102915
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2018-03-28 15:26:55 +00:00
Elias Naur
6b7c05d452 cmd/gomobile: use standalone NDK toolchains
Issue golang/go#24058 demonstrates a Go package that fails to build with
gomobile but builds successfully with a manually using the standalone NDK
toolchain. I haven't been able to figure out a set of CPPFLAGS/LDFLAGS
that fixes the build for 24058 so instead rework gomobile to use
standalone NDK toolchains.

Standalone toolchains fixes the 24058 build and is the official way
to build Android programs. So gomobile should be less affected by
future changes in the NDK toolchain internals.

Create the standalone toolchains with gomobile init.

With the new Go 1.10 build cache, the prebuild work by the gomobile
init command is useless. Use the opportunity to simplify init to
only creating NDK toolchains and, optionally, building OpenAL for
Android. With that, it is no longer necessary to use gomobile init
to build iOS apps and frameworks.

Fixes golang/go#24058

Change-Id: I4692fcaa927e7076a6387d080ebc1726905afd72
Reviewed-on: https://go-review.googlesource.com/99875
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2018-03-26 17:11:49 +00:00
Ryuji Iwata
125c5259d9 cmd/gomobile: improve Xcode check
Since the xcrun binary exists in macOS from the beginning, it can not be used to check that Xcode is available.

The xcodebuild command does not return an error if Xcode is available.

Reference https://go-review.googlesource.com/c/mobile/+/35852

Change-Id: Ibb6324a2d801eab47b3544c50ee1cdbc36b608bc
Reviewed-on: https://go-review.googlesource.com/88755
Reviewed-by: Elias Naur <elias.naur@gmail.com>
2018-01-20 19:27:59 +00:00
Elias Naur
3ef91fec25 cmd/gomobile, internal/mobileinit: update to the NDK unified headers
From r16, the legacy headers no longer ship with the NDK. Update
the gomobile build system to use the unified headers instead.
They're available from r14.

Based on a patch by Steeve Morin.

Fixes golang/go#21802

Change-Id: I098330962c737edb833e968fe82558e15837f23f
Reviewed-on: https://go-review.googlesource.com/69950
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-10-11 16:08:37 +00:00
Elias Naur
44ced21510 bind,cmd/gomobile: require Go 1.7
Bump the minimum required version of Go to 1.7.

This removes version specific code and makes sure users have the
latest mobile related fixes to Go applied. Also, this change is
necessary when runtime.KeepAlive is introduced in a later CL.

Change-Id: I8441a28aef7f645379fbd8f00edabe3c3fb219de
Reviewed-on: https://go-review.googlesource.com/35953
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-01-30 19:32:33 +00:00
Elias Naur
e7109766ab cmd/gomobile: test for XCode in gomobile init
Previously, gomobile init assumed that the XCode developer tools
were available when running on darwin. That is not always the case,
in particular for Android developers on macOS.

Replace the GOOS check with an explicit check for the xcrun binary.

Change-Id: Ie5ae917288932cc641a17f904ed9822a105367cc
Reviewed-on: https://go-review.googlesource.com/35852
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2017-01-28 13:36:49 +00:00
Elias Naur
3212b34dba cmd/gomobile: replace stripped NDK with external NDK
Gomobile has up until now used stripped NDKs hosted by Google. This
arrangement adds maintenance overhead and blocks the use of custom
NDKs or custom API levels. Also, as noted in issue 16211, the stripped
NDK is no longer tiny because Gomobile supports more platforms.

This CL removed the code for generating and packaging stripped NDKs and
adds support for using external NDKs to the gomobile tool.

gomobile init will now use the NDK installed by the Android SDK manager,
if present, or a user specified NDK if the -ndk flag is given. If no
NDK was found or specified, Android initialization is skipped. gomobile
will instruct the user to run init with a valid NDK if bind or build is
invoked without Android initialization.

gomobile init will also attempt to build OpenAL for Android if the -openal
flag specifies a source directory. It needs cmake and, on Windows, nmake
installed. If gomobile build is run on an app that requires
golang.org/x/mobile/exp/audio/al and OpenAL wasn't built by init, the user
is instructed to do so.

Tested on Linux, macOS, Windows.

Fixes golang/go#16211
Fixes golang/go#18522

Change-Id: Ia38f6e43e671a207dad562678c65225b426e7e3e
Reviewed-on: https://go-review.googlesource.com/35173
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-01-17 21:04:41 +00:00
Elias Naur
34d472ecb6 mobile/cmd/gomobile: use NDK r12
Also:

- Replace GCC with Clang. GCC is slated for removal in future NDK
releases.
- Replace the deprecated obsoleted make-standalone-toolchain.sh
script with the new make_standalone_toolchain.py script.
- Add the NDK version to OpenAL tarball name, to avoid name clashes
with previous builds of the same OpenAL version.
- Removed obsolete workaround for a linker problem with NDK r10c.
- Update the URLs and unpack logic for the full NDK mode.

Change-Id: Ifeec6fee624862ba2ff2d4520dab42f800414f7b
Reviewed-on: https://go-review.googlesource.com/24490
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-06-29 15:33:04 +00:00
Elias Naur
d6153aa12b mobile/cmd/gomobile: upgrade to ndk-r11c
Update gcc version to 4.9 everywhere. NDK r11 stopped support
for gcc 4.8.

Switch from bin/exe format to zip format.

Drop support for linux/x86, since r11c no longer supports it.

Change the NDK URLs from http://dl.google.com/android/ndk/ to
https://dl.google.com/android/repository/.

Add a flag, -ndkdir, to specify where the downloaded NDK files for
processing are found and downloaded.

Check the status code from the http.Get that fetches the NDK files.

Change-Id: I836de6611bd04f5220e01937a3288a91604b8999
Reviewed-on: https://go-review.googlesource.com/23592
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2016-06-06 18:19:59 +00:00
Elias Naur
45290c0217 mobile/cmd/gomobile: pass minimum iphoneos version to linker
A minimum version is already specified for building for the
simulator (darwin/amd64). Pass the same version when building for
darwin/arm{,64}.

Fixes golang/go#13153

Change-Id: Id16c247b86877a07ee39013454868fccfd63b112
Reviewed-on: https://go-review.googlesource.com/21105
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-03-25 00:59:32 +00:00
Hyang-Ah Hana Kim
74ee969d3f cmd/gomobile: add support for android/arm64
forked from https://golang.org/cl/20434

- added app/internal/callfn package update.

- changed hashes.go because -for some reason- the generated hashes don't match.

- build_androidapp.go had to be changed to deal with openal package.

Fixes golang/go#10743

Change-Id: Iaa3f55d80c5fd184338d27832dc5c90cb772bd6a
Reviewed-on: https://go-review.googlesource.com/20707
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Elias Naur <elias.naur@gmail.com>
2016-03-14 23:00:38 +00:00
Hyang-Ah (Hana) Kim
52e0785361 cmd/gomobile: enable android/386, android/amd64 support
Change-Id: I044c6f773cb91b75b00171db688c6b4fbe8ec86e
Reviewed-on: https://go-review.googlesource.com/19600
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-02-19 04:52:18 +00:00
Hyang-Ah Hana Kim
0a84d43930 cmd/gomobile: refactor android*Env to handle more architectures
This does not change the tool's behavior.

The global ndkConfig 'ndk' holds info on all supported architectures
with the latest Go and gomobile tools (tip), and provides Root and
Toolchain methods that returns the current NDK installation directory
and the toolchain info depending on the GOPATH and the current go
version.

The global androidEnv is a map from arch name to the env vars.

ndkccpath is replaced by ndk.Root.

For golang/go#10743

Change-Id: I70d8e7b3e9979836112eb82d50c468df4f4ab43f
Reviewed-on: https://go-review.googlesource.com/17720
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-12-14 21:18:57 +00:00
David Crawshaw
f8cb2f0e7e cmd/gomobile: expose goVersion to subcommands
Pulled out of golang.org/cl/16913.

Change-Id: I041aba4e8cefed95ee2935139571140164b5d677
Reviewed-on: https://go-review.googlesource.com/17001
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-11-17 18:51:34 +00:00
David Crawshaw
560c1bec66 cmd/gomobile: print stderr on xcrun failure
The stderr includes a helpful note from Xcode about how to fix it.

Fixes golang/go#12515

Change-Id: I4eb944f29a7a3e39e2f4150c27a53e04d02e5d09
Reviewed-on: https://go-review.googlesource.com/15300
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-10-01 18:48:56 +00:00
Hyang-Ah (Hana) Kim
af3e09ede0 cmd/gomobile: add -work flag.
In order to make the artifacts of go build command preserved under WORK
directory, this change modifies TMPDIR (TEMP/TMP for windows)
environment variables to point to gomobile's tmpdir if -work flag is set.

> gomobile init -work
WORK=/gopath/pkg/gomobile/work-276689736

> ls /gopath/pkg/gomobile/work-276689736
README			go-build823903592	openal
android-ndk-r10e	go-build858075903
go-build365743399	go-build921886344

> gomobile build -work golang.org/x/mobile/example/basic
WORK=/tmp/gomobile-work-863381843

> ls /tmp/gomobile-work-863381843
go-build102034516	libbasic.so

> gomobile bind -work github.com/hyangah/ivy
WORK=/tmp/gomobile-work-355100962

> ls /tmp/gomobile-work-355100962
android			go-build284034365	javac-output
androidlib		go_ivy

Change-Id: I2f467e0063bc1c8b8c636a8cd6d100e86a99a91a
Reviewed-on: https://go-review.googlesource.com/12720
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-07-28 13:37:12 +00:00
David Crawshaw
2928ad7782 cmd/gomobile: use nm to build list of packages
Today we only look at direct imports of package main for an import of
golang.org/x/mobile/app, which is unfortunate. We also do a complete
package tree load using go/build looking for the OpenAL import when
building for android, which involves reading a lot of files.

The compiler and linker have already done all of this work for us.
Run nm on the output binary and extract package names from it.

Change-Id: Ie4f07befede5017bbca7d24325062369d4b5c30d
Reviewed-on: https://go-review.googlesource.com/12645
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-07-27 23:32:43 +00:00
David Crawshaw
ea6f260cd0 cmd/gomobile: update tests and add bind tests
Change-Id: I9e2fdf179b1e07a8b0d9b612913814768f8284dc
Reviewed-on: https://go-review.googlesource.com/12331
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-07-17 16:18:56 +00:00
David Crawshaw
9300366e65 cmd/gomobile: use new -pkgdir flag
The go command now has a -pkgdir flag, which specifies a directory
for all install output, including the standard library. Use it to
build the mobile compilers under $GOMOBILE, so that targets like
the iOS simulator (darwin/386) do not conflict with system targets.
The result is we no longer need GOROOT to be writable.

The iOS simulator now works with gomobile bind.

Fixes golang/go#11342.

Change-Id: I0bc6378e0cb82e3175b2a1efe355e3ce39533649
Reviewed-on: https://go-review.googlesource.com/12303
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-07-16 20:10:22 +00:00
David Crawshaw
c8fe70554f cmd/gomobile: use standard env to run Go tool
Now that we no longer modify the user's $GOROOT and run make.bash,
the need for isolating the environment is gone. Pass through
whatever users want, overriding only those necesssary for corss
compilation.

While here, remove some dead code.

Fixes golang/go#11672.

Change-Id: Iaf867913eaa1311519a4d5a7a8169228ebf21346
Reviewed-on: https://go-review.googlesource.com/12128
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-07-14 10:24:28 +00:00
David Crawshaw
e5193c59b3 cmd/gomobile: reorganize build logic
The goal here is to remove several inconsistencies between
-target=android and -target=ios support, along with making the flow
of the command follow the path you might expect given a certain set
of flags, and preparing for `gomobile bind` support of ios. In
particular, building non-main packages now works with both targets
and the initialization of global build state is clearer.

The reorg also is designed around an nm trick I thought of
yesterday to do better package import scanning without a slow
all-file scan. This will give better detection of x/mobile/app and
x/mobile/exp/audio/al packages. There's a TODO about it, and I'll do
it in a future CL.

Tested with:

	go test golang.org/x/mobile/cmd/gomobile
	gomobile init
	gomobile bind golang.org/x/mobile/asset
	go test golang.org/x/mobile/bind/java
	gomobile build -target=ios golang.org/x/mobile/example/basic
	gomobile build -target=ios golang.org/x/mobile/gl
	gomobile build -target=android golang.org/x/mobile/gl
	gomobile build -target=android golang.org/x/mobile/example/basic
	(Along with manual testing of basic on an android device.)

That might make a pretty good _test.go.

Change-Id: I41230008c3c15db25a11c33b9eaca4abada9f411
Reviewed-on: https://go-review.googlesource.com/12051
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
2015-07-13 18:54:16 +00:00