2020-11-01 05:26:58 +01:00
|
|
|
# Linux
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
These instructions are written for Debian/Ubuntu; adjust for your distribution.
|
2021-09-02 12:52:55 +02:00
|
|
|
Some extra notes have been provided by a forum member:
|
|
|
|
https://forums.ankiweb.net/t/guide-how-to-build-and-run-anki-from-source-with-xubuntu-20-04/12865
|
2020-11-01 05:26:58 +01:00
|
|
|
|
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-01-30 01:50:14 +01:00
|
|
|
You can see a full list of buildtime and runtime requirements by looking at the
|
|
|
|
[Dockerfiles](../.buildkite/linux/docker/Dockerfile.amd64) used to build the
|
|
|
|
official releases.
|
2021-10-23 11:45:07 +02:00
|
|
|
|
2021-01-02 00:49:41 +01:00
|
|
|
Glibc is required - if you are on a distro like Alpine that uses musl, you'll need
|
|
|
|
to contribute fixes to the upstream [Rust rules](https://github.com/bazelbuild/rules_rust/issues/390),
|
|
|
|
then follow the steps in [Other Platforms](./new-platform.md).
|
|
|
|
|
2021-10-23 06:57:48 +02:00
|
|
|
Users on ARM64, see the notes at the bottom of this file before proceeding.
|
|
|
|
|
2020-11-01 05:26:58 +01:00
|
|
|
**Ensure some basic tools are installed**:
|
|
|
|
|
|
|
|
```
|
2020-11-18 04:22:51 +01:00
|
|
|
$ sudo apt install bash grep findutils curl gcc g++ git
|
2020-11-01 05:26:58 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
The 'find' utility is 'findutils' on Debian.
|
|
|
|
|
2021-10-15 12:16:04 +02:00
|
|
|
**Python**:
|
2020-11-01 05:26:58 +01:00
|
|
|
|
2021-10-15 12:16:04 +02:00
|
|
|
For building and running from source, Python is required, but the version is
|
|
|
|
flexible - any version from 2.7 onwards should work. The build system expects to
|
|
|
|
find the command `python`, so if your system only has a `python3`, you'll need
|
|
|
|
to link it to `python`, or do something like `sudo apt install python-is-python3`.
|
2020-11-01 05:26:58 +01:00
|
|
|
|
2021-10-15 12:16:04 +02:00
|
|
|
The system Python is only used for running scripts, and the build system will
|
|
|
|
download a copy of Python 3.9 into a local folder as part of the build.
|
2020-12-31 23:49:29 +01:00
|
|
|
|
2021-10-15 12:16:04 +02:00
|
|
|
You can have it use a locally installed Python instead, by putting something
|
|
|
|
like the following into a file called user.bazelrc at the top of this repo
|
|
|
|
before proceeding:
|
2020-12-07 12:06:52 +01:00
|
|
|
|
|
|
|
```
|
2021-10-04 07:05:15 +02:00
|
|
|
build --action_env=PYO3_PYTHON=/usr/local/bin/python3.9
|
2020-12-07 12:06:52 +01:00
|
|
|
```
|
|
|
|
|
2020-11-01 05:26:58 +01:00
|
|
|
**Install Bazelisk**:
|
|
|
|
|
|
|
|
Download it under the name 'bazel':
|
|
|
|
|
|
|
|
```
|
2021-10-15 12:16:04 +02:00
|
|
|
$ curl -L https://github.com/bazelbuild/bazelisk/releases/download/v1.10.1/bazelisk-linux-amd64 -o ./bazel
|
2020-11-01 05:26:58 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
And put it on your path:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ chmod +x bazel && sudo mv bazel /usr/local/bin/
|
|
|
|
```
|
|
|
|
|
|
|
|
## Running Anki during development
|
|
|
|
|
|
|
|
From the top level of Anki's source folder:
|
|
|
|
|
|
|
|
```
|
|
|
|
./run
|
|
|
|
```
|
|
|
|
|
|
|
|
This will build Anki and run it in place.
|
|
|
|
|
2020-12-08 00:08:51 +01:00
|
|
|
The first build will take a while, as it downloads and builds a bunch of
|
2020-11-01 05:26:58 +01:00
|
|
|
dependencies. When the build is complete, Anki will automatically start.
|
|
|
|
|
2021-06-21 05:23:03 +02:00
|
|
|
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.
|
|
|
|
|
2020-12-16 10:09:45 +01:00
|
|
|
To play and record audio, install mpv and lame.
|
2020-11-01 05:26:58 +01:00
|
|
|
|
2020-12-10 11:28:33 +01:00
|
|
|
If you or your distro has made ccache the standard compiler, you will need to
|
2020-12-11 11:56:08 +01:00
|
|
|
set CC and CXX to point directly to gcc/g++ or clang/clang++ prior to building
|
|
|
|
Anki.
|
2020-12-10 11:28:33 +01:00
|
|
|
|
2021-10-05 00:33:44 +02:00
|
|
|
## Missing Libraries
|
|
|
|
|
|
|
|
If you get errors during startup, try starting with
|
|
|
|
|
|
|
|
QT_DEBUG_PLUGINS=1 ./run
|
|
|
|
|
|
|
|
It will likely complain about missing libraries, which you can install with
|
|
|
|
your package manager. Some of the libraries that might be required on Debian
|
|
|
|
for example:
|
|
|
|
|
|
|
|
```
|
|
|
|
sudo apt install libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \
|
|
|
|
libxcb-randr0 libxcb-render-util0
|
|
|
|
```
|
|
|
|
|
2020-12-07 02:50:03 +01:00
|
|
|
## 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:
|
|
|
|
|
|
|
|
```
|
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-01-30 01:50:14 +01:00
|
|
|
./tools/runopt
|
2020-12-07 02:50:03 +01:00
|
|
|
```
|
|
|
|
|
2021-10-23 06:57:48 +02:00
|
|
|
## ARM64 support
|
|
|
|
|
|
|
|
Other platforms download PyQt binary wheels from PyPI. There are no PyQt wheels available
|
|
|
|
for ARM Linux, so you will need to rely on your system-provided libraries instead. As Anki
|
|
|
|
requires Python 3.9, this means you will need a fairly up-to-date distro such as Debian 11.
|
|
|
|
|
|
|
|
After installing the system libraries (eg 'sudo apt install python3-pyqt5.qtwebengine'),
|
|
|
|
find the place they are installed (eg '/usr/lib/python3/dist-packages'). Then before
|
|
|
|
running any commands like './run', tell Anki where they can be found:
|
|
|
|
|
|
|
|
```
|
|
|
|
export PYTHON_SITE_PACKAGES=/usr/lib/python3/dist-packages/
|
|
|
|
```
|
|
|
|
|
|
|
|
Note: the trailing slash at the end is required.
|
|
|
|
|
2021-10-26 10:08:08 +02:00
|
|
|
There are a few things to be aware of:
|
2021-10-23 06:57:48 +02:00
|
|
|
|
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-01-30 01:50:14 +01:00
|
|
|
- You should use ./run and not tools/run-qt5\*, even if your system libraries are Qt5.
|
2021-10-23 06:57:48 +02:00
|
|
|
- If your system libraries are Qt5, when creating an aqt wheel, the wheel will not work
|
|
|
|
on Qt6 environments.
|
|
|
|
- Some of the tests only work with PyQt6, and will show failures when run under PyQt5.
|
|
|
|
|
2020-11-04 05:01:14 +01:00
|
|
|
## More
|
2020-11-01 05:26:58 +01:00
|
|
|
|
2020-11-04 05:01:14 +01:00
|
|
|
For info on running tests, building wheels and so on, please see [Development](./development.md).
|