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

Support for macOS Big Sur (11.x) and aarch64/M1/Silicon arch #2008

Closed
1 of 3 tasks
jneira opened this issue Jul 8, 2021 · 18 comments
Closed
1 of 3 tasks

Support for macOS Big Sur (11.x) and aarch64/M1/Silicon arch #2008

jneira opened this issue Jul 8, 2021 · 18 comments
Labels
old_type: distribution os: macos status: blocked Not actionable, because blocked by upstream/GHC etc. type: enhancement New feature or request

Comments

@jneira
Copy link
Member

jneira commented Jul 8, 2021

Actual ways to get a working hls executable:


Issue to track the support of hls for this new macOS version

We use github environments to build the binaries and we depend on its supported arch/os versions. Actually we are building macos binaries with this env: https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md (macos-latest aka macos 10.15)
Not an expert in mac envs but it seems M1 need Big Sur, which is macos 11.00. Github envs has an env for 11.0 but i guess it will be incompatible with older version of macos, so we would have to maintain two macos version in the test and build ci workflows (which has already a big load). In any case it worths to have an issue in the project to track progress in the support of the new version.
Anyways does the official ghc version works for big sur? the download page talks about macOS X: https://www.haskell.org/ghc/distribution_packages.html#macosx
It seems it works with some caveats: https://www.reddit.com/r/haskell/comments/k9r2cy/workaround_for_haskell_woes_on_macos_11_big_sur/
so maybe the hls version buils for maOS 10.15 would work for 11.x?

UPDATE from #1896

What do we need in order to create and distribute Apple M1 binaries?

//cc @Jaxan

@konn
Copy link
Collaborator

konn commented Jul 8, 2021

FYI, HLS installs and works properly with macOS Big Sur 11.4 on my Intel Mac as long as I don't use -framework features (and I haven't encountered the situation where -framework needed so far).
So it seems that the reported behaviour is related to M1-things - but I don't have an access to M1 Mac, I'm NOT 100% confident about it, though.
So it might be good to have prebuilt binary for M1 Mac, but it seems GHA doesn't provide M1 Mac environment for the time being.

@jneira jneira changed the title Support for macOS Big Sur (11.x) Support for macOS Big Sur (11.x) and M1 arch Jul 9, 2021
@jneira
Copy link
Member Author

jneira commented Jul 9, 2021

So it seems that the reported behaviour is related to M1-things - but I don't have an access to M1 Mac, I'm NOT 100% confident about it, though.

So it can be not only os version dependent but also on arch, how quaint! 😝

But afaik there is only one ghc version for Mac and I guess it is not built on a M1 machine (??)

@Jaxan
Copy link

Jaxan commented Jul 14, 2021

Thanks for looking into this. Just to give a bit of context, this is what I did: I installed ghcup via the command on its website, and this successfully installed GHC 8.10.5 and cabal 3.4.0.0. Both tools work fine, but ghcup could not install HLS. (This is the original issue reported at the Haskell gitlab.)

I also tried to do it via visual studio code with the Haskell extension. This downloads its own HLS binary, but it also fails. This is the error I get:

haskell-language-server version: 1.2.0.0 (GHC: 8.10.5) (PATH: /Users/jm1/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-1.2.0-darwin-8.10.5) (GIT hash: 8cfe8b2dbdef965ed735a66de38af425809ae48d)
Starting (haskell-language-server)LSP server...
  with arguments: GhcideArguments {argsCommand = LSP, argsCwd = Nothing, argsShakeProfiling = Nothing, argsTesting = False, argsExamplePlugin = False, argsDebugOn = False, argsLogFile = Nothing, argsThreads = 0, argsProjectGhcVersion = False}
  with plugins: [PluginId "pragmas",PluginId "floskell",PluginId "fourmolu",PluginId "tactics",PluginId "ormolu",PluginId "stylish-haskell",PluginId "retrie",PluginId "brittany",PluginId "class",PluginId "haddockComments",PluginId "eval",PluginId "importLens",PluginId "refineImports",PluginId "moduleName",PluginId "hlint",PluginId "splice",PluginId "ghcide-hover-and-symbols",PluginId "ghcide-code-actions-imports-exports",PluginId "ghcide-code-actions-type-signatures",PluginId "ghcide-code-actions-bindings",PluginId "ghcide-code-actions-fill-holes",PluginId "ghcide-completions",PluginId "ghcide-type-lenses",PluginId "ghcide-core"]
  in directory: /Users/jm1/Documents/git/monoid-learner
 Starting LSP server...
