Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add darwin arm64 target #39

Merged
merged 5 commits into from Apr 27, 2021
Merged

Conversation

lucor
Copy link
Member

@lucor lucor commented Mar 31, 2021

This PR adds support for the darwin arm64 target.
It is a follow-up of the PR #34 based on the Docker image refactoring (#37).

Fixes #33

Help testing this PR on a macOS M1 is appreciated since don't have direct access to one.

To test this PR:

TL;DR

  • Downoad the test.zip binary
  • Unzip and run on a macOS M1

Build the binary using fyne-cross

  • clone the PR repo and checkout the feature/darwin-arm64 branch:
cd /tmp
git clone https://github.com/lucor/fyne-io-fyne-cross.git
cd fyne-io-fyne-cross
git checkout feature/darwin-arm64
  • compile fyne-cross
  • download Command Line Tools for Xcode >= 12.4
  • build the darwin docker image:
    fyne-cross darwin-image --xcode-path /path/to/Command_Line_Tools_for_Xcode_<version>.dmg
  • build the hello world app for arm64:
    fyne-cross darwin --app-id com.example.test --arch arm64
  • test the app on M1

NOTE: the creation of the image may take several minutes and may require more than 25 GB of free disk space.

@lucor lucor self-assigned this Mar 31, 2021
@lucor lucor added the enhancement New feature or request label Mar 31, 2021
@lucor lucor mentioned this pull request Mar 31, 2021
@lucor lucor added the help wanted Extra attention is needed label Mar 31, 2021
@andydotxyz
Copy link
Member

andydotxyz commented Apr 7, 2021

Oops, previous comment posted using wrong Fyne version in tthe app I was compiling, retesting.
Looks good thanks :).

andydotxyz
andydotxyz previously approved these changes Apr 7, 2021
@lucor
Copy link
Member Author

lucor commented Apr 7, 2021

@squash, @zdima, @sirkon or anyone with a M1 machine, could you help testing this ?
Thanks in advance :-)

@sirkon
Copy link

sirkon commented Apr 8, 2021

Hi. The app in archive works.

But speaking of the rest, failed at the very first step

clone this branch

have no idea what "branch"

@lucor
Copy link
Member Author

lucor commented Apr 8, 2021

Hi. The app in archive works.

Awesome! Thanks for testing @sirkon

But speaking of the rest, failed at the very first step

clone this branch

have no idea what "branch"

Updated the description with more detailed steps.

@sirkon
Copy link

sirkon commented Apr 8, 2021

Please share .git/config of the project, probably you have a remote called feature
I can't checkout to feature/darwin-arm64, which I tried before in fact. Failed.

@lucor
Copy link
Member Author

lucor commented Apr 8, 2021

No additional config should be required. Please note that the steps above refer to a new cloned repo (github.com/lucor)
Could you please try the following and report any error?

cd /tmp
git clone https://github.com/lucor/fyne-io-fyne-cross.git
cd fyne-io-fyne-cross
git checkout feature/darwin-arm64

@sirkon
Copy link

sirkon commented Apr 8, 2021

Well, my fault, tried lucor/fyne-cross.

Checking it now.

@lucor
Copy link
Member Author

lucor commented Apr 8, 2021

Well, my fault, tried lucor/fyne-cross.

No worries. I had to pick a different name after archiving the lucor/fyne-cross project :-)

Checking it now.

Thanks

@sirkon
Copy link

sirkon commented Apr 8, 2021

Second time I heard a cooler (MBP) and quite a noticeable noise this time, the machine got pretty hot. Because of this probably, qemu instead of native execution:

