Skip to content

Commit

Permalink
feat: Add qTox wasm builder docker image.
Browse files Browse the repository at this point in the history
  • Loading branch information
iphydf committed Jan 28, 2025
1 parent 13de171 commit 20a1f5c
Show file tree
Hide file tree
Showing 24 changed files with 388 additions and 69 deletions.
1 change: 1 addition & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ jobs:
- fedora
- flatpak-builder
- ubuntu-lts
- wasm-builder
- windows-builder.i686
- windows-builder.x86_64
include:
Expand Down
4 changes: 2 additions & 2 deletions qtox/build_extra_cmake_modules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "extra-cmake-modules" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "extra-cmake-modules" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

"$SCRIPT_DIR/download/download_extra_cmake_modules.sh"

cmake -DCMAKE_INSTALL_PREFIX="$DEP_PREFIX" \
"${EMCMAKE[@]}" cmake -DCMAKE_INSTALL_PREFIX="$DEP_PREFIX" \
-DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \
-DBUILD_TESTING=OFF \
-GNinja \
Expand Down
29 changes: 17 additions & 12 deletions qtox/build_ffmpeg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "ffmpeg" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "ffmpeg" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

CONFIGURE_FLAGS=()
if [ "$LIB_TYPE" = "shared" ]; then
CONFIGURE_FLAGS+=(--disable-static --enable-shared)
else
CONFIGURE_FLAGS+=(--enable-static --disable-shared)
fi

if [ "$SCRIPT_ARCH" == "win64" ]; then
FFMPEG_ARCH="x86_64"
Expand All @@ -21,29 +28,27 @@ elif [ "$SCRIPT_ARCH" == "win32" ]; then
FFMPEG_ARCH="x86"
TARGET_OS="mingw32"
CROSS_PREFIX="$MINGW_ARCH-w64-mingw32-"
elif [ "$SCRIPT_ARCH" == "wasm" ]; then
FFMPEG_ARCH="wasm"
TARGET_OS="none"
CROSS_PREFIX=""
CONFIGURE_FLAGS+=(--arch=x86_32 --enable-cross-compile --disable-x86asm)
# export CC=emcc
# export CXX=em++
else
FFMPEG_ARCH=""
TARGET_OS=""
CROSS_PREFIX=""
fi

if [ "$LIB_TYPE" = "shared" ]; then
ENABLE_STATIC=--disable-static
ENABLE_SHARED=--enable-shared
else
ENABLE_STATIC=--enable-static
ENABLE_SHARED=--disable-shared
fi

"$SCRIPT_DIR/download/download_ffmpeg.sh"

CFLAGS="$CROSS_CFLAG" \
CPPFLAGS="$CROSS_CPPFLAG" \
LDFLAGS="$CROSS_LDFLAG" \
./configure --arch="$FFMPEG_ARCH" \
"${EMCONFIGURE[@]}" ./configure --arch="$FFMPEG_ARCH" \
--enable-gpl \
"$ENABLE_STATIC" \
"$ENABLE_SHARED" \
"${CONFIGURE_FLAGS[@]}" \
--prefix="$DEP_PREFIX" \
--target-os="$TARGET_OS" \
--cross-prefix="$CROSS_PREFIX" \
Expand Down
10 changes: 6 additions & 4 deletions qtox/build_hunspell.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "hunspell" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 win32 win64" "$@"
parse_arch --dep "hunspell" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 win32 win64 wasm" "$@"

if [ "$LIB_TYPE" = "shared" ]; then
ENABLE_STATIC=--disable-static
Expand All @@ -21,13 +21,15 @@ fi

"$SCRIPT_DIR/download/download_hunspell.sh"

./configure "$HOST_OPTION" \
apt-get update && apt-get install -y autopoint
autoreconf -fi
"${EMCONFIGURE[@]}" ./configure "$HOST_OPTION" \
--prefix="$DEP_PREFIX" \
"$ENABLE_STATIC" \
"$ENABLE_SHARED" \
LDFLAGS="-fstack-protector $CROSS_LDFLAG" \
CXXFLAGS="-O2 -g0 $CROSS_CFLAG" \
CFLAGS="-O2 -g0 $CROSS_CFLAG"

make -j "$MAKE_JOBS"
make install
"${EMMAKE[@]}" make -j "$MAKE_JOBS"
"${EMMAKE[@]}" make install
8 changes: 4 additions & 4 deletions qtox/build_libexif.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "libexif" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "libexif" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

if [ "$LIB_TYPE" = "shared" ]; then
ENABLE_STATIC=--disable-static
Expand All @@ -25,12 +25,12 @@ fi

CFLAGS="-O2 -g0 $CROSS_CFLAG" \
LDFLAGS="$CROSS_LDFLAG" \
./configure "$HOST_OPTION" \
"${EMCONFIGURE[@]}" ./configure "$HOST_OPTION" \
--prefix="$DEP_PREFIX" \
"$ENABLE_STATIC" \
"$ENABLE_SHARED" \
--disable-docs \
--disable-nls

