VVCEasy/BuildVVC.sh

134 lines
3.1 KiB
Bash

#!/bin/bash
OS=$(uname)
DISTRO=""
# Detect Linux distribution
if [ "$OS" = "Linux" ]; then
if [ -f /etc/os-release ]; then
DISTRO=$(awk -F= '/^ID=/{print $2}' /etc/os-release)
fi
fi
echo "Martin Eesmaa / VVC Compiler (vvenc and vvdec)"
if [ "$OS" = "Linux" ]; then
echo "You're running on $OS with distribution $DISTRO of bash script version to compile VVC binaries"
else
echo "You're running on $OS of bash script version to compile VVC binaries"
fi
echo "Checking and installing required packages..."
setup_debian() {
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential cmake git -y
}
setup_fedora() {
sudo dnf update -y
sudo dnf install cmake gcc gcc-c++ make git -y
}
setup_arch() {
sudo pacman -Syu --noconfirm
sudo pacman -S --noconfirm base-devel cmake git
}
setup_gentoo() {
sudo emerge --sync
sudo emerge cmake git
}
setup_macos() {
echo "Please make sure Xcode is installed in your Applications."
if ! command -v brew &> /dev/null; then
echo "Homebrew is not installed. Please install Homebrew and rerun the script."
exit 1
fi
if ! brew list | grep -q cmake; then
echo "Installing cmake..."
brew install cmake
fi
}
setup_msys64() {
pacman -Syu --noconfirm
pacman -S --noconfirm base-devel cmake git
}
setup_freebsd() {
pkg update && pkg upgrade -y
pkg install -y cmake git gmake
}
build_repos() {
if [ ! -d vvenc ]; then
git clone --depth=1 https://github.com/fraunhoferhhi/vvenc
else
git -C vvenc pull
fi
if [ ! -d vvdec ]; then
git clone --depth=1 https://github.com/fraunhoferhhi/vvdec
else
git -C vvdec pull
fi
for REPO in vvenc vvdec; do
cd $REPO
mkdir -p build && cd build
if [ "$OS" = "Darwin" ]; then
CORES=$(sysctl -n hw.ncpu || echo 1)
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j $CORES
else
CORES=$(nproc || echo 1)
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static" ..
cmake --build . -j $CORES
fi
cd -
done
echo "Please see the build files starting with (vvenc/vvdec)/bin/release-static."
}
# Main script execution
case "$OS" in
Linux)
case "$DISTRO" in
debian|ubuntu)
setup_debian
;;
fedora)
setup_fedora
;;
arch)
setup_arch
;;
gentoo)
setup_gentoo
;;
*)
echo "Unsupported Linux distribution: $DISTRO"
exit 1
;;
esac
;;
Darwin)
setup_macos
;;
MSYS_NT*|MINGW64*)
setup_msys64
;;
FreeBSD)
setup_freebsd
;;
*)
echo "Unsupported OS: $OS"
echo "Supports Windows MSYS64, macOS, Linux & FreeBSD"
echo "May coming soon for some platforms..."
exit 1
;;
esac
build_repos
read -p "Finished building vvenc & vvdec. Press [Enter] to continue..."