Skip to content

Commit b36e624

Browse files
committed
cmd/gomobile: concurrent build for iOS archive files
This change makes building archive files for iOS concurrent for each architecture and each platform. The strategy is basically the same as my previous CL for Android: https://go.dev/cl/426274. This change also specifies GOMODCACHE explicitly when executing Go commands so that the existing cache is always used. The default GOMODCACHE is $GOPATH/pkg/mod, and this path varies when a temporary GOPATH is specified, which results in cold cache. Before this change (on my MacBook Pro 2020): $ time go run ./cmd/gomobile/ bind -target ios ./example/bind/hello/ real 0m23.274s user 0m15.751s sys 0m10.469s After this change: $ time go run ./cmd/gomobile/ bind -target ios ./example/bind/hello/ real 0m8.059s user 0m13.763s sys 0m9.004s Updates golang/go#37902 Updates golang/go#54770 Change-Id: Iaeb077b58c22ab63d28f78972a0af76660883a05 Reviewed-on: https://go-review.googlesource.com/c/mobile/+/442195 Reviewed-by: Changkun Ou <[email protected]> Run-TryBot: Hajime Hoshi <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Hyang-Ah Hana Kim <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]>
1 parent 406ed3a commit b36e624

File tree

6 files changed

+105
-56
lines changed

6 files changed

+105
-56
lines changed

cmd/gomobile/bind_iosapp.go

+67-42
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
4545
}
4646

4747
// Run the gobind command for each platform
48-
var wg errgroup.Group
48+
var gobindWG errgroup.Group
4949
for platform, outDir := range outDirsForPlatform {
5050
platform := platform
5151
outDir := outDir
52-
wg.Go(func() error {
52+
gobindWG.Go(func() error {
5353
// Catalyst support requires iOS 13+
5454
v, _ := strconv.ParseFloat(buildIOSVersion, 64)
5555
if platform == "maccatalyst" && v < 13.0 {
@@ -78,7 +78,7 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
7878
return nil
7979
})
8080
}
81-
if err := wg.Wait(); err != nil {
81+
if err := gobindWG.Wait(); err != nil {
8282
return err
8383
}
8484

@@ -87,12 +87,60 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
8787
return err
8888
}
8989

90+
// Build archive files.
91+
var buildWG errgroup.Group
92+
for _, t := range targets {
93+
t := t
94+
buildWG.Go(func() error {
95+
outDir := outDirsForPlatform[t.platform]
96+
outSrcDir := filepath.Join(outDir, "src")
97+
98+
if modulesUsed {
99+
// Copy the source directory for each architecture for concurrent building.
100+
newOutSrcDir := filepath.Join(outDir, "src-"+t.arch)
101+
if !buildN {
102+
if err := doCopyAll(newOutSrcDir, outSrcDir); err != nil {
103+
return err
104+
}
105+
}
106+
outSrcDir = newOutSrcDir
107+
}
108+
109+
// Copy the environment variables to make this function concurrent-safe.
110+
env := make([]string, len(appleEnv[t.String()]))
111+
copy(env, appleEnv[t.String()])
112+
113+
// Add the generated packages to GOPATH for reverse bindings.
114+
gopath := fmt.Sprintf("GOPATH=%s%c%s", outDir, filepath.ListSeparator, goEnv("GOPATH"))
115+
env = append(env, gopath)
116+
117+
// Run `go mod tidy` to force to create go.sum.
118+
// Without go.sum, `go build` fails as of Go 1.16.
119+
if modulesUsed {
120+
if err := writeGoMod(outSrcDir, t.platform, t.arch); err != nil {
121+
return err
122+
}
123+
if err := goModTidyAt(outSrcDir, env); err != nil {
124+
return err
125+
}
126+
}
127+
128+
if err := goAppleBindArchive(appleArchiveFilepath(name, t), env, outSrcDir); err != nil {
129+
return fmt.Errorf("%s/%s: %v", t.platform, t.arch, err)
130+
}
131+
132+
return nil
133+
})
134+
}
135+
if err := buildWG.Wait(); err != nil {
136+
return err
137+
}
138+
90139
var frameworkDirs []string
91140
frameworkArchCount := map[string]int{}
92141
for _, t := range targets {
93142
outDir := outDirsForPlatform[t.platform]
94-
outSrcDir := filepath.Join(outDir, "src")
95-
gobindDir := filepath.Join(outSrcDir, "gobind")
143+
gobindDir := filepath.Join(outDir, "src", "gobind")
96144

97145
env := appleEnv[t.String()][:]
98146
sdk := getenv(env, "DARWIN_SDK")
@@ -101,41 +149,14 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
101149
frameworkDirs = append(frameworkDirs, frameworkDir)
102150
frameworkArchCount[frameworkDir] = frameworkArchCount[frameworkDir] + 1
103151

104-
fileBases := make([]string, len(pkgs)+1)
105-
for i, pkg := range pkgs {
106-
fileBases[i] = bindPrefix + strings.Title(pkg.Name)
107-
}
108-
fileBases[len(fileBases)-1] = "Universe"
109-
110-
// Add the generated packages to GOPATH for reverse bindings.
111-
gopath := fmt.Sprintf("GOPATH=%s%c%s", outDir, filepath.ListSeparator, goEnv("GOPATH"))
112-
env = append(env, gopath)
113-
114-
if err := writeGoMod(filepath.Join(outDir, "src"), t.platform, t.arch); err != nil {
115-
return err
116-
}
117-
118-
// Run `go mod tidy` to force to create go.sum.
119-
// Without go.sum, `go build` fails as of Go 1.16.
120-
if modulesUsed {
121-
if err := goModTidyAt(outSrcDir, env); err != nil {
122-
return err
123-
}
124-
}
125-
126-
path, err := goAppleBindArchive(name+"-"+t.platform+"-"+t.arch, env, outSrcDir)
127-
if err != nil {
128-
return fmt.Errorf("%s/%s: %v", t.platform, t.arch, err)
129-
}
130-
131152
versionsDir := filepath.Join(frameworkDir, "Versions")
132153
versionsADir := filepath.Join(versionsDir, "A")
133154
titlePath := filepath.Join(versionsADir, title)
134155
if frameworkArchCount[frameworkDir] > 1 {
135156
// Not the first static lib, attach to a fat library and skip create headers
136157
fatCmd := exec.Command(
137158
"xcrun",
138-
"lipo", path, titlePath, "-create", "-output", titlePath,
159+
"lipo", appleArchiveFilepath(name, t), titlePath, "-create", "-output", titlePath,
139160
)
140161
if err := runCmd(fatCmd); err != nil {
141162
return err
@@ -159,12 +180,18 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
159180

160181
lipoCmd := exec.Command(
161182
"xcrun",
162-
"lipo", path, "-create", "-o", titlePath,
183+
"lipo", appleArchiveFilepath(name, t), "-create", "-o", titlePath,
163184
)
164185
if err := runCmd(lipoCmd); err != nil {
165186
return err
166187
}
167188

189+
fileBases := make([]string, len(pkgs)+1)
190+
for i, pkg := range pkgs {
191+
fileBases[i] = bindPrefix + strings.Title(pkg.Name)
192+
}
193+
fileBases[len(fileBases)-1] = "Universe"
194+
168195
// Copy header file next to output archive.
169196
var headerFiles []string
170197
if len(fileBases) == 1 {
@@ -236,7 +263,6 @@ func goAppleBind(gobind string, pkgs []*packages.Package, targets []targetInfo)
236263
if err != nil {
237264
return err
238265
}
239-
240266
}
241267

242268
// Finally combine all frameworks to an XCFramework
@@ -267,13 +293,12 @@ var appleModuleMapTmpl = template.Must(template.New("iosmmap").Parse(`framework
267293
export *
268294
}`))
269295

270-
func goAppleBindArchive(name string, env []string, gosrc string) (string, error) {
271-
archive := filepath.Join(tmpdir, name+".a")
272-
err := goBuildAt(gosrc, "./gobind", env, "-buildmode=c-archive", "-o", archive)
273-
if err != nil {
274-
return "", err
275-
}
276-
return archive, nil
296+
func appleArchiveFilepath(name string, t targetInfo) string {
297+
return filepath.Join(tmpdir, name+"-"+t.platform+"-"+t.arch+".a")
298+
}
299+
300+
func goAppleBindArchive(out string, env []string, gosrc string) error {
301+
return goBuildAt(gosrc, "./gobind", env, "-buildmode=c-archive", "-o", out)
277302
}
278303

279304
var appleBindHeaderTmpl = template.Must(template.New("apple.h").Parse(`

cmd/gomobile/bind_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ var bindAndroidTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GO
188188
WORK=$WORK
189189
GOOS=android CGO_ENABLED=1 gobind -lang=go,java -outdir=$WORK{{if .JavaPkg}} -javapkg={{.JavaPkg}}{{end}} golang.org/x/mobile/asset
190190
mkdir -p $WORK/src-android-arm
191-
PWD=$WORK/src-android-arm GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go mod tidy
192-
PWD=$WORK/src-android-arm GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go build -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so ./gobind
191+
PWD=$WORK/src-android-arm GOMODCACHE=$GOPATH/pkg/mod GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go mod tidy
192+
PWD=$WORK/src-android-arm GOMODCACHE=$GOPATH/pkg/mod GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go build -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so ./gobind
193193
PWD=$WORK/java javac -d $WORK/javac-output -source 1.7 -target 1.7 -bootclasspath {{.AndroidPlatform}}/android.jar *.java
194194
jar c -C $WORK/javac-output .
195195
`))
@@ -198,9 +198,9 @@ var bindAppleTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPA
198198
WORK=$WORK
199199
rm -r -f "{{.Output}}.xcframework"
200200
GOOS=ios CGO_ENABLED=1 gobind -lang=go,objc -outdir=$WORK/ios -tags=ios{{if .Prefix}} -prefix={{.Prefix}}{{end}} golang.org/x/mobile/asset
201-
mkdir -p $WORK/ios/src
202-
PWD=$WORK/ios/src GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos GOPATH=$WORK/ios:$GOPATH go mod tidy
203-
PWD=$WORK/ios/src GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos GOPATH=$WORK/ios:$GOPATH go build -x -buildmode=c-archive -o $WORK/{{.Output}}-ios-arm64.a ./gobind
201+
mkdir -p $WORK/ios/src-arm64
202+
PWD=$WORK/ios/src-arm64 GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos GOPATH=$WORK/ios:$GOPATH go mod tidy
203+
PWD=$WORK/ios/src-arm64 GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos GOPATH=$WORK/ios:$GOPATH go build -x -buildmode=c-archive -o $WORK/{{.Output}}-ios-arm64.a ./gobind
204204
mkdir -p $WORK/ios/iphoneos/{{.Output}}.framework/Versions/A/Headers
205205
ln -s A $WORK/ios/iphoneos/{{.Output}}.framework/Versions/Current
206206
ln -s Versions/Current/Headers $WORK/ios/iphoneos/{{.Output}}.framework/Headers

cmd/gomobile/build.go

+26-2
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,15 @@ func goCmdAt(at string, subcmd string, srcs []string, env []string, args ...stri
332332
}
333333
cmd.Args = append(cmd.Args, args...)
334334
cmd.Args = append(cmd.Args, srcs...)
335-
cmd.Env = append([]string{}, env...)
335+
336+
// Specify GOMODCACHE explicitly. The default cache path is GOPATH[0]/pkg/mod,
337+
// but the path varies when GOPATH is specified at env, which results in cold cache.
338+
if gmc, err := goModCachePath(); err == nil {
339+
env = append([]string{"GOMODCACHE=" + gmc}, env...)
340+
} else {
341+
env = append([]string{}, env...)
342+
}
343+
cmd.Env = env
336344
cmd.Dir = at
337345
return runCmd(cmd)
338346
}
@@ -342,7 +350,15 @@ func goModTidyAt(at string, env []string) error {
342350
if buildV {
343351
cmd.Args = append(cmd.Args, "-v")
344352
}
345-
cmd.Env = append([]string{}, env...)
353+
354+
// Specify GOMODCACHE explicitly. The default cache path is GOPATH[0]/pkg/mod,
355+
// but the path varies when GOPATH is specified at env, which results in cold cache.
356+
if gmc, err := goModCachePath(); err == nil {
357+
env = append([]string{"GOMODCACHE=" + gmc}, env...)
358+
} else {
359+
env = append([]string{}, env...)
360+
}
361+
cmd.Env = env
346362
cmd.Dir = at
347363
return runCmd(cmd)
348364
}
@@ -422,3 +438,11 @@ type targetInfo struct {
422438
func (t targetInfo) String() string {
423439
return t.platform + "/" + t.arch
424440
}
441+
442+
func goModCachePath() (string, error) {
443+
out, err := exec.Command("go", "env", "GOMODCACHE").Output()
444+
if err != nil {
445+
return "", err
446+
}
447+
return strings.TrimSpace(string(out)), nil
448+
}

cmd/gomobile/build_darwin_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ mkdir -p $WORK/main
107107
echo "{{template "infoplist" .Xinfo}}" > $WORK/main/Info.plist
108108
mkdir -p $WORK/main/Images.xcassets/AppIcon.appiconset
109109
echo "{{.Xcontents}}" > $WORK/main/Images.xcassets/AppIcon.appiconset/Contents.json
110-
GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos go build -tags tag1 -x -ldflags=-w -o=$WORK/ios/arm64 {{.Pkg}}
111-
GOOS=ios GOARCH=amd64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x -ldflags=-w -o=$WORK/iossimulator/amd64 {{.Pkg}}
110+
GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos go build -tags tag1 -x -ldflags=-w -o=$WORK/ios/arm64 {{.Pkg}}
111+
GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=amd64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x -ldflags=-w -o=$WORK/iossimulator/amd64 {{.Pkg}}
112112
xcrun lipo -o $WORK/main/main -create $WORK/ios/arm64 $WORK/iossimulator/amd64
113113
mkdir -p $WORK/main/assets
114114
xcrun xcodebuild -configuration Release -project $WORK/main.xcodeproj -allowProvisioningUpdates DEVELOPMENT_TEAM={{.TeamID}}
@@ -117,7 +117,7 @@ mv $WORK/build/Release-iphoneos/main.app {{.BuildO}}
117117

118118
var appleOtherBuildTmpl = template.Must(infoplistTmpl.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
119119
WORK=$WORK
120-
GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos go build -tags tag1 -x {{.Pkg}}
121-
GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x {{.Pkg}}
122-
GOOS=ios GOARCH=amd64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x {{.Pkg}}
120+
GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphoneos -miphoneos-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphoneos go build -tags tag1 -x {{.Pkg}}
121+
GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=arm64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch arm64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x {{.Pkg}}
122+
GOMODCACHE=$GOPATH/pkg/mod GOOS=ios GOARCH=amd64 GOFLAGS=-tags=ios CC=iphonesimulator-clang CXX=iphonesimulator-clang++ CGO_CFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_CXXFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_LDFLAGS=-isysroot iphonesimulator -mios-simulator-version-min=13.0 -fembed-bitcode -arch x86_64 CGO_ENABLED=1 DARWIN_SDK=iphonesimulator go build -tags tag1 -x {{.Pkg}}
123123
`))

cmd/gomobile/build_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func TestAndroidBuild(t *testing.T) {
113113
var androidBuildTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
114114
WORK=$WORK
115115
mkdir -p $WORK/lib/armeabi-v7a
116-
GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 go build -tags tag1 -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
116+
GOMODCACHE=$GOPATH/pkg/mod GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 go build -tags tag1 -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
117117
`))
118118

119119
func TestParseBuildTarget(t *testing.T) {

cmd/gomobile/init_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ var initTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/
175175
rm -r -f "$GOMOBILE"
176176
mkdir -p $GOMOBILE
177177
WORK={{.GOPATH}}/pkg/gomobile/work
178-
go install -x golang.org/x/mobile/cmd/gobind@latest
178+
GOMODCACHE={{.GOPATH}}/pkg/mod go install -x golang.org/x/mobile/cmd/gobind@latest
179179
cp $OPENAL_PATH/include/AL/al.h $GOMOBILE/include/AL/al.h
180180
mkdir -p $GOMOBILE/include/AL
181181
cp $OPENAL_PATH/include/AL/alc.h $GOMOBILE/include/AL/alc.h

0 commit comments

Comments
 (0)