make -j "$MAKE_JOBS"
make install
"${EMMAKE[@]}" make -j "$MAKE_JOBS"
"${EMMAKE[@]}" make install
4 changes: 2 additions & 2 deletions qtox/build_openal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "openal" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "openal" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

if [ "$SCRIPT_ARCH" = "win32" ] || [ "$SCRIPT_ARCH" = "win64" ]; then
"$SCRIPT_DIR/download/download_openal.sh" patched
Expand All @@ -34,7 +34,7 @@ fi

export CFLAGS="-fPIC"
export CXXFLAGS="-fPIC -std=c++20"
cmake \
"${EMCMAKE[@]}" cmake \
"$CMAKE_TOOLCHAIN_FILE" \
-DCMAKE_INSTALL_PREFIX="$DEP_PREFIX" \
-DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \
Expand Down
15 changes: 11 additions & 4 deletions qtox/build_openssl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "openssl" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "openssl" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

if [ "$SCRIPT_ARCH" == "win64" ]; then
OPENSSL_ARCH="mingw64"
Expand All @@ -28,6 +28,11 @@ elif [ "$SCRIPT_ARCH" == "macos-arm64" ]; then
elif [ "$SCRIPT_ARCH" == "linux-x86_64" ]; then
OPENSSL_ARCH="linux-x86_64"
CROSS_COMPILE_ARCH=""
elif [ "$SCRIPT_ARCH" == "wasm" ]; then
OPENSSL_ARCH="no-asm"
CROSS_COMPILE_ARCH=""
export CC=emcc
export CXX=em++
else
echo "Unsupported arch: $SCRIPT_ARCH"
exit 1
Expand All @@ -47,9 +52,11 @@ CFLAGS="-O2 $CROSS_CFLAG" \
--prefix="$DEP_PREFIX" \
--openssldir="$DEP_PREFIX/ssl" \
"$ENABLE_SHARED" \
-no-tests -fPIC \
-no-tests \
-no-afalgeng \
-fPIC \
"$CROSS_COMPILE_ARCH" \
"$OPENSSL_ARCH"

make -j "$MAKE_JOBS"
make install_sw
"${EMMAKE[@]}" make -j "$MAKE_JOBS"
"${EMMAKE[@]}" make install_sw
8 changes: 4 additions & 4 deletions qtox/build_opus.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "opus" --supported "linux-aarch64 linux-x86_64 win32 win64 macos-x86_64 macos-arm64 ios-arm64 ios-armv7 ios-armv7s iphonesimulator-arm64 iphonesimulator-x86_64" "$@"
parse_arch --dep "opus" --supported "linux-aarch64 linux-x86_64 win32 win64 macos-x86_64 macos-arm64 ios-arm64 ios-armv7 ios-armv7s iphonesimulator-arm64 iphonesimulator-x86_64 wasm" "$@"

if [ "$LIB_TYPE" = "shared" ]; then
ENABLE_STATIC=--disable-static
Expand All @@ -25,12 +25,12 @@ fi

LDFLAGS="-fstack-protector $CROSS_LDFLAG" \
CFLAGS="-O2 -fPIC -g0 $CROSS_CFLAG" \
./configure "$HOST_OPTION" \
"${EMCONFIGURE[@]}" ./configure "$HOST_OPTION" \
"--prefix=$DEP_PREFIX" \
"$ENABLE_STATIC" \
"$ENABLE_SHARED" \
--disable-extra-programs \
--disable-doc

make -j "$MAKE_JOBS"
make install
"${EMMAKE[@]}" make -j "$MAKE_JOBS"
"${EMMAKE[@]}" make install
4 changes: 2 additions & 2 deletions qtox/build_qrencode.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "qrencode" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64" "$@"
parse_arch --dep "qrencode" --supported "linux-x86_64 win32 win64 macos-x86_64 macos-arm64 wasm" "$@"

if [ "$LIB_TYPE" = "shared" ]; then
BUILD_SHARED_LIBS=ON
Expand All @@ -21,7 +21,7 @@ fi

"$SCRIPT_DIR/download/download_qrencode.sh"

cmake . \
"${EMCMAKE[@]}" cmake . \
-DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \
-DCMAKE_INSTALL_PREFIX="$DEP_PREFIX" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="$MACOS_MINIMUM_SUPPORTED_VERSION" \
Expand Down
56 changes: 56 additions & 0 deletions qtox/build_qtbase_wasm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env bash

# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright © 2024-2025 The TokTok team

set -euxo pipefail

readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "qtbase" --supported "wasm" "$@"

"$SCRIPT_DIR/download/download_qtbase.sh"

export CXXFLAGS="-DQT_MESSAGELOGCONTEXT"
export OBJCXXFLAGS="$CXXFLAGS"

