Hi Elias, thank you for the quick reply, I see, you're correct it does 
support the archs for ios, I had not tried it for ios, because the 
documentation just mentions that you can specify specific instruction sets 
when binding for android:

$ gomobile bind --help


By default, -target=android builds shared libraries for all supported
>
> instruction sets (arm, arm64, 386, amd64). A subset of instruction sets
>
> can be selected by specifying target type with the architecture name. E.g.,
>
> -target=android/arm,android/386.
>
>
>> For -target ios, gomobile must be run on an OS X machine with Xcode
>
> installed. The generated Objective-C types can be prefixed with the -prefix
>
> flag.
>
>
There's no mention that you can filter out instruction sets for iOS but I 
just tested using it and it works!, thank you for pointing that out.

Now, regarding the bitcode part basically, because it's added 
automatically; any libraries that don't have BITCODE enabled don't link 
properly, here's some sample output:

GO111MODULE=off gomobile bind -v -target=ios/arm,ios/arm64,ios/amd64 
-tags=ios example.com/mobile
runtime/cgo
golang.org/x/mobile/internal/mobileinit
os/user
net
example.com/pycore
example.com/jscore
# example.com/pycore
ld: warning: ignoring file pycore/libpython-scriptengine.a, file was built 
for archive which is not the architecture being linked (armv7): 
pycore/libpython-scriptengine.a
ld: warning: object file 
(/Users/tristian/go/src/example.com/pycore/libpython-scriptengine-ios.a(python-scriptengine-ios.o))
 
was built for newer iOS version (9.3) than being linked (7.0)
ld: 
'/Users/tristian/go/src/example.com/pycore/libpython-scriptengine-ios.a(python-scriptengine-ios.o)'
 
does not contain bitcode. You must rebuild it with bitcode enabled (Xcode 
setting ENABLE_BITCODE), obtain an updated library from the vendor, or 
disable bitcode for this target. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
# example.com/jscore
ld: warning: ignoring file jscore/libscriptengine-ios-x86_64.a, file was 
built for archive which is not the architecture being linked (armv7): 
jscore/libscriptengine-ios-x86_64.a
ld: warning: object file 
(/Users/tristian/go/src/example.com/jscore/libscriptengine-ios-arm.a(test_lib_for_ios.o))
 
was built for newer iOS version (10.2) than being linked (7.0)
ld: 
'/Users/tristian/go/src/example.com/jscore/libscriptengine-ios-arm.a(test_lib_for_ios.o)'
 
does not contain bitcode. You must rebuild it with bitcode enabled (Xcode 
setting ENABLE_BITCODE), obtain an updated library from the vendor, or 
disable bitcode for this target. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
gomobile: darwin-arm: go build -tags ios ios -v -buildmode=c-archive -o 
/var/folders/g1/v3hz1sm92nv7wbzpg3dx_h_h0000gp/T/gomobile-work-974051835/mobile-arm.a
 
gobind failed: exit status 2

make: *** [Mobile.framework] Error 1

This would force us to recompile libpython-scriptengine-ios.a or any other 
libraries that don't have bitcode support

When I comment out -fembed-bitcode I no longer see that error.

Best, Tristian

On Monday, April 1, 2019 at 12:09:35 AM UTC-7, ma...@eliasnaur.com wrote:
>
> Hi,
>
> The -target flag does support architectures. Have you tried -target 
> ios/amd64,ios/arm64,ios/arm from your example?
>
> I'm not sure I understand the problem with bitcode and macOS; what is the 
> error you get from  -fembed-bitcode?
>
>   - elias
>
> On Monday, April 1, 2019 at 6:32:35 AM UTC+2, Tristian Azuara wrote:
>>
>> Hi!
>>
>> First, gomobile has been a real life saver thank you to all of those who 
>> have contributed.
>>
>> The current commit at master (167ebed0ec6dd457a6b24a4f61db913f0af11f70) 
>> automatically adds the "-fembed-bitcode" flag to the cflags and 
>> it also automatically builds for all of iOS architectures.
>>
>> We currently use `gomobile` to produce a framework for iOS and macOS 
>> applications. We also include applications for macOS that do not include 
>> support for instruction sets such as `386` but iOS does, some of those 
>> libraries we have no control over and some are our own.
>>
>> Our current workaround is for us to manually patch `gomobile`'s source, 
>> like follows:
>>
>>  λ ~/go/src/golang.org/x/mobile (master): git diff -p
>> diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go
>> index dbf9c8c..8f21b10 100644
>> --- a/cmd/gomobile/env.go
>> +++ b/cmd/gomobile/env.go
>> @@ -23,7 +23,8 @@ var (
>>         androidArmNM string
>>         darwinArmNM  string
>>  
>> -       allArchs = []string{"arm", "arm64", "386", "amd64"}
>> +       // allArchs = []string{"arm", "arm64", "386", "amd64"}
>> +       allArchs = []string{"arm", "arm64", "amd64"}
>>  )
>>  
>>  func buildEnvInit() (cleanup func(), err error) {
>> @@ -137,7 +138,7 @@ func envInit() (err error) {
>>                 default:
>>                         panic(fmt.Errorf("unknown GOARCH: %q", arch))
>>                 }
>> -               cflags += " -fembed-bitcode"
>> +               // cflags += " -fembed-bitcode"
>>                 if err != nil {
>>                         return err
>>                 }
>>
>> I think that the addition of the following options would greatly simplify 
>> our CI/CD process, the goal would be to be able to use the command as 
>> follows:
>>
>> $ gomobile bind -target=ios/arm,ios/arm64,ios/amd64 -nobitcode 
>> example.com/libs/mobile
>>
>> By running it that way basically one would be able to exclude iOS 
>> simulator arch and the bitcode situation. I understand that probably it may 
>> not be something common, but being able to adjust the build process would 
>> be a great boon.
>>
>> Does anyone else find that this would be something useful?, I'd be happy 
>> to contribute to this.
>>
>> Cheers, Tristian.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to