From cf51260f496296c8f85c1264803322861a7324e3 Mon Sep 17 00:00:00 2001 From: Nils Ponsard Date: Mon, 17 Feb 2025 16:25:12 +0100 Subject: [PATCH 1/2] feat: add build mechanism for libwebrtc for riscv64 --- .github/workflows/webrtc-builds.yml | 6 +++++- .nanpa/add-riscv64-linux-libwebrtc.kdl | 1 + webrtc-sys/libwebrtc/build_linux.sh | 21 ++++++++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 .nanpa/add-riscv64-linux-libwebrtc.kdl diff --git a/.github/workflows/webrtc-builds.yml b/.github/workflows/webrtc-builds.yml index 60ebcd68a..d58e29b82 100644 --- a/.github/workflows/webrtc-builds.yml +++ b/.github/workflows/webrtc-builds.yml @@ -54,7 +54,11 @@ jobs: os: buildjet-8vcpu-ubuntu-2004 cmd: ./build_linux.sh arch: arm64 - + - name: linux + os: buildjet-8vcpu-ubuntu-2004 + cmd: ./build_linux.sh + arch: riscv64 + - name: android os: buildjet-8vcpu-ubuntu-2004 cmd: ./build_android.sh diff --git a/.nanpa/add-riscv64-linux-libwebrtc.kdl b/.nanpa/add-riscv64-linux-libwebrtc.kdl new file mode 100644 index 000000000..cf4302348 --- /dev/null +++ b/.nanpa/add-riscv64-linux-libwebrtc.kdl @@ -0,0 +1 @@ +minor type="added" "Added build mechanism for riscv64" \ No newline at end of file diff --git a/webrtc-sys/libwebrtc/build_linux.sh b/webrtc-sys/libwebrtc/build_linux.sh index ef63dc744..a843ad808 100755 --- a/webrtc-sys/libwebrtc/build_linux.sh +++ b/webrtc-sys/libwebrtc/build_linux.sh @@ -21,7 +21,7 @@ while [ "$#" -gt 0 ]; do case "$1" in --arch) arch="$2" - if [ "$arch" != "x64" ] && [ "$arch" != "arm64" ]; then + if [ "$arch" != "x64" ] && [ "$arch" != "arm64" ] && [ "$arch" != "riscv64" ]; then echo "Error: Invalid value for --arch. Must be 'x64' or 'arm64'." exit 1 fi @@ -79,13 +79,32 @@ cd .. mkdir -p "$ARTIFACTS_DIR/lib" +if [[ "$arch" == "riscv64" ]] +then +# somehow you have to configure ffmpeg manually for riscv64 +cd src/third_party/ffmpeg && ./configure --arch=riscv64 && make -j16 || true && cd ../../../ + +# Manually create a sysroot +sudo apt-get install libasound2-dev libpulse-dev libavutil-dev g++-riscv64-linux-gnu debootstrap +sudo debootstrap \ + --arch=riscv64 \ + --include=qtbase5-dev,qt6-base-dev,qt6-base-dev-tools,krb5-multidev,libasound2-dev,libatk-bridge2.0-dev,libatk1.0-dev,libatspi2.0-dev,libblkid-dev,libbluetooth-dev,libc-dev-bin,libc6-dev,libcrypt-dev,libcups2-dev,libcurl4-gnutls-dev,libdbus-1-dev,libdbusmenu-glib-dev,libdbusmenu-gtk3-dev,libdevmapper1.02.1,libdrm-dev,libffi-dev,libflac-dev,libgbm-dev,libgcc-12-dev,libgcrypt20-dev,libgdk-pixbuf-2.0-dev,libgl1-mesa-dev,libglib2.0-dev,libglib2.0-dev-bin,libgtk-3-dev,libgtk-4-dev,libjsoncpp-dev,libkrb5-dev,libmount-dev,libnotify-dev,libnsl-dev,libnss3-dev,libpango1.0-dev,libpci-dev,libpcre2-dev,libpipewire-0.3-dev,libpulse-dev,libre2-dev,libselinux1-dev,libsepol-dev,libspeechd-dev,libstdc++-12-dev,libstdc++-13-dev,libtirpc-dev,libudev1,libva-dev,libx11-xcb-dev,libxkbcommon-x11-dev,libxshmfence-dev,linux-libc-dev,mesa-common-dev,uuid-dev,zlib1g-dev,wayland-protocols,libasan8 \ + sid \ + build/linux/debian_sid_riscv64-sysroot \ + https://snapshot.debian.org/archive/debian/20240907T023014Z/ + +sudo chown 1000:1000 -R src/build/linux/debian_sid_riscv64-sysroot +else python3 "./src/build/linux/sysroot_scripts/install-sysroot.py" --arch="$arch" +fi debug="false" if [ "$profile" = "debug" ]; then debug="true" fi +set -e + args="is_debug=$debug \ target_os=\"linux\" \ target_cpu=\"$arch\" \ From 308672ec8bbd76c2d0de8e94fe41b7a9092467ba Mon Sep 17 00:00:00 2001 From: Nils Ponsard Date: Wed, 26 Feb 2025 17:29:13 +0100 Subject: [PATCH 2/2] fix: disable asm for ffmpeg --- webrtc-sys/libwebrtc/build_linux.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webrtc-sys/libwebrtc/build_linux.sh b/webrtc-sys/libwebrtc/build_linux.sh index a843ad808..b0bd5aeb3 100755 --- a/webrtc-sys/libwebrtc/build_linux.sh +++ b/webrtc-sys/libwebrtc/build_linux.sh @@ -82,7 +82,7 @@ mkdir -p "$ARTIFACTS_DIR/lib" if [[ "$arch" == "riscv64" ]] then # somehow you have to configure ffmpeg manually for riscv64 -cd src/third_party/ffmpeg && ./configure --arch=riscv64 && make -j16 || true && cd ../../../ +cd src/third_party/ffmpeg && ./configure --arch=riscv64 --no-asm && make -j16 || true && cd ../../../ # Manually create a sysroot sudo apt-get install libasound2-dev libpulse-dev libavutil-dev g++-riscv64-linux-gnu debootstrap