view LinuxCompilation.txt @ 3458:4e34fd3e226a

ubuntu 18.04
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 08 Jul 2019 08:47:48 +0200
parents 408ffcb4038f
children df730398978a
line wrap: on
line source

This file is a complement to "INSTALL", which contains instructions
that are specific to GNU/Linux.


Static linking for GNU/Linux
============================

The most simple way of building Orthanc under GNU/Linux consists in
statically linking against all the third-party dependencies. In this
case, the system-wide libraries will not be used. The build tool
(CMake) will download the sources of all the required packages and
automatically compile them.

This process should work on any GNU/Linux distribution, provided that a
C/C++ compiler ("build-essential" in Debian-based systems), the Python
interpreter, CMake, the "unzip" system tool, and the development
package for libuuid ("uuid-dev" in Debian) are installed.


We now make the assumption that Orthanc source code is placed in the
folder "~/Orthanc" and that the binaries will be compiled to
"~/OrthancBuild". To build binaries with debug information:

# cd ~/OrthancBuild
# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Debug ~/Orthanc
# make
# make doc


To build a release version:

# cd ~/OrthancBuild
# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release ~/Orthanc
# make
# make doc


Note 1- When the "STATIC_BUILD" option is set to "ON", the build tool
will not ask you the permission to download packages from the
Internet.

Note 2- If the development package of libuuid was not installed when
first invoking cmake, you will have to manually remove the build
directory ("rm -rf ~/OrthancBuild") after installing this package,
then run cmake again.

Note 3- To build the documentation, you will have to install doxyen.


Use system-wide libraries under GNU/Linux
=========================================

Under GNU/Linux, by default, Orthanc links against the shared
libraries of your system (the "STATIC_BUILD" option is set to
"OFF"). This greatly speeds up the compilation. This is also required
when building packages for GNU/Linux distributions. Because using
system libraries is the default behavior, you just have to use:

# cd ~/OrthancBuild
# cmake -DCMAKE_BUILD_TYPE=Debug ~/Orthanc
# make

Note that to build the documentation, you will have to install doxygen.

However, on some GNU/Linux distributions, it is still required to
download and static link against some third-party dependencies,
e.g. when the system-wide library is not shipped or is
outdated. Because of difference in the packaging of the various
GNU/Linux distribution, it is also sometimes required to fine-tune
some options.

You will find below build instructions for specific GNU/Linux
distributions. Distributions tagged by "SUPPORTED" are tested by
Sébastien Jodogne. Distributions tagged by "CONTRIBUTED" come from
Orthanc users.


SUPPORTED - Debian Jessie/Sid
-----------------------------

# sudo apt-get install build-essential unzip cmake mercurial \
       	       	       uuid-dev libcurl4-openssl-dev liblua5.1-0-dev \
       	       	       libgtest-dev libpng-dev libjpeg-dev \
       	       	       libsqlite3-dev libssl-dev zlib1g-dev libdcmtk2-dev \
                       libboost-all-dev libwrap0-dev libjsoncpp-dev libpugixml-dev

# cmake -DALLOW_DOWNLOADS=ON \
	-DUSE_SYSTEM_CIVETWEB=OFF \
        -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
        -DDCMTK_LIBRARIES=dcmjpls \
        -DCMAKE_BUILD_TYPE=Release \
	~/Orthanc

Note: Have also a look at the official package:
http://anonscm.debian.org/viewvc/debian-med/trunk/packages/orthanc/trunk/debian/


SUPPORTED - Ubuntu 14.04 LTS
----------------------------

# sudo apt-get install build-essential unzip cmake mercurial \
       	       	       uuid-dev libcurl4-openssl-dev \
       	       	       libgtest-dev libpng-dev libsqlite3-dev libssl-dev libjpeg-dev \
		       zlib1g-dev libdcmtk2-dev libboost-all-dev libwrap0-dev \
                       libcharls-dev libjsoncpp-dev libpugixml-dev

# cmake -DALLOW_DOWNLOADS=ON \
        -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
        -DUSE_SYSTEM_CIVETWEB=OFF \
        -DUSE_SYSTEM_JSONCPP=OFF \
        -DDCMTK_LIBRARIES=dcmjpls \
        -DCMAKE_BUILD_TYPE=Release \
        ~/Orthanc
# make


SUPPORTED - Ubuntu 16.04 LTS
----------------------------

