Skip to content

Commit

Permalink
Add script to release Linux static binary
Browse files Browse the repository at this point in the history
Provide a prebuilt binary for Linux.

Fixes #5327 <#5327>
PR #5515 <#5515>
  • Loading branch information
rom1v committed Nov 24, 2024
1 parent 93da693 commit cb19686
Show file tree
Hide file tree
Showing 8 changed files with 162 additions and 1 deletion.
73 changes: 73 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,36 @@ jobs:
- name: Test
run: release/test_client.sh

build-linux:
runs-on: ubuntu-latest

This comment has been minimized.

Copy link
@mdziczkowski

mdziczkowski Nov 25, 2024

Because there are many Linux kinds, versions, etc., it's proposed to either remove this line or make it more universal (to don't need to list all kinds of Linux)

This comment has been minimized.

Copy link
@rom1v

rom1v Nov 25, 2024

Author Collaborator

That's a github action script, it defines the type of machine to run, you cannot remove it or change it to a random value.

This comment has been minimized.

Copy link
@mdziczkowski

mdziczkowski Nov 25, 2024

hmm... I think there was an option to modify it, but currently I can't remind myself about it 🤔

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt update

This comment has been minimized.

Copy link
@mdziczkowski

mdziczkowski Nov 25, 2024

The execution of apt update should be conditional to save the user's internet brandwidth (some may have it limited)

sudo apt install -y meson ninja-build nasm ffmpeg libsdl2-2.0-0 \
libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev \
libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
- name: Build linux
run: release/build_linux.sh

# upload-artifact does not preserve permissions
- name: Tar
run: |
cd release/work/build-linux
mkdir dist-tar
cd dist-tar
tar -C .. -cvf dist.tar.gz dist/
- name: Upload build-linux artifact
uses: actions/upload-artifact@v4
with:
name: build-linux-intermediate
path: release/work/build-linux/dist-tar/

build-win32:
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -135,6 +165,42 @@ jobs:
name: build-win64-intermediate
path: release/work/build-win64/dist-tar/

package-linux:
needs:
- build-scrcpy-server
- build-linux
runs-on: ubuntu-latest

This comment has been minimized.

Copy link
@mdziczkowski

mdziczkowski Nov 25, 2024

Same as in line 71

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download scrcpy-server
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download build-linux
uses: actions/download-artifact@v4
with:
name: build-linux-intermediate
path: release/work/build-linux/dist-tar/

# upload-artifact does not preserve permissions
- name: Detar
run: |
cd release/work/build-linux
tar xf dist-tar/dist.tar.gz
- name: Package linux
run: release/package_client.sh linux tar.gz

- name: Upload linux release
uses: actions/upload-artifact@v4
with:
name: release-linux
path: release/output/

package-win32:
needs:
- build-scrcpy-server
Expand Down Expand Up @@ -210,6 +276,7 @@ jobs:
release:
needs:
- build-scrcpy-server
- package-linux
- package-win32
- package-win64
runs-on: ubuntu-latest
Expand All @@ -223,6 +290,12 @@ jobs:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download release-linux
uses: actions/download-artifact@v4
with:
name: release-linux
path: release/output/

- name: Download release-win32
uses: actions/download-artifact@v4
with:
Expand Down
6 changes: 6 additions & 0 deletions app/data/scrcpy_static_wrapper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
cd "$(dirname ${BASH_SOURCE[0]})"
export ADB="${ADB:-./adb}"
export SCRCPY_SERVER_PATH="${SCRCPY_SERVER_PATH:-./scrcpy-server}"
export SCRCPY_ICON_PATH="${SCRCPY_ICON_PATH:-./icon.png}"
./scrcpy_bin "$@"
29 changes: 29 additions & 0 deletions app/deps/adb_linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -ex
DEPS_DIR=$(dirname ${BASH_SOURCE[0]})
cd "$DEPS_DIR"
. common

VERSION=35.0.2
FILENAME=platform-tools_r$VERSION-linux.zip
PROJECT_DIR=platform-tools-$VERSION-linux
SHA256SUM=acfdcccb123a8718c46c46c059b2f621140194e5ec1ac9d81715be3d6ab6cd0a