denischeremisov  88552 385.3  8.6 411190544 1439872   ??  R    11:46AM  70:30.91 /Applications/Docker.app/Contents/MacOS/qemu-system-aarch64 -accel hvf -M virt,highmem=off -cpu cortex-a57 -m 2048 -smp 4 -kernel /Applications/Docker.app/Contents/Resources/linuxkit/kernel -append page_poison=1 vsyscall=emulate panic=1 nospec_store_bypass_disable noibrs noibpb no_stf_barrier mitigations=off console=ttyAMA0  vpnkit.connect=tcp+bootstrap+client://gateway.docker.internal:51917/dc46343f766fb49798d4fe5f6f7db7ae4fb58978da94333eedd7e36fbca587fb -initrd /Applications/Docker.app/Contents/Resources/linuxkit/initrd.img -serial pipe:vms/0/console -drive if=none,file=/Users/denischeremisov/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0,serial=dummyserial -netdev user,id=net0,net=192.168.64.0/24,ipv6=off,dhcpstart=192.168.64.6 -device virtio-net-device,netdev=net0 -vga none -nographic -monitor none

@sirkon
Copy link

sirkon commented Apr 8, 2021

failed:

#12 2413.1       Dwarf Exception Unwind Info (__eh_frame) in test-1170fb.o
#12 2413.1 ld: symbol(s) not found for architecture x86_64
#12 2413.1 clang: error: linker command failed with exit code 1 (use -v to see invocation)
#12 2413.1
#12 2413.1 exiting with abnormal exit code (1)
#12 2413.1 run 'OCDEBUG=1 ./build.sh' to enable debug messages
#12 2413.1
------
executor failed running [/bin/sh -c UNATTENDED=yes OSX_VERSION_MIN=${OSX_VERSION_MIN} ./build.sh]: exit code: 1
[✗] could not package the Fyne app: exit status 1

@lucor
Copy link
Member Author

lucor commented Apr 8, 2021

Second time I heard a cooler (MBP) and quite a noticeable noise this time, the machine got pretty hot. Because of this probably, qemu instead of native execution:

Yep, the creation of the docker image requires the compilation of some tools and can be CPU intensive. The compilation happen inside a docker container so that you've reported makes sense. Additionally as far I know, the docker support on M1 is relatively new, so probably there are margin of improvements on the performance side.

With regard to error, looking at logs it looks like you were not able to build the image.

If so can you report the Command Line Tools for Xcode version used ? (reported to work against 12.4)

@sirkon
Copy link

sirkon commented Apr 8, 2021

Failed as well

[i] Target: darwin/arm64
command.Context{Volume:volume.Volume{binDirHost:"/tmp/fyne-io-fyne-cross/fyne-cross/bin", cacheDirHost:"/Users/denischeremisov/Library/Caches/fyne-cross", distDirHost:"/tmp/fyne-io-fyne-cross/fyne-cross/dist", tmpDirHost:"/tmp/fyne-io-fyne-cross/fyne-cross/tmp", workDirHost:"/tmp/fyne-io-fyne-cross"}, Architecture:"arm64", Env:[]string{"CGO_LDFLAGS=-fuse-ld=lld", "GOOS=darwin", "GOARCH=arm64", "CC=oa64-clang", "CGO_CFLAGS=-mmacosx-version-min=11.1", "CGO_LDFLAGS=-mmacosx-version-min=11.1"}, ID:"darwin-arm64", LdFlags:[]string(nil), OS:"darwin", Tags:[]string(nil), AppBuild:"1", AppID:"com.example.test", AppVersion:"1.0", CacheEnabled:false, DockerImage:"fyneio/fyne-cross:1.1-darwin", Icon:"/tmp/fyne-io-fyne-cross/Icon.png", Name:"fyne-io-fyne-cross", Package:".", Release:false, StripDebug:true, Debug:true, Pull:false, Category:"", Certificate:"", Developer:"", Keystore:"", KeystorePass:"", KeyPass:"", Password:"", Profile:""}
[i] Cleaning target directories...
[✓] "bin" dir cleaned: /tmp/fyne-io-fyne-cross/fyne-cross/bin/darwin-arm64
[✓] "dist" dir cleaned: /tmp/fyne-io-fyne-cross/fyne-cross/dist/darwin-arm64
[✓] "temp" dir cleaned: /tmp/fyne-io-fyne-cross/fyne-cross/tmp/darwin-arm64
[i] Checking for go.mod: /tmp/fyne-io-fyne-cross/go.mod
[✓] go.mod found
[i] Packaging app...
[i] Building binary...
/usr/local/bin/docker run --rm -t -w /app -v /tmp/fyne-io-fyne-cross:/app -e CGO_ENABLED=1 -e GOCACHE=/go/go-build -e CGO_LDFLAGS=-fuse-ld=lld -e GOOS=darwin -e GOARCH=arm64 -e CC=oa64-clang -e CGO_CFLAGS=-mmacosx-version-min=11.1 -e CGO_LDFLAGS=-mmacosx-version-min=11.1 -e fyne_uid=501 fyneio/fyne-cross:1.1-darwin go build -ldflags '-w -s' -o /app/fyne-cross/bin/darwin-arm64/fyne-io-fyne-cross -v .
Unable to find image 'fyneio/fyne-cross:1.1-darwin' locally
docker: Error response from daemon: manifest for fyneio/fyne-cross:1.1-darwin not found: manifest unknown: manifest unknown.
See 'docker run --help'.
[✗] exit status 125

