February 5, 2023

NewsRoomUG

Technology Room

Making a Mac Common binary for Intel and ARM M1/M2 with Qt

6 min read

Apple has transitioned Macs from Intel to ARM (M1/M2) chips. Within the course of it has supplied an emulation layer (Rosetta2) to make sure that the brand new ARM Macs can nonetheless run functions created for Intel Macs. The emulation works very properly, however is quoted to be some 20{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b} slower than working native ARM binaries. That will not seem to be quite a bit, however it’s vital on processor intensive functions akin to my very own data wrangling software, which regularly processes datasets with thousands and thousands of rows via advanced sequences of merging, splitting, reformatting, filtering and reshaping. Additionally individuals who have simply spent a small fortune on a shiny new ARM Mac can get grumpy about not having a local ARM binary to run on it. So I’ve been investigating transferring Simple Information Rework from an Intel binary to a Common (‘fats'[1]) binary containing each Intel and ARM binaries. It is a course of acquainted from transferring my seating planner software for Mac from PowerPC to Intel chips some years in the past. Hopefully I’ll have retired earlier than the subsequent chip change on the Mac.

My software program is constructed on-top of the superb Qt cross-platfom framework. Qt introduced assist for Mac Common binaries in Qt 6.2 and Qt 5.15.9. I’m sticking with Qt 5 for now, as a result of it higher helps a number of textual content encodings and since I don’t see any specific benefit to switching to Qt 6 but. However, there’s a wrinkle. Qt 5.15.3 and later are solely obtainable to Qt prospects with business licenses. I wish to use the QtCharts element in Simple Information Rework v2, and QtCharts requires a business license (or GPL, which is a no-go for me). I additionally need entry to all the newest bug fixes for Qt 5. So I made a decision to modify from the free LGPL license and purchase a business Qt license. Fortunately I used to be eligible for the Qt small business license which is at present $499 per 12 months. The push in direction of business licensing is controversial with Qt builders, however I actually recognize Qt and all of the work that goes into it, so I’m completely happy to assist the enterprise (not sufficient to pay the eye-watering payment for a full enterprise license although!).

Transferring from producing an Intel binary utilizing LGPL Qt to producing a Common binary utilizing business Qt concerned a number of main stumbling factors that took me hours and plenty of googling to kind out. I’m going to spell them out right here to avoid wasting you that ache. You’re welcome.

  • The most recent Qt 5 LTS releases usually are not obtainable through the Qt upkeep software when you’ve got open supply Qt put in. After you purchase your business licence you must delete your open supply set up and all of the related license information. Right here is the data I acquired from Qt assist:
I assume that you simply have been beforehand utilizing open supply model, is that appropriate?

Qt 5.15.10 ought to be obtainable via the upkeep software however it's required to take away the outdated open supply set up fully and in addition take away the open supply license information out of your system.

So, first step is to take away the outdated Qt set up fully. Then take away the outdated open supply licenses which could exist. Directions for eradicating the license information:

****************************
Unified installer/maintenancetool/qtcreator will save all licenses (downloaded from the used Qt Account) inside the brand new qtlicenses.ini file. You want to take away the next information to completely reset the license data.

Home windows
"C:/Customers/{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}USERNAME{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}/AppData/Roaming/Qt/qtlicenses.ini"
"C:/Customers/{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}USERNAME{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}/AppData/Roaming/Qt/qtaccount.ini"

Linux
"/dwelling/$USERNAME/.native/share/Qt/qtlicenses.ini"
"/dwelling/$USERNAME/.native/share/Qt/qtaccount.ini"

OS X
"/Customers/$USERNAME/Library/Software Help/Qt/qtlicenses.ini"
"/Customers/$USERNAME/Library/Software Help/Qt/qtaccount.ini"

As a facet be aware: If the information above can't be discovered $HOME/.qt-license(Linux/macOS) or {101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}USERPROFILE{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b}.qt-license(Home windows) file is used as a fallback. .qt-license file will be downloaded from Qt Account. https://account.qt.io/licenses
Make sure you title the Qt license file as ".qt-license" and never for instance ".qt-license.txt".

***********************************************************************

After eradicating the outdated set up and the license information, please obtain the brand new on-line installer through your business Qt Account.
You may login there at:
https://login.qt.io/login

After putting in Qt with business license, it ought to be capable of discover the Qt 5.15.10 additionally via the upkeep software along with on-line installer.
  • Then you must obtain the business installer out of your on-line Qt account and reinstall all of the Qt variations you want. Gigabytes of it. Time to drink some espresso. Lots of espresso.
  • In your .professional file you must add:
macx 
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64
  • Be aware that the above doubles the construct time of your utility, so that you in all probability don’t need it set for day after day growth.
  • You should use macdeployqt to create your deployable Common .app however, and that is the important step that took me hours to work out, you must use <QtDir>/macos/bin/macdeployqt not <QtDir>/clang_64/bin/macdeployqt . Doh!
  • You may test the .app is Common utilizing the lipo command, e.g.:
lipo -detailed_info EasyDataTransform.app/Contents/MacOS/EasyDataTransform
  • I used to be ready to make use of my current practise of copying additional information (third celebration libraries, assist and so on) into the .app file after which digitally signing every little thing utilizing codesign –deep [2]. Fortunately the one third celebration library I take advantage of other than Qt (the superb libXL library for Excel) is offered as a Common framework.
  • I notarize the applying, as earlier than.

I did all of the above on an Intel iMac utilizing the newest Qt 5 LTS launch (Qt 5.15.10) and XCode 13.4 on macOS 12. I then examined it on an ARM MacBook Air. Little question you may as well construct Common binaries on an ARM Mac.

Unsurprisingly the Common app is considerably bigger than the Intel-only model. My Simple Information Rework .dmg file (which additionally contains plenty of assist documentation) went from ~56 MB to ~69 MB. Nonetheless that’s nonetheless positively anorexic in comparison with many bloated fashionable apps ( you Electron).

A few exams I did on an ARM MacBook Air confirmed ~16{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b} enchancment in efficiency. For instance becoming a member of two 500,000 row x 10 column tables went from 4.5 seconds to three.8 seconds. Clearly the efficiency enchancment will depend on the duty and the system. One buyer reported batch processing 3,541 JSON Information and writing the outcomes to CSV went from 12.8 to eight.1 seconds, a 37{101417768b20d6f92316fd7d46662a6fe9bfb6b86ff5a782d317a3e9c879583b} enchancment.

[1] I’m not judging.

[2] Apparently using –deep is frowned on by Apple. Nevertheless it works (for now anyway). Chunk me, Apple.

Copyright © All rights reserved. | Newsphere by AF themes.