# sudo apt-get install build-essential unzip cmake mercurial \
       	       	       uuid-dev libcurl4-openssl-dev liblua5.3-0-dev \
       	       	       libgtest-dev libpng-dev libsqlite3-dev libssl-dev libjpeg-dev \
		       zlib1g-dev libdcmtk2-dev libboost-all-dev libwrap0-dev \
                       libcharls-dev libjsoncpp-dev libpugixml-dev

# cmake -DALLOW_DOWNLOADS=ON \
        -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
        -DUSE_SYSTEM_CIVETWEB=OFF \
        -DDCMTK_LIBRARIES=dcmjpls \
        -DCMAKE_BUILD_TYPE=Release \
        ~/Orthanc
# make


NB: Instructions to use clang and ninja:

# sudo apt-get install ninja-build
# CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -G Ninja \
        -DALLOW_DOWNLOADS=ON \
        -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
        -DUSE_SYSTEM_CIVETWEB=OFF \
        -DDCMTK_LIBRARIES=dcmjpls \
        -DCMAKE_BUILD_TYPE=Release \
        ~/Orthanc
# ninja


SUPPORTED - Ubuntu 18.04 LTS
----------------------------

# sudo apt-get install build-essential unzip cmake mercurial \
       	       	       uuid-dev libcurl4-openssl-dev liblua5.3-0-dev \
       	       	       libgtest-dev libpng-dev libsqlite3-dev libssl-dev libjpeg-dev \
		       zlib1g-dev libdcmtk2-dev libboost-all-dev libwrap0-dev \
                       libcharls-dev libjsoncpp-dev libpugixml-dev locales

# cmake -DALLOW_DOWNLOADS=ON \
        -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
        -DUSE_SYSTEM_CIVETWEB=OFF \
        -DDCMTK_LIBRARIES=dcmjpls \
        -DCMAKE_BUILD_TYPE=Release \
        ~/Orthanc
# make


NB: A suitable environment for locales can be setup as follows:

# echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
# locale-gen



SUPPORTED - Fedora 20-22
------------------------

# sudo yum install unzip make automake gcc gcc-c++ python cmake \
                   boost-devel curl-devel dcmtk-devel \
                   gtest-devel libpng-devel libsqlite3x-devel libuuid-devel jpeg-devel \
                   mongoose-devel openssl-devel jsoncpp-devel lua-devel pugixml-devel

You will also have to install "gflags-devel" on Fedora 21&22:

# sudo yum install gflags-devel

# cmake  "-DDCMTK_LIBRARIES=CharLS" \
         -DENABLE_CIVETWEB=OFF \
         -DSYSTEM_MONGOOSE_USE_CALLBACKS=OFF \
         -DCMAKE_BUILD_TYPE=Release \
         ~/Orthanc
       
Note: Have also a look at the official package:
http://pkgs.fedoraproject.org/cgit/orthanc.git/tree/?h=f18



SUPPORTED - FreeBSD 10.1
------------------------

# pkg install jsoncpp pugixml lua51 curl googletest dcmtk cmake jpeg \
              e2fsprogs-libuuid boost-libs sqlite3 python libiconv

# cmake -DALLOW_DOWNLOADS=ON \
        -DUSE_SYSTEM_CIVETWEB=OFF \
        -DDCMTK_LIBRARIES="dcmdsig;charls;dcmjpls" \
        -DCMAKE_BUILD_TYPE=Release \
	~/Orthanc



Other GNU/Linux distributions?
------------------------------

Don't hesitate to send us your build instructions (by a mail to
s.jodogne@orthanc-labs.com)!

The file "./Resources/OldBuildInstructions.txt" contains build
instructions that once worked for older versions of Orthanc or older
GNU/Linux distributions, but are not tested anymore. Even if they may
not work anymore as such, they can serve as a basis.

You can find build instructions for Orthanc up to 0.7.0 on the
following Wiki page:
https://book.orthanc-server.com/faq/compiling-old.html

These instructions will not work as such beyond Orthanc 0.7.0, but
they might give indications.



Using ccache
============

Under GNU/Linux, you also have the opportunity to use "ccache" to
dramatically decrease the compilation time when rebuilding
Orthanc. This is especially useful for developers. To this end, you
would use:

# CC="ccache gcc" CXX="ccache g++" cmake ~/Orthanc [Other Options]