Skip to content

Commit

Permalink
Update kernel modules, bump libjpeg-turbo, rework build scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
popsUlfr committed Sep 23, 2022
1 parent 5dffa2b commit d3abafe
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 54 deletions.
97 changes: 68 additions & 29 deletions droidcam-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ set -eux
# podman run --device=/dev/fuse --cap-add SYS_ADMIN --tmpfs /tmp:exec -v ./:/tmp/out --rm -ti ubuntu:20.04 /tmp/out/droidcam-build.sh
# ubuntu image
OUT_DIR="/tmp/out"
DEST="/usr"
DROIDCAM_VERSION=1.8.2
DROIDCAM_URL='https://github.com/dev47apps/droidcam.git'
LIBJPEG_TURBO_VERSION=2.1.3
KERNEL_VERSION="$(tar -tf "$OUT_DIR/v4l2loopback-dc.tar" | grep /v4l2loopback-dc\.ko | sed 's#^[./]*##' | sort -u | tail -n 1 | cut -d/ -f4)"

# building in temporary directory to keep system clean
# use RAM disk if possible (as in: not building on CI system like Travis, and RAM disk is available)
Expand All @@ -31,7 +26,6 @@ trap cleanup EXIT

cd "$BUILD_DIR"

# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=droidcam
yum -y update && yum clean all
yum -y install epel-release
yum -y localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
Expand All @@ -40,6 +34,7 @@ yum -y install pkg-config \
git \
cmake \
nasm \
ninja-build \
curl \
fuse \
fuse-libs \
Expand All @@ -61,36 +56,77 @@ yum -y install pkg-config \
# source the default compiler flags
export CFLAGS="$(rpm --eval "%{optflags}")"
export CXXFLAGS="$CFLAGS"
export MAKEFLAGS="-j$(nproc)"

# compile latest libjpeg-turbo
export pkgdir="/usr"

# libjpeg-turbo
# https://github.com/archlinux/svntogit-packages/blob/packages/libjpeg-turbo/trunk/PKGBUILD
curl -sSLo libjpeg-turbo-2.1.3.tar.gz "https://sourceforge.net/projects/libjpeg-turbo/files/${LIBJPEG_TURBO_VERSION}/libjpeg-turbo-${LIBJPEG_TURBO_VERSION}.tar.gz"
tar -xf "libjpeg-turbo-${LIBJPEG_TURBO_VERSION}.tar.gz"
mkdir -p build
cd build
cmake -DCMAKE_INSTALL_PREFIX="$DEST" -DCMAKE_INSTALL_LIBDIR="$DEST/lib64" -DCMAKE_BUILD_TYPE=None -DWITH_JPEG8=ON -Wno-dev "../libjpeg-turbo-${LIBJPEG_TURBO_VERSION}"
make -j$(nproc) VERBOSE=1
make VERBOSE=1 install
cd ..
echo "Building libjpeg-turbo..."
(
_name=libjpeg-turbo
pkgname="$_name"
pkgver=2.1.4
#makedepends=(cmake ninja nasm 'java-environment>11')
#optdepends=('java-runtime>11: for TurboJPEG Java wrapper')
#provides=(libjpeg libjpeg.so libturbojpeg.so)

curl -sSLo "$_name-$pkgver.tar.gz" "https://sourceforge.net/projects/$_name/files/$pkgver/$_name-$pkgver.tar.gz"
echo "511f065767c022da06b6c36299686fa44f83441646f7e33b766c6cfab03f91b0e6bfa456962184071dadaed4057ba9a29cba685383f3eb86a4370a1a53731a70 $_name-$pkgver.tar.gz" > "$_name-$pkgver.tar.gz.sha512"
sha512sum -c "$_name-$pkgver.tar.gz.sha512"

tar -xf "$_name-$pkgver.tar.gz"

cd "$_name-$pkgver"
cmake -G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib64 \
-DCMAKE_BUILD_TYPE=None \
-DENABLE_STATIC=OFF \
-DWITH_JAVA=OFF \
-DWITH_JPEG8=ON \
-W no-dev \
.
cmake --build .

ninja install
)
echo "Building libjpeg-turbo done."

