aboutsummaryrefslogtreecommitdiffstats
path: root/INSTALL.md
blob: 3d174e5a6fec3484d0ec1a0986da4fc69e87a1b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
You have 3 ways to install odr-dabmux on your host:

# Using your linux distribution packaging system
`odr-dabmod` is available on the official repositories of several debian-based distributions, such as Debian 
(from Debian 12), Ubuntu (from 24.10), Opensuse and Arch.

If you are using Debian 12 (Bookworm), you will need to 
[add the backports repository](https://backports.debian.org/Instructions/)

**Notice**: this package does not include the web-based GUI and Digital Predistortion Computation engine

# Using installation scripts
If your linux distribution is debian-based, you can install odr-dabmod
as well as the other main components of the mmbTools set with the 
[Opendigitalradio dab-scripts](https://github.com/opendigitalradio/dab-scripts.git)

# Compiling manually
Unlike the 2 previous options, this one allows you to compile odr-dabmod with the features you really need.

## Dependencies
### Debian Bullseye-based OS:
```
# Required packages
## C++11 compiler
sudo apt-get install --yes build-essential automake libtool

## FFTW 3.x
sudo apt-get install --yes libfftw3-dev

# optional packages
## ZeroMQ http://www.zeromq.org
sudo apt-get install --yes libzmq3-dev libzmq5

## UHD for USRP
sudo apt-get install --yes libuhd-dev

## LimeSuite for LimeSDR support
sudo apt-get install --yes liblimesuite-dev

## SoapySDR (see below)
sudo apt-get install --yes libsoapysdr-dev

## bladerf (see below)
sudo apt-get install --yes libbladerf-dev
```

## Compilation
1. Clone this repository:
   ```
   # stable version:
   git clone https://github.com/Opendigitalradio/ODR-DabMod.git

   # or development version (at your own risk):
   git clone https://github.com/Opendigitalradio/ODR-DabMod.git -b next
   ```
1. Configure the project
   ```
   cd ODR-DabMod
   ./bootstrap
   ./configure
   ```
1. Compile and install:
   ```
   make
   sudo make install
   ```

### Configure options
The configure script can be launched with a variety of options:
- Disable ZeroMQ input (to be used with ODR-DabMod), output and remotecontrol: `--disable-zeromq`
- Disable the binding to the UHD driver for USRPs: `--disable-output-uhd`
- Compile using the `-ffast-math` option that gives a substantial speedup at the cost of floating point correctness:  `--enable-fast-math`
- Do not pass `-march=native` to the compiler by using the argument: `--disable-native`

**Remark:** Do not compile ODR-DabMod with `-march=native` compiler option. This is meant for distribution package maintainers who want to use their own march option, and for people running into compilation issues due to `-march=native`. (e.g. GCC bug 70132 on ARM systems)

**Debugging options:** You should not enable any debug option if you need good performance.

Create debugging files for each DSP block for data analysis: `--enable-trace`

For more information, call:
```
./configure --help
```

#### Performance optimisation
While the performance of modern systems is good enough in most cases to
run ODR-DabMod, it is sometimes necessary to increase the compilation
optimisation if all features are used or on slow systems.

Tricks for best performance:

* Do not use `--disable-native`
* Use `--enable-fast-math`
* Add `-O3` to compiler flags
* Disable assertions with `-DNDEBUG`

Applying all together:
```
./configure CFLAGS="-O3 -DNDEBUG" CXXFLAGS="-O3 -DNDEBUG" --enable-fast-math
```

#### Checking for memory usage issues
If your compiler supports it, you can enable the address sanitizer to check for memory
issues:
```
./configure CFLAGS="-fsanitize=address -g -O2" CXXFLAGS="-fsanitize=address -g -O2"
```

The resulting binary will be instrumented with additional memory checks, which have a
measurable overhead. Please report if you get warnings or errors when using the sanitizer.

## SoapySDR support and required dependencies
SoapySDR is a vendor-neutral library to drive SDR devices. It can be used to
drive the HackRF and the LimeSDR among others.

Required dependencies that need to be installed are, in order:
1. SoapySDR itself from https://github.com/pothosware/SoapySDR
1. The LimeSuite for the LimeSDR from https://github.com/myriadrf/LimeSuite
1. HackRF support for SoapySDR from https://github.com/pothosware/SoapyHackRF

ODR-DabMod will automatically recognise if the SoapySDR library is installed on
your system, and will print at the end of `./configure` if support is enabled or
not.

A configuration example is available in `doc/example.ini`

## BladeRF support
In order to use `--enable-bladerf`, you need to install the `libbladerf2` including the -dev package.