127 lines
4.6 KiB
Bash
127 lines
4.6 KiB
Bash
#!/bin/bash
|
|
# Direct build script for uTun on Windows with OpenSSL
|
|
# Инкрементальная сборка (не пересобирает неизменённые файлы)
|
|
|
|
set -e
|
|
|
|
echo "uTun Direct Build Script for Windows with OpenSSL (Incremental)"
|
|
echo "=============================================================="
|
|
echo ""
|
|
|
|
# ====================== OpenSSL paths ======================
|
|
if [ -d "/c/msys64/ucrt64/include/openssl" ]; then
|
|
export CFLAGS="$CFLAGS -I/c/msys64/ucrt64/include"
|
|
export LDFLAGS="$LDFLAGS -L/c/msys64/ucrt64/lib"
|
|
echo "Using MSYS2 UCRT64 OpenSSL"
|
|
elif [ -d "/ucrt64/include/openssl" ]; then
|
|
export CFLAGS="$CFLAGS -I/ucrt64/include"
|
|
export LDFLAGS="$LDFLAGS -L/ucrt64/lib"
|
|
echo "Using MSYS2 UCRT64 OpenSSL"
|
|
elif [ -d "/mingw64/include/openssl" ]; then
|
|
export CFLAGS="$CFLAGS -I/mingw64/include"
|
|
export LDFLAGS="$LDFLAGS -L/mingw64/lib"
|
|
echo "Using MSYS2 MINGW64 OpenSSL"
|
|
fi
|
|
|
|
# ====================== Configure (только если нужно) ======================
|
|
if [ ! -f config.status ] || [ config.status -ot configure ]; then
|
|
echo ""
|
|
echo "Running configure..."
|
|
./configure --prefix=/usr/local --host=x86_64-w64-mingw32 --disable-dependency-tracking 2>&1 | tee configure.log
|
|
fi
|
|
|
|
# ====================== Directories ======================
|
|
mkdir -p src/.deps lib/.deps tests/.deps
|
|
|
|
# ====================== Build libuasync.a (incremental) ======================
|
|
echo ""
|
|
echo "Building libuasync.a..."
|
|
|
|
cd lib
|
|
LIB_NEEDS_REBUILD=0
|
|
|
|
for src in u_async.c ll_queue.c memory_pool.c debug_config.c timeout_heap.c sha256.c platform_compat.c socket_compat.c; do
|
|
if [ -f "$src" ]; then
|
|
obj="${src%.c}.o"
|
|
if [ ! -f "$obj" ] || [ "$src" -nt "$obj" ]; then
|
|
echo " CC $src"
|
|
x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c "$src" -o "$obj" 2>&1 | grep -v "warning:" || true
|
|
LIB_NEEDS_REBUILD=1
|
|
else
|
|
echo " SKIPPED $src (up to date)"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Пересобираем библиотеку только если что-то изменилось
|
|
if [ ! -f "libuasync.a" ] || [ $LIB_NEEDS_REBUILD -eq 1 ] || [ -n "$(find . -name '*.o' -newer libuasync.a 2>/dev/null)" ]; then
|
|
echo " AR libuasync.a"
|
|
ar cru libuasync.a *.o
|
|
ranlib libuasync.a
|
|
else
|
|
echo " SKIPPED libuasync.a (up to date)"
|
|
fi
|
|
cd ..
|
|
|
|
# ====================== Build utun.exe (incremental) ======================
|
|
echo ""
|
|
echo "Building utun.exe..."
|
|
|
|
cd src
|
|
EXE_NEEDS_REBUILD=0
|
|
|
|
CORE_SOURCES="utun.c utun_instance.c config_parser.c config_updater.c routing_layer/route_lib.c topo_bgp.c routing_layer/routing.c tun_if.c tun_route.c transport_layer/etcp.c transport_layer/etcp_padding.c transport_layer/reality_record.c transport_layer/reality_io.c transport_layer/etcp_session.c transport_layer/etcp_connections.c transport_layer/etcp_loadbalancer.c transport_layer/secure_channel.c transport_layer/crc32.c transport_layer/pkt_normalizer.c transport_layer/etcp_api.c tun_windows.c"
|
|
|
|
for src in $CORE_SOURCES; do
|
|
if [ -f "$src" ]; then
|
|
obj="utun-${src%.c}.o"
|
|
if [ ! -f "$obj" ] || [ "$src" -nt "$obj" ]; then
|
|
echo " CC $src"
|
|
x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I.. -I../lib -I../src/transport_layer -I../src/routing_layer -I../tinycrypt/lib/include -I../tinycrypt/lib/source $CFLAGS -g -O2 -c "$src" -o "$obj" 2>&1 | grep -E "error:|warning:.*deprecated" || true
|
|
EXE_NEEDS_REBUILD=1
|
|
else
|
|
echo " SKIPPED $src (up to date)"
|
|
fi
|
|
else
|
|
echo " WARNING: $src not found!"
|
|
fi
|
|
done
|
|
|
|
# Проверяем, нужно ли линковать
|
|
LINK_NEEDED=0
|
|
if [ ! -f "utun.exe" ] || [ $EXE_NEEDS_REBUILD -eq 1 ]; then
|
|
LINK_NEEDED=1
|
|
else
|
|
# Проверяем все объектники и библиотеку
|
|
for obj in utun-*.o; do
|
|
if [ -f "$obj" ] && [ "$obj" -nt "utun.exe" ]; then
|
|
LINK_NEEDED=1
|
|
break
|
|
fi
|
|
done
|
|
if [ -f "../lib/libuasync.a" ] && [ "../lib/libuasync.a" -nt "utun.exe" ]; then
|
|
LINK_NEEDED=1
|
|
fi
|
|
fi
|
|
|
|
if [ $LINK_NEEDED -eq 1 ]; then
|
|
echo " LINK utun.exe"
|
|
x86_64-w64-mingw32-gcc -o utun.exe utun-*.o ../lib/libuasync.a -lpthread -lm -lws2_32 -liphlpapi -lbcrypt $LDFLAGS -lcrypto 2>&1 | grep -E "error:|undefined reference" || true
|
|
else
|
|
echo " SKIPPED LINK utun.exe (up to date)"
|
|
fi
|
|
|
|
# Копируем в корень проекта
|
|
if [ -f "utun.exe" ]; then
|
|
cp utun.exe ../utun.exe
|
|
echo "Binary updated: ../utun.exe"
|
|
fi
|
|
|
|
cd ..
|
|
|
|
echo ""
|
|
echo "Build completed successfully! ✅"
|
|
echo "Binary: utun.exe"
|
|
echo ""
|
|
echo "Make sure wintun.dll is in the same directory as utun.exe"
|