Better build of datapipes and some documentation

This commit is contained in:
WolverinDEV 2020-01-25 14:23:31 +01:00
parent c45bcd2068
commit 7843534d9e
9 changed files with 144 additions and 22 deletions

4
Jenkinsfile vendored
View File

@ -9,10 +9,6 @@ pipeline {
} }
environment { environment {
//General flags
CXX_FLAGS = ''
C_FLAGS = ''
//CMake specific flags //CMake specific flags
CMAKE_OPTIONS = '' CMAKE_OPTIONS = ''
CMAKE_MAKE_OPTIONS = '-j 12' CMAKE_MAKE_OPTIONS = '-j 12'

@ -1 +1 @@
Subproject commit 9e41b825c04999bb78411df23cb491dadeb02a18 Subproject commit f180f62f2c0798c80b6147111162cb42f28b569c

@ -1 +1 @@
Subproject commit 958b088e0b3a3711c1ee015efd5d22ada2d2aeb4 Subproject commit d7203d854b75cb7954a2580c645729e7def8f297

View File

@ -6,25 +6,118 @@ tar -xvf Python-3.6.3.tgz && \
cd Python-3.6.3 && \ cd Python-3.6.3 && \
sudo ./configure --enable-optimizations && \ sudo ./configure --enable-optimizations && \
make -j32 && \ make -j32 && \
sudo make install sudo make install && \
sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 60
pip3.6 install --upgrade pip pip3.6 install --upgrade pip
``` ```
## Ninja ## Ninja
### Using official version (may be outdated)
```shell script ```shell script
sudo apt install ninja sudo apt install ninja
``` ```
### Building from source
```shell script
apt-get purge ninja
git clone git://github.com/ninja-build/ninja.git && \
cd ninja && \
git checkout release && \
./configure.py --bootstrap && \
mv ninja /usr/local/bin/
```
## Meson ## Meson
```shell script ```shell script
pip3.6 install meson pip3.6 install meson
``` ```
## objcopy
`objcopy` must be build from source because the option "--add-symbol" is mouse likely not available...
```shell script
apt-get install -y texinfo bison flex
git clone git://sourceware.org/git/binutils-gdb.git && cd binutils-gdb && \
git checkout binutils-2_32-branch && \
CXXFLAGS="-Wno-error=unused-function -O2" CFLAGS="-Wno-error=unused-function -O2" ./configure && \
make -j32 && \
make install
```
# Building GLIB2.0 # Building GLIB2.0
Building GLIB2.0
```shell script ```shell script
git clone https://github.com/GNOME/glib.git && \ git clone https://github.com/GNOME/glib.git && \
cd glib && \ cd glib && \
git checkout glib-2-62 && \ git checkout glib-2-62 && \
meson _build -Dlibmount=false meson _build -Dlibmount=false --prefix=`pwd`/out --buildtype=release --default-library=both -Diconv=libc
ninja -C _build && \
ninja -C _build install && \
cd ..
``` ```
Publishing GLIB2.0
```shell script
export build_os_type=linux
export build_os_arch=amd64
export prebuild_path="`pwd`/glibc-prebuild/${build_os_type}_${build_os_arch}/"
git clone https://git.did.science/WolverinDEV/glibc-prebuild.git
[[ -d $prebuild_path ]] && rm -r "$prebuild_path"
mkdir $prebuild_path && \
cp -r glib/out/include/ $prebuild_path && \
cp -r glib/out/lib/ $prebuild_path
```
# Building libnice
Building boringssl
```shell script
git clone https://boringssl.googlesource.com/boringssl && cd boringssl && \
git checkout 1cc95ac0 # This version does TeaSpeak use
[[ "`getconf LONG_BIT`" != "64" ]] && { export _toolchain="-DCMAKE_TOOLCHAIN_FILE=../util/32-bit-toolchain.cmake"; }
cmake . -DCMAKE_INSTALL_PREFIX=`pwd`/out -DOPENSSL_NO_ASM=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release $_toolchain && \
make -j32
```
Build libnice
```shell script
apt-get install gtk-doc-tools
git clone https://github.com/libnice/libnice.git && cd libnice
export glib20_dir="`pwd`/../glibc-prebuild/linux_amd64/"
export glib20_lib_path="$glib20_dir/lib/"*"/"
export boringssl_path="`pwd`/../boringssl/"
#pkg-config --static --cflags glib-2.0 := -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
#pkg-config --static --libs glib-2.0 gio-2.0 gobject-2.0 := -pthread -lgio-2.0 -lz -lresolv -lselinux -lgmodule-2.0 -ldl -lgobject-2.0 -lffi -lglib-2.0 -lpcre
export GLIB_CFLAGS="-I$glib20_dir/include/glib-2.0 -I`echo "$glib20_dir/lib/"*"/glib-2.0/include"`"
export GLIB_LIBS="$glib20_lib_path/libgio-2.0.a -lz -lresolv $glib20_lib_path/libgmodule-2.0.a -ldl $glib20_lib_path/libgobject-2.0.a $glib20_lib_path/libffi.a $glib20_lib_path/libglib-2.0.a -lpcre -pthread"
export LDFLAGS="-L$boringssl_path/crypto/ -L$boringssl_path/ssl/"
./autogen.sh --prefix=`pwd`/out --with-pic --with-crypto-library=openssl --without-gstreamer --disable-assert --disable-gtk-doc --enable-static=no --enable-shared=yes && \
make && \
make install
cd ..
```
Publishing libnice
```shell script
[[ -z "${build_os_type}" ]] && export build_os_type=linux
[[ -z "${build_os_type}" ]] && export build_os_arch=amd64
export prebuild_path="`pwd`/libnice-prebuild/${build_os_type}_${build_os_arch}/"
[[ ! -d libnice-prebuild ]] && git clone https://git.did.science/WolverinDEV/libnice-prebuild.git
[[ -d $prebuild_path ]] && rm -r "$prebuild_path"
mkdir $prebuild_path && \
cp -r libnice/out/include/ $prebuild_path && \
cp -r libnice/out/lib/ $prebuild_path
```
# Troubleshooting
## GLIB2.0 hangs on meson
Ninja may be too sold. It should work with 1.9.0.
export GLIB_LIBS="$glib20_lib_path/libgio-2.0.a -lz -lresolv $glib20_lib_path/libgmodule-2.0.a $glib20_lib_path/libgobject-2.0.a $glib20_lib_path/libffi.a $glib20_lib_path/libglib-2.0.a -lpcre -pthread"

@ -1 +1 @@
Subproject commit 20d5c4030bd723c34d2abe6fa3dc65a0ec134fb6 Subproject commit 80adb70bfc6cc4c68a7be4ccbb1a9e7fa201b624

View File

@ -14,6 +14,7 @@ requires_rebuild ${library_path}
[[ -z "${datapipes_webrtc}" ]] && datapipes_webrtc=1 [[ -z "${datapipes_webrtc}" ]] && datapipes_webrtc=1
[[ "${datapipes_webrtc}" -eq 1 ]] && _datapipes_webrtc="ON" || datapipes_webrtc="OFF" [[ "${datapipes_webrtc}" -eq 1 ]] && _datapipes_webrtc="ON" || datapipes_webrtc="OFF"
web_cmake_flags="-DBUILD_WEBRTC=${_datapipes_webrtc}"
if [[ ${build_os_type} != "win32" && "${_datapipes_webrtc}" == "ON" ]]; then if [[ ${build_os_type} != "win32" && "${_datapipes_webrtc}" == "ON" ]]; then
cd ${library_path} cd ${library_path}
@ -28,19 +29,33 @@ if [[ ${build_os_type} != "win32" && "${_datapipes_webrtc}" == "ON" ]]; then
#fi #fi
echo "Building dependencies" echo "Building dependencies"
./build_usrsctp.sh #./build_usrsctp.sh
check_err_exit ${library_path} "Failed to build usrsctp!" check_err_exit ${library_path} "Failed to build usrsctp!"
./build_srtp.sh #./build_srtp.sh
check_err_exit ${library_path} "Failed to build srtp!" check_err_exit ${library_path} "Failed to build srtp!"
./build_sdptransform.sh
check_err_exit ${library_path} "Failed to build sdptransform!"
cd .. cd ..
glib20_dir=$(realpath "$(pwd)/glibc/linux_${build_os_arch}/")
# shellcheck disable=SC2125
glib20_lib_path=$(realpath "$glib20_dir/lib/"*"/")
# TODO: pcre really required here?
web_cmake_flags="$web_cmake_flags -DGLIB_PREBUILD_FLAGS=\"-I$glib20_dir/include -I$glib20_dir/include/glib-2.0/ -I$glib20_lib_path/glib-2.0/include/\""
web_cmake_flags="$web_cmake_flags -DGLIB_PREBUILD_LIBRARIES=\"$glib20_lib_path/libgio-2.0.a;z;resolv;$glib20_lib_path/libgmodule-2.0.a;$glib20_lib_path/libgobject-2.0.a;$glib20_lib_path/libffi.a;$glib20_lib_path/libglib-2.0.a;pcre\""
web_cmake_flags="$web_cmake_flags -DLIBNICE_PREBUILD_PATH=\"../libnice/linux_${build_os_arch}\""
echo "WebRTC flags: $web_cmake_flags"
fi fi
_cxx_options="" _cxx_options=""
[[ ${build_os_type} != "win32" ]] && _cxx_options="-fPIC -static-libgcc -static-libstdc++" [[ ${build_os_type} != "win32" ]] && _cxx_options="-fPIC -static-libgcc -static-libstdc++"
[[ ${build_os_type} == "win32" ]] && _cxx_options="-DWIN32" [[ ${build_os_type} == "win32" ]] && _cxx_options="-DWIN32"
cmake_build ${library_path} -DCrypto_ROOT_DIR="`pwd`/boringssl/" -DCRYPTO_TYPE="boringssl" -DCMAKE_CXX_FLAGS="-fPIC -static-libgcc -static-libstdc++ ${CXX_FLAGS}" -DBUILD_TESTS=OFF -DCMAKE_C_FLAGS="${C_FLAGS} -fPIC" -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" ${CMAKE_OPTIONS} -DLIBNICE_PREBUILD_PATH="../libnice/linux_${build_os_arch}" -DGLIBC_PREBUILD_PATH="../glibc/linux_${build_os_arch}" -DBUILD_STATIC=0 -DBUILD_SHARED=1 -DBUILD_WEBRTC=${_datapipes_webrtc}
general_options="-DCMAKE_C_FLAGS=\"-fPIC\" -DCMAKE_CXX_FLAGS=\"$_cxx_options\" -DBUILD_TESTS=OFF -DBUILD_STATIC=0 -DBUILD_SHARED=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
crypto_options="-DCrypto_ROOT_DIR=\"$(pwd)/boringssl/lib/\" -DCRYPTO_TYPE=\"boringssl\""
command="cmake_build ${library_path} ${general_options} ${crypto_options} ${web_cmake_flags} ${CMAKE_OPTIONS}"
eval "$command"
check_err_exit ${library_path} "Failed to build DataPipes!" check_err_exit ${library_path} "Failed to build DataPipes!"
set_build_successful ${library_path} set_build_successful ${library_path}

@ -1 +1 @@
Subproject commit b09017c340b04a8ce9373e93aa55780144428958 Subproject commit 3396416fab69945f420f31dea30850806e199984

18
setup_alpine Normal file
View File

@ -0,0 +1,18 @@
# Basic Setup
#linux-headers for unistd.h
#bsd-compat-headers for sys/cdefs.h (arm only!)
apk add bash coreutils build-base autoconf git wget sqlite-dev openssl-dev cmake patchelf go linux-headers bsd-compat-headers
git config --global credential.helper store
# Create TeaSpeak
git clone https://git.did.science/WolverinDEV/TeaSpeak-Parent.git server && cd server && \
git submodule update --init --recursive
./libraries/build.sh
# -------- Troubleshooting ----------
If go raises an error/crashes install a newer version:
$ sudo add-apt-repository ppa:gophers/archive
$ sudo apt-get update
$ sudo apt-get install golang-1.11-go
sudo update-alternatives --install /usr/bin/go go /usr/lib/go-1.11/bin/go 1

View File

@ -7,7 +7,7 @@ sudo apt-get install gcc-9 g++-9 -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 && \ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 && \
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-9 60 --slave /usr/bin/c++ c++ /usr/bin/c++-9 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-9 60 --slave /usr/bin/c++ c++ /usr/bin/c++-9
apt-get install autoconf git wget libssl-dev realpath apt-get install autoconf git wget libssl-dev realpath libsqlite3-dev libmysqlclient-dev
wget https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz && tar xvf cmake-3.16.3.tar.gz wget https://github.com/Kitware/CMake/releases/download/v3.16.3/cmake-3.16.3.tar.gz && tar xvf cmake-3.16.3.tar.gz
cd cmake-3.16.3 && ./configure --parallel=16 cd cmake-3.16.3 && ./configure --parallel=16
@ -17,10 +17,10 @@ cd ..
git config --global credential.helper store git config --global credential.helper store
# Patchelf # Patchelf
wget http://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.bz2 wget http://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.bz2 && \
tar xf patchelf-0.10.tar.bz2 tar xf patchelf-0.10.tar.bz2 && \
cd patchelf-0.10 cd patchelf-0.10 && \
./configure ./configure && \
make install make install
# Create TeaSpeak # Create TeaSpeak