Closed
Description
What version of Go are you using (go version
)?
$ go version go version go1.18.3 darwin/arm64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="arm64" GOBIN="" GOCACHE="/Users/darrarski/Library/Caches/go-build" GOENV="/Users/darrarski/Library/Application Support/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="arm64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/darrarski/.go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/darrarski/.go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/opt/homebrew/opt/go/libexec" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/opt/homebrew/opt/go/libexec/pkg/tool/darwin_arm64" GOVCS="" GOVERSION="go1.18.3" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/darrarski/Dev/repo/go.mod" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/bh/t75dvhh939lbvnsq6n60mgtr0000gn/T/go-build841782302=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
I tried to build xcframework for iOS using Xcode 14 (14A5228q) developer tools with the following command:
$ gomobile bind -target ios gitlab.com/elixxir/client/bindings
What did you expect to see?
I expected the command to create xcframework. It works when I switch to Xcode 13.4.1 (13F100) developer tools.
What did you see instead?
When using Xcode 14 (14A5228q) developer tools, the command fails with the following error:
$ gomobile bind -target ios gitlab.com/elixxir/client/bindings gomobile: ios/arm64: go build -buildmode=c-archive -o /var/folders/bh/t75dvhh939lbvnsq6n60mgtr0000gn/T/gomobile-work-1445876485/bindings-ios-arm64.a ./gobind failed: exit status 2 # runtime/cgo cgo: C compiler "2022-06-09" not found: exec: "2022-06-09": executable file not found in $PATH
Activity
cherrymui commentedon Jun 9, 2022
I think gomobile picks up the C compiler from running
xcrun --find clang
, and that command on darwin/arm64 can sometimes contains bogus logging output starting with the date and time. That probably confuses gomobile.Could you try running that command again, maybe twice?
gomobile should probably be more resilient on that. Maybe it should only use stdout of
xcrun
, notstderr
. cc @hyangah@golang/ios
changkun commentedon Jun 10, 2022
I plan to upgrade to Xcode 14 soon so that it may be possible for me to take a look.
darrarski commentedon Jun 10, 2022
I tried to run the command several times yesterday, but the result was always the same. I'm unfamiliar with golang, but the error message "exec: 2022-06-09 not found" seemed suspicious. I thought it could be some kind of parsing issue.
I'm not sure if the problem is caused by parsing the result of
xcrun --find clang
, which gives the following output:with Xcode 13.4.1 (13F100):
with Xcode 14 (14A5228q):
However, I rerun the command today, and... it works! Still, I believe there is a bug hiding somewhere, as the problem was probably caused by the given date when the command was run (2022-06-09). Thankfully today (2022-06-10) it works fine :-)
darrarski commentedon Jun 10, 2022
I'm afraid you'll need to go back in time to reproduce ;-)
cherrymui commentedon Jun 10, 2022
On my mac M1 machine, it sometimes print messages like
It doesn't always print that. In my experience it is more likely to print if it is the first time to use such commands in a while. And the second and subsequent runs just behave normally, without the extra output.
Maybe it will print if you restart the machine and run that command immediately.
jakubgs commentedon Sep 7, 2022
I have also experienced this issue with the following messages:
These warnings appear to be included in
stdout
instead ofstderr
, and hence they affect how the path is parsed.I have currently no idea how to fix those warnings.
A proper fix would probably involve parsing and matching all lines with a regex.
jakubgs commentedon Sep 7, 2022
The issue appears to be coming from
envClang()
function:https://github.com/golang/mobile/blob/8578da9835fd365e78a6e63048c103b27a53a82c/cmd/gomobile/env.go#L434-L443
Which does indeed seem to call
xcrun --find clang
and accepts the output fromcmd.CombinedOutput()
indiscriminately.jakubgs commentedon Sep 7, 2022
Based on my tests this appears to only happen on the first try:
After host reboot it resets and those log messages show up again.
jakubgs commentedon Sep 7, 2022
According to this discussion: https://developer.apple.com/forums/thread/703233
The fix is:
But I tried reinstalling Command Line Tools or installing newer than
13.3.1
- in my case13.4
- and the message is still there.Honestly some input validation could be added to
envClang
.cmd/gomobile: filter out xcrun warnings to get path
36 remaining items