mkdir -p _build
pushd _build
../configure \
-prefix "$QT_PREFIX" \
-appstore-compliant \
-release \
"-$LIB_TYPE" \
-force-asserts \
-qt-doubleconversion \
-qt-harfbuzz \
-qt-libjpeg \
-qt-libpng \
-qt-pcre \
-qt-zlib \
-feature-zstd \
-no-feature-androiddeployqt \
-no-feature-brotli \
-no-feature-macdeployqt \
-no-feature-printsupport \
-no-feature-qmake \
-no-feature-sql \
-no-dbus \
-no-glib \
-no-openssl \
-device-option "QT_EMSCRIPTEN_ASYNCIFY=2" \
-qt-host-path /work/host/qt \
-platform wasm-emscripten \
-feature-thread \
-feature-wasm-simd128 \
-opensource -confirm-license \
-pch \
-- \
-DCMAKE_FIND_ROOT_PATH="$DEP_PREFIX" \
-Wno-dev
cat config.summary
cmake --build .
cmake --install .
popd
3 changes: 2 additions & 1 deletion qtox/build_qtimageformats.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "qtimageformats" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64" "$@"
parse_arch --dep "qtimageformats" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64 wasm" "$@"

"$SCRIPT_DIR/download/download_qtimageformats.sh"

mkdir _build && pushd _build
"$QT_PREFIX/bin/qt-configure-module" .. \
-- \
-DCMAKE_FIND_ROOT_PATH="$DEP_PREFIX" \
-DCMAKE_CXX_FLAGS="-DQT_MESSAGELOGCONTEXT" \
-Wno-dev
cmake --build .
Expand Down
1 change: 1 addition & 0 deletions qtox/build_qtremoteobjects.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ parse_arch --dep "qtremoteobjects" --supported "linux-x86_64 macos-arm64 macos-x
mkdir _build && pushd _build
"$QT_PREFIX/bin/qt-configure-module" .. \
-- \
-DCMAKE_FIND_ROOT_PATH="$DEP_PREFIX" \
-DCMAKE_CXX_FLAGS="-DQT_MESSAGELOGCONTEXT" \
-Wno-dev
cmake --build .
Expand Down
3 changes: 2 additions & 1 deletion qtox/build_qtsvg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "qtsvg" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64" "$@"
parse_arch --dep "qtsvg" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64 wasm" "$@"

"$SCRIPT_DIR/download/download_qtsvg.sh"

mkdir _build && pushd _build
"$QT_PREFIX/bin/qt-configure-module" .. \
-- \
-DCMAKE_FIND_ROOT_PATH="$DEP_PREFIX" \
-DCMAKE_CXX_FLAGS="-DQT_MESSAGELOGCONTEXT" \
-Wno-dev
cmake --build .
Expand Down
3 changes: 2 additions & 1 deletion qtox/build_qttools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "qttools" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64" "$@"
parse_arch --dep "qttools" --supported "linux-x86_64 macos-arm64 macos-x86_64 win32 win64 wasm" "$@"

"$SCRIPT_DIR/download/download_qttools.sh"

Expand All @@ -28,6 +28,7 @@ mkdir _build && pushd _build
-no-feature-qtdiag \
-no-feature-qtplugininfo \
-- \
-DCMAKE_FIND_ROOT_PATH="$DEP_PREFIX" \
-DCMAKE_CXX_FLAGS="-DQT_MESSAGELOGCONTEXT" \
-Wno-dev
cmake --build .
Expand Down
8 changes: 4 additions & 4 deletions qtox/build_sodium.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ readonly SCRIPT_DIR="$(dirname "$(realpath "$0")")"

source "$SCRIPT_DIR/build_utils.sh"

parse_arch --dep "sodium" --supported "linux-aarch64 linux-x86_64 win32 win64 macos-x86_64 macos-arm64 ios-arm64 ios-armv7 ios-armv7s iphonesimulator-arm64 iphonesimulator-x86_64" "$@"
parse_arch --dep "sodium" --supported "linux-aarch64 linux-x86_64 win32 win64 macos-x86_64 macos-arm64 ios-arm64 ios-armv7 ios-armv7s iphonesimulator-arm64 iphonesimulator-x86_64 wasm" "$@"

if [ "$LIB_TYPE" = "shared" ]; then
ENABLE_STATIC=--disable-static
Expand All @@ -28,7 +28,7 @@ for sym in blake2b blake2b_final blake2b_init blake2b_init_key blake2b_init_para
RENAME_CFLAGS="$RENAME_CFLAGS -D$sym=sodium_$sym"
done

./configure "$HOST_OPTION" \
"${EMCONFIGURE[@]}" ./configure "$HOST_OPTION" \
--prefix="$DEP_PREFIX" \
--disable-pie \
"$ENABLE_STATIC" \
Expand All @@ -37,5 +37,5 @@ done
LDFLAGS="$CROSS_LDFLAG -fstack-protector" ||
(cat config.log && exit 1)

make -j "$MAKE_JOBS"
make install
"${EMMAKE[@]}" make -j "$MAKE_JOBS"
"${EMMAKE[@]}" make install
Loading

0 comments on commit 20a1f5c

Please sign in to comment.