@lucor
Copy link
Member Author

lucor commented Apr 8, 2021

Sorry I misread your first message, edited the comment but you was fast :-)

It looks like you were not able to build the docker image. If so the command below failed:

fyne-cross darwin-image --xcode-path /path/to/Command_Line_Tools_for_Xcode_<version>.dmg

Can you confirm?

If so could you please report the Command Line Tools for Xcode version used ? (reported to work against 12.4)

@sirkon
Copy link

sirkon commented Apr 8, 2021

Confirm 12.4, confirm failure

@lucor
Copy link
Member Author

lucor commented Apr 9, 2021

The docker images on docker hub has been updated to the latest version (Go 1.16.3 and fyne CLI 2.0.2)
@sirkon could you please pull the latest commits in this branch and try to build the image again?

Tested on my linux box and I was able to generate the darwin docker image and create the fyne apps for darwin (arm64 and amd64).

If the error still persist I'd say something weird is happening with Docker on macOS M1, but I'd track with a dedicated issue since on macOS it is possible to use the -local flag.

@andydotxyz , @Jacalz thoughts ? IIRC you were able to build the darwin image on hosts that are not an M1.

@sirkon
Copy link

sirkon commented Apr 10, 2021

@sirkon could you please pull the latest commits in this branch and try to build the image again?

I see some macOS tests weren't successful. I mean there's a high risk the process will not be passed for me. The problem here it is not exactly cheap. Would love to see these fixed and then will try again.

@lucor
Copy link
Member Author

lucor commented Apr 11, 2021

@sirkon could you please pull the latest commits in this branch and try to build the image again?

I see some macOS tests weren't successful. I mean there's a high risk the process will not be passed for me. The problem here it is not exactly cheap. Would love to see these fixed and then will try again.

It looks CI had some problems... just re-run and now all is green.

@sirkon
Copy link

sirkon commented Apr 11, 2021

 => ERROR [osxcross 4/7] RUN git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "035cc170338b7b252e3f13b0e3  0.4s
------
 > [osxcross 4/7] RUN git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "035cc170338b7b252e3f13b0e3ccbf4411bffc41"  && rm -rf ./.git:
#10 0.252 fatal: destination path '.' already exists and is not an empty directory.
------
executor failed running [/bin/sh -c git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "${OSX_CROSS_COMMIT}"  && rm -rf ./.git]: exit code: 128
[✗] could not package the Fyne app: exit status 1

@sirkon
Copy link

sirkon commented Apr 11, 2021

Failure again

 => ERROR [osxcross 4/7] RUN git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "035cc170338b7b252e3f13b0e3  0.4s
------
 > [osxcross 4/7] RUN git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "035cc170338b7b252e3f13b0e3ccbf4411bffc41"  && rm -rf ./.git:
