User cookbook

Linux (from packages)

Ubuntu / Debian

Download debian packages from latest release, go to the download directory, and run:

$ sudo apt install ./roc_*.deb ./libroc_*.deb ./libroc-dev_*.deb

Fedora

$ sudo dnf install roc-toolkit roc-toolkit-utils roc-toolkit-devel

Arch Linux

$ sudo pacman -S roc-toolkit libpulse sox

Alpine Linux

$ sudo apk add roc-toolkit roc-toolkit-libs roc-toolkit-dev

Linux (from sources)

Ubuntu / Debian

# for Roc
$ sudo apt-get install g++ pkg-config scons ragel gengetopt \
    libuv1-dev libunwind-dev libspeexdsp-dev libsox-dev libssl-dev libpulse-dev

# for 3rd-parties
$ sudo apt-get install libtool intltool autoconf automake make cmake meson

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

Fedora

# for Roc
$ sudo dnf install gcc-c++ pkgconfig scons ragel gengetopt \
    libuv-devel libunwind-devel speexdsp-devel sox-devel openssl-devel pulseaudio-libs-devel

# for 3rd-parties
$ sudo dnf install libtool intltool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

openSUSE

# for Roc
$ sudo zypper install gcc-c++ scons ragel gengetopt \
    libuv-devel libunwind-devel speexdsp-devel sox-devel libopenssl-3-devel libpulse-devel

# for 3rd-parties
$ sudo zypper install pkg-config intltool libtool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

Centos

# for developer packages
$ sudo yum install epel-release

# for Roc
$ sudo yum install gcc-c++ pkgconfig scons ragel gengetopt \
    libunwind-devel speex-devel sox-devel openssl11-devel pulseaudio-libs-devel

# for 3rd-parties
$ sudo yum install libtool intltool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=libuv,libatomic_ops,openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=libuv,libatomic_ops,openfec install

Arch Linux

# for Roc
$ sudo pacman -S gcc pkgconf scons ragel gengetopt \
    libuv libunwind speexdsp sox openssl gsm libpulse

# for 3rd-parties
$ sudo pacman -S grep gawk libtool intltool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

Alpine Linux

# for Roc
$ sudo apk add g++ pkgconf scons ragel gengetopt \
    libuv-dev libunwind-dev speexdsp-dev sox-dev openssl-dev pulseaudio-dev

# for 3rd-parties
$ sudo apk add libtool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

NixOS

# for Roc and 3rd-parties
$ nix-shell -p gcc autoconf automake cmake gengetopt gnumake intltool libpulseaudio \
    libtool libunwind libuv meson pkg-config ragel scons sox openssl speexdsp

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

Linux (cross-compile)

Raspberry Pi (64-bit)

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-aarch64-linux-gnu \
      scons -Q \
        --host=aarch64-linux-gnu \
        --build-3rdparty=all \
        --disable-pulseaudio

# install Roc binaries
$ scp ./bin/aarch64-linux-gnu/roc-{recv,send,conv} <address>:/usr/bin
$ scp ./bin/aarch64-linux-gnu/libroc.so.*.* <address>:/usr/lib

# install Roc dependencies
$ ssh <address> apt-get install libasound2 libpulse0 libltdl7

Raspberry Pi 2 and later (32-bit)

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-arm-linux-gnueabihf \
      scons -Q \
        --host=arm-linux-gnueabihf \
        --build-3rdparty=all \
        --disable-pulseaudio

# install Roc binaries
$ scp ./bin/arm-linux-gnueabihf/roc-{recv,send,conv} <address>:/usr/bin
$ scp ./bin/arm-linux-gnueabihf/libroc.so.*.* <address>:/usr/lib

# install Roc dependencies
$ ssh <address> apt-get install libasound2 libpulse0 libltdl7

Raspberry Pi 1 and Zero (32-bit)

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-arm-bcm2708hardfp-linux-gnueabi \
      scons -Q \
        --host=arm-bcm2708hardfp-linux-gnueabi \
        --build-3rdparty=all

# install Roc binaries
$ scp ./bin/arm-bcm2708hardfp-linux-gnueabi/roc-{recv,send,conv} <address>:/usr/bin
$ scp ./bin/arm-bcm2708hardfp-linux-gnueabi/libroc.so.*.* <address>:/usr/lib

# install Roc dependencies
$ ssh <address> apt-get install libasound2 libpulse0 libltdl7

macOS

Prerequisites:

  • Install XCode Command Line Tools

  • Install Homebrew

Then you can run the following commands:

# for Roc
$ brew install pkg-config scons ragel gengetopt libuv speexdsp sox openssl@3

# for 3rd-parties
$ brew install libtool autoconf automake make cmake

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libraries and tools
$ scons -Q --build-3rdparty=openfec

# install libraries and tools
$ sudo scons -Q --build-3rdparty=openfec install

Android

See also

Building C library for Android using Docker

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libroc.so for 64-bit ARM, API level 28
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-linux-android \
      scons -Q \
        --disable-tools \
        --compiler=clang \
        --host=aarch64-linux-android28 \
        --build-3rdparty=all

# build libroc.so for 32-bit ARM, API level 28
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-linux-android \
      scons -Q \
        --disable-tools \
        --compiler=clang \
        --host=armv7a-linux-androideabi28 \
        --build-3rdparty=all

# build libroc.so for 64-bit Intel, API level 28
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-linux-android \
      scons -Q \
        --disable-tools \
        --compiler=clang \
        --host=x86_64-linux-android28 \
        --build-3rdparty=all

# build libroc.so for 32-bit Intel, API level 28
$ docker run -t --rm -u "${UID}" -v "${PWD}:${PWD}" -w "${PWD}" \
    rocstreaming/toolchain-linux-android \
      scons -Q \
        --disable-tools \
        --compiler=clang \
        --host=i686-linux-android28 \
        --build-3rdparty=all

Building C library for Android on macOS

Prerequisites:

  • Install Android SDK command-line tools, in particular sdkmanager.

  • Ensure that sdkmanager is in PATH and working.

  • Ensure that ANDROID_HOME is exported and points to the root directory of Android SDK.

Then you can run the following commands:

# install Android components (you can use higher versions)
$ sdkmanager 'platforms;android-29'
$ sdkmanager 'build-tools;28.0.3'
$ sdkmanager 'ndk;21.4.7075529'
$ sdkmanager 'cmake;3.10.2.4988404'

# install build tools
$ brew install scons ragel gengetopt

# add toolchains to PATH
$ export PATH="$ANDROID_HOME/ndk/21.4.7075529/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH"

# clone repo
$ git clone https://github.com/roc-streaming/roc-toolkit.git
$ cd roc-toolkit

# build libroc.so for 64-bit ARM, API level 24
$ scons -Q \
      --disable-soversion \
      --disable-tools \
      --build-3rdparty=all \
      --compiler=clang \
      --host=aarch64-linux-android29

# build libroc.so for 32-bit ARM, API level 24
$ scons -Q \
      --disable-soversion \
      --disable-tools \
      --build-3rdparty=all \
      --compiler=clang \
      --host=armv7a-linux-androideabi24

# build libroc.so for 64-bit Intel, API level 24
$ scons -Q \
      --disable-soversion \
      --disable-tools \
      --build-3rdparty=all \
      --compiler=clang \
      --host=x86_64-linux-android29

# build libroc.so for 32-bit Intel, API level 24
$ scons -Q \
      --disable-soversion \
      --disable-tools \
      --build-3rdparty=all \
      --compiler=clang \
      --host=i686-linux-android29