Osmocom Top-level Makefile and dev tools
Go to file
Oliver Smith 7f498e2b38 net/templates/run.sh: only one variable for mgw
Prepare to add another MGW for the BSCNAT. Use only one variable for the
mgw, always append the -c configfile parameter further below in the
script where it gets used.

Change-Id: I6f3fe11109107b35059ebe731e0a74a91a04504c
2022-03-08 10:34:42 +01:00
net net/templates/run.sh: only one variable for mgw 2022-03-08 10:34:42 +01:00
src src/osmo-add-gerrit-hooks.sh: maxdepth 2 2021-06-22 00:37:05 +02:00
ttcn3 Add tmux scripts for ttcn3-{msc,bsc,bts}-test 2022-01-17 15:42:45 +00:00
.gitignore ttcn3.sh: build everything inside docker 2021-08-13 09:17:40 +02:00
.gitreview Add .gitreview 2019-03-04 11:09:35 +01:00
README Add tmux scripts for ttcn3-{msc,bsc,bts}-test 2022-01-17 15:42:45 +00:00
all-tests.opts add osmo-upf, libgtpnl 2022-02-01 02:53:24 +01:00
all.deps make: add support for "virtphy" from osmocom-bb 2022-02-25 12:55:21 +01:00
bsc-manual.opts bsc-manual.opts 2020-05-21 13:24:02 +02:00
default.opts add openbsc.deps to allow building legacy openbsc.git as well 2018-05-25 17:19:42 +02:00
gen_makefile.py make: add convenience target cn-bsc-nat 2022-02-25 12:55:21 +01:00
hlr-manual.opts add no_dahdi.opts hlr-manual.opts 2019-12-04 03:28:38 +01:00
iu.opts add openbsc.deps to allow building legacy openbsc.git as well 2018-05-25 17:19:42 +02:00
manuals.opts add manuals.opts, no_doxygen.opts, no_optimization.opts 2019-03-06 16:49:10 +01:00
no_dahdi.opts add no_dahdi.opts hlr-manual.opts 2019-12-04 03:28:38 +01:00
no_doxygen.opts add manuals.opts, no_doxygen.opts, no_optimization.opts 2019-03-06 16:49:10 +01:00
no_libmnl.opts add no_libmnl.opts 2021-06-21 22:39:41 +00:00
no_optimization.opts add manuals.opts, no_doxygen.opts, no_optimization.opts 2019-03-06 16:49:10 +01:00
no_systemd.opts add no_systemd.opts 2018-09-16 13:49:54 +02:00
openbsc.deps add openbsc.deps to allow building legacy openbsc.git as well 2018-05-25 17:19:42 +02:00
osmo-uninstall.sh fix osmo-uninstall.sh: do not clear the entire pkgconfig 2019-02-12 15:12:56 +01:00
prefix_usr.opts add prefix_usr.opts 2018-11-19 02:54:11 +01:00
sanitize.opts add osmo-upf, libgtpnl 2022-02-01 02:53:24 +01:00
sgsn-manual.opts sgsn-manual.opts 2020-05-21 13:24:02 +02:00
sysmobts-calib.py add sysmobts-calib.py 2019-08-08 15:13:46 +02:00
transcoding.opts fix transcoding.opts: osmo-bsc also needs it ATM 2017-08-22 19:34:02 +02:00
trx.opts add trx.opts to build osmo-bts-trx and osmo-trx with UHD 2021-10-23 20:45:12 +02:00
upf-manual.opts add osmo-upf, libgtpnl 2022-02-01 02:53:24 +01:00
werror.opts add osmo-upf, libgtpnl 2022-02-01 02:53:24 +01:00



* 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' 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.


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

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

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:


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"


  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

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

Example usage:

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

More about the 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.