Jami relies on various components which interact together.
They are divided into three main layers:
1. Daemon is the core of
Jami. It does not interact with users but it is involved in every
2. LibRingClient (or LRC) is written in
QtCore and facilitates clients' portability between operating systems.
It does not interact with the Android client.
3. The Client layer formalizes the
use-case on GNU/Linux (Gnome), Windows, Mac OS X and Android.
To fully build Jami, you must build each of these components in order,
unless you choose to build Jami easily and quickly.
How to Build Jami Easily and Quickly
We use a GIT repository to manage sources. On shell based platform you
can fetch your private copy using following command:
git clone https://review.jami.net/ring-project
Jami installer uses python3. If it's not installed, please install
cd ring-project/./make-ring.py --init
Build and install all the dependencies: Your distro package manager
will be used.
Build and install locally
Run LibRing (daemon) and client that were installed locally
You can then stop the processes with CTRL-C. You can also run them in
the background with the --background argument and then use the
--stop command to stop them. Use Stdout and stderr to go to
daemon.log and client-gnome.log.
Install globally for all users instead
One design choice that has been made is to not update the submodules of the ring-project very often due to high activity on the sub-projects. Therefore, you need to update them manually prior to rebuilding everything.
This command will install chocolatey which may require you to restart the Command Prompt to be able to use it.
This command will install msys2 (64 bit) by using chocolatey command which may cause issues below:
a. Choco may require you to restart the Command Prompt after finishing installing msys2.
b. Only if you have already installed msys2 (64 bit) under the default installation folder, we will use the existing one.
This command will install strawberry perl by using chocolatey command which may fail if you have already installed it.
This command will install cmake by using chocolatey command which will not add cmake into PATH (environment variable).
The issue 1, 2(a), 3 can be solved by restarting the Command Prompt under Administrator right and re-run the command.
The issue 3 can be solved by uninstalling your current strawberry perl and re-run the command.
The issue 4 can be solved by adding the location of the cmake.exe into PATH.
Using a new Non-Elevated Command Prompt
python make-ring.py --install
Then you should be able to use the Visual Studio Solution file in client-windows folder (Configuration = Release, Platform = x64)
To control the toolset and the sdk version that are used by msbuild, you can use --toolset and --sdk options
By default: toolset=v141, sdk=10.0.16299.0
RING=$PWD/ring-daemoncd$RING/contribmkdir nativecd native../bootstrapmake# That's all !# Optionally, you may also type :make list# or# make .packge?# to force using downloaded packages, not system locally installed.make .gnutls .upnp ...
Note: if compiling libav in contrib (you can see the list of
dependencies which will be compiled by running 'make list' in
$RING/contrib/build) on Linux, you will likely first need to install
libx11-dev libxext-dev libxfixes-dev due to the '--enable-x11grab'
cd$RING# Now generate autotools configuration files./autogen.sh# Create Makefiles and config.h files for your build target./configure --prefix=/usr --disable-shared# Buildmake# Installsudo make install
On native Windows
Make sure that dependencies is built by make-ring.py
On MSVC folder (ring-project\daemon\MSVC):
python winmake.py -b daemon
--toolset, --sdk options are available, as well.
This will generate a .lib file in the path of ring-project\daemon\MSVC\x64\ReleaseLib_win32\bin
On Mac OS X
Build Tools: Use your favorite package manager to install the
necessary tools (HomeBrew or MacPorts) automake, libtool, gettext,
libtoolize, yasm, autoconf, pkg-config. If you don't use a package
cd extras/tools./bootstrapmakeexport PATH=$PATH:$RING/extras/tools/build/bin
Compile LibRing's dependencies
cd contribmkdir buildcd build../bootstrapmake -j3
Build LibRing: If you want to link against libringclient and native
client, easiest way is to add --prefix to configure and then run make
cd ../.././autogen.sh./configure --without-dbus--prefix=<prefix_path>make install
If you do not want to install LibRing, you will have to use
-DRING_BUILD_DIR=<path_to_ring>/src as a cmake argument for
Common Issues: "Autopoint not found" When using Homebrew, autopoint
is not found even when gettext is installed, because symlinks are not
created. To fixt it, run:
brew link--force gettext
Contributing to LibRing Source Code
First read our LibRing Coding Rules page before sending us any patches.
Gerrit is used as code review / integration tool. Register your ID (you
need a Google/GitHUB OAuth2 account) on our public web gerrit service
If LibRing and LibRingClient are already installed on the system (eg:
/usr/) in the gnome-ring project root dir:
mkdir buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX=/usrmakesudo make install
Building without installing LibRing and LibRingClient
This allows you to build every component separately and to run them from
their location without having to install them. To do this, you must
first build LibRing and then tell LibRingClient where it is located.
Then, you build the LibRingClient and tell client-gnome where
LibRingClient it is located. Finally, you build client-gnome.
Build the daemon as explained above.
Configure the build of LibRingClient by specifying the location of
the (non-installed) daemon with e.g.:
cd build && cmake .. -DRING_BUILD_DIR=$HOME/ring-project/daemon/src -DCMAKE_BUILD_TYPE=Debug
Build LibRingClient by running "make".
Configure the build of client-gnome by specifying the location of
LibRingClient using the specific variable designed for it:
cd build && cmake .. -DLibRingClient_PROJECT_DIR=$HOME/ring-project/lrc -DCMAKE_BUILD_TYPE=Debug
Build client-gnome by running "make".
To run an install-less Jami, you must manually start the daemon and then
the client, e.g.:
The app built using
'make' contains only links to required libraries. To fully build and
package as a standalone Bundle, see the Packaging section.
For now, the build type of the client is "Debug" by default. However it
is useful to also have the debug symbols of LibRingClient. To do this,
specify -DCMAKE_BUILD_TYPE=Debug when compiling LibRingClient in the
To make a standalone Bundle we use a cmake module:
All dependencies are copied inside the Bundle and links are fixed.
We can then generate a "DragNDrop" dmg file with
cmake ../ -DCMAKE_INSTALL_PREFIX=<libringclient_install_path>make install-jcpack -G DragNDrop Ring