#10 0.252 fatal: destination path '.' already exists and is not an empty directory.
------
executor failed running [/bin/sh -c git clone https://github.com/tpoechtrager/osxcross.git .  && git checkout -q "${OSX_CROSS_COMMIT}"  && rm -rf ./.git]: exit code: 128
[✗] could not package the Fyne app: exit status 1

@andydotxyz
Copy link
Member

andydotxyz commented Apr 15, 2021

We now have access to an M1 test box and the following is what happened when I tried to run the test binary:
Screenshot 2021-04-15 at 18 01 34

After I went back to system preferences turned off apple checks I tried again - this time it allowed me to override.
tapping the button to ignore and the app ran.
Screenshot 2021-04-15 at 18 05 46

@sirkon
Copy link

sirkon commented Apr 15, 2021 via email

@andydotxyz
Copy link
Member

andydotxyz commented Apr 15, 2021

For me the image build got a lot further, but it failed hard on the last step:

[i] Building docker image...
[+] Building 2758.7s (12/13)                                                    
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 1.12kB                                     0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/fyneio/fyne-cross:1.1-base-llv  3.1s
 => [internal] load build context                                          7.6s
 => => transferring context: 451.72MB                                      7.5s
 => [stage-1 1/2] FROM docker.io/fyneio/fyne-cross:1.1-base-llvm@sha256:  17.4s
 => => resolve docker.io/fyneio/fyne-cross:1.1-base-llvm@sha256:f95f1759f  0.0s
 => => sha256:f95f1759f601f22183bf61a3f5d41ab1c10aa8f04cf 2.64kB / 2.64kB  0.0s
 => => sha256:3d82b6da9ec6e8df5a3a3a1eaafe43354d95d9f6015 9.49kB / 9.49kB  0.0s
 => => sha256:004f1eed87df3f75f5e2a1a649fa7edd7f713d130 50.43MB / 50.43MB  1.5s
 => => sha256:5d6f1e8117dbb1c6a57603cb4f321a861a08105a81b 7.83MB / 7.83MB  0.9s
 => => sha256:48c2faf66abec3dce9f54d6722ff592fce6dd4fb5 10.00MB / 10.00MB  0.9s
 => => sha256:234b70d0479d7f16d7ee8d04e4ffdacc57d7d1431 51.84MB / 51.84MB  2.5s
 => => sha256:f5e9f83ff9bcf98a081ea281823c299a293e0870c 68.74MB / 68.74MB  3.4s
 => => sha256:9f49582262ce68c2d943f0abaa4475b84c5c44d 129.02MB / 129.02MB  4.9s
 => => extracting sha256:004f1eed87df3f75f5e2a1a649fa7edd7f713d1300532fd0  2.1s
 => => sha256:c133b465a2528ea68235550dfdddf4862eb161f5152d819 157B / 157B  2.7s
 => => sha256:6062b9d1c2ccfc7971ef7bd38afb3ef8587babe717b 3.09MB / 3.09MB  4.1s
 => => sha256:1c2466261d7da6b50e7ddacd41ff2dfbdc7b68d47 69.07MB / 69.07MB  9.0s
 => => extracting sha256:5d6f1e8117dbb1c6a57603cb4f321a861a08105a81bcc6b0  0.3s
 => => sha256:0de1bc3e351e1317ce8467fcb721aba3467c246d986aa2b 387B / 387B  4.3s
 => => extracting sha256:48c2faf66abec3dce9f54d6722ff592fce6dd4fb58a0d0b7  0.3s
 => => sha256:803739857860c2f620e9b3fd6f3b522a2f83fdf1 93.88MB / 93.88MB  11.1s
 => => extracting sha256:234b70d0479d7f16d7ee8d04e4ffdacc57d7d14313faf59d  2.4s
 => => extracting sha256:f5e9f83ff9bcf98a081ea281823c299a293e0870c4fd132c  1.9s
 => => extracting sha256:9f49582262ce68c2d943f0abaa4475b84c5c44d36e296232  3.3s
 => => extracting sha256:c133b465a2528ea68235550dfdddf4862eb161f5152d819d  0.0s
 => => extracting sha256:6062b9d1c2ccfc7971ef7bd38afb3ef8587babe717b72d31  0.1s
 => => extracting sha256:1c2466261d7da6b50e7ddacd41ff2dfbdc7b68d470eb2c11  1.5s
 => => extracting sha256:0de1bc3e351e1317ce8467fcb721aba3467c246d986aa2b3  0.0s
 => => extracting sha256:803739857860c2f620e9b3fd6f3b522a2f83fdf16c9dfc42  2.2s
 => [osxcross 2/8] RUN apt-get update -qq && apt-get install -y -q --no-  21.4s
 => [osxcross 3/8] COPY *.dmg /tmp/command_line_tools_for_xcode.dmg        0.8s
 => [osxcross 4/8] WORKDIR /osxcross                                       0.0s
 => [osxcross 5/8] RUN curl -L https://github.com/tpoechtrager/osxcross/a  2.3s
 => [osxcross 6/8] RUN ./tools/gen_sdk_package_tools_dmg.sh /tmp/comman  438.4s
 => [osxcross 7/8] RUN mv MacOSX11*.tar.bz2 tarballs                       0.4s
 => ERROR [osxcross 8/8] RUN UNATTENDED=yes OSX_VERSION_MIN=10.12 ./bu  2274.8s
------
 > [osxcross 8/8] RUN UNATTENDED=yes OSX_VERSION_MIN=10.12 ./build.sh:
#12 0.500 found SDK version 11.1 at tarballs/MacOSX11.1.sdk.tar.bz2
#12 0.524 verified at tarballs/MacOSX11.1.sdk.tar.bz2
#12 0.526 
#12 0.526 Building OSXCross toolchain, Version: 1.3

... skipping a LOT of output ...

#12 2253.3 
#12 2253.3 testing x86_64-apple-darwin20.2-clang++ -stdlib=libc++ -std=c++11 ... failed (ignored)
#12 2257.1 
#12 2257.1 testing x86_64h-apple-darwin20.2-clang ... works
#12 2257.9 testing x86_64h-apple-darwin20.2-clang++ ... Undefined symbols for architecture x86_64h:
#12 2261.5   "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::ios_base::getloc() const", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::cout", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5   "std::__1::ctype<char>::id", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::locale::~locale()", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::__1::ios_base::clear(unsigned int)", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "std::terminate()", referenced from:
#12 2261.5       ___clang_call_terminate in test-7d1e53.o
#12 2261.5   "operator delete(void*)", referenced from:
#12 2261.5       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-7d1e53.o
#12 2261.5   "operator new(unsigned long)", referenced from:
#12 2261.5       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-7d1e53.o
#12 2261.5   "___cxa_begin_catch", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5       ___clang_call_terminate in test-7d1e53.o
#12 2261.5   "___cxa_end_catch", referenced from:
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5   "___gxx_personality_v0", referenced from:
#12 2261.5       _main in test-7d1e53.o
#12 2261.5       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-7d1e53.o
#12 2261.5       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-7d1e53.o
#12 2261.5       Dwarf Exception Unwind Info (__eh_frame) in test-7d1e53.o
#12 2261.5 ld: symbol(s) not found for architecture x86_64h
#12 2261.5 clang: error: linker command failed with exit code 1 (use -v to see invocation)
#12 2261.5 failed (ignored)
#12 2261.5 
#12 2261.5 testing arm64-apple-darwin20.2-clang ... works
#12 2262.3 testing arm64-apple-darwin20.2-clang++ ... Undefined symbols for architecture arm64:
#12 2265.9   "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::ios_base::getloc() const", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::cout", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9   "std::__1::ctype<char>::id", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::locale::~locale()", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::__1::ios_base::clear(unsigned int)", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "std::terminate()", referenced from:
#12 2265.9       ___clang_call_terminate in test-3d3f7f.o
#12 2265.9   "operator delete(void*)", referenced from:
#12 2265.9       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-3d3f7f.o
#12 2265.9   "operator new(unsigned long)", referenced from:
#12 2265.9       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-3d3f7f.o
#12 2265.9   "___cxa_begin_catch", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9       ___clang_call_terminate in test-3d3f7f.o
#12 2265.9   "___cxa_end_catch", referenced from:
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9   "___gxx_personality_v0", referenced from:
#12 2265.9       _main in test-3d3f7f.o
#12 2265.9       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-3d3f7f.o
#12 2265.9       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-3d3f7f.o
#12 2265.9 ld: symbol(s) not found for architecture arm64
#12 2265.9 clang: error: linker command failed with exit code 1 (use -v to see invocation)
#12 2265.9 failed (ignored)
#12 2265.9 
#12 2265.9 testing arm64e-apple-darwin20.2-clang ... works
#12 2266.8 testing arm64e-apple-darwin20.2-clang++ ... Undefined symbols for architecture arm64e:
#12 2270.3   "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::ios_base::getloc() const", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::cout", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3   "std::__1::ctype<char>::id", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::locale::~locale()", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::__1::ios_base::clear(unsigned int)", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "std::terminate()", referenced from:
#12 2270.3       ___clang_call_terminate in test-2d71dd.o
#12 2270.3   "operator delete(void*)", referenced from:
#12 2270.3       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-2d71dd.o
#12 2270.3   "operator new(unsigned long)", referenced from:
#12 2270.3       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-2d71dd.o
#12 2270.3   "___cxa_begin_catch", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3       ___clang_call_terminate in test-2d71dd.o
#12 2270.3   "___cxa_end_catch", referenced from:
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3   "___gxx_personality_v0", referenced from:
#12 2270.3       _main in test-2d71dd.o
#12 2270.3       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-2d71dd.o
#12 2270.3       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-2d71dd.o
#12 2270.3 ld: symbol(s) not found for architecture arm64e
#12 2270.3 clang: error: linker command failed with exit code 1 (use -v to see invocation)
#12 2270.3 failed (ignored)
#12 2270.3 
#12 2270.3 testing x86_64-apple-darwin20.2-clang ... works
#12 2271.1 testing x86_64-apple-darwin20.2-clang++ ... Undefined symbols for architecture x86_64:
#12 2274.7   "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::ios_base::getloc() const", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::cout", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7   "std::__1::ctype<char>::id", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::locale::~locale()", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::__1::ios_base::clear(unsigned int)", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "std::terminate()", referenced from:
#12 2274.7       ___clang_call_terminate in test-64ccce.o
#12 2274.7   "operator delete(void*)", referenced from:
#12 2274.7       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-64ccce.o
#12 2274.7   "operator new(unsigned long)", referenced from:
#12 2274.7       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-64ccce.o
#12 2274.7   "___cxa_begin_catch", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7       ___clang_call_terminate in test-64ccce.o
#12 2274.7   "___cxa_end_catch", referenced from:
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7   "___gxx_personality_v0", referenced from:
#12 2274.7       _main in test-64ccce.o
#12 2274.7       std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-64ccce.o
#12 2274.7       std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-64ccce.o
#12 2274.7       Dwarf Exception Unwind Info (__eh_frame) in test-64ccce.o
#12 2274.7 ld: symbol(s) not found for architecture x86_64
#12 2274.7 clang: error: linker command failed with exit code 1 (use -v to see invocation)
#12 2274.7 
#12 2274.7 exiting with abnormal exit code (1)
#12 2274.7 run 'OCDEBUG=1 ./build.sh' to enable debug messages
#12 2274.7 
------
executor failed running [/bin/sh -c UNATTENDED=yes OSX_VERSION_MIN=${OSX_VERSION_MIN} ./build.sh]: exit code: 1
[✗] could not create the docker darwin image: exit status 1

It looks like it could be unhappy that x86_64 was missing?

@lucor
Copy link
Member Author

lucor commented Apr 16, 2021

After I went back to system preferences turned off apple checks I tried again - this time it allowed me to override.
tapping the button to ignore and the app ran.

Yep, I think we can't do so much about this behaviour with Gatekeeper, my guess is that we'll have the same also with binaries compiled directly on macOS (self-signed) and downloaded from internet.

It looks like it could be unhappy that x86_64 was missing?

It could be, the weird thing is that the compilation of osxcross happen inside docker and on other machines we were able to build it. Need more testing.
I'd propose to move this into a dedicated issue, since it is possible to cross-compile from macOS using the local SDK (--local flag):

% fyne-cross darwin --app-id com.example.test --arch arm64 --local . 
[i] Target: darwin/arm64
[i] Cleaning target directories...
[✓] "bin" dir cleaned: <redacted>/test/fyne-cross/bin/darwin-arm64
[✓] "dist" dir cleaned: <redacted>/test/fyne-cross/dist/darwin-arm64
[✓] "temp" dir cleaned: <redacted>/test/fyne-cross/tmp/darwin-arm64
[i] Checking for go.mod: <redacted>/test/go.mod
[✓] go.mod found
[i] Packaging app...
[✓] Package: <redacted>/test/fyne-cross/dist/darwin-arm64/test.app
% fyne-cross darwin --app-id com.example.test --arch amd64 --local .
[i] Target: darwin/amd64
[i] Cleaning target directories...
[✓] "bin" dir cleaned: <redacted>/test/fyne-cross/bin/darwin-amd64
[✓] "dist" dir cleaned: <redacted>/test/fyne-cross/dist/darwin-amd64
[✓] "temp" dir cleaned: <redacted>/test/fyne-cross/tmp/darwin-amd64
[i] Checking for go.mod: <redacted>/test/go.mod
[✓] go.mod found
[i] Packaging app...
[✓] Package: <redacted>/test/fyne-cross/dist/darwin-amd64/test.app

@andydotxyz
Copy link
Member

I'd propose to move this into a dedicated issue

That makes sense.
As discussed on Slack if we made the "--local" flag default for mac->mac builds then it may work better by default...

@lucor lucor requested a review from andydotxyz April 17, 2021 18:17
@@ -54,7 +54,7 @@ func (cmd *Darwin) Parse(args []string) error {

// Add flags to use only on darwin host
if runtime.GOOS == darwinOS {
flagSet.BoolVar(&cmd.localBuild, "local", false, "If set uses the fyne CLI tool installed on the host in place of the docker images")
flagSet.BoolVar(&cmd.localBuild, "local", true, "If set uses the fyne CLI tool installed on the host in place of the docker images")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this localBuild is set to default to true will it be switched of later if we see that the target OS is not darwin?
It is possible that this could lead to confusion if it does not switch of appropriately.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local flag should be available only on darwin hosts.
Anyway, this is a good point. Wondering if we'd remove it completely until we have full support on macOS.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I see that it is only available on darwin. But won't it impact if we are doing darwin->linux?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I see what you meant, sorry misreaded your previous comment.
It won't impact. The logic above applies only to the darwin subcommand responsible to compile for the darwin target.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah that makes sense, thanks

@lucor lucor merged commit a0f106d into fyne-io:develop Apr 27, 2021
@lucor lucor deleted the feature/darwin-arm64 branch April 27, 2021 11:20
@Jacalz
Copy link
Member

Jacalz commented Apr 27, 2021

Does this mean that darwin/arm64 builds are finally runnable on M1 now?

@andydotxyz
Copy link
Member

(just a quick reminder, you can PM me for details to access the M1 mac mini that is being provided by Mac Stadium)

@lucor
Copy link
Member Author

lucor commented Apr 28, 2021

Does this mean that darwin/arm64 builds are finally runnable on M1 now?

@Jacalz Yes, it is possibile now :) #39 (comment)
The only note as reported in the comment is that for self-signed app some macOS settings could be required due to how Gatekeeper works.

This was referenced Apr 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants