=== WHAT IS THIS?

* quickly build the entire Osmocom core network stack from source, with a
  generated top-level makefile (see the rest of this README file below).

* quickly configure, launch and tear down an entire Osmocom core network on
  your box (see net/README).


=== Quick Start

sudo apt install \
  build-essential gcc g++ make automake autoconf libtool pkg-config \
  libtalloc-dev libpcsclite-dev libortp-dev libsctp-dev libssl-dev libdbi-dev \
  libdbd-sqlite3 libsqlite3-dev libpcap-dev libc-ares-dev libgnutls28-dev \
  libsctp-dev sqlite3 libusb-1.0-0-dev libmnl-dev libsofia-sip-ua-glib-dev

./gen_makefile.py default.opts iu.opts no_dahdi.opts -I -m make

cd make
make

- 'make' will ask for sudo password to run 'make install' and 'ldconfig'.
  To run non-interactively:

  - 'make install':
    chown $USER: /usr/local
    Then call gen_makefile.py once without the -I option

  - 'ldconfig':
    echo "$USER  ALL= NOPASSWD: /sbin/ldconfig" > /etc/sudoers.d/ldconfig


=== gen_makefile.py

This provides a set of top-level makefiles to build variants of the Osmocom
source trees. It is inteded for the core network components and related
projects, but works generically.

The idea is to have all your Osmocom git clones in ./src, while keeping one or
more separate build trees in ./make-*.

Run ./gen_makefile.py with a choice of choice of configure options.


Examples:

CN with full 2G and 3G support:

  ./gen_makefile.py default.opts iu.opts -m make
  cd make
  make cn

Other make targets exist for specific use cases:

  - 'usrp':
    Build the CN, OsmoBSC, OsmoBTS and OsmoTRX (default, e.g. when connecting
    to an USRP)

  - 'cn-bsc':
    Build the CN and OsmoBSC (e.g. when connecting to an external sysmoBTS)

  - 'osmo-msc':
    Build only the OsmoMSC project and its dependencies (this can be used for
    any project in all.deps).

  - '.make.osmo-ttcn3-hacks.clone'
    Clone the osmo-ttcn3-hacks git repository (it cannot be built by osmo-dev,
    but cloning it is still useful.)

If you make modifications in one of the source trees, this Makefile will pick
it up, rebuild the project and also rebuild all dependencies (according to
all.deps).

If you modify the all.deps or *.opts file, you can easily run 'make regen' in a
make-* subdir to regenerate the Makefile from the same files.

In your make-* subdir there are empty status files that are touched for every
completed make target. From these, 'make' can detect what needs to be rebuilt.
You can manually remove them to force a rebuild of a specific target.

For example, if you 'rm .make.libosmocore.autoconf', libosmocore and all
projects depending on libosmocore will be rebuilt from scratch.

For more details on the *.opts and all.deps syntax, read the docs at the top of
./gen_makefile.py.

It is also easily possible to keep sources and build trees in various
configurations, see the command line options of ./gen_makefile.py.


=== Install in /usr

By default, the Osmocom install prefix is /usr/local, while (currently) the
default systemd *.service files expect binaries installed in /usr/bin. To
install in /usr instead, use prefix_usr.opts, which sets --prefix=/usr.


=== Systemd Service Files

If you encounter problems installing *.service files, no_systemd.opts may help:

Systemd recommends installing service files in the distribution's single
service file location; that may sound sane, but if that location is
/lib/systemd/system, that means even a --prefix=/home/private/prefix ends up
trying to install service files system-wide in /lib/systemd/system, making all
attempts to install to a user-writable location fail.

no_systemd.opts disables installing *.service files.


=== Build Environment

For dependencies, see the "External dependencies" on:

  https://osmocom.org/projects/cellular-infrastructure/wiki/Build_from_Source

If /usr/local/ is not writable by your user, pass the --sudo-make-install
option to gen_makefile.py above (a custom --prefix is not yet supported).

If your system doesn't have this by default, you will need:

  export LD_LIBRARY_PATH="/usr/local/lib"

and

  export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"

to your environment. To use the installed binaries after installation, also

  export PATH="$PATH:/usr/local/bin"


=== osmo-uninstall.sh

Remove osmocom built binaries and headers from given prefix,
default is /usr/local.


=== src/*

Find other useful scripts in src/, see src/README.


=== ttcn3/ttcn3.sh

Run a given testsuite with docker, so it behaves exactly the same as when
jenkins runs it [1], but use osmo-dev to build all related Osmocom components
and the testsuite, and mount them inside the docker containers. After building
the docker containers for the first time (which takes rather long), this gives
short test cycles: just modify something, run the script again and the relevant
objects will be built directly, already built objects do not need to be
rebuilt. (This is a big speed improvement over just using docker containers as
you don't need to push your sources to a git server first, have the docker
containers fetch the git sources and build the modified component from scratch
again.)

The docker containers are used, so we don't have to maintain a second set of
configs which works without docker (that was tried before, and found not to be
feasible).

Example usage:

  ./ttcn3/ttcn3.sh mgw
  IMAGE_SUFFIX=latest ./ttcn3/ttcn3.sh mgw

More about the testsuites:
https://osmocom.org/projects/cellular-infrastructure/wiki/Titan_TTCN3_Testsuites

[1] https://jenkins.osmocom.org/jenkins/view/TTCN3/

=== ttcn3/tmux

It's possible to run TTCN-3 test cases without using Docker.  This directory
contains scripts for starting a testsuite and the related binaries in a tmux
session.  For example, ttcn3-bsc-test.sh does the following:

* Starts osmo-bsc, osmo-stp, and three instances of osmo-bts-omldummy.
* Prepares a command for execuring the test suite.

=== Troubleshooting

When using sanitize.opts, osmo-trx is not built with the address sanitizer
enabled. Linking a sanitizer-enabled libosmocore will not work.