cd "$SOURCES_DIR"

if [[ -d "$PROJECT_DIR" ]]
then
echo "$PWD/$PROJECT_DIR" found
else
get_file "https://dl.google.com/android/repository/$FILENAME" "$FILENAME" "$SHA256SUM"
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR"
ZIP_PREFIX=platform-tools
unzip "../$FILENAME" "$ZIP_PREFIX"/adb
mv "$ZIP_PREFIX"/* .
rmdir "$ZIP_PREFIX"
fi

mkdir -p "$INSTALL_DIR/adb-linux"
cd "$INSTALL_DIR/adb-linux"
cp -r "$SOURCES_DIR/$PROJECT_DIR"/. "$INSTALL_DIR/adb-linux/"
9 changes: 8 additions & 1 deletion app/deps/ffmpeg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ else
--disable-swscale
--disable-postproc
--disable-avfilter
--disable-avdevice
--disable-network
--disable-everything
--disable-vulkan
Expand All @@ -74,6 +73,14 @@ else
--enable-muxer=wav
)

if [[ "$HOST" != linux ]]
then
# libavdevice is only used for V4L2 on Linux
conf+=(
--disable-avdevice
)
fi

if [[ "$LINK_TYPE" == static ]]
then
conf+=(
Expand Down
8 changes: 8 additions & 0 deletions app/deps/sdl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ else
--prefix="$INSTALL_DIR/$DIRNAME"
)

if [[ "$HOST" == linux ]]
then
conf+=(
--enable-video-wayland
--enable-video-x11
)
fi

if [[ "$LINK_TYPE" == static ]]
then
conf+=(
Expand Down
35 changes: 35 additions & 0 deletions release/build_linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash
set -ex
cd "$(dirname ${BASH_SOURCE[0]})"
. build_common
cd .. # root project dir

LINUX_BUILD_DIR="$WORK_DIR/build-linux"

app/deps/adb_linux.sh
app/deps/sdl.sh linux native static
app/deps/ffmpeg.sh linux native static
app/deps/libusb.sh linux native static

DEPS_INSTALL_DIR="$PWD/app/deps/work/install/linux-native-static"
ADB_INSTALL_DIR="$PWD/app/deps/work/install/adb-linux"

rm -rf "$LINUX_BUILD_DIR"
meson setup "$LINUX_BUILD_DIR" \
--pkg-config-path="$DEPS_INSTALL_DIR/lib/pkgconfig" \
-Dc_args="-I$DEPS_INSTALL_DIR/include" \
-Dc_link_args="-L$DEPS_INSTALL_DIR/lib" \
--buildtype=release \
--strip \
-Db_lto=true \
-Dcompile_server=false \
-Dportable=true \
-Dstatic=true
ninja -C "$LINUX_BUILD_DIR"

# Group intermediate outputs into a 'dist' directory
mkdir -p "$LINUX_BUILD_DIR/dist"
cp "$LINUX_BUILD_DIR"/app/scrcpy "$LINUX_BUILD_DIR/dist/scrcpy_bin"
cp app/data/icon.png "$LINUX_BUILD_DIR/dist/"
cp app/data/scrcpy_static_wrapper.sh "$LINUX_BUILD_DIR/dist/scrcpy"
cp -r "$ADB_INSTALL_DIR"/. "$LINUX_BUILD_DIR/dist/"
1 change: 1 addition & 0 deletions release/generate_checksums.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ cd "$(dirname ${BASH_SOURCE[0]})"

cd "$OUTPUT_DIR"
sha256sum "scrcpy-server-$VERSION" \
"scrcpy-linux-$VERSION.tar.gz" \
"scrcpy-win32-$VERSION.zip" \
"scrcpy-win64-$VERSION.zip" \
| tee SHA256SUMS.txt
Expand Down
2 changes: 2 additions & 0 deletions release/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ rm -rf output
./build_server.sh
./build_windows.sh 32
./build_windows.sh 64
./build_linux.sh

./package_server.sh
./package_client.sh win32 zip
./package_client.sh win64 zip
./package_client.sh linux tar.gz

./generate_checksums.sh

Expand Down

0 comments on commit cb19686

Please sign in to comment.