TL;DR
Do this:
xcode-select --install
brew install --HEAD tree-sitter
brew install --HEAD luajit
brew install --HEAD neovim
My work log
Yesterday, my M1 Macbook Air has arrived and I started setting it up.
But I encountered an error when installing Neovim via Homebrew. It doesn't simply let me install with brew install neovim
because the formula doesn't exist for M1 macs.
I found that Neovim developers have already worked on it and you can install like so:
brew install --HEAD neovim
but it failed:
...
==> Installing dependencies for neovim: tree-sitter, cmake, lua, luarocks, unibilium, libtermkey, libuv, libvterm, luajit and msgpack
==> Installing neovim dependency: tree-sitter
==> make
==> make install PREFIX=/opt/homebrew/Cellar/tree-sitter/0.17.3
==> cargo install
Last 15 lines from /Users/***/Library/Logs/Homebrew/tree-sitter/03.cargo:
thread 'main' panicked at '
Internal error occurred: Command "clang" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=aarch64-apple-darwin" "-I" "src" "-I" "include" "-Wall" "-Wextra" "-o" "/private/tmp/tree-sitter-20210103-22123-s208p2/tree-sitter-0.17.3/target/release/build/tree-sitter-622599610e6262f9/out/src/lib.o" "-c" "src/lib.c" with args "clang" did not execute successfully (status code exit code: 1).
', /Users/***/Library/Caches/Homebrew/cargo_cache/registry/src/github.com-1ecc6299db9ec823/cc-1.0.25/src/lib.rs:2260:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
The following warnings were emitted during compilation:
warning: error: unknown target triple 'unknown-apple-macosx11.0.0', please use -triple or -arch
error: failed to compile `tree-sitter-cli v0.17.3 (/private/tmp/tree-sitter-20210103-22123-s208p2/tree-sitter-0.17.3/cli)`, intermediate artifacts can be found at `/private/tmp/tree-sitter-20210103-22123-s208p2/tree-sitter-0.17.3/target`
Caused by:
build failed
Do not report this issue to Homebrew/brew or Homebrew/core!
Looks like a dependency tree-sitter
was failed to build.
Ok, let's install it from HEAD:
brew install --HEAD tree-sitter
==> Cloning https://github.com/tree-sitter/tree-sitter.git
Cloning into '/Users/***/Library/Caches/Homebrew/tree-sitter--git'...
==> Checking out branch master
Already on 'master'
Your branch is up to date with 'origin/master'.
==> make
==> make install PREFIX=/opt/homebrew/Cellar/tree-sitter/HEAD-115bf3f
==> cargo install
🍺 /opt/homebrew/Cellar/tree-sitter/HEAD-115bf3f: 14 files, 5.0MB, built in 42 seconds
Removing: /Users/***/Library/Caches/Homebrew/tree-sitter--0.17.3.tar.gz... (506.8KB)
Ok, it worked.
But then, luajit
failed to install:
🍺 /opt/homebrew/Cellar/libvterm/0.1.4: 12 files, 393KB
==> Installing neovim dependency: luajit
==> Patching
Warning: Calling ENV.O2 is deprecated! There is no replacement.
Please report this issue to the homebrew/core tap (not Homebrew/brew or Homebrew/core):
/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/luajit.rb:43
==> make amalg PREFIX=/opt/homebrew/Cellar/luajit/2.0.5
Last 15 lines from /Users/***/Library/Logs/Homebrew/luajit/01.make:
#error "Need at least GCC 4.3 or newer"
^
3 errors generated.
lj_arch.h:55:2: error: "No support for this architecture (yet)"
#error "No support for this architecture (yet)"
^
lj_arch.h:294:2: error: "No target architecture defined"
#error "No target architecture defined"
^
lj_arch.h:317:2: error: "Need at least GCC 4.3 or newer"
#error "Need at least GCC 4.3 or newer"
^
3 errors generated.
Makefile:254: *** Unsupported target architecture. Stop.
make: *** [amalg] Error 2
Alright, let's install it also from HEAD:
/opt/homebrew/bin/brew install --HEAD luajit
==> Cloning https://luajit.org/git/luajit-2.0.git
Updating /Users/***/Library/Caches/Homebrew/luajit--git
==> Checking out branch v2.1
Already on 'v2.1'
Your branch is up to date with 'origin/v2.1'.
HEAD is now at 1e66d0f9 Merge branch 'master' into v2.1
Warning: Calling ENV.O2 is deprecated! There is no replacement.
Please report this issue to the homebrew/core tap (not Homebrew/brew or Homebrew/core):
/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/luajit.rb:43
==> make amalg PREFIX=/opt/homebrew/Cellar/luajit/HEAD-1e66d0f XCFLAGS=-DLUAJIT_ENABLE_GC64
==> make install PREFIX=/opt/homebrew/Cellar/luajit/HEAD-1e66d0f XCFLAGS=-DLUAJIT_ENABLE_GC64
🍺 /opt/homebrew/Cellar/luajit/HEAD-1e66d0f: 37 files, 2.3MB, built in 11 seconds
Cool. Now, try installing neovim again:
/opt/homebrew/bin/brew install --HEAD neovim
==> Downloading https://homebrew.bintray.com/bottles/msgpack-3.3.0.arm64_big_sur.bottle.tar.gz
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/780553bf2083258555b13aeea05333331a9a541f819afac70c31ffcf78ecd2ed--msgpack-3.3.0.arm64_big_sur.bottle.tar.gz
==> Downloading https://github.com/libmpack/libmpack-lua/releases/download/1.0.8/libmpack-lua-1.0.8.tar.gz
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/4b91349796a66e38e93acd77e6ca14212c869090429fd88271def2be5293d83f--libmpack-lua-1.0.8.tar.gz
==> Downloading https://luarocks.org/manifests/gvvaughan/lpeg-1.0.2-1.src.rock
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/0bc17975f0cf3981083172aa7da329b874e5780fa81494f5dd07d0665fcec23b--lpeg-1.0.2-1.src.rock
==> Downloading https://luarocks.org/manifests/kikito/inspect-3.1.1-0.src.rock
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/ecc1fa84ce4c83c9406f6d1202d4a88c80ede4a0a2bfd8d8d2bd54fd042226bb--inspect-3.1.1-0.src.rock
==> Downloading https://github.com/keplerproject/lua-compat-5.3/archive/v0.7.tar.gz
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/5f4e552e95b9a6223a5e4fabb7f04bf4b886057024507c76b1d5b803218c9363--lua-compat-5.3-0.7.tar.gz
==> Downloading https://github.com/luvit/luv/releases/download/1.30.0-0/luv-1.30.0-0.tar.gz
Already downloaded: /Users/***/Library/Caches/Homebrew/downloads/a9ce5a949370965d8f0fe70a47e7d102a3b4b6b831dbd4d088a83bbe1c00a3a2--luv-1.30.0-0.tar.gz
==> Cloning https://github.com/neovim/neovim.git
Updating /Users/***/Library/Caches/Homebrew/neovim--git
==> Checking out branch master
Already on 'master'
Your branch is up to date with 'origin/master'.
HEAD is now at 7a81a0c Merge pull request #13665 from janlazo/vim-8.2.0917
==> Installing dependencies for neovim: msgpack
==> Installing neovim dependency: msgpack
==> Pouring msgpack-3.3.0.arm64_big_sur.bottle.tar.gz
🍺 /opt/homebrew/Cellar/msgpack/3.3.0: 757 files, 5.3MB
==> Installing neovim --HEAD
==> luarocks make --lua-dir=/opt/homebrew/opt/luajit --tree=/private/tmp/neovim-20210103-14924-bnufr5/deps-build
==> luarocks make --lua-dir=/opt/homebrew/opt/luajit --tree=/private/tmp/neovim-20210103-14924-bnufr5/deps-build
==> luarocks make --lua-dir=/opt/homebrew/opt/luajit --tree=/private/tmp/neovim-20210103-14924-bnufr5/deps-build
==> cmake . -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_INSTALL_PREFIX=/private/tmp/neovim-20210103-14924-bnufr5/deps-build -DLUA_BUILD_TYPE=System -DWITH_SHARED_LIBUV=
==> make install
==> cmake .. -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DLIBLUV_INCLUDE_DIR=/private/tmp/neovim-20210103-14924-bnufr5/deps-build/include -DLIBLUV_LIBRARY=/private/tmp/neovim-
==> make install
🍺 /opt/homebrew/Cellar/neovim/HEAD-7a81a0c: 1,452 files, 21.3MB, built in 31 seconds
Gotcha~
Top comments (9)
This helped me, thank you!
Hello. For my M1 Pro the command line is not working with just
brew install
I have to addarch -arm64
before brew install command. Take a note who faced with the same problem.I tried following this and it installs.
But it still seems to be running as the x86 binaries.
After starting neovim run the command:
If I run this command from the terminal:
So this still looks like it is building and runnning as an x86 binary not arm.
If you are using neovim as a build environment this is pain as it builds x86 binaries (by default).
Using the suggestion by "MentarioNetwork" does not help.
My mistake. I was using the binary in
/usr/local/bin/nvim
The arm64 version is in/opt/homebrew/bin
Thank you very much!
Thank you. Very helpful.
What do you do when you want to update? Do you recompile/update only neovim or you recompile the other dependencies also?
If you want homebrew to fetch the latest head you have to use —fetch-HEAD:
How often do you force a —fetch-HEAD? And when you do, do you also —fetch-HEAD the other dependencies (luajit and treesitter)?
thanks! It's good for me!
Thanks!