You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

126 lines
3.2 KiB

#!/bin/bash
# Build script for uTun (supports both Linux and Windows/MSYS2)
# Usage: ./build.sh [options]
# Options:
# -h, --help Show this help
# --clean Clean before build
# -j[N] Build with N parallel jobs (default: 4)
set -e # Exit on error
# Detect platform
if [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ -n "$MSYSTEM" ]]; then
IS_WINDOWS=1
echo "Detected Windows/MSYS2 environment"
else
IS_WINDOWS=0
echo "Detected Linux environment"
fi
# Parse arguments
CLEAN=0
JOBS="-j4"
MAKE_ARGS=""
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
echo "Usage: ./build.sh [options]"
echo "Options:"
echo " -h, --help Show this help"
echo " --clean Clean before build"
echo " -j[N] Build with N parallel jobs (default: 4)"
exit 0
;;
--clean)
CLEAN=1
shift
;;
-j*)
JOBS="$1"
shift
;;
*)
MAKE_ARGS="$MAKE_ARGS $1"
shift
;;
esac
done
# Check required tools
if ! command -v gcc &> /dev/null; then
echo "Error: gcc not found."
if [ "$IS_WINDOWS" -eq 1 ]; then
echo "Please install: pacman -S mingw-w64-ucrt-x86_64-toolchain"
else
echo "Please install build-essential or gcc"
fi
exit 1
fi
# Clean if requested
if [ "$CLEAN" -eq 1 ]; then
echo "Cleaning build..."
make clean 2>/dev/null || true
rm -f config.status config.h
fi
# Check if configure script exists
if [ ! -f ./configure ]; then
echo "Configure script not found. Generating..."
if ! command -v autoreconf &> /dev/null; then
echo "Error: autoreconf not found."
if [ "$IS_WINDOWS" -eq 1 ]; then
echo "Install autotools: pacman -S autoconf automake libtool"
else
echo "Install autotools: apt-get install autoconf automake libtool"
fi
exit 1
fi
autoreconf -fiv
fi
# Run configure if needed
if [ ! -f config.status ] || [ config.status -ot configure ]; then
echo "Configuring build..."
if [ "$IS_WINDOWS" -eq 1 ]; then
# Windows: configure for mingw
./configure --prefix=/usr/local --host=x86_64-w64-mingw32 2>&1 | tee configure.log
else
# Linux: standard configure
./configure --prefix=/usr/local 2>&1 | tee configure.log
fi
else
echo "Using existing configuration."
fi
# Build
echo "Compiling with $JOBS..."
BUILD_SUCCESS=0
if [ "$IS_WINDOWS" -eq 1 ]; then
make $JOBS $MAKE_ARGS 2>&1 | tee build_win.log
if [ ${PIPESTATUS[0]} -eq 0 ]; then
BUILD_SUCCESS=1
fi
else
make $JOBS $MAKE_ARGS 2>&1 | tee build_linux.log
if [ ${PIPESTATUS[0]} -eq 0 ]; then
BUILD_SUCCESS=1
fi
fi
if [ $BUILD_SUCCESS -eq 1 ]; then
echo ""
echo "Build completed successfully!"
if [ "$IS_WINDOWS" -eq 1 ]; then
echo "Binary: src/utun.exe"
echo "Make sure wintun.dll is in the same directory as utun.exe"
else
echo "Binary: src/utun"
fi
else
echo ""
echo "ERROR: Build failed!"
echo "Check build_win.log (Windows) or build_linux.log (Linux) for details"
exit 1
fi