AdvChkSys/build.bat
Stan44 09ee0d89df fixed a bug of not building.
Visual bug is known and annoying.
2025-05-10 05:11:35 -05:00

248 lines
9.0 KiB
Batchfile

@echo off
setlocal enabledelayedexpansion
:: AdvChkSys Build Script
:: ======================
:: Set colors for console output
set "RESET=[0m"
set "BRIGHT=[1m"
set "RED=[91m"
set "GREEN=[92m"
set "YELLOW=[93m"
set "BLUE=[94m"
set "MAGENTA=[95m"
set "CYAN=[96m"
set "WHITE=[97m"
:: Set build parameters
set "PROJECT_DIR=src\AdvChkSys"
set "BENCHMARKS_DIR=src\AdvChkSys.Benchmarks"
set "OUTPUT_DIR=build"
set "VERSION=0.1.8"
:: Create build directory if it doesn't exist
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
:: Display header
echo %BRIGHT%%CYAN%╔══════════════════════════════════════════════════════════════╗%RESET%
echo %BRIGHT%%CYAN%║ ADVANCED CHUNK SYSTEM BUILD ║%RESET%
echo %BRIGHT%%CYAN%╚══════════════════════════════════════════════════════════════╝%RESET%
echo.
echo %BRIGHT%%WHITE%Version: %VERSION%%RESET%
echo %BRIGHT%%WHITE%Date: %DATE% %TIME%%RESET%
echo.
:: Check for .NET SDK
echo %YELLOW%Checking for .NET SDK...%RESET%
dotnet --version > nul 2>&1
if %ERRORLEVEL% neq 0 (
echo %RED%Error: .NET SDK not found. Please install the .NET SDK.%RESET%
exit /b 1
)
echo %GREEN%✓ .NET SDK found%RESET%
echo.
:: Parse command line arguments
set "BUILD_WINDOWS=true"
set "BUILD_LINUX=false"
set "BUILD_MAC=false"
set "BUILD_BENCHMARKS=false"
set "BUILD_NUGET=false"
set "BUILD_DOCS=false"
set "CONFIG=Release"
:parse_args
if "%~1"=="" goto end_parse_args
if /i "%~1"=="--all" (
set "BUILD_WINDOWS=true"
set "BUILD_LINUX=true"
set "BUILD_MAC=true"
set "BUILD_BENCHMARKS=true"
set "BUILD_NUGET=true"
set "BUILD_DOCS=true"
) else if /i "%~1"=="--windows" (
set "BUILD_WINDOWS=true"
) else if /i "%~1"=="--linux" (
set "BUILD_LINUX=true"
) else if /i "%~1"=="--mac" (
set "BUILD_MAC=true"
) else if /i "%~1"=="--benchmarks" (
set "BUILD_BENCHMARKS=true"
) else if /i "%~1"=="--nuget" (
set "BUILD_NUGET=true"
) else if /i "%~1"=="--docs" (
set "BUILD_DOCS=true"
) else if /i "%~1"=="--debug" (
set "CONFIG=Debug"
)
shift
goto parse_args
:end_parse_args
:: Display build configuration
echo %BRIGHT%%MAGENTA%Build Configuration:%RESET%
echo %MAGENTA%• Configuration: %CONFIG%%RESET%
echo %MAGENTA%• Windows: %BUILD_WINDOWS%%RESET%
echo %MAGENTA%• Linux: %BUILD_LINUX%%RESET%
echo %MAGENTA%• macOS: %BUILD_MAC%%RESET%
echo %MAGENTA%• Benchmarks: %BUILD_BENCHMARKS%%RESET%
echo %MAGENTA%• NuGet Package: %BUILD_NUGET%%RESET%
echo %MAGENTA%• Documentation: %BUILD_DOCS%%RESET%
echo.
:: Clean previous builds
echo %YELLOW%Cleaning previous builds...%RESET%
if exist "%PROJECT_DIR%\bin" rd /s /q "%PROJECT_DIR%\bin"
if exist "%PROJECT_DIR%\obj" rd /s /q "%PROJECT_DIR%\obj"
if exist "%BENCHMARKS_DIR%\bin" rd /s /q "%BENCHMARKS_DIR%\bin"
if exist "%BENCHMARKS_DIR%\obj" rd /s /q "%BENCHMARKS_DIR%\obj"
echo %GREEN%✓ Clean completed%RESET%
echo.
:: Restore packages
echo %YELLOW%Restoring packages...%RESET%
dotnet restore "%PROJECT_DIR%\AdvChkSys.csproj"
if %ERRORLEVEL% neq 0 (
echo %RED%✗ Package restore failed%RESET%
exit /b 1
)
echo %GREEN%✓ Packages restored%RESET%
echo.
:: Build the library (platform-agnostic)
echo %BRIGHT%%BLUE%Building AdvChkSys library...%RESET%
dotnet build "%PROJECT_DIR%\AdvChkSys.csproj" -c %CONFIG% --no-restore
if %ERRORLEVEL% neq 0 (
echo %RED%✗ Library build failed%RESET%
exit /b 1
)
:: Copy library to output directories
if not exist "%OUTPUT_DIR%\lib" mkdir "%OUTPUT_DIR%\lib"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.dll" "%OUTPUT_DIR%\lib\"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.xml" "%OUTPUT_DIR%\lib\"
:: Create platform-specific directories
if "%BUILD_WINDOWS%"=="true" (
if not exist "%OUTPUT_DIR%\windows" mkdir "%OUTPUT_DIR%\windows"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.dll" "%OUTPUT_DIR%\windows\"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.xml" "%OUTPUT_DIR%\windows\"
echo %GREEN%✓ Windows build completed%RESET%
)
if "%BUILD_LINUX%"=="true" (
if not exist "%OUTPUT_DIR%\linux" mkdir "%OUTPUT_DIR%\linux"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.dll" "%OUTPUT_DIR%\linux\"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.xml" "%OUTPUT_DIR%\linux\"
echo %GREEN%✓ Linux build completed%RESET%
)
if "%BUILD_MAC%"=="true" (
if not exist "%OUTPUT_DIR%\macos" mkdir "%OUTPUT_DIR%\macos"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.dll" "%OUTPUT_DIR%\macos\"
copy "%PROJECT_DIR%\bin\%CONFIG%\netstandard2.1\AdvChkSys.xml" "%OUTPUT_DIR%\macos\"
echo %GREEN%✓ macOS build completed%RESET%
)
echo.
:: Build benchmarks
if "%BUILD_BENCHMARKS%"=="true" (
echo %BRIGHT%%BLUE%Building ChunkMark benchmarks...%RESET%
:: Restore benchmark packages
dotnet restore "%BENCHMARKS_DIR%\AdvChkSys.Benchmarks.csproj"
:: Build for Windows
if "%BUILD_WINDOWS%"=="true" (
dotnet publish "%BENCHMARKS_DIR%\AdvChkSys.Benchmarks.csproj" -c %CONFIG% -r win-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
if %ERRORLEVEL% neq 0 (
echo %RED%✗ Windows benchmark build failed%RESET%
) else (
if not exist "%OUTPUT_DIR%\benchmarks\windows" mkdir "%OUTPUT_DIR%\benchmarks\windows"
copy "%BENCHMARKS_DIR%\bin\%CONFIG%\net6.0\win-x64\publish\ChunkMark.exe" "%OUTPUT_DIR%\benchmarks\windows\"
echo %GREEN%✓ Windows benchmarks built%RESET%
)
)
:: Build for Linux
if "%BUILD_LINUX%"=="true" (
dotnet publish "%BENCHMARKS_DIR%\AdvChkSys.Benchmarks.csproj" -c %CONFIG% -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
if %ERRORLEVEL% neq 0 (
echo %RED%✗ Linux benchmark build failed%RESET%
) else (
if not exist "%OUTPUT_DIR%\benchmarks\linux" mkdir "%OUTPUT_DIR%\benchmarks\linux"
copy "%BENCHMARKS_DIR%\bin\%CONFIG%\net6.0\linux-x64\publish\ChunkMark" "%OUTPUT_DIR%\benchmarks\linux\"
echo %GREEN%✓ Linux benchmarks built%RESET%
)
)
:: Build for macOS
if "%BUILD_MAC%"=="true" (
dotnet publish "%BENCHMARKS_DIR%\AdvChkSys.Benchmarks.csproj" -c %CONFIG% -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
if %ERRORLEVEL% neq 0 (
echo %RED%✗ macOS benchmark build failed%RESET%
) else (
if not exist "%OUTPUT_DIR%\benchmarks\macos" mkdir "%OUTPUT_DIR%\benchmarks\macos"
copy "%BENCHMARKS_DIR%\bin\%CONFIG%\net6.0\osx-x64\publish\ChunkMark" "%OUTPUT_DIR%\benchmarks\macos\"
echo %GREEN%✓ macOS benchmarks built%RESET%
)
)
echo.
)
:: Build NuGet package
if "%BUILD_NUGET%"=="true" (
echo %BRIGHT%%BLUE%Building NuGet package...%RESET%
dotnet pack "%PROJECT_DIR%\AdvChkSys.csproj" -c %CONFIG% --no-build --output "%OUTPUT_DIR%\nuget"
if %ERRORLEVEL% neq 0 (
echo %RED%✗ NuGet package creation failed%RESET%
exit /b 1
)
echo %GREEN%✓ NuGet package created%RESET%
echo.
)
:: Build documentation
if "%BUILD_DOCS%"=="true" (
echo %BRIGHT%%BLUE%Building documentation...%RESET%
echo %YELLOW%Documentation generation not implemented yet.%RESET%
echo.
)
:: Display summary
echo %BRIGHT%%CYAN%╔══════════════════════════════════════════════════════════════╗%RESET%
echo %BRIGHT%%CYAN%║ BUILD SUMMARY ║%RESET%
echo %BRIGHT%%CYAN%╚══════════════════════════════════════════════════════════════╝%RESET%
echo.
echo %BRIGHT%%GREEN%Build completed successfully!%RESET%
echo.
echo %BRIGHT%%WHITE%Output files:%RESET%
echo %WHITE%• Library: %OUTPUT_DIR%\lib\AdvChkSys.dll%RESET%
if "%BUILD_WINDOWS%"=="true" (
echo %WHITE%• Windows: %OUTPUT_DIR%\windows\AdvChkSys.dll%RESET%
if "%BUILD_BENCHMARKS%"=="true" (
echo %WHITE%• Windows Benchmark: %OUTPUT_DIR%\benchmarks\windows\ChunkMark.exe%RESET%
)
)
if "%BUILD_LINUX%"=="true" (
echo %WHITE%• Linux: %OUTPUT_DIR%\linux\AdvChkSys.dll%RESET%
if "%BUILD_BENCHMARKS%"=="true" (
echo %WHITE%• Linux Benchmark: %OUTPUT_DIR%\benchmarks\linux\ChunkMark%RESET%
)
)
if "%BUILD_MAC%"=="true" (
echo %WHITE%• macOS: %OUTPUT_DIR%\macos\AdvChkSys.dll%RESET%
if "%BUILD_BENCHMARKS%"=="true" (
echo %WHITE%• macOS Benchmark: %OUTPUT_DIR%\benchmarks\macos\ChunkMark%RESET%
)
)
if "%BUILD_NUGET%"=="true" (
echo %WHITE%• NuGet: %OUTPUT_DIR%\nuget\AdvChkSys.%VERSION%.nupkg%RESET%
)
echo.
echo %BRIGHT%%CYAN%Run the build script with --help for more options.%RESET%
echo.
endlocal