Browse Source

chatgui: opus из исходников в CMake + build_nix.sh под Linux/BSD

topo_upd
evgeny 2 months ago
parent
commit
54352c17ba
  1. 53
      tools/chatgui/build_linux.sh
  2. 89
      tools/chatgui/build_nix.sh
  3. 3
      tools/chatgui/build_nix_full.sh
  4. 33
      tools/chatgui/libutun/CMakeLists.txt

53
tools/chatgui/build_linux.sh

@ -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

89
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

3
tools/chatgui/build_nix_full.sh

@ -0,0 +1,3 @@
#!/bin/bash
set -euo pipefail
exec "$(dirname "$0")/build_nix.sh" --full "$@"

33
tools/chatgui/libutun/CMakeLists.txt

@ -24,8 +24,37 @@ target_include_directories(uasync PUBLIC
${LIB_DIR}/libopus/include ${LIB_DIR}/libopus/include
) )
add_library(opus_internal STATIC IMPORTED) file(GLOB OPUS_SOURCES CONFIGURE_DEPENDS
set_target_properties(opus_internal PROPERTIES IMPORTED_LOCATION "${LIB_DIR}/libopus/libopus_internal.a") "${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) target_link_libraries(uasync PUBLIC opus_internal)

Loading…
Cancel
Save