Skip to content

Compiling on Macs with Apple Silicon

jymen edited this page Jan 2, 2023 · 24 revisions

Building in "Intel" mode

It is not yet possible to create a native Apple Silicon (ARM) build, mainly because Qt 5.15 (which we are using) does not support ARM yet. Therefore, you need to build in Intel mode, and then run under Rosetta 2.

The safest way to start with is then to create a dedicated I386 arch shell as follow :

Create a dedicated Iterm2 i386 shell

At least on osx 13 duplicating the Apple terminal and make it rue in i386 mode is not supported ; so we will

Installing dependencies

Build tools

Build tools like CMake, Ninja and Git can be installed in ARM mode.

  1. Install HomeBrew in ARM mode:
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Follow the instructions that appear after running this command.

  1. Install CMake, Ninja and Git:
    brew install cmake ninja git

Packages

Install Qt in the same way as described here: Install Qt and Qt Creator.

MuseScore depends on a package called SndFile. Because you are building MuseScore in x86_64 mode, you need to install this package in that mode too, otherwise, it will cause linker errors. You can use arch -x86_64 command to run command in x86_64 mode. This should ask you to install Rosetta 2 if you haven't done that yet.

HomeBrew behaves differently in x86_64 mode. In ARM mode, it puts its packages in /opt/homebrew/bin. In x86_64 mode, it puts packages in /usr/local/bin. If you installed HomeBrew correctly, /opt/homebrew/bin should appear in the $PATH variable before /usr/local/bin. This means that your shell will first look in /opt/homebrew/bin when searching for the brew command or any packages installed by it, so by default the ARM version will be used. If you want to use the x86_64 version instead, you need to prepend /usr/local/bin to the $PATH variable. You can do that by prepending PATH=/usr/local/bin:$PATH to a command (or by running export PATH=/usr/local/bin:$PATH, but that will affect all future commands you run in that shell). Note the use of colons here (:) instead of semicolons.

  1. Install HomeBrew in x86_64 mode:
    arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Install pkg-config and libsndfile in x86_64 mode:
    PATH=/usr/local/bin:$PATH arch -x86_64 brew install pkg-config libsndfile

Compiling MuseScore

Now that we have these things installed, we can start building MuseScore.

# Inside the MuseScore source code directory:
PATH_TO_QT=~/Qt/5.15.2/clang_64/bin # This is the default location, but it might be different for you
PATH=$PATH_TO_QT:/usr/local/bin:$PATH ./build.cmake

Note that the body of this command is just ./build.cmake. For information about this script, see Compile on the command line.

The rest of the command makes sure that the $PATH variable is set correctly. When cmake searches for a package, it will look in the directories mentioned in $PATH one by one. So when it looks for Qt, it will first look in the first directory, where it will immediately find Qt, because the first directory was the Qt directory. When it then looks for pkg-config and libsndfile, it won't find them in the first directory (that was the Qt directory), but it will find them in the second directory, which is where HomeBrew installed them. When it would look for, for example, Ninja, it won't find it in the first two directories, but then it will look in /opt/homebrew/bin, and there it will be found.

You probably don't want to specify those PATHs every time you run the script. As described on the page about build.cmake, you can also specify these things in a build_overrides.cmake file:

set(ENV{QTDIR} "$ENV{HOME}/Qt/5.15.2/clang_64") # or wherever Qt is located; note that we are not adding "/bin" to the path
set(ENV{PATH} "/usr/local/bin:$ENV{PATH}")

Qt Creator

After performing these steps, you should also be able to compile MuseScore in Qt Creator, following these instructions: Compile in Qt Creator.

Testing

Translation

Compilation

  1. Set up developer environment
  2. Install Qt and Qt Creator
  3. Get MuseScore's source code
  4. Install dependencies
  5. Compile on the command line
  6. Compile in Qt Creator

Beyond compiling

  1. Find your way around the code
  2. Submit a Pull Request
  3. Fix the CI checks

Misc. development

Architecture general

Audio

Engraving

Extensions

Google Summer of Code

References

Clone this wiki locally