# refresh linker cache
ldconfig

# build droidcam
git clone "$DROIDCAM_URL"
cd droidcam
git checkout v"$DROIDCAM_VERSION"
patch -Np1 -i "$OUT_DIR/appimage-app-icon.patch"
make -j$(nproc) JPEG_DIR="" JPEG_INCLUDE="" JPEG_LIB="" JPEG="$(pkg-config --libs --cflags libturbojpeg)" CFLAGS="$CFLAGS -std=gnu99"

install -Dm755 droidcam "$BUILD_DIR/AppDir/usr/bin/droidcam"
install -Dm755 droidcam-cli "$BUILD_DIR/AppDir/usr/bin/droidcam-cli"
strip -s "$BUILD_DIR/AppDir/usr/bin/droidcam-cli"
install -Dm644 icon2.png "$BUILD_DIR/AppDir/usr/share/pixmaps/droidcam.png"
sed -i -e 's/^\(TryExec=\).*$/\1droidcam/' -e 's/^\(Exec=\).*$/\1droidcam/' -e 's/^\(Icon=\).*$/\1droidcam/' droidcam.desktop
install -Dm644 droidcam.desktop "$BUILD_DIR/AppDir/usr/share/applications/droidcam.desktop"
export pkgdir="$BUILD_DIR/AppDir"

cd ..
# droidcam
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=droidcam
echo "Building droidcam..."
(
pkgbase=droidcam
pkgname='droidcam'
pkgver=1.8.2
url="https://github.com/aramg/${pkgbase}"
#makedepends=('libappindicator-gtk3' 'gtk3' 'ffmpeg' 'libusbmuxd')

curl -sSLo "${pkgbase}-${pkgver}.zip" "${url}/archive/v${pkgver}.zip"
echo "a5a5601efc60ae5e60e189f9ec8c73dab5579e6fdeebdcb9b809b6befb416ecc ${pkgbase}-${pkgver}.zip" > "${pkgbase}-${pkgver}.zip.sha256"
sha256sum -c "${pkgbase}-${pkgver}.zip.sha256"

unzip "${pkgbase}-${pkgver}.zip"

cd "${pkgbase}-${pkgver}"
patch -Np1 -i "$OUT_DIR/appimage-app-icon.patch"
make JPEG_DIR="" JPEG_INCLUDE="" JPEG_LIB="" JPEG="$(pkg-config --libs --cflags libturbojpeg)" CFLAGS="$CFLAGS -std=gnu99"

install -Dm755 "${pkgbase}" "$pkgdir/usr/bin/${pkgbase}"
install -Dm755 "${pkgbase}-cli" "$pkgdir/usr/bin/${pkgbase}-cli"
install -Dm644 icon2.png "${pkgdir}/usr/share/pixmaps/${pkgbase}.png"
install -Dm644 "${pkgbase}.desktop" "${pkgdir}/usr/share/applications/${pkgbase}.desktop"

strip -s "$pkgdir/usr/bin/droidcam-cli"
sed -i -e 's/^\(TryExec=\).*$/\1droidcam/' -e 's/^\(Exec=\).*$/\1droidcam/' -e 's/^\(Icon=\).*$/\1droidcam/' "${pkgdir}/usr/share/applications/${pkgbase}.desktop"
)
echo "Building droidcam done."

mkdir -p AppDir
tar -xf "$OUT_DIR/v4l2loopback-dc.tar" -C AppDir
Expand All @@ -107,6 +143,9 @@ cp "$OUT_DIR/linuxdeploy-plugin-droidcam.sh" .
# fix girepository-1.0 path
mkdir -p /usr/lib/x86_64-linux-gnu/girepository-1.0

DROIDCAM_VERSION=1.8.2
KERNEL_VERSION="$(tar -tf "$OUT_DIR/v4l2loopback-dc.tar" | grep /v4l2loopback-dc\.ko | sed 's#^[./]*##' | sort -u | tail -n 1 | cut -d/ -f4)"

