|
|
|
@ -1,7 +1,58 @@ |
|
|
|
#!/bin/sh |
|
|
|
#!/bin/sh |
|
|
|
|
|
|
|
# Build script for uTun on FreeBSD (full rebuild) |
|
|
|
|
|
|
|
# Usage: ./build_bsd_full.sh [options] |
|
|
|
|
|
|
|
# Options: |
|
|
|
|
|
|
|
# -h, --help Show this help |
|
|
|
|
|
|
|
# --asan Build with AddressSanitizer (clang) |
|
|
|
|
|
|
|
# --hardened Build with compiler security hardening flags (clang) |
|
|
|
|
|
|
|
# -j[N] Build with N parallel jobs (default: sysctl hw.ncpu) |
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
set -e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Parse arguments |
|
|
|
|
|
|
|
USE_ASAN=0 |
|
|
|
|
|
|
|
USE_HARDENED=0 |
|
|
|
|
|
|
|
JOBS="" |
|
|
|
|
|
|
|
MAKE_ARGS="" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while [ $# -gt 0 ]; do |
|
|
|
|
|
|
|
case "$1" in |
|
|
|
|
|
|
|
-h|--help) |
|
|
|
|
|
|
|
echo "Usage: ./build_bsd_full.sh [options]" |
|
|
|
|
|
|
|
echo "Options:" |
|
|
|
|
|
|
|
echo " -h, --help Show this help" |
|
|
|
|
|
|
|
echo " --asan Build with AddressSanitizer" |
|
|
|
|
|
|
|
echo " --hardened Build with compiler security hardening flags" |
|
|
|
|
|
|
|
echo " -j[N] Build with N parallel jobs (default: sysctl hw.ncpu)" |
|
|
|
|
|
|
|
exit 0 |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
--asan) |
|
|
|
|
|
|
|
USE_ASAN=1 |
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
--hardened) |
|
|
|
|
|
|
|
USE_HARDENED=1 |
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
-j*) |
|
|
|
|
|
|
|
JOBS="$1" |
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
*) |
|
|
|
|
|
|
|
MAKE_ARGS="$MAKE_ARGS $1" |
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
;; |
|
|
|
|
|
|
|
esac |
|
|
|
|
|
|
|
done |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$JOBS" ]; then |
|
|
|
|
|
|
|
if command -v nproc >/dev/null 2>&1; then |
|
|
|
|
|
|
|
JOBS="-j$(nproc)" |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
JOBS="-j$(sysctl -n hw.ncpu)" |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
# Проверка и установка зависимостей |
|
|
|
# Проверка и установка зависимостей |
|
|
|
need_install="" |
|
|
|
need_install="" |
|
|
|
|
|
|
|
|
|
|
|
@ -13,18 +64,24 @@ for cmd in autoreconf aclocal automake libtoolize; do |
|
|
|
done |
|
|
|
done |
|
|
|
|
|
|
|
|
|
|
|
if [ -n "$need_install" ]; then |
|
|
|
if [ -n "$need_install" ]; then |
|
|
|
echo "Устанавливаются необходимые пакеты..." |
|
|
|
echo "Устанавливаются необходимые пакеты (нужен root)..." |
|
|
|
pkg update |
|
|
|
pkg update |
|
|
|
pkg install -y autoconf automake libtool pkgconf openssl |
|
|
|
pkg install -y autoconf automake libtool pkgconf openssl |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Предпочитаем GNU make (gmake), но fallback на bmake — он собирает |
|
|
|
|
|
|
|
# autotools-генерённые Makefile данного проекта. gmake ставится отдельно: |
|
|
|
|
|
|
|
# pkg install gmake (нужен root) |
|
|
|
|
|
|
|
GMAKE="$(command -v gmake || command -v make)" |
|
|
|
|
|
|
|
echo "Используем make: $GMAKE" |
|
|
|
|
|
|
|
|
|
|
|
mkdir -p m4 |
|
|
|
mkdir -p m4 |
|
|
|
|
|
|
|
|
|
|
|
echo "=== Полная пересборка uTun ===" |
|
|
|
echo "=== Полная пересборка uTun ===" |
|
|
|
|
|
|
|
|
|
|
|
# 1. Очистка |
|
|
|
# 1. Очистка |
|
|
|
echo "[1/4] Очистка..." |
|
|
|
echo "[1/4] Очистка..." |
|
|
|
make distclean 2>/dev/null || true |
|
|
|
$GMAKE distclean 2>/dev/null || true |
|
|
|
rm -f config.h config.status config.log |
|
|
|
rm -f config.h config.status config.log |
|
|
|
rm -f configure.log autoreconf.log build.log |
|
|
|
rm -f configure.log autoreconf.log build.log |
|
|
|
|
|
|
|
|
|
|
|
@ -42,19 +99,45 @@ chmod +x configure |
|
|
|
|
|
|
|
|
|
|
|
# 3. Конфигурация |
|
|
|
# 3. Конфигурация |
|
|
|
echo "[3/4] Конфигурация..." |
|
|
|
echo "[3/4] Конфигурация..." |
|
|
|
./configure --prefix=/usr/local 2>&1 | tee configure.log |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Определяем количество ядер |
|
|
|
# FFmpeg (опционально) — автоопределение через pkg-config |
|
|
|
if command -v nproc >/dev/null 2>&1; then |
|
|
|
FFMPEG_OPT="" |
|
|
|
JOBS=$(nproc) |
|
|
|
if command -v pkg-config >/dev/null 2>&1 && \ |
|
|
|
|
|
|
|
pkg-config --exists libavformat libavcodec libavutil libswscale libswresample 2>/dev/null; then |
|
|
|
|
|
|
|
FFMPEG_OPT="--with-ffmpeg" |
|
|
|
|
|
|
|
echo "FFmpeg detected — building with video transcoding" |
|
|
|
else |
|
|
|
else |
|
|
|
JOBS=$(sysctl -n hw.ncpu) |
|
|
|
echo "FFmpeg not found — building without video transcoding" |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$USE_ASAN" -eq 1 ]; then |
|
|
|
|
|
|
|
echo "(AddressSanitizer enabled — clang, lib/ + src/ only)" |
|
|
|
|
|
|
|
./configure --prefix=/usr/local CC=clang \ |
|
|
|
|
|
|
|
CFLAGS="-g -O1 -fsanitize=address -fno-omit-frame-pointer" \ |
|
|
|
|
|
|
|
LDFLAGS="-fsanitize=address" $FFMPEG_OPT 2>&1 | tee configure.log |
|
|
|
|
|
|
|
elif [ "$USE_HARDENED" -eq 1 ]; then |
|
|
|
|
|
|
|
echo "(Hardening enabled — clang-safe flags)" |
|
|
|
|
|
|
|
./configure --prefix=/usr/local CC=clang \ |
|
|
|
|
|
|
|
CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong -fPIE" \ |
|
|
|
|
|
|
|
LDFLAGS="-Wl,-z,relro -Wl,-z,now -pie" $FFMPEG_OPT 2>&1 | tee configure.log |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
./configure --prefix=/usr/local $FFMPEG_OPT 2>&1 | tee configure.log |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
# 4. Сборка |
|
|
|
# 4. Сборка |
|
|
|
echo "[4/4] Сборка..." |
|
|
|
echo "[4/4] Сборка..." |
|
|
|
make -j"$JOBS" 2>&1 | tee build.log |
|
|
|
if [ "$USE_ASAN" -eq 1 ]; then |
|
|
|
|
|
|
|
(cd lib && $GMAKE $JOBS $MAKE_ARGS 2>&1 | tee ../build.log) |
|
|
|
|
|
|
|
(cd src && $GMAKE $JOBS $MAKE_ARGS 2>&1 | tee ../build.log) |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
$GMAKE $JOBS $MAKE_ARGS 2>&1 | tee build.log |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
echo |
|
|
|
echo |
|
|
|
echo "=== Готово ===" |
|
|
|
echo "=== Готово ===" |
|
|
|
echo "Бинарный файл: src/utun" |
|
|
|
echo "Бинарный файл: src/utun" |
|
|
|
|
|
|
|
if [ "$USE_ASAN" -eq 1 ]; then |
|
|
|
|
|
|
|
echo |
|
|
|
|
|
|
|
echo "Запуск с ASAN (detect_leaks=0 обязателен на FreeBSD):" |
|
|
|
|
|
|
|
echo " ASAN_OPTIONS=detect_leaks=0:halt_on_error=0 ./src/utun -f -p /tmp/utun.pid -l /tmp/utun.log" |
|
|
|
|
|
|
|
fi |
|
|
|
|