You will need a recent version of Meson (>= 0.34) and Ninja (>= 1.6) If your distribution provides a recent enough versions for them, just install them with your package manager. Continue to read the instructions otherwise.
Before anything else you need to install Python3 related tools. On Debian based systems:
sudo apt-get install python3-pip virtualenv
Create a virtual environment to install python module in it instead of modifying the system.
virtualenv -p python3 ./ # Create virtualenv source bin/activate # Activate the virtualenv
Then, download and install kiwix-build and its dependencies:
git clone https://github.com/kiwix/kiwix-build.git cd kiwix-build pip install . hash -r # Refresh bash paths
The compilation is handled by the
kiwix-build command. It will compile
everything. If you are using a supported platform (Redhat or Debian
based) it will install missing packages using
sudo. You can get
kiwix-build usage like this:
You may want to compile a specific target so you will have to specify it on the
kiwix-build libkiwix # will build kiwix-build and its dependencies kiwix-build kiwix-desktop # will build kiwix-desktop and its dependencies kiwix-build zim-tools # will build zim-tools and its dependencies
kiwix-build will build
To see the whole list of available targets run with non existing target, ex:
kiwix-build not-existing-target ... invalid choice: 'not-existing-target' (choose from 'alldependencies', 'android-ndk', ...
If no target platform is specified, a default one will be infered from the specified target:
libkiwix-appwill be build using the platform
- Other targets will be build using the platform
But you can select another target platform using the option
--target-platform. For now, there is ten different supported
So, if you want to compile
kiwix-tools for win32 using static linkage:
kiwix-build --target-platform win32_dyn
kiwix-android (https://github.com/kiwix/kiwix-android) depends of
It uses a special
.aar file that represent (and embed) the libkiwix for
all supported android arch. This is a kind of fat archive we have for MacOs.
.aar file is build using the
libkiwix-app itself is architecture independent (it is just a packaging of
other archives) but it use
libkiwix who is architecture dependent.
libkiwix, you should directly use the
kiwix-build libkiwix --target-platform android_arm
libkiwix-app is mainly multi arch.
libkiwix-app, you must use the
$ kiwix-build --target-platform android libkiwix-app $ kiwix-build libkiwix-app # because `android` platform is the default for `libkiwix-app`
By default, when using platform
libkiwix will be build for
all architectures. This can be changed by using the option
$ kiwix-build libkiwix-app # aar with all architectures $ kiwix-build libkiwix-app --android-arch arm # aar with arm architecture $ kiwix-build libkiwix-app --android-arch arm --android-arch arm64 # aan with arm and arm64 architectures
kiwix-android itself, you should see the documentation of
When building for ios, we may want to compile a "fat library", a library for several architectures.
To do so, you should directly use the target-platfrom
kiwix-build will build the library several times
(once for each platform) and then create the fat library.
kiwix-build --target-platform iOS_multi libkiwix
You can specify the supported architectures with the option
kiwix-build --target-platform iOS_multi libkiwix # all architetures kiwix-build --target-platform iOS_multi --ios-arch arm --ios-arch arm64 # arm and arm64 arch only
Kiwix-build.py will create several directories:
ARCHIVES: All the downloaded archives go there.
SOURCES: All the sources (extracted from archives and patched) go there.
BUILD_<target_platform>: All the build files go there.
BUILD_<target_platform>/INSTALL: The installed files go there.
BUILD_<target_platform>/LOGS: The logs files of the build.
If you want to install all those directories elsewhere, you can pass the
--working-dir option to
If you need to install Meson "manually":
virtualenv -p python3 ./ # Create virtualenv source bin/activate # Activate the virtualenv pip3 install meson # Install Meson hash -r # Refresh bash paths
If you need to install Ninja "manually":
wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip unzip ninja-linux.zip ninja -d $HOME/bin