Refactor Windows build instructions and remove legacy scripts
- Updated `02-build-instructions.md` to enhance clarity and organization, including renaming sections for better understanding. - Removed outdated automated setup scripts (`build-windows.bat`, `build-windows.ps1`, `setup-windows-dev.ps1`, and `validate-windows-build.ps1`) to streamline the build process. - Introduced optional vcpkg setup for SDL2 dependency management, emphasizing the use of bundled dependencies by default. - Improved documentation for Visual Studio CMake workflow, highlighting the recommended approach for building the project. - Consolidated and clarified command line build instructions, ensuring a more straightforward setup experience for developers.
This commit is contained in:
@@ -4,151 +4,65 @@ This directory contains build and setup scripts for YAZE development on differen
|
||||
|
||||
## Windows Scripts
|
||||
|
||||
### Setup Scripts
|
||||
- **`setup-windows-dev.ps1`** - Complete Windows development environment setup (PowerShell)
|
||||
- **`setup-vcpkg-windows.ps1`** - vcpkg setup only (PowerShell)
|
||||
- **`setup-vcpkg-windows.bat`** - vcpkg setup only (Batch)
|
||||
### vcpkg Setup (Optional)
|
||||
- **`setup-vcpkg-windows.ps1`** - Setup vcpkg for SDL2 dependency (PowerShell)
|
||||
- **`setup-vcpkg-windows.bat`** - Setup vcpkg for SDL2 dependency (Batch)
|
||||
|
||||
### Build Scripts
|
||||
- **`build-windows.ps1`** - Build YAZE on Windows (PowerShell)
|
||||
- **`build-windows.bat`** - Build YAZE on Windows (Batch)
|
||||
**Note**: vcpkg is optional. YAZE uses bundled dependencies by default.
|
||||
|
||||
### Validation Scripts
|
||||
- **`validate-windows-build.ps1`** - Validate Windows build environment
|
||||
## Windows Build Workflow
|
||||
|
||||
### Project Generation
|
||||
- **`generate-vs-projects.py`** - Generate Visual Studio project files (Cross-platform Python)
|
||||
### Recommended: Visual Studio CMake Mode
|
||||
|
||||
## Windows Compiler Recommendations
|
||||
**YAZE uses Visual Studio's native CMake support - no project generation needed.**
|
||||
|
||||
### ⚠️ Important: MSVC vs Clang on Windows
|
||||
1. **Install Visual Studio 2022** with "Desktop development with C++" workload
|
||||
2. **Open Visual Studio 2022**
|
||||
3. **File → Open → Folder**
|
||||
4. **Navigate to yaze directory**
|
||||
5. **Select configuration** (Debug/Release) from toolbar
|
||||
6. **Press F5** to build and run
|
||||
|
||||
**We strongly recommend using Clang on Windows** due to compatibility issues with MSVC and Abseil's int128 and type_traits features:
|
||||
### Command Line Build
|
||||
|
||||
#### Why Clang is Recommended:
|
||||
- ✅ **Better C++23 Support**: Full support for modern C++23 features
|
||||
- ✅ **Abseil Compatibility**: No issues with `absl::int128` and type traits
|
||||
- ✅ **Cross-Platform Consistency**: Same compiler across all platforms
|
||||
- ✅ **Better Error Messages**: More helpful diagnostic messages
|
||||
- ✅ **Faster Compilation**: Generally faster than MSVC
|
||||
|
||||
#### MSVC Issues:
|
||||
- ❌ **C++23 Deprecation Warnings**: Abseil int128 triggers numerous deprecation warnings
|
||||
- ❌ **Type Traits Problems**: Some Abseil type traits don't work correctly with MSVC
|
||||
- ❌ **Int128 Limitations**: MSVC's int128 support is incomplete
|
||||
- ❌ **Build Complexity**: Requires additional workarounds and flags
|
||||
|
||||
### Compiler Setup Options
|
||||
|
||||
#### Option 1: Clang (Recommended)
|
||||
```powershell
|
||||
# Install LLVM/Clang via winget
|
||||
winget install LLVM.LLVM
|
||||
# Standard CMake workflow
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Debug
|
||||
cmake --build build --config Debug
|
||||
|
||||
# Or download from: https://releases.llvm.org/
|
||||
# Make sure to add Clang to PATH during installation
|
||||
|
||||
# Verify installation
|
||||
clang --version
|
||||
# Run the application
|
||||
.\build\bin\Debug\yaze.exe
|
||||
```
|
||||
|
||||
#### Option 2: MSVC with Workarounds
|
||||
If you must use MSVC, the build system includes workarounds:
|
||||
- Abseil int128 is automatically disabled on Windows
|
||||
- C++23 deprecation warnings are silenced
|
||||
- Additional compatibility flags are applied
|
||||
### Compiler Notes
|
||||
|
||||
However, you may still encounter issues with some Abseil features.
|
||||
The CMake configuration is designed to work with **MSVC** (Visual Studio's compiler). The build system includes automatic workarounds for C++23 compatibility:
|
||||
- Abseil int128 is automatically excluded on Windows
|
||||
- C++23 deprecation warnings are properly silenced
|
||||
- Platform-specific definitions are handled automatically
|
||||
|
||||
## Quick Start (Windows)
|
||||
|
||||
### Option 1: Automated Setup (Recommended)
|
||||
### Option 1: Visual Studio (Recommended)
|
||||
1. Open Visual Studio 2022
|
||||
2. File → Open → Folder
|
||||
3. Navigate to yaze directory
|
||||
4. Select configuration (Debug/Release)
|
||||
5. Press F5 to build and run
|
||||
|
||||
### Option 2: Command Line
|
||||
```powershell
|
||||
.\scripts\setup-windows-dev.ps1
|
||||
# Standard CMake build
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Debug
|
||||
cmake --build build --config Debug
|
||||
```
|
||||
|
||||
### Option 2: Manual Setup
|
||||
### Option 3: With vcpkg (Optional)
|
||||
```powershell
|
||||
# 1. Setup vcpkg
|
||||
# Setup vcpkg for SDL2
|
||||
.\scripts\setup-vcpkg-windows.ps1
|
||||
|
||||
# 2. Generate project files
|
||||
python scripts/generate-vs-projects.py
|
||||
|
||||
# 3. Build
|
||||
.\scripts\build-windows.ps1
|
||||
```
|
||||
|
||||
### Option 3: Using Batch Scripts
|
||||
```batch
|
||||
REM Setup vcpkg
|
||||
.\scripts\setup-vcpkg-windows.bat
|
||||
|
||||
REM Generate project files
|
||||
python scripts/generate-vs-projects.py
|
||||
|
||||
REM Build
|
||||
.\scripts\build-windows.bat
|
||||
```
|
||||
|
||||
## Script Options
|
||||
|
||||
### setup-windows-dev.ps1
|
||||
- `-SkipVcpkg` - Skip vcpkg setup
|
||||
- `-SkipVS` - Skip Visual Studio check
|
||||
- `-SkipBuild` - Skip test build
|
||||
|
||||
### build-windows.ps1
|
||||
- `-Configuration` - Build configuration (Debug, Release, RelWithDebInfo, MinSizeRel)
|
||||
- `-Platform` - Target platform (x64, x86, ARM64)
|
||||
- `-Compiler` - Compiler to use (clang, msvc, auto)
|
||||
- `-Clean` - Clean build directories before building
|
||||
- `-Verbose` - Verbose build output
|
||||
|
||||
### build-windows.bat
|
||||
- First argument: Configuration (Debug, Release, RelWithDebInfo, MinSizeRel)
|
||||
- Second argument: Platform (x64, x86, ARM64)
|
||||
- Third argument: Compiler (clang, msvc, auto)
|
||||
- `clean` - Clean build directories
|
||||
- `verbose` - Verbose build output
|
||||
|
||||
## Examples
|
||||
|
||||
```powershell
|
||||
# Build Release x64 with Clang (recommended)
|
||||
.\scripts\build-windows.ps1 -Compiler clang
|
||||
|
||||
# Build Release x64 with MSVC (with workarounds)
|
||||
.\scripts\build-windows.ps1 -Compiler msvc
|
||||
|
||||
# Build Debug x64 with Clang
|
||||
.\scripts\build-windows.ps1 -Configuration Debug -Platform x64 -Compiler clang
|
||||
|
||||
# Build Release x86 with auto-detection
|
||||
.\scripts\build-windows.ps1 -Configuration Release -Platform x86 -Compiler auto
|
||||
|
||||
# Clean build with Clang
|
||||
.\scripts\build-windows.ps1 -Clean -Compiler clang
|
||||
|
||||
# Verbose build with MSVC
|
||||
.\scripts\build-windows.ps1 -Verbose -Compiler msvc
|
||||
|
||||
# Validate environment
|
||||
.\scripts\validate-windows-build.ps1
|
||||
```
|
||||
|
||||
```batch
|
||||
REM Build Release x64 with Clang (recommended)
|
||||
.\scripts\build-windows.bat Release x64 clang
|
||||
|
||||
REM Build Debug x64 with MSVC
|
||||
.\scripts\build-windows.bat Debug x64 msvc
|
||||
|
||||
REM Build Release x86 with auto-detection
|
||||
.\scripts\build-windows.bat Release x86 auto
|
||||
|
||||
REM Clean build with Clang
|
||||
.\scripts\build-windows.bat clean clang
|
||||
# Then build normally in Visual Studio or command line
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
@@ -160,38 +74,31 @@ REM Clean build with Clang
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
```
|
||||
|
||||
2. **MSBuild Not Found**
|
||||
- Install Visual Studio 2022 with C++ workload
|
||||
- Or add MSBuild to PATH
|
||||
2. **Visual Studio Not Detecting CMakeLists.txt**
|
||||
- Ensure you opened the folder (not a solution file)
|
||||
- Check that CMakeLists.txt exists in the root directory
|
||||
- Try: File → Close Folder, then File → Open → Folder
|
||||
|
||||
3. **vcpkg Issues**
|
||||
3. **vcpkg Issues (if using vcpkg)**
|
||||
- Run `.\scripts\setup-vcpkg-windows.ps1` to reinstall
|
||||
- Check internet connection for dependency downloads
|
||||
- Note: vcpkg is optional; bundled dependencies work by default
|
||||
|
||||
4. **Python Not Found**
|
||||
- Install Python 3.8+ from python.org
|
||||
- Make sure Python is in PATH
|
||||
4. **CMake Configuration Errors**
|
||||
- Delete the `build/` directory
|
||||
- Close and reopen the folder in Visual Studio
|
||||
- Or run: `cmake -B build -DCMAKE_BUILD_TYPE=Debug`
|
||||
|
||||
5. **MSVC Compilation Errors**
|
||||
- **Abseil int128 errors**: Use Clang instead (`-Compiler clang`)
|
||||
- **C++23 deprecation warnings**: These are silenced automatically, but Clang is cleaner
|
||||
- **Type traits issues**: Switch to Clang for better compatibility
|
||||
- **Solution**: Install Clang and use `.\scripts\build-windows.ps1 -Compiler clang`
|
||||
|
||||
6. **Clang Not Found**
|
||||
- Install LLVM/Clang: `winget install LLVM.LLVM`
|
||||
- Or download from: https://releases.llvm.org/
|
||||
- Make sure Clang is in PATH: `clang --version`
|
||||
|
||||
7. **Compiler Detection Issues**
|
||||
- Use explicit compiler selection: `-Compiler clang` or `-Compiler msvc`
|
||||
- Check available compilers: `where clang` and `where cl`
|
||||
5. **Missing Git Submodules**
|
||||
```powershell
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
### Getting Help
|
||||
|
||||
1. Run validation script: `.\scripts\validate-windows-build.ps1`
|
||||
2. Check the [Windows Development Guide](../docs/windows-development-guide.md)
|
||||
3. Review build output for specific error messages
|
||||
1. Check the [Build Instructions](../docs/02-build-instructions.md)
|
||||
2. Review CMake output for specific error messages
|
||||
3. Ensure all prerequisites are installed (Visual Studio 2022 with C++ workload)
|
||||
|
||||
## Other Scripts
|
||||
|
||||
|
||||
@@ -1,164 +0,0 @@
|
||||
@echo off
|
||||
REM YAZE Windows Build Script (Batch Version)
|
||||
REM This script builds the YAZE project on Windows using MSBuild
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
REM Parse command line arguments
|
||||
set BUILD_CONFIG=Release
|
||||
set BUILD_PLATFORM=x64
|
||||
set CLEAN_BUILD=0
|
||||
set VERBOSE=0
|
||||
|
||||
:parse_args
|
||||
if "%~1"=="" goto :args_done
|
||||
if /i "%~1"=="Debug" set BUILD_CONFIG=Debug
|
||||
if /i "%~1"=="Release" set BUILD_CONFIG=Release
|
||||
if /i "%~1"=="RelWithDebInfo" set BUILD_CONFIG=RelWithDebInfo
|
||||
if /i "%~1"=="MinSizeRel" set BUILD_CONFIG=MinSizeRel
|
||||
if /i "%~1"=="x64" set BUILD_PLATFORM=x64
|
||||
if /i "%~1"=="x86" set BUILD_PLATFORM=x86
|
||||
if /i "%~1"=="ARM64" set BUILD_PLATFORM=ARM64
|
||||
if /i "%~1"=="clean" set CLEAN_BUILD=1
|
||||
if /i "%~1"=="verbose" set VERBOSE=1
|
||||
shift
|
||||
goto :parse_args
|
||||
|
||||
:args_done
|
||||
|
||||
echo ========================================
|
||||
echo YAZE Windows Build Script
|
||||
echo ========================================
|
||||
|
||||
REM Check if we're in the right directory
|
||||
if not exist "YAZE.sln" (
|
||||
echo ERROR: YAZE.sln not found. Please run this script from the project root directory.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✓ YAZE.sln found
|
||||
|
||||
REM Check for MSBuild
|
||||
where msbuild >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: MSBuild not found. Please install Visual Studio 2022 or later.
|
||||
echo Make sure to install the C++ development workload.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✓ MSBuild found
|
||||
|
||||
REM Check for vcpkg
|
||||
if not exist "vcpkg.json" (
|
||||
echo WARNING: vcpkg.json not found. vcpkg integration may not work properly.
|
||||
)
|
||||
|
||||
echo Build Configuration: %BUILD_CONFIG%
|
||||
echo Build Platform: %BUILD_PLATFORM%
|
||||
|
||||
REM Create build directories
|
||||
echo Creating build directories...
|
||||
if not exist "build" mkdir build
|
||||
if not exist "build\bin" mkdir build\bin
|
||||
if not exist "build\obj" mkdir build\obj
|
||||
|
||||
REM Clean build if requested
|
||||
if %CLEAN_BUILD%==1 (
|
||||
echo Cleaning build directories...
|
||||
if exist "build\bin" rmdir /s /q "build\bin" 2>nul
|
||||
if exist "build\obj" rmdir /s /q "build\obj" 2>nul
|
||||
if not exist "build\bin" mkdir build\bin
|
||||
if not exist "build\obj" mkdir build\obj
|
||||
echo ✓ Build directories cleaned
|
||||
)
|
||||
|
||||
REM Generate yaze_config.h if it doesn't exist
|
||||
if not exist "yaze_config.h" (
|
||||
echo Generating yaze_config.h...
|
||||
if exist "src\yaze_config.h.in" (
|
||||
copy "src\yaze_config.h.in" "yaze_config.h" >nul
|
||||
powershell -Command "(Get-Content 'yaze_config.h') -replace '@yaze_VERSION_MAJOR@', '0' -replace '@yaze_VERSION_MINOR@', '3' -replace '@yaze_VERSION_PATCH@', '1' | Set-Content 'yaze_config.h'"
|
||||
echo ✓ Generated yaze_config.h
|
||||
) else (
|
||||
echo WARNING: yaze_config.h.in not found, creating basic config
|
||||
echo // yaze config file > yaze_config.h
|
||||
echo #define YAZE_VERSION_MAJOR 0 >> yaze_config.h
|
||||
echo #define YAZE_VERSION_MINOR 3 >> yaze_config.h
|
||||
echo #define YAZE_VERSION_PATCH 1 >> yaze_config.h
|
||||
)
|
||||
)
|
||||
|
||||
REM Build using MSBuild
|
||||
echo Building with MSBuild...
|
||||
|
||||
set MSBUILD_ARGS=YAZE.sln /p:Configuration=%BUILD_CONFIG% /p:Platform=%BUILD_PLATFORM% /p:VcpkgEnabled=true /p:VcpkgManifestInstall=true /m
|
||||
|
||||
if %VERBOSE%==1 (
|
||||
set MSBUILD_ARGS=%MSBUILD_ARGS% /verbosity:detailed
|
||||
) else (
|
||||
set MSBUILD_ARGS=%MSBUILD_ARGS% /verbosity:minimal
|
||||
)
|
||||
|
||||
echo Command: msbuild %MSBUILD_ARGS%
|
||||
|
||||
msbuild %MSBUILD_ARGS%
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Build failed with exit code %errorlevel%
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✓ Build completed successfully
|
||||
|
||||
REM Verify executable was created
|
||||
set EXE_PATH=build\bin\%BUILD_CONFIG%\yaze.exe
|
||||
if not exist "%EXE_PATH%" (
|
||||
echo ERROR: Executable not found at expected path: %EXE_PATH%
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✓ Executable created: %EXE_PATH%
|
||||
|
||||
REM Test that the executable runs (basic test)
|
||||
echo Testing executable startup...
|
||||
"%EXE_PATH%" --help >nul 2>&1
|
||||
set EXIT_CODE=%errorlevel%
|
||||
|
||||
REM Check if it's the test main or app main
|
||||
"%EXE_PATH%" --help 2>&1 | findstr /i "Google Test" >nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo ERROR: Executable is running test main instead of app main!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo ✓ Executable runs correctly (exit code: %EXIT_CODE%)
|
||||
|
||||
REM Display file info
|
||||
for %%A in ("%EXE_PATH%") do set FILE_SIZE=%%~zA
|
||||
set /a FILE_SIZE_MB=%FILE_SIZE% / 1024 / 1024
|
||||
echo Executable size: %FILE_SIZE_MB% MB
|
||||
|
||||
echo ========================================
|
||||
echo ✓ YAZE Windows build completed successfully!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Build Configuration: %BUILD_CONFIG%
|
||||
echo Build Platform: %BUILD_PLATFORM%
|
||||
echo Executable: %EXE_PATH%
|
||||
echo.
|
||||
echo To run YAZE:
|
||||
echo %EXE_PATH%
|
||||
echo.
|
||||
echo To build other configurations:
|
||||
echo %~nx0 Debug x64
|
||||
echo %~nx0 Release x86
|
||||
echo %~nx0 RelWithDebInfo ARM64
|
||||
echo %~nx0 clean
|
||||
echo.
|
||||
|
||||
pause
|
||||
@@ -1,220 +0,0 @@
|
||||
# YAZE Windows Build Script
|
||||
# This script builds the YAZE project on Windows using MSBuild
|
||||
|
||||
param(
|
||||
[string]$Configuration = "Release",
|
||||
[string]$Platform = "x64",
|
||||
[switch]$Clean,
|
||||
[switch]$Verbose
|
||||
)
|
||||
|
||||
# Set error handling
|
||||
$ErrorActionPreference = "Continue"
|
||||
|
||||
# Colors for output
|
||||
$Colors = @{
|
||||
Success = "Green"
|
||||
Warning = "Yellow"
|
||||
Error = "Red"
|
||||
Info = "Cyan"
|
||||
White = "White"
|
||||
}
|
||||
|
||||
function Write-Status {
|
||||
param([string]$Message, [string]$Color = "White")
|
||||
Write-Host $Message -ForegroundColor $Colors[$Color]
|
||||
}
|
||||
|
||||
function Test-Command {
|
||||
param([string]$Command)
|
||||
try {
|
||||
$null = Get-Command $Command -ErrorAction Stop
|
||||
return $true
|
||||
} catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
function Get-MSBuildPath {
|
||||
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
if (Test-Path $vsWhere) {
|
||||
$vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
|
||||
if ($vsInstall) {
|
||||
$msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe"
|
||||
if (Test-Path $msbuildPath) {
|
||||
return $msbuildPath
|
||||
}
|
||||
}
|
||||
}
|
||||
return $null
|
||||
}
|
||||
|
||||
# Main script
|
||||
Write-Status "========================================" "Info"
|
||||
Write-Status "YAZE Windows Build Script" "Info"
|
||||
Write-Status "========================================" "Info"
|
||||
|
||||
# Validate parameters
|
||||
$ValidConfigs = @("Debug", "Release", "RelWithDebInfo", "MinSizeRel")
|
||||
$ValidPlatforms = @("x64", "x86", "ARM64")
|
||||
|
||||
if ($ValidConfigs -notcontains $Configuration) {
|
||||
Write-Status "ERROR: Invalid configuration '$Configuration'. Valid options: $($ValidConfigs -join ', ')" "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($ValidPlatforms -notcontains $Platform) {
|
||||
Write-Status "ERROR: Invalid platform '$Platform'. Valid options: $($ValidPlatforms -join ', ')" "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Status "Build Configuration: $Configuration" "Warning"
|
||||
Write-Status "Build Platform: $Platform" "Warning"
|
||||
|
||||
# Check if we're in the right directory
|
||||
if (-not (Test-Path "YAZE.sln")) {
|
||||
Write-Status "ERROR: YAZE.sln not found. Please run this script from the project root directory." "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Status "✓ Found YAZE.sln" "Success"
|
||||
|
||||
# Check for MSBuild
|
||||
$msbuildPath = Get-MSBuildPath
|
||||
if (-not $msbuildPath) {
|
||||
Write-Status "ERROR: MSBuild not found. Please install Visual Studio 2022 with C++ workload." "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Status "✓ MSBuild found at: $msbuildPath" "Success"
|
||||
|
||||
# Check for vcpkg
|
||||
if (-not (Test-Path "vcpkg.json")) {
|
||||
Write-Status "WARNING: vcpkg.json not found. vcpkg integration may not work properly." "Warning"
|
||||
}
|
||||
|
||||
# Create build directories
|
||||
Write-Status "Creating build directories..." "Warning"
|
||||
$directories = @("build", "build\bin", "build\obj")
|
||||
foreach ($dir in $directories) {
|
||||
if (-not (Test-Path $dir)) {
|
||||
New-Item -ItemType Directory -Path $dir -Force | Out-Null
|
||||
Write-Status "✓ Created directory: $dir" "Success"
|
||||
}
|
||||
}
|
||||
|
||||
# Clean build if requested
|
||||
if ($Clean) {
|
||||
Write-Status "Cleaning build directories..." "Warning"
|
||||
if (Test-Path "build\bin") {
|
||||
Remove-Item -Recurse -Force "build\bin\*" -ErrorAction SilentlyContinue
|
||||
}
|
||||
if (Test-Path "build\obj") {
|
||||
Remove-Item -Recurse -Force "build\obj\*" -ErrorAction SilentlyContinue
|
||||
}
|
||||
Write-Status "✓ Build directories cleaned" "Success"
|
||||
}
|
||||
|
||||
# Generate yaze_config.h if it doesn't exist
|
||||
if (-not (Test-Path "yaze_config.h")) {
|
||||
Write-Status "Generating yaze_config.h..." "Warning"
|
||||
if (Test-Path "src\yaze_config.h.in") {
|
||||
Copy-Item "src\yaze_config.h.in" "yaze_config.h"
|
||||
$content = Get-Content "yaze_config.h" -Raw
|
||||
$content = $content -replace '@yaze_VERSION_MAJOR@', '0'
|
||||
$content = $content -replace '@yaze_VERSION_MINOR@', '3'
|
||||
$content = $content -replace '@yaze_VERSION_PATCH@', '1'
|
||||
Set-Content "yaze_config.h" $content
|
||||
Write-Status "✓ Generated yaze_config.h" "Success"
|
||||
} else {
|
||||
Write-Status "WARNING: yaze_config.h.in not found, creating basic config" "Warning"
|
||||
@"
|
||||
// yaze config file
|
||||
#define YAZE_VERSION_MAJOR 0
|
||||
#define YAZE_VERSION_MINOR 3
|
||||
#define YAZE_VERSION_PATCH 1
|
||||
"@ | Out-File -FilePath "yaze_config.h" -Encoding UTF8
|
||||
}
|
||||
}
|
||||
|
||||
# Build using MSBuild
|
||||
Write-Status "Building with MSBuild..." "Warning"
|
||||
|
||||
$msbuildArgs = @(
|
||||
"YAZE.sln"
|
||||
"/p:Configuration=$Configuration"
|
||||
"/p:Platform=$Platform"
|
||||
"/p:VcpkgEnabled=true"
|
||||
"/p:VcpkgManifestInstall=true"
|
||||
"/m"
|
||||
)
|
||||
|
||||
if ($Verbose) {
|
||||
$msbuildArgs += "/verbosity:detailed"
|
||||
} else {
|
||||
$msbuildArgs += "/verbosity:minimal"
|
||||
}
|
||||
|
||||
$msbuildCommand = "& `"$msbuildPath`" $($msbuildArgs -join ' ')"
|
||||
Write-Status "Command: $msbuildCommand" "Info"
|
||||
|
||||
try {
|
||||
& $msbuildPath @msbuildArgs
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "MSBuild failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
Write-Status "✓ Build completed successfully" "Success"
|
||||
} catch {
|
||||
Write-Status "✗ Build failed: $_" "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verify executable was created
|
||||
$exePath = "build\bin\$Configuration\yaze.exe"
|
||||
if (-not (Test-Path $exePath)) {
|
||||
Write-Status "ERROR: Executable not found at expected path: $exePath" "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Status "✓ Executable created: $exePath" "Success"
|
||||
|
||||
# Test that the executable runs
|
||||
Write-Status "Testing executable..." "Warning"
|
||||
try {
|
||||
$testResult = & $exePath --help 2>&1
|
||||
$exitCode = $LASTEXITCODE
|
||||
|
||||
# Check if it's the test main or app main
|
||||
if ($testResult -match "Google Test|gtest") {
|
||||
Write-Status "ERROR: Executable is running test main instead of app main!" "Error"
|
||||
Write-Status "Output: $testResult" "Error"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Status "✓ Executable runs correctly (exit code: $exitCode)" "Success"
|
||||
} catch {
|
||||
Write-Status "WARNING: Could not test executable: $_" "Warning"
|
||||
}
|
||||
|
||||
# Display file info
|
||||
$exeInfo = Get-Item $exePath
|
||||
$fileSizeMB = [math]::Round($exeInfo.Length / 1MB, 2)
|
||||
Write-Status "Executable size: $fileSizeMB MB" "Info"
|
||||
|
||||
Write-Status "========================================" "Info"
|
||||
Write-Status "✓ YAZE Windows build completed successfully!" "Success"
|
||||
Write-Status "========================================" "Info"
|
||||
Write-Status ""
|
||||
Write-Status "Build Configuration: $Configuration" "White"
|
||||
Write-Status "Build Platform: $Platform" "White"
|
||||
Write-Status "Executable: $exePath" "White"
|
||||
Write-Status ""
|
||||
Write-Status "To run YAZE:" "Warning"
|
||||
Write-Status " $exePath" "White"
|
||||
Write-Status ""
|
||||
Write-Status "To build other configurations:" "Warning"
|
||||
Write-Status " .\scripts\build-windows.ps1 -Configuration Debug -Platform x64" "White"
|
||||
Write-Status " .\scripts\build-windows.ps1 -Configuration Release -Platform x86" "White"
|
||||
Write-Status " .\scripts\build-windows.ps1 -Configuration RelWithDebInfo -Platform ARM64" "White"
|
||||
Write-Status " .\scripts\build-windows.ps1 -Clean" "White"
|
||||
Write-Status ""
|
||||
@@ -1,219 +0,0 @@
|
||||
# yaze Windows Development Setup Script
|
||||
# Sequential approach with no functions and minimal conditionals
|
||||
|
||||
param(
|
||||
[switch]$SkipVcpkg,
|
||||
[switch]$SkipVS,
|
||||
[switch]$SkipBuild
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Continue"
|
||||
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host "YAZE Windows Development Setup" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
|
||||
# Step 1: Check project directory
|
||||
Write-Host "Step 1: Checking project directory..." -ForegroundColor Yellow
|
||||
$projectValid = Test-Path "CMakeLists.txt"
|
||||
switch ($projectValid) {
|
||||
$true { Write-Host "✓ CMakeLists.txt found" -ForegroundColor Green }
|
||||
$false {
|
||||
Write-Host "✗ CMakeLists.txt not found" -ForegroundColor Red
|
||||
Write-Host "Please run this script from the YAZE project root directory" -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Step 2: Check Visual Studio
|
||||
Write-Host "Step 2: Checking Visual Studio..." -ForegroundColor Yellow
|
||||
switch ($SkipVS) {
|
||||
$true { Write-Host "Skipping Visual Studio check" -ForegroundColor Yellow }
|
||||
$false {
|
||||
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
$vsFound = $false
|
||||
$vsExists = Test-Path $vsWhere
|
||||
switch ($vsExists) {
|
||||
$true {
|
||||
$vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
|
||||
switch ($null -ne $vsInstall) {
|
||||
$true {
|
||||
$msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe"
|
||||
$vsFound = Test-Path $msbuildPath
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch ($vsFound) {
|
||||
$true { Write-Host "✓ Visual Studio 2022 with C++ workload found" -ForegroundColor Green }
|
||||
$false {
|
||||
Write-Host "⚠ Visual Studio 2022 with C++ workload not found" -ForegroundColor Yellow
|
||||
Write-Host "Please install Visual Studio 2022 with 'Desktop development with C++' workload" -ForegroundColor White
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Step 3: Check Git
|
||||
Write-Host "Step 3: Checking Git..." -ForegroundColor Yellow
|
||||
$gitFound = $false
|
||||
try {
|
||||
$null = Get-Command git -ErrorAction Stop
|
||||
$gitFound = $true
|
||||
} catch {
|
||||
$gitFound = $false
|
||||
}
|
||||
|
||||
switch ($gitFound) {
|
||||
$true {
|
||||
$gitVersion = & git --version
|
||||
Write-Host "✓ Git found: $gitVersion" -ForegroundColor Green
|
||||
}
|
||||
$false {
|
||||
Write-Host "⚠ Git not found" -ForegroundColor Yellow
|
||||
Write-Host "Please install Git for Windows from: https://git-scm.com/download/win" -ForegroundColor White
|
||||
}
|
||||
}
|
||||
|
||||
# Step 4: Check Python
|
||||
Write-Host "Step 4: Checking Python..." -ForegroundColor Yellow
|
||||
$pythonFound = $false
|
||||
try {
|
||||
$null = Get-Command python -ErrorAction Stop
|
||||
$pythonFound = $true
|
||||
} catch {
|
||||
$pythonFound = $false
|
||||
}
|
||||
|
||||
switch ($pythonFound) {
|
||||
$true {
|
||||
$pythonVersion = & python --version
|
||||
Write-Host "✓ Python found: $pythonVersion" -ForegroundColor Green
|
||||
}
|
||||
$false {
|
||||
Write-Host "⚠ Python not found" -ForegroundColor Yellow
|
||||
Write-Host "Please install Python 3.8+ from: https://www.python.org/downloads/" -ForegroundColor White
|
||||
}
|
||||
}
|
||||
|
||||
# Step 5: Setup vcpkg
|
||||
Write-Host "Step 5: Setting up vcpkg..." -ForegroundColor Yellow
|
||||
switch ($SkipVcpkg) {
|
||||
$true { Write-Host "Skipping vcpkg setup" -ForegroundColor Yellow }
|
||||
$false {
|
||||
# Clone vcpkg
|
||||
$vcpkgExists = Test-Path "vcpkg"
|
||||
switch ($vcpkgExists) {
|
||||
$false {
|
||||
Write-Host "Cloning vcpkg..." -ForegroundColor Yellow
|
||||
switch ($gitFound) {
|
||||
$true {
|
||||
& git clone https://github.com/Microsoft/vcpkg.git vcpkg
|
||||
$cloneSuccess = ($LASTEXITCODE -eq 0)
|
||||
switch ($cloneSuccess) {
|
||||
$true { Write-Host "✓ vcpkg cloned successfully" -ForegroundColor Green }
|
||||
$false {
|
||||
Write-Host "✗ Failed to clone vcpkg" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
$false {
|
||||
Write-Host "✗ Git is required to clone vcpkg" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
$true { Write-Host "✓ vcpkg directory already exists" -ForegroundColor Green }
|
||||
}
|
||||
|
||||
# Bootstrap vcpkg
|
||||
$vcpkgExe = "vcpkg\vcpkg.exe"
|
||||
$vcpkgBootstrapped = Test-Path $vcpkgExe
|
||||
switch ($vcpkgBootstrapped) {
|
||||
$false {
|
||||
Write-Host "Bootstrapping vcpkg..." -ForegroundColor Yellow
|
||||
Push-Location vcpkg
|
||||
& .\bootstrap-vcpkg.bat
|
||||
$bootstrapSuccess = ($LASTEXITCODE -eq 0)
|
||||
Pop-Location
|
||||
switch ($bootstrapSuccess) {
|
||||
$true { Write-Host "✓ vcpkg bootstrapped successfully" -ForegroundColor Green }
|
||||
$false {
|
||||
Write-Host "✗ Failed to bootstrap vcpkg" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
$true { Write-Host "✓ vcpkg already bootstrapped" -ForegroundColor Green }
|
||||
}
|
||||
|
||||
# Install dependencies
|
||||
Write-Host "Installing dependencies..." -ForegroundColor Yellow
|
||||
& $vcpkgExe install --triplet x64-windows
|
||||
$installSuccess = ($LASTEXITCODE -eq 0)
|
||||
switch ($installSuccess) {
|
||||
$true { Write-Host "✓ Dependencies installed successfully" -ForegroundColor Green }
|
||||
$false { Write-Host "⚠ Some dependencies may not have installed correctly" -ForegroundColor Yellow }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Step 6: Generate project files
|
||||
Write-Host "Step 6: Generating Visual Studio project files..." -ForegroundColor Yellow
|
||||
switch ($pythonFound) {
|
||||
$true {
|
||||
& python scripts/generate-vs-projects-simple.py
|
||||
$generateSuccess = ($LASTEXITCODE -eq 0)
|
||||
switch ($generateSuccess) {
|
||||
$true { Write-Host "✓ Project files generated successfully" -ForegroundColor Green }
|
||||
$false {
|
||||
Write-Host "⚠ Failed to generate project files with simple generator, trying original..." -ForegroundColor Yellow
|
||||
& python scripts/generate-vs-projects.py
|
||||
$generateSuccess2 = ($LASTEXITCODE -eq 0)
|
||||
switch ($generateSuccess2) {
|
||||
$true { Write-Host "✓ Project files generated successfully" -ForegroundColor Green }
|
||||
$false { Write-Host "⚠ Failed to generate project files" -ForegroundColor Yellow }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$false { Write-Host "⚠ Python required to generate project files" -ForegroundColor Yellow }
|
||||
}
|
||||
|
||||
# Step 7: Test build
|
||||
Write-Host "Step 7: Testing build..." -ForegroundColor Yellow
|
||||
switch ($SkipBuild) {
|
||||
$true { Write-Host "Skipping test build" -ForegroundColor Yellow }
|
||||
$false {
|
||||
$buildScriptExists = Test-Path "scripts\build-windows.ps1"
|
||||
switch ($buildScriptExists) {
|
||||
$true {
|
||||
& .\scripts\build-windows.ps1 -Configuration Release -Platform x64
|
||||
$buildSuccess = ($LASTEXITCODE -eq 0)
|
||||
switch ($buildSuccess) {
|
||||
$true { Write-Host "✓ Test build successful" -ForegroundColor Green }
|
||||
$false { Write-Host "⚠ Test build failed, but setup is complete" -ForegroundColor Yellow }
|
||||
}
|
||||
}
|
||||
$false { Write-Host "⚠ Build script not found" -ForegroundColor Yellow }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Final instructions
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host "✓ YAZE Windows development setup complete!" -ForegroundColor Green
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Next steps:" -ForegroundColor Yellow
|
||||
Write-Host "1. Visual Studio project files have been generated" -ForegroundColor White
|
||||
Write-Host "2. Open YAZE.sln in Visual Studio 2022" -ForegroundColor White
|
||||
Write-Host "3. Select configuration (Debug/Release) and platform (x64/x86/ARM64)" -ForegroundColor White
|
||||
Write-Host "4. Build the solution (Ctrl+Shift+B)" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Or use command line:" -ForegroundColor Yellow
|
||||
Write-Host " .\scripts\build-windows.ps1 -Configuration Release -Platform x64" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "For more information, see docs/windows-development-guide.md" -ForegroundColor Cyan
|
||||
@@ -1,132 +0,0 @@
|
||||
# YAZE Windows Build Validation Script
|
||||
# This script validates that the Windows build environment is properly set up
|
||||
|
||||
# Set error handling
|
||||
$ErrorActionPreference = "Continue"
|
||||
|
||||
# Colors for output
|
||||
$Colors = @{
|
||||
Success = "Green"
|
||||
Warning = "Yellow"
|
||||
Error = "Red"
|
||||
Info = "Cyan"
|
||||
White = "White"
|
||||
}
|
||||
|
||||
function Write-Status {
|
||||
param([string]$Message, [string]$Color = "White")
|
||||
Write-Host $Message -ForegroundColor $Colors[$Color]
|
||||
}
|
||||
|
||||
function Test-Command {
|
||||
param([string]$Command)
|
||||
try {
|
||||
$null = Get-Command $Command -ErrorAction Stop
|
||||
return $true
|
||||
} catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
function Test-VisualStudio {
|
||||
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||
if (Test-Path $vsWhere) {
|
||||
$vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
|
||||
if ($vsInstall) {
|
||||
$msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe"
|
||||
if (Test-Path $msbuildPath) {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
# Main script
|
||||
Write-Status "========================================" "Info"
|
||||
Write-Status "YAZE Windows Build Validation" "Info"
|
||||
Write-Status "========================================" "Info"
|
||||
|
||||
$allGood = $true
|
||||
|
||||
# Check if we're in the right directory
|
||||
if (-not (Test-Path "YAZE.sln")) {
|
||||
Write-Status "✗ YAZE.sln not found" "Error"
|
||||
$allGood = $false
|
||||
} else {
|
||||
Write-Status "✓ YAZE.sln found" "Success"
|
||||
}
|
||||
|
||||
# Check for vcpkg.json
|
||||
if (-not (Test-Path "vcpkg.json")) {
|
||||
Write-Status "✗ vcpkg.json not found" "Error"
|
||||
$allGood = $false
|
||||
} else {
|
||||
Write-Status "✓ vcpkg.json found" "Success"
|
||||
}
|
||||
|
||||
# Check for Visual Studio
|
||||
if (Test-VisualStudio) {
|
||||
Write-Status "✓ Visual Studio 2022 with C++ workload found" "Success"
|
||||
} else {
|
||||
Write-Status "✗ Visual Studio 2022 with C++ workload not found" "Error"
|
||||
$allGood = $false
|
||||
}
|
||||
|
||||
# Check for Git
|
||||
if (Test-Command "git") {
|
||||
$gitVersion = & git --version
|
||||
Write-Status "✓ Git found: $gitVersion" "Success"
|
||||
} else {
|
||||
Write-Status "✗ Git not found" "Error"
|
||||
$allGood = $false
|
||||
}
|
||||
|
||||
# Check for Python
|
||||
if (Test-Command "python") {
|
||||
$pythonVersion = & python --version
|
||||
Write-Status "✓ Python found: $pythonVersion" "Success"
|
||||
} else {
|
||||
Write-Status "✗ Python not found" "Error"
|
||||
$allGood = $false
|
||||
}
|
||||
|
||||
# Check for vcpkg
|
||||
if (Test-Path "vcpkg\vcpkg.exe") {
|
||||
Write-Status "✓ vcpkg found and bootstrapped" "Success"
|
||||
} else {
|
||||
Write-Status "✗ vcpkg not found or not bootstrapped" "Error"
|
||||
$allGood = $false
|
||||
}
|
||||
|
||||
# Check for generated project files
|
||||
if (Test-Path "YAZE.vcxproj") {
|
||||
Write-Status "✓ Visual Studio project file found" "Success"
|
||||
} else {
|
||||
Write-Status "✗ Visual Studio project file not found" "Error"
|
||||
Write-Status " Run: python scripts/generate-vs-projects.py" "Info"
|
||||
$allGood = $false
|
||||
}
|
||||
|
||||
# Check for config file
|
||||
if (Test-Path "yaze_config.h") {
|
||||
Write-Status "✓ yaze_config.h found" "Success"
|
||||
} else {
|
||||
Write-Status "⚠ yaze_config.h not found (will be generated during build)" "Warning"
|
||||
}
|
||||
|
||||
Write-Status "========================================" "Info"
|
||||
if ($allGood) {
|
||||
Write-Status "✓ All checks passed! Build environment is ready." "Success"
|
||||
Write-Status ""
|
||||
Write-Status "You can now build YAZE using:" "Warning"
|
||||
Write-Status " .\scripts\build-windows.ps1" "White"
|
||||
Write-Status " or" "White"
|
||||
Write-Status " .\scripts\build-windows.bat" "White"
|
||||
} else {
|
||||
Write-Status "✗ Some checks failed. Please fix the issues above." "Error"
|
||||
Write-Status ""
|
||||
Write-Status "Run the setup script to fix issues:" "Warning"
|
||||
Write-Status " .\scripts\setup-windows-dev.ps1" "White"
|
||||
}
|
||||
Write-Status "========================================" "Info"
|
||||
Reference in New Issue
Block a user