- CMake >= v3.9
- Conan >= v1
- Docker >= v15
- Docker-compose >= v1.20
- NodeJS >= v12
- C++17 compatible compiler
- Lerna
We use CMake as the meta build system and require most of our third-party dependencies using conan. Our rule of thumb is to include dependencies using conan when possible. Conan is integrated with CMake, so it should be transparent within the build process.
In order to run and develop this application on your computer, you need this additional dependencies (you can do all this steps via ./scripts/setup-dev-env.sh script):
- FFmpeg (only if you're going to run LIST locally - ignore this if you're going to run it on Docker)
- uuid-dev (only on linux - sudo apt-get install uuid-dev)
- libpcap-dev (only on linux)
If you meet all the pre-requisites, a quick way to start right away is:
git clone
git submodule update --init --recursive
To run cmake, you can do:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
Or with Visual Studio:
mkdir build
cd build
cmake .. -G "Visual Studio 15 Win64"
And then open the solution file in the build folder.
All the options below can be combined together
| Option | Description | Default |
|---|---|---|
| USE_PCH | Use Cotire for Pre-Compiled Headers (Windows only) | ON on Windows, OFF on others |
| BUILD_DEMOS | Build demo applications | OFF |
| BUILD_TESTS | Build unit tests for each library | OFF |
| BUILD_APPS | Build LIST applications | OFF |
| BUILD_ALL | Build everything | OFF |
The folder config/cmake contains some cmake files that are used project-wide in order to simplify
CMake usage and extra functionality.
The LIST SDK is composed by a set of libraries which can be used separately:
| Library Name | Contains | Link as |
|---|---|---|
| Core | Core functionality such as math functions, platform-dependent code, IO abstractions, memory management and media description | ebu_list_core |
| Net | Ethernet, IPv4 and UDP handling | ebu_list_net |
| Pcap | Reading of PCAP files | ebu_list_pcap |
| PTP | PTP decoding | ebu_list_ptp |
| RTP | RTP decoding and SDP handling | ebu_list_rtp |
| ST2110 | Parsing and analysis of ST2110 format | ebu_list_st2110 |
Each project has the following structure:
lib/ --> contains library files; nested folders represent namespaces
include/ --> public .h files
src/ --> private .h files and .cpp files
unit_tests/ --> test files
CMakeLists.txt --> definitions for both lib and unit_tests
Just use cmake's add_subdirectory() and it will work out-of-the-box.
- Lerna must be installed gloabally with
npm i -g lerna
After cloning the repository:
> lerna bootstrap
To build the project
> lerna run build
To generate the production version:
> lerna run production
All the labels of the UI are generated from a Google Sheet for every supported language.
The translations will be generated during the deploy process either Linux host or Docker builds, to achieve this a token must be generated first. This token can be kept locally and can be reused.
node apps/gui/data/translationsGenerator.js -t
In order to help filling the Spreadsheet, one can use the Google Translate help script:
node apps/gui/data/googleTranslate.js "Any english text"
Note: this is broken until google-translate-api gets fixed.
- Fork it
- Create your feature branch
- Develop the new feature/fix
- Make sure the tests pass locally (and add new ones, if needed)
- Commit your changes (git commit -am 'Add some awesome feature')
- Push to the branch
- Create a new Pull Request
- Watch CI turn green and wait for review