diff --git a/bind/java/SeqTest.java b/bind/java/SeqTest.java index 6bce54d..2439c51 100644 --- a/bind/java/SeqTest.java +++ b/bind/java/SeqTest.java @@ -581,4 +581,8 @@ public class SeqTest extends InstrumentationTestCase { public void testSIGPIPE() { Testpkg.testSIGPIPE(); } + + public void testTags() { + assertEquals("Constant from a tagged file", 42, Testpkg.TaggedConst); + } } diff --git a/bind/java/seq_test.go b/bind/java/seq_test.go index d8636a2..d8271ad 100644 --- a/bind/java/seq_test.go +++ b/bind/java/seq_test.go @@ -106,12 +106,12 @@ func runTest(t *testing.T, pkgNames []string, javaPkg, javaCls string) { } } - cmd := []string{"gomobile", "bind", "-o", "pkg.aar"} + args := []string{"bind", "-tags", "aaa bbb", "-o", "pkg.aar"} if javaPkg != "" { - cmd = append(cmd, "-javapkg", javaPkg) + args = append(args, "-javapkg", javaPkg) } - cmd = append(cmd, pkgNames...) - buf, err := run(strings.Join(cmd, " ")) + args = append(args, pkgNames...) + buf, err := exec.Command("gomobile", args...).CombinedOutput() if err != nil { t.Logf("%s", buf) t.Fatalf("failed to run gomobile bind: %v", err) diff --git a/bind/objc/SeqTest.m b/bind/objc/SeqTest.m index 91f2468..e6d0fe7 100644 --- a/bind/objc/SeqTest.m +++ b/bind/objc/SeqTest.m @@ -447,4 +447,8 @@ static int numI = 0; - (void)testSIGPIPE { TestpkgTestSIGPIPE(); } + +- (void)testTags { + XCTAssertEqual(42, TestpkgTaggedConst, @"Tagged const must exist"); +} @end diff --git a/bind/objc/seq_test.go b/bind/objc/seq_test.go index a75ac5f..4dfa334 100644 --- a/bind/objc/seq_test.go +++ b/bind/objc/seq_test.go @@ -102,13 +102,15 @@ func runTest(t *testing.T, pkgNames []string, project, testfile string, dumpOutp } defer os.Chdir(cwd) - buf, err := run("gomobile bind -target=ios " + strings.Join(pkgNames, " ")) + cmd := exec.Command("gomobile", "bind", "-target", "ios", "-tags", "aaa bbb") + cmd.Args = append(cmd.Args, pkgNames...) + buf, err := cmd.CombinedOutput() if err != nil { t.Logf("%s", buf) t.Fatalf("failed to run gomobile bind: %v", err) } - cmd := exec.Command("xcodebuild", "test", "-scheme", project, "-destination", *destination) + cmd = exec.Command("xcodebuild", "test", "-scheme", project, "-destination", *destination) buf, err = cmd.CombinedOutput() if err != nil { t.Logf("%s", buf) diff --git a/bind/testpkg/tagged.go b/bind/testpkg/tagged.go new file mode 100644 index 0000000..69ebff0 --- /dev/null +++ b/bind/testpkg/tagged.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aaa,bbb + +// This file tests that tags work with gomobile. +package testpkg + +const TaggedConst = 42 diff --git a/cmd/gomobile/bind.go b/cmd/gomobile/bind.go index 1256265..2c70f92 100644 --- a/cmd/gomobile/bind.go +++ b/cmd/gomobile/bind.go @@ -91,6 +91,10 @@ func runBind(cmd *command) error { ctx.GOARCH = "arm" ctx.GOOS = targetOS + if ctx.GOOS == "darwin" { + ctx.BuildTags = append(ctx.BuildTags, "ios") + } + if bindJavaPkg != "" && ctx.GOOS != "android" { return fmt.Errorf("-javapkg is supported only for android target") } diff --git a/cmd/gomobile/bind_iosapp.go b/cmd/gomobile/bind_iosapp.go index 4224b06..3f13587 100644 --- a/cmd/gomobile/bind_iosapp.go +++ b/cmd/gomobile/bind_iosapp.go @@ -197,7 +197,7 @@ var iosModuleMapTmpl = template.Must(template.New("iosmmap").Parse(`framework mo func goIOSBindArchive(name, path string, env, fileBases []string) (string, error) { arch := getenv(env, "GOARCH") archive := filepath.Join(tmpdir, name+"-"+arch+".a") - err := goBuild(path, env, "-buildmode=c-archive", "-tags=ios", "-o", archive) + err := goBuild(path, env, "-buildmode=c-archive", "-o", archive) if err != nil { return "", err } diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go index 61bfe07..de12951 100644 --- a/cmd/gomobile/bind_test.go +++ b/cmd/gomobile/bind_test.go @@ -106,7 +106,7 @@ mkdir -p $WORK/gomobile_bind mkdir -p $WORK/gomobile_bind mkdir -p $WORK/gomobile_bind mkdir -p $WORK/gen/src/Java -GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++ CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x golang.org/x/mobile/asset +GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++ CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go install -pkgdir=$GOMOBILE/pkg_android_arm -x golang.org/x/mobile/asset rm -r -f "$WORK/fakegopath" mkdir -p $WORK/fakegopath/pkg cp $GOMOBILE/pkg_android_arm/golang.org/x/mobile/asset.a $WORK/fakegopath/pkg/android_arm/golang.org/x/mobile/asset.a @@ -134,7 +134,7 @@ mkdir -p $WORK/gomobile_bind cp $GOPATH/src/golang.org/x/mobile/bind/seq.go.support $WORK/gomobile_bind/seq.go mkdir -p $WORK/gomobile_bind mkdir -p $WORK/android/src/main/java/go -GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go build -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so $WORK/androidlib/main.go +GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 GOPATH=$WORK/gen:$GOPATH go build -pkgdir=$GOMOBILE/pkg_android_arm -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so $WORK/androidlib/main.go rm $WORK/android/src/main/java/go/Seq.java ln -s $GOPATH/src/golang.org/x/mobile/bind/java/Seq.java $WORK/android/src/main/java/go/Seq.java rm $WORK/android/src/main/java/go/LoadJNI.java diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go index 3ed4576..3b36502 100644 --- a/cmd/gomobile/build.go +++ b/cmd/gomobile/build.go @@ -15,7 +15,6 @@ import ( "os/exec" "regexp" "runtime" - "strconv" "strings" ) @@ -270,8 +269,10 @@ func goCmd(subcmd string, srcs []string, env []string, args ...string) error { "go", subcmd, "-pkgdir="+pkgdir(env), - "-tags="+strconv.Quote(strings.Join(ctx.BuildTags, ",")), ) + if len(ctx.BuildTags) > 0 { + cmd.Args = append(cmd.Args, "-tags", strings.Join(ctx.BuildTags, " ")) + } if buildV { cmd.Args = append(cmd.Args, "-v") } diff --git a/cmd/gomobile/build_darwin_test.go b/cmd/gomobile/build_darwin_test.go index a5d8de6..0cb6754 100644 --- a/cmd/gomobile/build_darwin_test.go +++ b/cmd/gomobile/build_darwin_test.go @@ -50,8 +50,8 @@ mkdir -p $WORK/main echo "{{template "infoplist" .Xinfo}}" > $WORK/main/Info.plist mkdir -p $WORK/main/Images.xcassets/AppIcon.appiconset echo "{{.Xcontents}}" > $WORK/main/Images.xcassets/AppIcon.appiconset/Contents.json -GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go build -pkgdir=$GOMOBILE/pkg_darwin_arm -tags="tag1,ios" -x -o=$WORK/arm golang.org/x/mobile/example/basic -GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go build -pkgdir=$GOMOBILE/pkg_darwin_arm64 -tags="tag1,ios" -x -o=$WORK/arm64 golang.org/x/mobile/example/basic +GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go build -pkgdir=$GOMOBILE/pkg_darwin_arm -tags tag1 ios -x -o=$WORK/arm golang.org/x/mobile/example/basic +GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go build -pkgdir=$GOMOBILE/pkg_darwin_arm64 -tags tag1 ios -x -o=$WORK/arm64 golang.org/x/mobile/example/basic xcrun lipo -create $WORK/arm $WORK/arm64 -o $WORK/main/main mkdir -p $WORK/main/assets xcrun xcodebuild -configuration Release -project $WORK/main.xcodeproj diff --git a/cmd/gomobile/build_test.go b/cmd/gomobile/build_test.go index f7790f0..1234c7a 100644 --- a/cmd/gomobile/build_test.go +++ b/cmd/gomobile/build_test.go @@ -100,7 +100,7 @@ func TestAndroidBuild(t *testing.T) { var androidBuildTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile WORK=$WORK mkdir -p $WORK/lib/armeabi-v7a -GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go build -pkgdir=$GOMOBILE/pkg_android_arm -tags="tag1" -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic +GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-clang++{{.EXE}} CGO_CFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_CPPFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_LDFLAGS=-target armv7a-none-linux-androideabi --sysroot $GOMOBILE/android-{{.NDK}}/arm/sysroot CGO_ENABLED=1 GOARM=7 go build -pkgdir=$GOMOBILE/pkg_android_arm -tags tag1 -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic `)) func TestParseBuildTargetFlag(t *testing.T) {