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