anki/docs/mac.md
Damien Elmes 95dbf30fb9 updates to the build process and binary bundles
All platforms:

- rename scripts/ to tools/: Bazelisk expects to find its wrapper script
(used by the Mac changes below) in tools/. Rather than have a separate
scripts/ and tools/, it's simpler to just move everything into tools/.
- wheel outputs and binary bundles now go into .bazel/out/dist. While
not technically Bazel build products, doing it this way ensures they get
cleaned up when 'bazel clean' is run, and it keeps them out of the source
folder.
- update to the latest Bazel

Windows changes:

- bazel.bat has been removed, and tools\setup-env.bat has been added.
Other scripts like .\run.bat will automatically call it to set up the
environment.
- because Bazel is now on the path, you can 'bazel test ...' from any
folder, instead of having to do \anki\bazel.
- the bat files can handle being called from any working directory,
so things like running "\anki\tools\python" from c:\ will work.
- build installer as part of bundling process

Mac changes:

- `arch -arch x86_64 bazel ...` will now automatically use a different
build root, so that it is cheap to switch back and forth between archs
on a new Mac.
- tools/run-qt* will now automatically use Rosetta
- disable jemalloc in Mac x86 build for now, as it won't build under
Rosetta (perhaps due to its build scripts using $host_cpu instead of
$target_cpu)
- create app bundle as part of bundling process

Linux changes:

- remove arm64 orjson workaround in Linux bundle, as without a
readily-available, relatively distro-agonstic PyQt/Qt build
we can use, the arm64 Linux bundle is of very limited usefulness.
- update Docker files for release build
- include fcitx5 in both the qt5 and qt6 bundles
- create tarballs as part of the bundling process
2022-02-10 19:23:07 +10:00

1.7 KiB

Mac

Requirements

Xcode:

Install the latest XCode from the App Store. Open it at least once so it installs the command line tools.

Bazelisk:

$ curl -L https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-darwin -o bazel \
    && chmod +x bazel \
    && sudo mv bazel /usr/local/bin

Python:

The build system will automatically download a copy of Python 3.9 as part of the build.

It is also possible to override the Python 3.9 that the build system uses. We only recommend you do this if you have downloaded Python from python.org, as we have heard reports of things failing when using a Python 3 from macOS or Homebrew.

To override Python, put the following into a file called user.bazelrc at the top of this repo (assuming /usr/local/bin/python links to your Python 3.9 binary).

build --action_env=PYO3_PYTHON=/usr/local/bin/python

Running Anki during development

From the top level of Anki's source folder:

./run

This will build Anki and run it in place.

The first build will take a while, as it downloads and builds a bunch of dependencies. When the build is complete, Anki will automatically start.

The Javascript build code is currently a bit flaky, so the initial build may fail with an error. If you get an error when running/building, try repeating the command once or twice - it should pick up where it left off.

To play audio, use Homebrew to install mpv and lame.

Optimized builds

The ./run command will create a non-optimized build by default. This is faster to compile, but will mean Anki will run considerably slower.

To run Anki in optimized mode, use:

./tools/runopt

More

For info on running tests, building wheels and so on, please see Development.