From 54352c17ba0ccd5cf8b29adf814c5b550bd710e3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 16 Aug 2026 14:35:59 +0300 Subject: [PATCH] =?UTF-8?q?chatgui:=20opus=20=D0=B8=D0=B7=20=D0=B8=D1=81?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B2=20CMa?= =?UTF-8?q?ke=20+=20build=5Fnix.sh=20=D0=BF=D0=BE=D0=B4=20Linux/BSD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/chatgui/build_linux.sh | 53 ----------------- tools/chatgui/build_nix.sh | 89 ++++++++++++++++++++++++++++ tools/chatgui/build_nix_full.sh | 3 + tools/chatgui/libutun/CMakeLists.txt | 33 ++++++++++- 4 files changed, 123 insertions(+), 55 deletions(-) delete mode 100755 tools/chatgui/build_linux.sh create mode 100755 tools/chatgui/build_nix.sh create mode 100755 tools/chatgui/build_nix_full.sh diff --git a/tools/chatgui/build_linux.sh b/tools/chatgui/build_linux.sh deleted file mode 100755 index 45ca3776..00000000 --- a/tools/chatgui/build_linux.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -set -eo pipefail - -ASAN=0 -for arg; do - case "$arg" in - --asan) ASAN=1 ;; - -j*) JOBS="${arg#-j}" ;; - esac -done - -# --- dependencies --- -PKGS="cmake librlottie-dev zlib1g-dev qtbase5-dev libssl-dev" -MISSING="" -for p in $PKGS; do - dpkg -s "$p" &>/dev/null || MISSING="$MISSING $p" -done - -if [ -n "$MISSING" ]; then - echo "Installing missing packages:$MISSING" - sudo apt update && sudo apt install -y $MISSING -else - echo "All dependencies OK" -fi - -# --- build --- -SRCDIR="$(cd "$(dirname "$0")" && pwd)" -BUILDDIR="$SRCDIR/build" -JOBS="${JOBS:-$(nproc)}" - -echo "Source: $SRCDIR" -echo "Build: $BUILDDIR" -echo "Jobs: $JOBS" -echo "" - -SAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer -g" -if [ "$ASAN" -eq 1 ]; then - echo "*** ASAN ENABLED ***" - CMAKE_ARGS=(-DCMAKE_C_FLAGS="$SAN_FLAGS" -DCMAKE_CXX_FLAGS="$SAN_FLAGS" -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address) - rm -f "$BUILDDIR/CMakeCache.txt" "$BUILDDIR/Makefile" -else - CMAKE_ARGS=() -fi - -[ -f "$BUILDDIR/Makefile" ] || cmake -S "$SRCDIR" -B "$BUILDDIR" "${CMAKE_ARGS[@]}" -cmake --build "$BUILDDIR" -j"$JOBS" - -echo "" -if [ "$ASAN" -eq 1 ]; then - echo "OK. Run: ASAN_OPTIONS=detect_leaks=1:halt_on_error=0 $BUILDDIR/vibechat" -else - echo "OK. Run: $BUILDDIR/vibechat" -fi diff --git a/tools/chatgui/build_nix.sh b/tools/chatgui/build_nix.sh new file mode 100755 index 00000000..6d57d1eb --- /dev/null +++ b/tools/chatgui/build_nix.sh @@ -0,0 +1,89 @@ +#!/bin/bash +set -euo pipefail + +# ============================================================================ +# build_nix.sh — ChatGUI build (Linux / FreeBSD) +# +# ./build_nix.sh quick (incremental) build +# ./build_nix.sh --full "под ключ": deps + clean + configure + build +# ./build_nix.sh -jN parallel jobs +# ./build_nix.sh --asan build with AddressSanitizer +# ============================================================================ + +SRC_DIR="$(cd "$(dirname "$0")" && pwd)" +BUILD_DIR="$SRC_DIR/build" + +FULL=0 +ASAN=0 +JOBS="" + +usage() { + echo "Usage: $0 [--full] [-jN] [--asan]" + echo " --full install deps + clean rebuild (all-in-one)" + echo " -jN parallel build jobs (default: CPU count)" + echo " --asan build with AddressSanitizer" + exit 0 +} + +for arg; do + case "$arg" in + --full) FULL=1 ;; + --asan) ASAN=1 ;; + -j*) JOBS="${arg#-j}" ;; + --jobs=*) JOBS="${arg#--jobs=}" ;; + -h|--help) usage ;; + *) echo "Unknown option: $arg" >&2; usage ;; + esac +done + +OS_NAME="$(uname -s)" +case "$OS_NAME" in + Linux) OS_ID=linux; ;; + FreeBSD) OS_ID=bsd; ;; + *) echo "Unsupported OS: $OS_NAME (supported: Linux, FreeBSD)" >&2; exit 1 ;; +esac + +if [ -z "$JOBS" ]; then + if [ "$OS_ID" = linux ]; then + JOBS="$(nproc)" + else + JOBS="$(sysctl -n hw.ncpu)" + fi +fi + +install_deps() { + echo "[deps] installing build dependencies..." + if [ "$OS_ID" = linux ]; then + sudo apt-get update + sudo apt-get install -y build-essential cmake qt6-base-dev librlottie-dev zlib1g-dev libssl-dev + else + sudo pkg install -y cmake qt6-base rlottie openssl + fi +} + +SAN_FLAGS="-fsanitize=address -fno-omit-frame-pointer -g" +if [ "$ASAN" -eq 1 ]; then + echo "[build] ASAN ENABLED" + CMAKE_ARGS=(-DCMAKE_C_FLAGS="$SAN_FLAGS" -DCMAKE_CXX_FLAGS="$SAN_FLAGS" -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address) +else + CMAKE_ARGS=() +fi + +if [ "$FULL" -eq 1 ]; then + install_deps + echo "[build] clean rebuild..." + rm -rf "$BUILD_DIR" +fi + +if [ ! -f "$BUILD_DIR/CMakeCache.txt" ] || [ "$ASAN" -eq 1 ]; then + cmake -S "$SRC_DIR" -B "$BUILD_DIR" "${CMAKE_ARGS[@]}" +fi + +cmake --build "$BUILD_DIR" -j"$JOBS" + +echo "" +if [ "$ASAN" -eq 1 ]; then + echo "OK. Run: ASAN_OPTIONS=detect_leaks=1:halt_on_error=0 $BUILD_DIR/vibechat" +else + echo "OK. Run: $BUILD_DIR/vibechat" +fi diff --git a/tools/chatgui/build_nix_full.sh b/tools/chatgui/build_nix_full.sh new file mode 100755 index 00000000..ef49a24c --- /dev/null +++ b/tools/chatgui/build_nix_full.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -euo pipefail +exec "$(dirname "$0")/build_nix.sh" --full "$@" diff --git a/tools/chatgui/libutun/CMakeLists.txt b/tools/chatgui/libutun/CMakeLists.txt index fc270c95..4f01c8db 100644 --- a/tools/chatgui/libutun/CMakeLists.txt +++ b/tools/chatgui/libutun/CMakeLists.txt @@ -24,8 +24,37 @@ target_include_directories(uasync PUBLIC ${LIB_DIR}/libopus/include ) -add_library(opus_internal STATIC IMPORTED) -set_target_properties(opus_internal PROPERTIES IMPORTED_LOCATION "${LIB_DIR}/libopus/libopus_internal.a") +file(GLOB OPUS_SOURCES CONFIGURE_DEPENDS + "${LIB_DIR}/libopus/celt/*.c" + "${LIB_DIR}/libopus/silk/*.c" + "${LIB_DIR}/libopus/silk/float/*.c" + "${LIB_DIR}/libopus/src/*.c" +) + +add_library(opus_internal STATIC ${OPUS_SOURCES}) + +target_include_directories(opus_internal PUBLIC + ${LIB_DIR}/libopus + ${LIB_DIR}/libopus/include + ${LIB_DIR}/libopus/celt + ${LIB_DIR}/libopus/silk + ${LIB_DIR}/libopus/silk/float + ${LIB_DIR}/libopus/silk/fixed + ${LIB_DIR}/libopus/src +) + +target_compile_definitions(opus_internal PRIVATE + OPUS_BUILD + VAR_ARRAYS + USE_ALLOCA +) + +set_target_properties(opus_internal PROPERTIES + C_STANDARD 99 + C_STANDARD_REQUIRED ON + POSITION_INDEPENDENT_CODE ON + AUTOMOC OFF +) target_link_libraries(uasync PUBLIC opus_internal)