If you are seeing this in a terminal, you probably should have run WITHOUT the --lsp option!
Started LSP server in 0.03s
setInitialDynFlags cradle: Cradle {cradleRootDir = "/Users/jm1/Documents/git/monoid-learner", cradleOptsProg = CradleAction: Cabal}
2021-07-14 14:37:03.974807 [ThreadId 5] INFO hls:	Registering ide configuration: IdeConfiguration {workspaceFolders = fromList [NormalizedUri 6722866727619948082 "file:///Users/jm1/Documents/git/monoid-learner"], clientSettings = hashed Nothing}
2021-07-14 14:37:03.998483 [ThreadId 87] INFO hls:	Consulting the cradle for "app/Main.hs"
2021-07-14 14:37:03.998868 [ThreadId 87] WARNING hls:	No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for app/Main.hs.
 Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
Output from setting up the cradle Cradle {cradleRootDir = "/Users/jm1/Documents/git/monoid-learner", cradleOptsProg = CradleAction: Cabal}
> Build profile: -w ghc-8.10.5 -O1
> In order, the following will be built (use -v for more details):
>  - monoid-learner-0.1.0.0 (lib) (first run)
>  - monoid-learner-0.1.0.0 (exe:monoid-learner) (first run)
> Preprocessing library for monoid-learner-0.1.0.0..
> Building library for monoid-learner-0.1.0.0..
> [1 of 2] Compiling KnuthBendix      ( src/KnuthBendix.hs, /Users/jm1/.cache/hie-bios/dist-monoid-learner-153055e40f845441575b002aa26d68b1/build/aarch64-osx/ghc-8.10.5/monoid-learner-0.1.0.0/build/KnuthBendix.o, /Users/jm1/.cache/hie-bios/dist-monoid-learner-153055e40f845441575b002aa26d68b1/build/aarch64-osx/ghc-8.10.5/monoid-learner-0.1.0.0/build/KnuthBendix.dyn_o )
> 
> /var/folders/z1/_xr4v24s5x79ngycy10hskgw0000gq/T/ghc91660_0/ghc_6.s:2:45: error:
>      error: unexpected token at start of statement
>             .p2align        3                               ; -- Begin function s2Gu_info$def
>                                                               ^
>   |
> 2 |         .p2align        3                               ; -- Begin function s2Gu_info$def
>   |                                             ^
>
... MANY SIMILAR LINES SKIPPED ... 
>
> /var/folders/z1/_xr4v24s5x79ngycy10hskgw0000gq/T/ghc91660_0/ghc_6.s:3081:42: error:
>      error: unexpected token at start of statement
>             .quad   3                               ; 0x3
>                                                       ^
>      |
> 3081 |         .quad   3                               ; 0x3
>      |                                          ^
> 
> <no location info>: error:
>     Error running clang! you need clang installed to use the LLVM backend
>     (or GHC tried to execute clang incorrectly)
> `clang' failed in phase `Clang (Assembler)'. (Exit code: 1)
> cabal: Failed to build monoid-learner-0.1.0.0 (which is required by
> exe:monoid-learner from monoid-learner-0.1.0.0).
> 

Since it's complaining about some sort of assembly language, I assume it has to do with the M1 chip.

If there is something I can do to debug this issue, please let me know.

@demming
Copy link

demming commented Jul 14, 2021

For cross-reference cf. Homebrew/brew#10152 and the pull request Homebrew/homebrew-core#65997 referenced therein. Homebrew now provides both ghc and haskell-language-server on Apple's ARMv8.4-A arch (aarch64). GHC now provides support for the M1 chipset, see https://www.haskell.org/ghc/blog/20210309-apple-m1-story.html and the links to the GitLab issues therein. Also see https://gitlab.haskell.org/ghc/ghc/-/issues/19512 and ThatGuySam/doesitarm#73. Essentially, as of present, it's GHC 8.10.5's LLVM backend via the Rosetta 2 ISA translator, cf. Homebrew's GHC "formula". Besides, a fix to https://gitlab.haskell.org/ghc/ghc/issues/19410 has been back-ported to 8.10.5.

@jneira: As for the issue you mention in your second bullet point, you might want to look into the HLS "formula" and specifically its Ruby code. As for the GitHub Actions environment, I believe it may yet be reasonable to also build in https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md for the most recent macOS version, provided the resource constraints would still be met. Besides, M1 Macs can't run macOS prior to 11 (Big Sur), and the next release (Monterey) is already available in a public beta preview release and expected this fall.

In addition, there are Homebrew "formulas" for Cabal and Stack. There is however unfortunately no Stackage LTS snapshot as of today that would support GHC 8.10.5 -- I've just opened an issue commercialhaskell/stackage#6115 concerning this caveat

