blob: 811490dce8e7d374ddf816dab9b356c1b7f4ea7b [file] [log] [blame]
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -04001#
2#==================================================================================
E. Scott Daniels29d87162019-06-12 13:48:25 -04003# Copyright (c) 2019 Nokia
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -04004# Copyright (c) 2018-2019 AT&T Intellectual Property.
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#==================================================================================
18#
19
20
21Building RMr
22
23The RIC Message Router (RMr) is built with CMake, and requires
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -040024a modern gcc compiler and make to be installed on the build
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -040025system. Typically, installing the following list of packages
26in a container (Ubuntu) is all that is needed to craft a
27development environment (containerised builds are also the
28recommended approach):
29
30 gcc git make vim cmake g++ ksh bash
31
32Kshell and vi are needed only if you wish to use the container
33interactively. Bash is assumed necessary for CMake.
34
35
36Build process
37To build RMr, the usual CMake steps are followed:
38 mkdir build
39 cd build
40 cmake .. [options]
41 make package
42
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040043
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -040044This will create a .deb (provided the system supports this) in
45the build directory. It's that simple.
46
E. Scott Daniels29cb1002019-06-20 08:23:11 -040047The following flags may be given on the 'cmake' command line
48(options) which are outside of "normal" CMake flags and affect
49the configuration:
50
51 -DBUILD_DOC=1 Man pages generated
52 -DDEV_PKG=1 Development package configuration
53 -DMAN_PREFIX=<path> Supply a path where man pages are installed (default: /usr/share/man)
54 -DPACK_EXTERNALS=1 Include external libraries used to build in the run-time package
55 -DPRESERVE_PTYPE=1 Do not change the processor type when naming deb packages
56 -DSKIP_EXTERNALS=1 Do not use Nano/NNG submodules when building; uee installed packages
57
58
59Packages
60The build can be configured to generate either a run-time or
61development package. The run-time generation is the default and
62the -DDEV_PKG=1 option must be given to generate the development
63package. The run-time package contains only the shared library
64files (*.so), and the development package contains the headers,
65man pages (if the man option is set) and archive (.a) files.
66Resulting package names are illustrated in the CI section below.
67
68
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040069Continuous Integration Build
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -040070Use the Dockerfile in the ci/ subdirectory. This installs all
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040071the required tools, then builds RMr and executes the unit and
72programm tests. If tests pass, then an image is created in the
73local registry with both run-time and development packages.
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -040074
E. Scott Daniels29d87162019-06-12 13:48:25 -040075To support the distribution of package(s) created during the
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040076build by the CI process, a YAML file is left in the /tmp
77directory (build_packages.yml) which contains a list of the
78packages available from the image. Currently, both .deb and
79.rpm packages are generated.
80
81The following is a sample YAML file generated during this process:
82
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040083 ---
E. Scott Danielsf6f4f122019-06-18 16:02:17 -040084 files:
85 - /tmp/rmr-dev_1.0.34_x86_64.deb
86 - /tmp/rmr-dev-1.0.34-x86_64.rpm
87 - /tmp/rmr_1.0.34_x86_64.deb
88 - /tmp/rmr-1.0.34-x86_64.rpm
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -040089 ...
90
E. Scott Daniels29d87162019-06-12 13:48:25 -040091
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -040092
93Alternatives
94To build in a non-Linux environment, or to build with an
95alternate install path (or both) read on.
96
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -040097Instead of using 'make package' as listed above, using
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -040098'make install' will build and install on the local system.
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -040099By default, the target install is into /usr/local which may
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400100not be desired. To install into an alternate path add
101these two options when the 'cmake ..' command is given:
102
103 -DCMAKE_INSTALL_PREFIX=/path/to/dir
104 -DMAN_PREFIX=/path/to/dir
105
106
107The first will cause the make process to install into the named
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400108directory, which can be in your home directory. The second
109defines where manual pages are placed (if not defined
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400110/usr/share/man is the target). Manual pages are generally
111NOT built as the required tool has yet to be incorporated into
112the build process and generally is not available on most systems.
113
114
E. Scott Daniels29d87162019-06-12 13:48:25 -0400115Compiling and Linking User Applications
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400116Should the Rmr and NNG/Nano libraries be installed in a directory
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400117outside of the normal system spots (e.g. not in /usr/local)
118it might be necessary to define the specific directory for
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400119libraries (.e.g -L) on the command line, or via environment
120variables (e.g.. C_INCLUDE_PATH, LD_LIBRARY_PATH, LIBRARY_PATH).
121It may also be necessary to have the library directory defined
122in the environment at run time. It is difficult to know what
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400123each system needs, but the following linker ooptions work when
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400124libraries are installed in the system spots:
125
126 -lrmr_nng -lnng -lpthread
127
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400128Adding -L is one way to compensate when libraries are installed
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400129a different spot (e.g. in $HOME/usr):
130
131 -L $HOME/usr -lrmr_nng -lnng -lpthread
132
133
134Libraries
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400135RMr supports both NNG and Nanomsg as underlying transport. They
E. Scott Danielsd4f18ba2019-06-17 15:08:17 -0400136are separate beasts, and while an NNG based program can
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400137communicate with a Nanomsg based programme, their APIs are NOT
Ashwin Sridharanfd9cc7a2019-04-03 16:47:02 -0400138compatible. For this reason, and others, RMr generates two
139libraries and requires that the underlying transport be selected
140at link time rather than run time. The RMr API for both underlying
141mechanisms is the same, so generating a NNG and Nanomsg version
142of a programme should require no extra work; other than adding
143a second link statement and giving it a different name.
144
145Nanomsg is on its way out with respect to community support. RMr
146will continue to support Nanomsg for a short period of time, but
147new programmes should NOT use Nanomsg.
148
149
E. Scott Daniels15390d72019-05-06 20:19:59 +0000150Manual Pages
151By default the deb created does not include the manual pages. To
152enable their creation, and subsequent inclusion in the deb, add
153the following option to the cmake command:
154
155 -DBUILD_DOC=1
156
157This will cause the {X}fm text formatting package to be fetched
158(github) and built at cmake time (must exist before building)
159and will trigger the generation of the man pages in both postscript
Lott, Christopher (cl778h)f89eec52019-06-10 16:53:39 -0400160and troff format. The troff pages are placed into the deb and
161the postscript pages are left in the build directory for the
E. Scott Daniels15390d72019-05-06 20:19:59 +0000162developer to convert to PDF, or otherwise use.
E. Scott Daniels29d87162019-06-12 13:48:25 -0400163
164