nodegui icon indicating copy to clipboard operation
nodegui copied to clipboard

Mac M1 Support

Open LaGregance opened this issue 1 year ago • 11 comments

Hi, Following this closed issue: https://github.com/nodegui/nodegui/issues/969

When npm attempts to install nodegui on an M1 mac, it tries to download nodegui-binary-v0.59.0-darwin-arm64.tar.gz. An error is given that this package is not found. When looking at the release page, an arm64.tar.gz package does not exist.

Here is the error from the log regarding this issue:

Error: Error while downloading Precompiled NodeGui binary:https://github.com/nodegui/nodegui/releases/download/v0.59.0/nodegui-binary-v0.59.0-darwin-arm64.tar.gz. Not Found.

Temporary solution

As temporary solution, we can build ourself the artifact and add it to the cache:

cd /tmp

# 1. Build Qt
git clone git://code.qt.io/qt/qt5.git
cd qt5
git checkout 6.4

./init-repository --module-subset=essential -f
git submodule init qtsvg
git submodule update qtsvg

cd ..
mkdir qt5-6.4-macOS-release
cd qt5-6.4-macOS-release

../qt5/configure -release QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -nomake examples -nomake tests -skip qt3d -skip webengine -skip qtactiveqt -skip qtcanvas3d  -skip qtdeclarative -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtcharts -skip qtgraphicaleffects -skip qtlocation  -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtremoteobjects -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtvirtualkeyboard -skip qtscript

make -j15
make install

# 2. Add this to .bashrc or .zshrc
export QT_INSTALL_DIR="/usr/local/Qt-6.4.3"

# 3. Build nodegui
cd ..
gcl https://github.com/nodegui/nodegui.git
cd nodegui
npm install
npm run build

# Save the artifact to the cache directory
cd build/Release
tar -czf nodegui-binary-v0.59.0-darwin-arm64.tar.gz nodegui_core.node
mkdir -p ~/Library/Caches/nodegui-core-nodejs
mv nodegui-binary-v0.59.0-darwin-arm64.tar.gz ~/Library/Caches/nodegui-core-nodejs/.

Long-term solution

We should definitely add the artifact nodegui-binary-v0.59.0-darwin-arm64.tar.gz to the official release. What is the process to do it ?

Thanks.

LaGregance avatar Apr 08 '23 09:04 LaGregance

It sounds like we're not too far from the solution here. What does npm run install and npm run build do without your extra Qt build steps? If should be able to download the prebuilt Qt and put it in the miniqt folder in the source tree. npm run build should be able to build the lot.

After that, I think we might just be missing a mac + arm64 combo in the .github/workflows/release.yml file.

sedwards2009 avatar Apr 08 '23 12:04 sedwards2009

Regarding of this: https://docs.nodegui.org/docs/guides/getting-started#using-your-own-custom-qt-installation-optional It should not work since there are no binaries from Qt for M1 yet... So it's mandatory to build Qt ourself...

LaGregance avatar Apr 08 '23 12:04 LaGregance

The qtConfig.js script downloads the 6.4.1-0-202211101256qtbase-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z. I thought the ARM64 meant it also supported M1 in the form of some kind of "universal binary". That is what it looks like from https://www.qt.io/blog/qt-on-apple-silicon too.

sedwards2009 avatar Apr 08 '23 15:04 sedwards2009

oh, I see. That page you linked too is out of date and applies to the older Qt5.

sedwards2009 avatar Apr 08 '23 15:04 sedwards2009

Indeed, using only the following works:

gcl https://github.com/nodegui/nodegui.git
cd nodegui
npm install
npm run build

I will make a PR when I had the time.

LaGregance avatar Apr 13 '23 08:04 LaGregance

Any update on this? I cannot build my own binaries (Not enough storage space for XCode) so prebuilt ones would be amazing.

OfficialCRUGG avatar May 17 '23 13:05 OfficialCRUGG

@LaGregance can you write a guide to run NodeGUI on m1 mac? I didn't able to manage it to work.

emirefek avatar Sep 02 '23 08:09 emirefek

@LaGregance can you write a guide to run NodeGUI on m1 mac? I didn't able to manage it to work.

The temporary solution I mentioned in this issue should be enough to make it work, at which step do you have trouble ?

LaGregance avatar Sep 02 '23 11:09 LaGregance

I am wondering if readme should be updated, because nodegui clearly requires qt>6, and in readme version 5 is used.

#1036

Ivansstyle avatar Jan 05 '24 16:01 Ivansstyle

Does anyone here want to try fixing this mac support properly in NodeGui?

sedwards2009 avatar Feb 17 '24 10:02 sedwards2009

LaGregance commented on Sep 2, 2023

The temporary solution I mentioned in this issue should be enough to make it work, at which step do you have trouble ?

It was this one:

../qt5/configure -release QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -nomake examples -nomake tests -skip qt3d -skip webengine -skip qtactiveqt -skip qtcanvas3d  -skip qtdeclarative -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtcharts -skip qtgraphicaleffects -skip qtlocation  -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtremoteobjects -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtvirtualkeyboard -skip qtscript

It gives me this error:

CMake Error at qtbase/CMakeLists.txt:40 (message):
  The path "/tmp/qt5-6.4-macOS-release" contains symlinks.  This is not
  supported.  Possible solutions:

              - map directories using a transparent mechanism such as mount --bind
              - pass the real path of the build directory to CMake, e.g. using             cd $(realpath <path>) before invoking cmake <source_dir>.
Call Stack (most recent call first):
  qtbase/CMakeLists.txt:47 (qt_internal_check_if_path_has_symlinks)


-- Configuring incomplete, errors occurred!
CMake Error at /tmp/qt5/qtbase/cmake/QtProcessConfigureArgs.cmake:965 (message):
  CMake exited with code 1.

I don't see any symlinks. I don't know why cmake thinks they're there.

rsshilli avatar May 15 '24 04:05 rsshilli