@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