> MacPorts base already knows this and allows the port to be installed on Apple > Silicon even when it says supported_archs x86_64.
Then I believe there is a bug in the MacPorts download logic per the original post. When I try to install, e.g., pandoc, on an arm64 box, I hit this architecture mismatch error: > Cannot install pandoc for the arch 'arm64' because > It’s dependency stack is only installed for the arch 'x86_64' > and does not have a universal variant. > Unable to execute port: architecture mismatch I confirm this issue is fixed if I remove the supported_archs line in the stack Portfile. When I remove this line, stack is able to build itself and run on Apple silicon (it builds and runs an x86_64 binary). I’m at a loss whether to submit a PR for stack with the supported_archs line removed, or a bug report that this line prevents downloading and/or building stack-based binaries. Please advise and I’ll follow up. A separate, but related issue: it appears to me that stack/ghc builds using Rosetta on Apple silicon are not multi-threaded, and therefore take a looooong time. It would be desirable on Apple silicon to simply download the build-bot x86_64 binaries (if available), and avoid building on the M1. That this doesn’t happen by default on the M1 appears to be a related issue. > On Aug 14, 2021, at 00:48, Ryan Schmidt <[email protected]> wrote: > > On Aug 13, 2021, at 10:58, Steven Smith wrote: >> If the Macports-compiled stack runs on arm64, then the prebuilt download >> will too. >> The issue as far as I can tell from the internet is that stack will generate >> x86_64 binaries, even if running on an M1. >> https://www.haskell.org/ghc/blog/20200515-ghc-on-arm.html >> These x86_64 binaries should run on an M1. >> If so, is the best approach to remove the supported_archs line from the >> stack Portfile, or add arm64? > > The supported_archs line must accurately convey the set of architectures for > which this port can be installed (i.e. the actual architectures of the files > that get installed by the port), so that MacPorts can accurately record the > architecture for which the port was installed in the registry. If the port > installs only an x86_64 binary, then it must set supported_archs x86_64. > (That was the case when this port was created and why the port did this at > the time.) The fact that x86_64 binaries can run on Apple Silicon via Rosetta > 2 is not relevant; MacPorts base already knows this and allows the port to be > installed on Apple Silicon even when it says supported_archs x86_64.
