@@ -19,7 +19,6 @@ import (
19
19
)
20
20
21
21
var ctx = build .Default
22
- var pkg * build.Package // TODO(crawshaw): remove global pkg variable
23
22
var tmpdir string
24
23
25
24
var cmdBuild = & command {
@@ -72,17 +71,23 @@ const (
72
71
)
73
72
74
73
func runBuild (cmd * command ) (err error ) {
75
- cleanup , err := buildEnvInit ()
74
+ _ , err = runBuildImpl (cmd )
75
+ return
76
+ }
77
+
78
+ // runBuildImpl builds a package for mobiles based on the given commands.
79
+ // runBuildImpl returns a built package information and an error if exists.
80
+ func runBuildImpl (cmd * command ) (* build.Package , error ) { cleanup , err := buildEnvInit ()
76
81
if err != nil {
77
- return err
82
+ return nil , err
78
83
}
79
84
defer cleanup ()
80
85
81
86
args := cmd .Flag .Args ()
82
87
83
88
targetOS , targetArchs , err := parseBuildTarget (buildTarget )
84
89
if err != nil {
85
- return fmt .Errorf (`invalid -target=%q: %v` , buildTarget , err )
90
+ return nil , fmt .Errorf (`invalid -target=%q: %v` , buildTarget , err )
86
91
}
87
92
88
93
oldCtx := ctx
@@ -94,8 +99,14 @@ func runBuild(cmd *command) (err error) {
94
99
95
100
if ctx .GOOS == "darwin" {
96
101
ctx .BuildTags = append (ctx .BuildTags , "ios" )
102
+
103
+ if buildRelease {
104
+ targetArchs = []string {"arm" , "arm64" }
105
+ ctx .GOARCH = targetArchs [0 ]
106
+ }
97
107
}
98
108
109
+ var pkg * build.Package
99
110
switch len (args ) {
100
111
case 0 :
101
112
pkg , err = ctx .ImportDir (cwd , build .ImportComment )
@@ -106,14 +117,14 @@ func runBuild(cmd *command) (err error) {
106
117
os .Exit (1 )
107
118
}
108
119
if err != nil {
109
- return err
120
+ return nil , err
110
121
}
111
122
112
123
if pkg .Name != "main" && buildO != "" {
113
- return fmt .Errorf ("cannot set -o when building non-main package" )
124
+ return nil , fmt .Errorf ("cannot set -o when building non-main package" )
114
125
}
115
126
if buildBundleID == "" {
116
- return fmt .Errorf ("value for -appID is required for a mobile package" )
127
+ return nil , fmt .Errorf ("value for -appID is required for a mobile package" )
117
128
}
118
129
119
130
var nmpkgs map [string ]bool
@@ -123,39 +134,39 @@ func runBuild(cmd *command) (err error) {
123
134
for _ , arch := range targetArchs {
124
135
env := androidEnv [arch ]
125
136
if err := goBuild (pkg .ImportPath , env ); err != nil {
126
- return err
137
+ return nil , err
127
138
}
128
139
}
129
- return nil
140
+ return pkg , nil
130
141
}
131
142
nmpkgs , err = goAndroidBuild (pkg , buildBundleID , targetArchs , cmd .IconPath , cmd .AppName )
132
143
if err != nil {
133
- return err
144
+ return nil , err
134
145
}
135
146
case "darwin" :
136
147
if ! xcodeAvailable () {
137
- return fmt .Errorf ("-target=ios requires XCode" )
148
+ return nil , fmt .Errorf ("-target=ios requires XCode" )
138
149
}
139
150
if pkg .Name != "main" {
140
151
for _ , arch := range targetArchs {
141
152
env := darwinEnv [arch ]
142
153
if err := goBuild (pkg .ImportPath , env ); err != nil {
143
- return err
154
+ return nil , err
144
155
}
145
156
}
146
- return nil
157
+ return pkg , nil
147
158
}
148
159
nmpkgs , err = goIOSBuild (pkg , buildBundleID , targetArchs , cmd .AppName )
149
160
if err != nil {
150
- return err
161
+ return nil , err
151
162
}
152
163
}
153
164
154
165
if ! nmpkgs ["golang.org/x/mobile/app" ] {
155
- return fmt .Errorf (`%s does not import "golang.org/x/mobile/app"` , pkg .ImportPath )
166
+ return nil , fmt .Errorf (`%s does not import "golang.org/x/mobile/app"` , pkg .ImportPath )
156
167
}
157
168
158
- return nil
169
+ return pkg , nil
159
170
}
160
171
161
172
var nmRE = regexp .MustCompile (`[0-9a-f]{8} t (?:.*/vendor/)?(golang.org/x.*/[^.]*)` )
0 commit comments