Everything else mentioned above just works on my M1 Macs running the most recent macOS Big Sur version 11.4.

@demming
Copy link

demming commented Jul 14, 2021

@Jaxan: Did you try the Homebrew HLS version? If it doesn't work either, the root cause might be different. Which Clang version do you have on that machine? In particular, your log states

Error running clang! you need clang installed to use the LLVM backend
(or GHC tried to execute clang incorrectly)

@Jaxan
Copy link

Jaxan commented Jul 15, 2021

Which Clang version do you have on that machine?

My system is relatively new and I did very little custom configuration. I installed Xcode and the command line tools (via the gui of Xcode). So it should be the "normal" clang people will have when they start developing on M1 Macs:

➜  ~ which clang
/usr/bin/clang
➜  ~ clang --version
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: arm64-apple-darwin20.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Did you try the Homebrew HLS version?

No I haven't tried it before. Let me try ... (some time later) ... Hurray it works 🥳. Visual studio code automatically finds the brew version and it reports some warnings in the IDE. So it seems to be a problem of installing the right version, not a problem with the tools themselves.

Thanks for pointing out this way of installing HLS.

@jneira jneira changed the title Support for macOS Big Sur (11.x) and M1 arch Support for macOS Big Sur (11.x) and M1/Silicon arch Aug 31, 2021
@jneira
Copy link
Member Author

jneira commented Aug 31, 2021

This one and #1896 are essentially duplicates afaiu
I am gonna copy the nice summary and checklist done by @pepeiborra from the other one before close it

@jneira
Copy link
Member Author

jneira commented Sep 3, 2021

From a @pepeiborra comment in #1896:

GHC 8.10.5 is out including native binaries for the Apple M1 hardware: https://www.haskell.org/ghc/blog/20210605-ghc-8.10.5-released.html

What do we need in order to create and distribute Apple M1 binaries?

I've set the checklist in the issue description. So afaiu we are blocked upstream on actions/runner-images#2187

@jneira jneira added the status: blocked Not actionable, because blocked by upstream/GHC etc. label Sep 3, 2021
@hasufell
Copy link
Member

hasufell commented Sep 3, 2021

What do we need in order to create and distribute Apple M1 binaries?

Use gitlab.haskell.org CI infrastructure, which supports everything GHC supports (including M1, FreeBSD, ...).

@jneira
Copy link
Member Author

jneira commented Sep 3, 2021

Wow that would be a big change in our ci setup and we considered it to get more performance: #2039 (comment)

@jneira jneira changed the title Support for macOS Big Sur (11.x) and M1/Silicon arch Support for macOS Big Sur (11.x) and aarch64/M1/Silicon arch Sep 16, 2021
@jneira
Copy link
Member Author

jneira commented Sep 16, 2021

Opened an issue in the vscode extension to add the automatic download of artifacts for apple aarch64: haskell/vscode-haskell#458

@jneira
Copy link
Member Author

jneira commented Oct 6, 2021

I've added to main description the actual ways to get a working executable in aarch64:

@pepeiborra pepeiborra unpinned this issue Nov 23, 2021
@jneira
Copy link
Member Author

jneira commented Dec 15, 2021

We are building hls on macos + aarch in gitlab and the binaries used in ghcup are also included in our release artifacts.

@jneira
Copy link
Member Author

jneira commented Dec 15, 2021

Issue tracking the automatic download of macos aarch binaries in vsocde here: haskell/vscode-haskell#458

@jneira
Copy link
Member Author

jneira commented Jan 31, 2022

We are building hls on macos + aarch in gitlab and the binaries used in ghcup are also included in our release artifacts.

I think we can close this as the missing piece in the extension is tracked in the issue linked above

@jneira jneira closed this as completed Jan 31, 2022
@sliminality
Copy link

Apologies if this is the wrong place to comment, but the release artifacts for haskell-language-server-macOS-aarch64-1.6.1.0.tar.xz only contains a binary compiled against 8.10.7 (and not 9.2.1 or any other version). Is there some fundamental limitation preventing HLS from working with GHC 9.2.1 on M1 architecture?

@hasufell
Copy link
Member

Apologies if this is the wrong place to comment, but the release artifacts for haskell-language-server-macOS-aarch64-1.6.1.0.tar.xz only contains a binary compiled against 8.10.7 (and not 9.2.1 or any other version). Is there some fundamental limitation preventing HLS from working with GHC 9.2.1 on M1 architecture?

Yes, 9.2.1 is busted on M1 https://gitlab.haskell.org/ghc/ghc/-/issues/20592

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
old_type: distribution os: macos status: blocked Not actionable, because blocked by upstream/GHC etc. type: enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

6 participants