#
#==================================================================================
#       Copyright (c) 2019 Nokia
#       Copyright (c) 2018-2019 AT&T Intellectual Property.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#==================================================================================
#


Building RMR

The RIC Message Router (RMR) is built with CMake, and requires
a modern gcc compiler and make to be installed on the build
system. Typically, installing the following list of packages
in a container (Ubuntu) is all that is needed to craft a
development environment (containerised builds are also the
recommended approach):

 gcc git make vim cmake g++ ksh bash

Kshell and vi are needed only if you wish to use the container
interactively. Bash is assumed necessary for CMake.


Build process
To build RMR, the usual CMake steps are followed:
	mkdir build
	cd build
	cmake .. [options]
	make package


This will create a .deb (provided the system supports this) in
the build directory.  It's that simple.

The following flags may be given on the 'cmake' command line
(options) which are outside of "normal" CMake flags and affect
the configuration:

  -DBUILD_DOC=1         Man pages generated
  -DDEV_PKG=1			Development package configuration
  -DIGNORE_LIBDIR		Ignore the system preferred library directory and install in /usr/local/lib
  -DMAN_PREFIX=<path>	Supply a path where man pages are installed (default: /usr/share/man)
  -DPACK_EXTERNALS=1	Include external libraries used to build in the run-time package
  -DPRESERVE_PTYPE=1	Do not change the processor type when naming deb packages
  -DSKIP_EXTERNALS=1	Do not use Nano/NNG submodules when building; use installed packages
						(See caution in the 'Libraries' section below)


Packages
The build can be configured to generate either a run-time or
development package. The run-time generation is the default and
the -DDEV_PKG=1 option must be given to generate the development
package.  The run-time package contains only the shared library
files (*.so), and the development package contains the headers,
man pages (if the man option is set) and archive (.a) files.
Resulting package names are illustrated in the CI section below.


Continuous Integration Build
Use the Dockerfile in the ci/ subdirectory. This installs all
the required tools, then builds RMR and executes the unit and
program tests. If tests pass, then  an image is created in the
local registry with both run-time and development packages.

To support the distribution of package(s) created during the
build by the CI process,  a YAML file is left in the /tmp
directory (build_packages.yml) which contains a list of the
packages available from the image.  Currently, both .deb and
.rpm packages are generated.

The following is a sample YAML file generated during this process:

   ---
   files:
     - /tmp/rmr-dev_1.0.34_x86_64.deb
     - /tmp/rmr-dev-1.0.34-x86_64.rpm
     - /tmp/rmr_1.0.34_x86_64.deb
     - /tmp/rmr-1.0.34-x86_64.rpm
   ...



Alternatives
To build in a non-Linux environment, or to build with an
alternate install path (or both) read on.

Instead of using 'make package' as listed above, using
'make install'  will build and install on the local system.
By default, the target install is into /usr/local which may
not be desired.  To install into an alternate path add
these two options when the 'cmake ..' command is given:

  -DCMAKE_INSTALL_PREFIX=/path/to/dir
  -DMAN_PREFIX=/path/to/dir


The first will cause the make process to install into the named
directory, which can be in your home directory. The second
defines where manual pages are placed (if not defined
/usr/share/man is the target).   Manual pages are generally
NOT built as the required tool has yet to be incorporated into
the build process and generally is not available on most systems.


Compiling and Linking User Applications
Should the Rmr and NNG/Nano libraries be installed in a directory
outside of the normal system spots (e.g. not in /usr/local)
it might be necessary to define the specific directory for
libraries (.e.g -L) on the command line, or via environment
variables (e.g.. C_INCLUDE_PATH, LD_LIBRARY_PATH, LIBRARY_PATH).
It may also be necessary to have the library directory defined
in the environment at run time.  It is difficult to know what
each system needs, but the following linker options  work when
libraries are installed in the system spots:

	-lrmr_nng -lnng -lpthread

Adding -L is one way to compensate when libraries are installed
a different spot (e.g. in $HOME/usr):

	-L $HOME/usr -lrmr_nng -lnng -lpthread


Libraries
RMR supports only NNG as the underlying transport. Nanomsg
support was dropped starting with version 1.0.45 as Nanomsg
has reached end of life. The package generation and install
will produce a single RMR library:  librmr_nng.  RMR is designed
to support different underlying transport mechanisms, which
might require separate libraries, and thus the library name is
given a suffix of _nng to reflect the transport mechanism
in use.

NNG version with a commit ID of 906d5ea1b3d67bece941d8a4e0a049e5f6c65051
is required to build RMR.  That version (as yet untagged) adds a
new error state which we must trap.  While application environments
are encouraged to also build and install at least this version of
NNG, RMR is still compatable back to the version tagged as 1.1.1.
If you opt to build with the -DSKIP_EXTERNALS=1 flag set, you must
ensure that this version of NNG is present in your build environment.
If you do not set this flag, the proper NNG source will be used
automatically.

Regardless of transport mechanism supported by an RMR library,
the RMR API will be identical, thus it is possible for an application
to shift mechanisms simply by referencing a different library (should
multiple RMR libraries become available).


Manual Pages
By default the deb created does not include the manual pages. To
enable their creation, and subsequent inclusion in the deb, add
the following option to the cmake command:

	-DBUILD_DOC=1

This will cause the {X}fm text formatting package to be fetched
(github) and built at cmake time (must exist before building)
and will trigger the generation of the man pages in both postscript
and troff format.  The troff pages are placed into the deb and
the postscript pages are left in the build directory for the
developer to convert to PDF, or otherwise use.

Debug Mode
Because RMR is designed to keep its overhead to an absolute minimum,
messages written to standard error are by default very limited.
The route table collection thread provides the means to enable
debug messages on the fly, but only because that thread does not
impact the sending and receiving of user messages.

If it becomes necessary, for development or problem soving, to have
the RMR functions generate debugging messages the following
CMake flag can be given when the CMake environment is created:
	-DDEBUG=n

The value for 'n' should be 1 or 2 to enable debugging.  The default
when not given is the same as setting n to zero.

When running in debug mode, RMR will log messages received, sent,
and other useful information.  Because debugging uses fprintf() there
is a significant amount of overhead with logging this information and
thus in debugging mode the user should not expect that usual message
rates can be achieved, and in some cases may cause messages to drop
if TCP queues become full.