OUTPUT="DroidCam-${DROIDCAM_VERSION}-${KERNEL_VERSION}-x86_64_SteamDeck.AppImage" ./linuxdeploy-x86_64.AppImage --appdir AppDir \
--executable AppDir/usr/bin/droidcam \
--desktop-file AppDir/usr/share/applications/droidcam.desktop \
Expand Down
13 changes: 0 additions & 13 deletions recreate-v4l2loopback-dc.tar.sh

This file was deleted.

31 changes: 20 additions & 11 deletions v4l2loopback-dc-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,31 @@ set -eux
# podman run -v ./:/tmp/out --rm -ti archlinux:latest /tmp/out/v4l2loopback-dc-build.sh
# archlinux image
OUT_DIR="/tmp/out"
TMP_PKG_DIR="/tmp/v4l2loopback-dc"
# Add SteamOS server and repos
echo 'Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist
sed -i -e 's/\s*#\?\s*SigLevel\s*=\s*.*$/SigLevel = Never/g' -e 's#^\(\[core\]\)#[jupiter]\nInclude = /etc/pacman.d/mirrorlist\n\n[holo]\nInclude = /etc/pacman.d/mirrorlist\n\n\1#' /etc/pacman.conf
# Reinstall all packages
pacman -Syy
pacman -Rdd --noconfirm libverto
pacman -Qqn | pacman -S --noconfirm --ignore libverto --overwrite='*' -
pacman -S --noconfirm --needed base-devel git linux-neptune linux-neptune-headers sudo
yes | pacman -S --overwrite='*' $(pacman -Qqn)
pacman -S --noconfirm --needed base-devel git sudo
useradd -m builduser
echo 'builduser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/builduser
su -l -c 'git clone https://aur.archlinux.org/droidcam.git && cd droidcam && makepkg -si --noconfirm' builduser
tar -rf "$OUT_DIR/v4l2loopback-dc.tar" /etc/modules-load.d /etc/modprobe.d
kf="$(pacman -Qlq linux-neptune | grep '/usr/lib/modules/[^/]\+/' | head -n 1)"
tar -rf "$OUT_DIR/v4l2loopback-dc.tar" "${kf}updates/dkms"
sed -i 's/^\[jupiter\]/\[jupiter-beta\]/' /etc/pacman.conf
pacman -Sy --noconfirm linux-neptune linux-neptune-headers
kf="$(pacman -Qlq linux-neptune | grep '/usr/lib/modules/[^/]\+/' | head -n 1)"
dkms autoinstall -k "$(basename "$kf")"
tar -rf "$OUT_DIR/v4l2loopback-dc.tar" "${kf}updates/dkms"
mkdir -p "$TMP_PKG_DIR"
tar -xf "$OUT_DIR/v4l2loopback-dc.tar" -C "$TMP_PKG_DIR"
tar -cf - /etc/modules-load.d /etc/modprobe.d | tar -xf - -C "$TMP_PKG_DIR"
for repo in jupiter jupiter-beta jupiter-main
do
ret_code="$(curl -sSLIo /dev/null -w '%{http_code}' "https://steamdeck-packages.steamos.cloud/archlinux-mirror/${repo}/os/x86_64/${repo}.db")"
if [[ "$ret_code" == '200' ]]
then
sed -i 's/^\[jupiter[^]]*\]/['"$repo"']/' /etc/pacman.conf
pacman -Sy --noconfirm linux-neptune linux-neptune-headers
kf="$(pacman -Qlq linux-neptune | grep '/usr/lib/modules/[^/]\+/' | head -n 1)"
dkms_src="$(basename /usr/src/v4l2loopback-dc*)"
dkms install "${dkms_src%-*}/${dkms_src##*-}" -k "$(basename "$kf")"
tar -cf - "${kf}updates/dkms" | tar -xf - -C "$TMP_PKG_DIR"
fi
done
tar -cf "$OUT_DIR/v4l2loopback-dc.tar" -C "$TMP_PKG_DIR" .
Binary file modified v4l2loopback-dc.tar
Binary file not shown.
2 changes: 1 addition & 1 deletion version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.8.2-5.13.0-valve21.1-1-neptune-02211-gc54cda5a36f3
1.8.2-5.13.0-valve24-1-neptune-02226-g5b8545e4c5a1

0 comments on commit d3abafe

Please sign in to comment.