Goで書いたUnityのネイティブプラグインをGo Mobileでビルドする #golang #unity

May 12, 2016

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

はじめに

前回の記事では、iOSのビルドの際、ツールチェインの再ビルドをする必要があると書きましたが、Go Mobileのツールチェインを使えば必要ありません。

Go Mobileのインストール

Go Mobileについての詳細はこちらの記事を見て頂ければ良いと思いますが、インストールは非常に簡単です。 以下の2つのコマンドを走らせます。

$ go get -u golang.org/x/mobile/cmd/gomobile
$ gomobile init -v

もし、gomobile initに失敗した場合は、一度$GOPATH/pkg/gomobileディレクトリを削除して、再度実行してみて下さい。

インストールに成功したら、以下のようにモバイル用にビルドされたパッケージが入ってるか見てみて下さい。

$ ls -1 $GOPATH/pkg/gomobile/
android-ndk-r10e
dl
pkg_android_386
pkg_android_amd64
pkg_android_arm
pkg_android_arm64
pkg_darwin_amd64
pkg_darwin_arm
pkg_darwin_arm64
version

Android向けにビルドする

ビルドするコードは前回のものと同じです。 ビルドコマンドもほとんど同じですが、-pkgdirオプションを指定します。 このオプションを指定することで、Go Mobileによってインストールされているツールチェインを使ってビルドします。 arm-linux-androideabi-gcc$GOPATH/pkg/gomobile/android-ndk-r10e/arm/bin/以下にあるものを使いますので、PATHを通してください。

$ CGO_ENABLED=1 \
CC=arm-linux-androideabi-gcc \
GOOS=android \
GOARCH=arm \
GOARM=7 \
go build -buildmode=c-shared -pkgdir=$GOPATH/pkg/gomobile/pkg_android_arm -o libhoge.so hoge.go

iOS向けにビルドする

前回は、CC_FOR_TARGETCXX_FOR_TARGETmisc/ios/clangwrap.shで指定して、ツールチェインを再ビルドしたため、CCCXXなどをgo build時に指定しましせんでしたが、今回は指定します。

GOOS=darwin \
GOARCH=arm \
GOARM=7 \
CC=`xcrun --sdk iphoneos -f clang` \
CXX=`xcrun --sdk iphoneos -f clang` \
CGO_CFLAGS="-isysroot `xcrun --sdk iphoneos --show-sdk-path` -arch armv7 -miphoneos-version-min=6.1" \
CGO_LDFLAGS="-isysroot `xcrun --sdk iphoneos --show-sdk-path` -arch armv7 -miphoneos-version-min=6.1" \
CGO_ENABLED=1 \
go build -pkgdir=$GOPATH/pkg/gomobile/pkg_darwin_arm -buildmode=c-archive -tags=ios -o hoge.a hoge.go

おわりに

今回はGo Mobileのツールチェインを使ってUnityのネイティブプラグインをビルドする方法について紹介しました。 -pkgdirで指定するアーキテクチャも変えればarm64などもビルドできると思います。