Refactor Visual Studio solution and project files for improved organization and support

- Removed obsolete project entries from the solution file to streamline structure.
- Updated YAZE project configuration to enable vcpkg integration and multi-architecture support.
- Enhanced build scripts for Windows, including automated setup and testing processes.
- Added new documentation for Windows development setup and build instructions.
This commit is contained in:
scawful
2025-09-28 00:34:20 -04:00
parent 8b659e991c
commit 77b4e8cd40
12 changed files with 3286 additions and 772 deletions

View File

@@ -39,11 +39,11 @@ jobs:
runVcpkgInstall: true runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json' vcpkgJsonGlob: '**/vcpkg.json'
vcpkgDirectory: '${{ github.workspace }}/vcpkg' vcpkgDirectory: '${{ github.workspace }}/vcpkg'
vcpkgTriplet: '${{ inputs.platform }}-windows'
vcpkgArguments: '--x-install-root="${{ github.workspace }}/vcpkg_installed"'
env: env:
VCPKG_FORCE_SYSTEM_BINARIES: 1 VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DEFAULT_TRIPLET: '${{ inputs.platform }}-windows'
VCPKG_INSTALL_OPTIONS: '--x-install-root="${{ github.workspace }}/vcpkg_installed"'
# Fallback to newer baseline if primary fails # Fallback to newer baseline if primary fails
- name: Set up vcpkg (Fallback) - name: Set up vcpkg (Fallback)
@@ -54,11 +54,11 @@ jobs:
runVcpkgInstall: true runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json.backup' vcpkgJsonGlob: '**/vcpkg.json.backup'
vcpkgDirectory: '${{ github.workspace }}/vcpkg' vcpkgDirectory: '${{ github.workspace }}/vcpkg'
vcpkgTriplet: '${{ inputs.platform }}-windows'
vcpkgArguments: '--x-install-root="${{ github.workspace }}/vcpkg_installed"'
env: env:
VCPKG_FORCE_SYSTEM_BINARIES: 1 VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DEFAULT_TRIPLET: '${{ inputs.platform }}-windows'
VCPKG_INSTALL_OPTIONS: '--x-install-root="${{ github.workspace }}/vcpkg_installed"'
# Fallback to manual dependency installation if both vcpkg attempts fail # Fallback to manual dependency installation if both vcpkg attempts fail
- name: Install dependencies manually - name: Install dependencies manually

730
.github/workflows/release-complex.yml vendored Normal file
View File

@@ -0,0 +1,730 @@
name: Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+-*'
workflow_dispatch:
inputs:
tag:
description: 'Release tag (must start with v and follow semantic versioning)'
required: true
default: 'v0.3.0'
type: string
env:
BUILD_TYPE: Release
jobs:
validate-and-prepare:
name: Validate Release
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.validate.outputs.tag_name }}
release_notes: ${{ steps.notes.outputs.content }}
steps:
- name: Validate tag format
id: validate
run: |
# Debug information
echo "Event name: ${{ github.event_name }}"
echo "Ref: ${{ github.ref }}"
echo "Ref name: ${{ github.ref_name }}"
echo "Ref type: ${{ github.ref_type }}"
# Determine the tag based on trigger type
if [[ "${{ github.event_name }}" == "push" ]]; then
if [[ "${{ github.ref_type }}" != "tag" ]]; then
echo "❌ Error: Release workflow triggered by push to ${{ github.ref_type }} '${{ github.ref_name }}'"
echo "This workflow should only be triggered by pushing version tags (v1.2.3)"
echo "Use: git tag v0.3.0 && git push origin v0.3.0"
exit 1
fi
TAG="${{ github.ref_name }}"
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
TAG="${{ github.event.inputs.tag }}"
if [[ -z "$TAG" ]]; then
echo "❌ Error: No tag specified for manual workflow dispatch"
exit 1
fi
else
echo "❌ Error: Unsupported event type: ${{ github.event_name }}"
exit 1
fi
echo "Validating tag: $TAG"
# Check if tag follows semantic versioning pattern
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$ ]]; then
echo "❌ Error: Tag '$TAG' does not follow semantic versioning format (v1.2.3 or v1.2.3-beta)"
echo "Valid examples: v0.3.0, v1.0.0, v2.1.3-beta, v1.0.0-rc1"
echo ""
echo "To create a proper release:"
echo "1. Use the helper script: ./scripts/create_release.sh 0.3.0"
echo "2. Or manually: git tag v0.3.0 && git push origin v0.3.0"
exit 1
fi
echo "✅ Tag format is valid: $TAG"
echo "VALIDATED_TAG=$TAG" >> $GITHUB_ENV
echo "tag_name=$TAG" >> $GITHUB_OUTPUT
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate release notes
id: release_notes
run: |
# Extract release version from validated tag
VERSION="${VALIDATED_TAG}"
VERSION_NUM=$(echo "$VERSION" | sed 's/^v//')
# Generate release notes using the dedicated script
echo "Extracting changelog for version: $VERSION_NUM"
if python3 scripts/extract_changelog.py "$VERSION_NUM" > release_notes.md; then
echo "Changelog extracted successfully"
echo "Release notes content:"
cat release_notes.md
else
echo "Failed to extract changelog, creating default release notes"
echo "# Yaze $VERSION Release Notes\n\nPlease see the full changelog at docs/C1-changelog.md" > release_notes.md
fi
- name: Store release notes
id: notes
run: |
# Store release notes content for later use
echo "content<<EOF" >> $GITHUB_OUTPUT
cat release_notes.md >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
build-release:
name: Build Release
needs: validate-and-prepare
strategy:
matrix:
include:
- name: "Windows x64"
os: windows-2022
vcpkg_triplet: x64-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: x64
artifact_name: "yaze-windows-x64"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-x64.zip *
- name: "Windows x86"
os: windows-2022
vcpkg_triplet: x86-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: Win32
artifact_name: "yaze-windows-x86"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-x86.zip *
- name: "Windows ARM64"
os: windows-2022
vcpkg_triplet: arm64-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: ARM64
artifact_name: "yaze-windows-arm64"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-arm64.zip *
- name: "macOS Universal"
os: macos-14
vcpkg_triplet: arm64-osx
artifact_name: "yaze-macos"
artifact_path: "build/bin/"
package_cmd: |
# Debug: List what was actually built
echo "Contents of build/bin/:"
ls -la build/bin/ || echo "build/bin/ does not exist"
# Check if we have a bundle or standalone executable
if [ -d "build/bin/yaze.app" ]; then
echo "Found macOS bundle, using it directly"
# Use the existing bundle and just update it
cp -r build/bin/yaze.app ./Yaze.app
# Add additional resources to the bundle
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Update Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
fi
else
echo "No bundle found, creating manual bundle"
# Create bundle structure manually
mkdir -p "Yaze.app/Contents/MacOS"
mkdir -p "Yaze.app/Contents/Resources"
cp build/bin/yaze "Yaze.app/Contents/MacOS/"
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Create Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
else
# Create a basic Info.plist
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
cat > "Yaze.app/Contents/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>yaze</string>
<key>CFBundleIdentifier</key>
<string>com.yaze.editor</string>
<key>CFBundleName</key>
<string>Yaze</string>
<key>CFBundleVersion</key>
<string>$VERSION_NUM</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION_NUM</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
EOF
fi
fi
# Create DMG
mkdir dmg_staging
cp -r Yaze.app dmg_staging/
cp LICENSE dmg_staging/ 2>/dev/null || echo "LICENSE not found"
cp README.md dmg_staging/ 2>/dev/null || echo "README.md not found"
cp -r docs dmg_staging/ 2>/dev/null || echo "docs directory not found"
hdiutil create -srcfolder dmg_staging -format UDZO -volname "Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}" yaze-macos.dmg
- name: "Linux x64"
os: ubuntu-22.04
artifact_name: "yaze-linux-x64"
artifact_path: "build/bin/"
package_cmd: |
mkdir package
cp build/bin/yaze package/
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp -r docs package/ 2>/dev/null || echo "docs directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
tar -czf yaze-linux-x64.tar.gz -C package .
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
# Clean up any potential vcpkg issues (Windows only)
- name: Clean vcpkg state (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Cleaning up any existing vcpkg state..."
if (Test-Path "vcpkg") {
Remove-Item -Recurse -Force "vcpkg" -ErrorAction SilentlyContinue
}
if (Test-Path "vcpkg_installed") {
Remove-Item -Recurse -Force "vcpkg_installed" -ErrorAction SilentlyContinue
}
Write-Host "Cleanup completed"
# Platform-specific dependency installation
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
ninja-build \
pkg-config \
libglew-dev \
libxext-dev \
libwavpack-dev \
libabsl-dev \
libboost-all-dev \
libpng-dev \
python3-dev \
libpython3-dev \
libasound2-dev \
libpulse-dev \
libx11-dev \
libxrandr-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev
- name: Install macOS dependencies
if: runner.os == 'macOS'
run: |
# Install Homebrew dependencies needed for UI tests and full builds
brew install pkg-config libpng boost abseil ninja gtk+3
- name: Setup build environment
run: |
echo "Using streamlined release build configuration for all platforms"
echo "Linux/macOS: UI tests enabled with full dependency support"
echo "Windows: Full build with vcpkg integration for proper releases"
echo "All platforms: Emulator and developer tools disabled for clean releases"
# Configure CMake
- name: Configure CMake (Linux/macOS)
if: runner.os != 'Windows'
run: |
cmake -B build \
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 \
-DYAZE_BUILD_TESTS=OFF \
-DYAZE_BUILD_EMU=OFF \
-DYAZE_BUILD_Z3ED=OFF \
-DYAZE_ENABLE_UI_TESTS=ON \
-DYAZE_ENABLE_ROM_TESTS=OFF \
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF \
-DYAZE_INSTALL_LIB=OFF \
-DYAZE_MINIMAL_BUILD=OFF \
-GNinja
# Set up vcpkg for Windows builds with fallback
- name: Set up vcpkg (Windows)
id: vcpkg_setup
if: runner.os == 'Windows'
uses: lukka/run-vcpkg@v11
continue-on-error: true
with:
vcpkgGitCommitId: 'c8696863d371ab7f46e213d8f5ca923c4aef2a00'
runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
env:
VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DISABLE_METRICS: 1
VCPKG_DEFAULT_TRIPLET: ${{ matrix.vcpkg_triplet }}
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# Debug vcpkg failure (Windows only)
- name: Debug vcpkg failure (Windows)
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'failure'
shell: pwsh
run: |
Write-Host "=== vcpkg Setup Failed - Debug Information ===" -ForegroundColor Red
Write-Host "vcpkg directory exists: $(Test-Path 'vcpkg')"
Write-Host "vcpkg_installed directory exists: $(Test-Path 'vcpkg_installed')"
if (Test-Path "vcpkg") {
Write-Host "vcpkg directory contents:"
Get-ChildItem "vcpkg" | Select-Object -First 10
}
Write-Host "Git status:"
git status --porcelain
Write-Host "=============================================" -ForegroundColor Red
# Fallback: Install dependencies manually if vcpkg fails
- name: Install dependencies manually (Windows fallback)
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'failure'
shell: pwsh
run: |
Write-Host "vcpkg setup failed, installing dependencies manually..."
# Install Chocolatey if not present
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Host "Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
}
# Install basic build tools and dependencies
Write-Host "Installing build tools and dependencies..."
try {
choco install -y cmake ninja git python3
Write-Host "Successfully installed build tools via Chocolatey"
} catch {
Write-Host "Chocolatey installation failed, trying individual packages..."
choco install -y cmake || Write-Host "CMake installation failed"
choco install -y ninja || Write-Host "Ninja installation failed"
choco install -y git || Write-Host "Git installation failed"
choco install -y python3 || Write-Host "Python3 installation failed"
}
# Set up basic development environment
Write-Host "Setting up basic development environment..."
$env:Path += ";C:\Program Files\Git\bin"
# Verify installations
Write-Host "Verifying installations..."
cmake --version
ninja --version
git --version
# Set environment variable to indicate minimal build
echo "YAZE_MINIMAL_BUILD=ON" >> $env:GITHUB_ENV
echo "VCPKG_AVAILABLE=false" >> $env:GITHUB_ENV
Write-Host "Manual dependency installation completed"
Write-Host "Build will proceed with minimal configuration (no vcpkg dependencies)"
# Set vcpkg availability flag when vcpkg succeeds
- name: Set vcpkg availability flag
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'success'
shell: pwsh
run: |
echo "VCPKG_AVAILABLE=true" >> $env:GITHUB_ENV
Write-Host "vcpkg setup successful"
- name: Configure CMake (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Configuring CMake for Windows build..."
# Check if vcpkg is available
if (Test-Path "${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -and $env:VCPKG_AVAILABLE -ne "false") {
Write-Host "Using vcpkg toolchain..."
cmake -B build `
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 `
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DYAZE_BUILD_TESTS=OFF `
-DYAZE_BUILD_EMU=OFF `
-DYAZE_BUILD_Z3ED=OFF `
-DYAZE_ENABLE_ROM_TESTS=OFF `
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=OFF `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
} else {
Write-Host "Using minimal build configuration (vcpkg not available)..."
cmake -B build `
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 `
-DYAZE_BUILD_TESTS=OFF `
-DYAZE_BUILD_EMU=OFF `
-DYAZE_BUILD_Z3ED=OFF `
-DYAZE_ENABLE_ROM_TESTS=OFF `
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=ON `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
}
Write-Host "CMake configuration completed successfully"
# Verify CMake configuration (Windows only)
- name: Verify CMake configuration (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Verifying CMake configuration..."
if (Test-Path "build/CMakeCache.txt") {
Write-Host "✓ CMakeCache.txt found"
Write-Host "Build type: $(Select-String -Path 'build/CMakeCache.txt' -Pattern 'CMAKE_BUILD_TYPE' | ForEach-Object { $_.Line.Split('=')[1] })"
Write-Host "Minimal build: $(Select-String -Path 'build/CMakeCache.txt' -Pattern 'YAZE_MINIMAL_BUILD' | ForEach-Object { $_.Line.Split('=')[1] })"
} else {
Write-Error "CMakeCache.txt not found - CMake configuration failed!"
exit 1
}
# Build
- name: Build
run: |
echo "Building YAZE for ${{ matrix.name }}..."
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
echo "Build completed successfully!"
# Validate Visual Studio project builds (Windows only)
# Generate yaze_config.h for Visual Studio builds
- name: Generate yaze_config.h
if: runner.os == 'Windows'
shell: pwsh
run: |
$version = "${{ needs.validate-and-prepare.outputs.tag_name }}" -replace '^v', ''
$versionParts = $version -split '\.'
$major = if ($versionParts.Length -gt 0) { $versionParts[0] } else { "0" }
$minor = if ($versionParts.Length -gt 1) { $versionParts[1] } else { "0" }
$patch = if ($versionParts.Length -gt 2) { $versionParts[2] -split '-' | Select-Object -First 1 } else { "0" }
Write-Host "Generating yaze_config.h with version: $major.$minor.$patch"
Copy-Item "src\yaze_config.h.in" "yaze_config.h"
(Get-Content 'yaze_config.h') -replace '@yaze_VERSION_MAJOR@', $major -replace '@yaze_VERSION_MINOR@', $minor -replace '@yaze_VERSION_PATCH@', $patch | Set-Content 'yaze_config.h'
Write-Host "Generated yaze_config.h:"
Get-Content 'yaze_config.h'
- name: Validate Visual Studio Project Build
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Validating Visual Studio Project Build" -ForegroundColor Cyan
Write-Host "Platform: ${{ matrix.cmake_generator_platform }}" -ForegroundColor Yellow
Write-Host "Configuration: ${{ env.BUILD_TYPE }}" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Cyan
# Check if we're in the right directory
if (-not (Test-Path "yaze.sln")) {
Write-Error "yaze.sln not found. Please run this script from the project root directory."
exit 1
}
Write-Host "✓ yaze.sln found" -ForegroundColor Green
# Build using MSBuild
Write-Host "Building with MSBuild..." -ForegroundColor Yellow
$msbuildArgs = @(
"yaze.sln"
"/p:Configuration=${{ env.BUILD_TYPE }}"
"/p:Platform=${{ matrix.cmake_generator_platform }}"
"/p:VcpkgEnabled=true"
"/p:VcpkgManifestInstall=true"
"/m" # Multi-processor build
"/verbosity:minimal"
)
Write-Host "MSBuild command: msbuild $($msbuildArgs -join ' ')" -ForegroundColor Gray
& msbuild @msbuildArgs
if ($LASTEXITCODE -ne 0) {
Write-Error "MSBuild failed with exit code $LASTEXITCODE"
exit 1
}
Write-Host "✓ Visual Studio build completed successfully" -ForegroundColor Green
# Verify executable was created
$exePath = "build\bin\${{ env.BUILD_TYPE }}\yaze.exe"
if (-not (Test-Path $exePath)) {
Write-Error "Executable not found at expected path: $exePath"
exit 1
}
Write-Host "✓ Executable created: $exePath" -ForegroundColor Green
# Test that the executable runs (basic test)
Write-Host "Testing executable startup..." -ForegroundColor Yellow
$testResult = & $exePath --help 2>&1
$exitCode = $LASTEXITCODE
# Check if it's the test main or app main
if ($testResult -match "Google Test" -or $testResult -match "gtest") {
Write-Error "Executable is running test main instead of app main!"
Write-Host "Output: $testResult" -ForegroundColor Red
exit 1
}
Write-Host "✓ Executable runs correctly (exit code: $exitCode)" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "✓ Visual Studio build validation PASSED" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
# Test executable functionality (Windows)
- name: Test executable functionality (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
# Debug: List build directory contents
Write-Host "Build directory contents:" -ForegroundColor Cyan
if (Test-Path "build") {
Get-ChildItem -Recurse build -Name | Select-Object -First 20
} else {
Write-Host "build directory does not exist" -ForegroundColor Red
}
# Determine executable path for Windows
$exePath = "build\bin\${{ env.BUILD_TYPE }}\yaze.exe"
if (Test-Path $exePath) {
Write-Host "✓ Executable found: $exePath" -ForegroundColor Green
# Test that it's not the test main
$testResult = & $exePath --help 2>&1
$exitCode = $LASTEXITCODE
if ($testResult -match "Google Test" -or $testResult -match "gtest") {
Write-Error "Executable is running test main instead of app main!"
Write-Host "Output: $testResult" -ForegroundColor Red
exit 1
}
Write-Host "✓ Executable runs correctly (exit code: $exitCode)" -ForegroundColor Green
# Display file info
$exeInfo = Get-Item $exePath
Write-Host "Executable size: $([math]::Round($exeInfo.Length / 1MB, 2)) MB" -ForegroundColor Cyan
} else {
Write-Error "Executable not found at: $exePath"
exit 1
}
# Test executable functionality (macOS)
- name: Test executable functionality (macOS)
if: runner.os == 'macOS'
shell: bash
run: |
set -e
echo "Build directory contents:"
if [ -d "build" ]; then
find build -name "*.app" -o -name "yaze" | head -10
else
echo "build directory does not exist"
exit 1
fi
# Determine executable path for macOS
exePath="build/bin/yaze.app/Contents/MacOS/yaze"
if [ -f "$exePath" ]; then
echo "✓ Executable found: $exePath"
# Test that it's not the test main
testResult=$($exePath --help 2>&1 || true)
exitCode=$?
if echo "$testResult" | grep -q "Google Test\|gtest"; then
echo "ERROR: Executable is running test main instead of app main!"
echo "Output: $testResult"
exit 1
fi
echo "✓ Executable runs correctly (exit code: $exitCode)"
# Display file info
fileSize=$(stat -f%z "$exePath")
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l)
echo "Executable size: ${fileSizeMB} MB"
else
echo "ERROR: Executable not found at: $exePath"
exit 1
fi
# Test executable functionality (Linux)
- name: Test executable functionality (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
set -e
echo "Build directory contents:"
if [ -d "build" ]; then
find build -type f -name "yaze" | head -10
else
echo "build directory does not exist"
exit 1
fi
# Determine executable path for Linux
exePath="build/bin/yaze"
if [ -f "$exePath" ]; then
echo "✓ Executable found: $exePath"
# Test that it's not the test main
testResult=$($exePath --help 2>&1 || true)
exitCode=$?
if echo "$testResult" | grep -q "Google Test\|gtest"; then
echo "ERROR: Executable is running test main instead of app main!"
echo "Output: $testResult"
exit 1
fi
echo "✓ Executable runs correctly (exit code: $exitCode)"
# Display file info
fileSize=$(stat -c%s "$exePath")
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l)
echo "Executable size: ${fileSizeMB} MB"
else
echo "ERROR: Executable not found at: $exePath"
exit 1
fi
# Verify build artifacts
- name: Verify build artifacts
shell: bash
run: |
echo "Verifying build artifacts for ${{ matrix.name }}..."
if [ -d "build/bin" ]; then
echo "Build directory contents:"
find build/bin -type f -name "yaze*" -o -name "*.exe" -o -name "*.app" | head -10
else
echo "ERROR: build/bin directory not found!"
exit 1
fi
# Package
- name: Package
shell: bash
run: |
set -e
echo "Packaging for ${{ matrix.name }}..."
${{ matrix.package_cmd }}
echo "Packaging completed successfully!"
# Create release with artifacts (will create release if it doesn't exist)
- name: Upload to Release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.validate-and-prepare.outputs.tag_name }}
name: Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}
body: ${{ needs.validate-and-prepare.outputs.release_notes }}
draft: false
prerelease: ${{ contains(needs.validate-and-prepare.outputs.tag_name, 'beta') || contains(needs.validate-and-prepare.outputs.tag_name, 'alpha') || contains(needs.validate-and-prepare.outputs.tag_name, 'rc') }}
files: |
${{ matrix.artifact_name }}.*
fail_on_unmatched_files: false
publish-packages:
name: Publish Packages
needs: [validate-and-prepare, build-release]
runs-on: ubuntu-latest
if: success()
steps:
- name: Update release status
run: |
echo "Release has been published successfully"
echo "All build artifacts have been uploaded"
- name: Announce release
run: |
echo "🎉 Yaze ${{ needs.validate-and-prepare.outputs.tag_name }} has been released!"
echo "📦 Packages are now available for download"
echo "🔗 Release URL: https://github.com/${{ github.repository }}/releases/tag/${{ needs.validate-and-prepare.outputs.tag_name }}"

387
.github/workflows/release-simplified.yml vendored Normal file
View File

@@ -0,0 +1,387 @@
name: Release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+-*'
workflow_dispatch:
inputs:
tag:
description: 'Release tag (must start with v and follow semantic versioning)'
required: true
default: 'v0.3.0'
type: string
env:
BUILD_TYPE: Release
jobs:
validate-and-prepare:
name: Validate Release
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.validate.outputs.tag_name }}
release_notes: ${{ steps.notes.outputs.content }}
steps:
- name: Validate tag format
id: validate
run: |
# Determine the tag based on trigger type
if [[ "${{ github.event_name }}" == "push" ]]; then
if [[ "${{ github.ref_type }}" != "tag" ]]; then
echo "❌ Error: Release workflow triggered by push to ${{ github.ref_type }} '${{ github.ref_name }}'"
echo "This workflow should only be triggered by pushing version tags (v1.2.3)"
echo "Use: git tag v0.3.0 && git push origin v0.3.0"
exit 1
fi
TAG="${{ github.ref_name }}"
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
TAG="${{ github.event.inputs.tag }}"
if [[ -z "$TAG" ]]; then
echo "❌ Error: No tag specified for manual workflow dispatch"
exit 1
fi
else
echo "❌ Error: Unsupported event type: ${{ github.event_name }}"
exit 1
fi
echo "Validating tag: $TAG"
# Check if tag follows semantic versioning pattern
if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$ ]]; then
echo "❌ Error: Tag '$TAG' does not follow semantic versioning format (v1.2.3 or v1.2.3-beta)"
echo "Valid examples: v0.3.0, v1.0.0, v2.1.3-beta, v1.0.0-rc1"
echo ""
echo "To create a proper release:"
echo "1. Use the helper script: ./scripts/create_release.sh 0.3.0"
echo "2. Or manually: git tag v0.3.0 && git push origin v0.3.0"
exit 1
fi
echo "✅ Tag format is valid: $TAG"
echo "VALIDATED_TAG=$TAG" >> $GITHUB_ENV
echo "tag_name=$TAG" >> $GITHUB_OUTPUT
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate release notes
id: release_notes
run: |
# Extract release version from validated tag
VERSION="${VALIDATED_TAG}"
VERSION_NUM=$(echo "$VERSION" | sed 's/^v//')
# Generate release notes using the dedicated script
echo "Extracting changelog for version: $VERSION_NUM"
if python3 scripts/extract_changelog.py "$VERSION_NUM" > release_notes.md; then
echo "Changelog extracted successfully"
echo "Release notes content:"
cat release_notes.md
else
echo "Failed to extract changelog, creating default release notes"
echo "# Yaze $VERSION Release Notes\n\nPlease see the full changelog at docs/C1-changelog.md" > release_notes.md
fi
- name: Store release notes
id: notes
run: |
# Store release notes content for later use
echo "content<<EOF" >> $GITHUB_OUTPUT
cat release_notes.md >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
build-release:
name: Build Release
needs: validate-and-prepare
strategy:
matrix:
include:
- name: "Windows x64"
os: windows-2022
vcpkg_triplet: x64-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: x64
artifact_name: "yaze-windows-x64"
- name: "Windows x86"
os: windows-2022
vcpkg_triplet: x86-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: Win32
artifact_name: "yaze-windows-x86"
- name: "Windows ARM64"
os: windows-2022
vcpkg_triplet: arm64-windows
cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: ARM64
artifact_name: "yaze-windows-arm64"
- name: "macOS Universal"
os: macos-14
vcpkg_triplet: arm64-osx
artifact_name: "yaze-macos"
- name: "Linux x64"
os: ubuntu-22.04
artifact_name: "yaze-linux-x64"
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
# Platform-specific dependency installation
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
ninja-build \
pkg-config \
libglew-dev \
libxext-dev \
libwavpack-dev \
libabsl-dev \
libboost-all-dev \
libpng-dev \
python3-dev \
libpython3-dev \
libasound2-dev \
libpulse-dev \
libx11-dev \
libxrandr-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev
- name: Install macOS dependencies
if: runner.os == 'macOS'
run: |
# Install Homebrew dependencies needed for UI tests and full builds
brew install pkg-config libpng boost abseil ninja gtk+3
# Set up vcpkg for Windows builds
- name: Set up vcpkg (Windows)
if: runner.os == 'Windows'
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: 'c8696863d371ab7f46e213d8f5ca923c4aef2a00'
runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
env:
VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DISABLE_METRICS: 1
VCPKG_DEFAULT_TRIPLET: ${{ matrix.vcpkg_triplet }}
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# Configure CMake
- name: Configure CMake (Linux/macOS)
if: runner.os != 'Windows'
run: |
cmake -B build \
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 \
-DYAZE_BUILD_TESTS=OFF \
-DYAZE_BUILD_EMU=OFF \
-DYAZE_BUILD_Z3ED=OFF \
-DYAZE_ENABLE_UI_TESTS=ON \
-DYAZE_ENABLE_ROM_TESTS=OFF \
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF \
-DYAZE_INSTALL_LIB=OFF \
-DYAZE_MINIMAL_BUILD=OFF \
-GNinja
- name: Configure CMake (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Configuring CMake for Windows build..."
# Use vcpkg toolchain
cmake -B build `
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 `
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DYAZE_BUILD_TESTS=OFF `
-DYAZE_BUILD_EMU=OFF `
-DYAZE_BUILD_Z3ED=OFF `
-DYAZE_ENABLE_ROM_TESTS=OFF `
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=OFF `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
Write-Host "CMake configuration completed successfully"
# Build
- name: Build
run: |
echo "Building YAZE for ${{ matrix.name }}..."
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
echo "Build completed successfully!"
# Test executable functionality
- name: Test executable functionality
shell: bash
run: |
set -e
echo "Testing executable for ${{ matrix.name }}..."
# Determine executable path based on platform
if [[ "${{ runner.os }}" == "Windows" ]]; then
exePath="build/bin/${{ env.BUILD_TYPE }}/yaze.exe"
elif [[ "${{ runner.os }}" == "macOS" ]]; then
exePath="build/bin/yaze.app/Contents/MacOS/yaze"
else
exePath="build/bin/yaze"
fi
if [ -f "$exePath" ]; then
echo "✓ Executable found: $exePath"
# Test that it's not the test main
testResult=$($exePath --help 2>&1 || true)
exitCode=$?
if echo "$testResult" | grep -q "Google Test\|gtest"; then
echo "ERROR: Executable is running test main instead of app main!"
echo "Output: $testResult"
exit 1
fi
echo "✓ Executable runs correctly (exit code: $exitCode)"
# Display file info
if [[ "${{ runner.os }}" == "Windows" ]]; then
fileSize=$(stat -c%s "$exePath" 2>/dev/null || echo "0")
else
fileSize=$(stat -f%z "$exePath" 2>/dev/null || stat -c%s "$exePath" 2>/dev/null || echo "0")
fi
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l 2>/dev/null || echo "0")
echo "Executable size: ${fileSizeMB} MB"
else
echo "ERROR: Executable not found at: $exePath"
exit 1
fi
# Package
- name: Package
shell: bash
run: |
set -e
echo "Packaging for ${{ matrix.name }}..."
if [[ "${{ runner.os }}" == "Windows" ]]; then
# Windows packaging
mkdir -p package
cp -r build/bin/${{ env.BUILD_TYPE }}/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../${{ matrix.artifact_name }}.zip *
elif [[ "${{ runner.os }}" == "macOS" ]]; then
# macOS packaging
if [ -d "build/bin/yaze.app" ]; then
echo "Found macOS bundle, using it directly"
cp -r build/bin/yaze.app ./Yaze.app
# Add additional resources to the bundle
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Update Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
fi
else
echo "No bundle found, creating manual bundle"
mkdir -p "Yaze.app/Contents/MacOS"
mkdir -p "Yaze.app/Contents/Resources"
cp build/bin/yaze "Yaze.app/Contents/MacOS/"
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Create Info.plist with correct version
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
cat > "Yaze.app/Contents/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>yaze</string>
<key>CFBundleIdentifier</key>
<string>com.yaze.editor</string>
<key>CFBundleName</key>
<string>Yaze</string>
<key>CFBundleVersion</key>
<string>$VERSION_NUM</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION_NUM</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
EOF
fi
# Create DMG
mkdir dmg_staging
cp -r Yaze.app dmg_staging/
cp LICENSE dmg_staging/ 2>/dev/null || echo "LICENSE not found"
cp README.md dmg_staging/ 2>/dev/null || echo "README.md not found"
cp -r docs dmg_staging/ 2>/dev/null || echo "docs directory not found"
hdiutil create -srcfolder dmg_staging -format UDZO -volname "Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}" ${{ matrix.artifact_name }}.dmg
else
# Linux packaging
mkdir package
cp build/bin/yaze package/
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp -r docs package/ 2>/dev/null || echo "docs directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
tar -czf ${{ matrix.artifact_name }}.tar.gz -C package .
fi
echo "Packaging completed successfully!"
# Create release with artifacts
- name: Upload to Release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.validate-and-prepare.outputs.tag_name }}
name: Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}
body: ${{ needs.validate-and-prepare.outputs.release_notes }}
draft: false
prerelease: ${{ contains(needs.validate-and-prepare.outputs.tag_name, 'beta') || contains(needs.validate-and-prepare.outputs.tag_name, 'alpha') || contains(needs.validate-and-prepare.outputs.tag_name, 'rc') }}
files: |
${{ matrix.artifact_name }}.*
publish-packages:
name: Publish Packages
needs: [validate-and-prepare, build-release]
runs-on: ubuntu-latest
if: success()
steps:
- name: Announce release
run: |
echo "🎉 Yaze ${{ needs.validate-and-prepare.outputs.tag_name }} has been released!"
echo "📦 Packages are now available for download"
echo "🔗 Release URL: https://github.com/${{ github.repository }}/releases/tag/${{ needs.validate-and-prepare.outputs.tag_name }}"

View File

@@ -28,12 +28,6 @@ jobs:
- name: Validate tag format - name: Validate tag format
id: validate id: validate
run: | run: |
# Debug information
echo "Event name: ${{ github.event_name }}"
echo "Ref: ${{ github.ref }}"
echo "Ref name: ${{ github.ref_name }}"
echo "Ref type: ${{ github.ref_type }}"
# Determine the tag based on trigger type # Determine the tag based on trigger type
if [[ "${{ github.event_name }}" == "push" ]]; then if [[ "${{ github.event_name }}" == "push" ]]; then
if [[ "${{ github.ref_type }}" != "tag" ]]; then if [[ "${{ github.ref_type }}" != "tag" ]]; then
@@ -114,15 +108,6 @@ jobs:
cmake_generator: "Visual Studio 17 2022" cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: x64 cmake_generator_platform: x64
artifact_name: "yaze-windows-x64" artifact_name: "yaze-windows-x64"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-x64.zip *
- name: "Windows x86" - name: "Windows x86"
os: windows-2022 os: windows-2022
@@ -130,15 +115,6 @@ jobs:
cmake_generator: "Visual Studio 17 2022" cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: Win32 cmake_generator_platform: Win32
artifact_name: "yaze-windows-x86" artifact_name: "yaze-windows-x86"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-x86.zip *
- name: "Windows ARM64" - name: "Windows ARM64"
os: windows-2022 os: windows-2022
@@ -146,95 +122,15 @@ jobs:
cmake_generator: "Visual Studio 17 2022" cmake_generator: "Visual Studio 17 2022"
cmake_generator_platform: ARM64 cmake_generator_platform: ARM64
artifact_name: "yaze-windows-arm64" artifact_name: "yaze-windows-arm64"
artifact_path: "build/bin/Release/"
package_cmd: |
mkdir -p package
cp -r build/bin/Release/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../yaze-windows-arm64.zip *
- name: "macOS Universal" - name: "macOS Universal"
os: macos-14 os: macos-14
vcpkg_triplet: arm64-osx vcpkg_triplet: arm64-osx
artifact_name: "yaze-macos" artifact_name: "yaze-macos"
artifact_path: "build/bin/"
package_cmd: |
# Debug: List what was actually built
echo "Contents of build/bin/:"
ls -la build/bin/ || echo "build/bin/ does not exist"
# Check if we have a bundle or standalone executable
if [ -d "build/bin/yaze.app" ]; then
echo "Found macOS bundle, using it directly"
# Use the existing bundle and just update it
cp -r build/bin/yaze.app ./Yaze.app
# Add additional resources to the bundle
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Update Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
fi
else
echo "No bundle found, creating manual bundle"
# Create bundle structure manually
mkdir -p "Yaze.app/Contents/MacOS"
mkdir -p "Yaze.app/Contents/Resources"
cp build/bin/yaze "Yaze.app/Contents/MacOS/"
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Create Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
else
# Create a basic Info.plist
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
cat > "Yaze.app/Contents/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>yaze</string>
<key>CFBundleIdentifier</key>
<string>com.yaze.editor</string>
<key>CFBundleName</key>
<string>Yaze</string>
<key>CFBundleVersion</key>
<string>$VERSION_NUM</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION_NUM</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
EOF
fi
fi
# Create DMG
mkdir dmg_staging
cp -r Yaze.app dmg_staging/
cp LICENSE dmg_staging/ 2>/dev/null || echo "LICENSE not found"
cp README.md dmg_staging/ 2>/dev/null || echo "README.md not found"
cp -r docs dmg_staging/ 2>/dev/null || echo "docs directory not found"
hdiutil create -srcfolder dmg_staging -format UDZO -volname "Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}" yaze-macos.dmg
- name: "Linux x64" - name: "Linux x64"
os: ubuntu-22.04 os: ubuntu-22.04
artifact_name: "yaze-linux-x64" artifact_name: "yaze-linux-x64"
artifact_path: "build/bin/"
package_cmd: |
mkdir package
cp build/bin/yaze package/
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp -r docs package/ 2>/dev/null || echo "docs directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
tar -czf yaze-linux-x64.tar.gz -C package .
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@@ -244,20 +140,6 @@ jobs:
with: with:
submodules: recursive submodules: recursive
# Clean up any potential vcpkg issues (Windows only)
- name: Clean vcpkg state (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Cleaning up any existing vcpkg state..."
if (Test-Path "vcpkg") {
Remove-Item -Recurse -Force "vcpkg" -ErrorAction SilentlyContinue
}
if (Test-Path "vcpkg_installed") {
Remove-Item -Recurse -Force "vcpkg_installed" -ErrorAction SilentlyContinue
}
Write-Host "Cleanup completed"
# Platform-specific dependency installation # Platform-specific dependency installation
- name: Install Linux dependencies - name: Install Linux dependencies
if: runner.os == 'Linux' if: runner.os == 'Linux'
@@ -289,12 +171,21 @@ jobs:
# Install Homebrew dependencies needed for UI tests and full builds # Install Homebrew dependencies needed for UI tests and full builds
brew install pkg-config libpng boost abseil ninja gtk+3 brew install pkg-config libpng boost abseil ninja gtk+3
- name: Setup build environment # Set up vcpkg for Windows builds
run: | - name: Set up vcpkg (Windows)
echo "Using streamlined release build configuration for all platforms" if: runner.os == 'Windows'
echo "Linux/macOS: UI tests enabled with full dependency support" uses: lukka/run-vcpkg@v11
echo "Windows: Full build with vcpkg integration for proper releases" with:
echo "All platforms: Emulator and developer tools disabled for clean releases" vcpkgGitCommitId: 'c8696863d371ab7f46e213d8f5ca923c4aef2a00'
runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
env:
VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DISABLE_METRICS: 1
VCPKG_DEFAULT_TRIPLET: ${{ matrix.vcpkg_triplet }}
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# Configure CMake # Configure CMake
- name: Configure CMake (Linux/macOS) - name: Configure CMake (Linux/macOS)
@@ -313,102 +204,13 @@ jobs:
-DYAZE_MINIMAL_BUILD=OFF \ -DYAZE_MINIMAL_BUILD=OFF \
-GNinja -GNinja
# Set up vcpkg for Windows builds with fallback
- name: Set up vcpkg (Windows)
id: vcpkg_setup
if: runner.os == 'Windows'
uses: lukka/run-vcpkg@v11
continue-on-error: true
with:
vcpkgGitCommitId: 'c8696863d371ab7f46e213d8f5ca923c4aef2a00'
runVcpkgInstall: true
vcpkgJsonGlob: '**/vcpkg.json'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
env:
VCPKG_FORCE_SYSTEM_BINARIES: 1
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_DISABLE_METRICS: 1
VCPKG_DEFAULT_TRIPLET: ${{ matrix.vcpkg_triplet }}
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# Debug vcpkg failure (Windows only)
- name: Debug vcpkg failure (Windows)
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'failure'
shell: pwsh
run: |
Write-Host "=== vcpkg Setup Failed - Debug Information ===" -ForegroundColor Red
Write-Host "vcpkg directory exists: $(Test-Path 'vcpkg')"
Write-Host "vcpkg_installed directory exists: $(Test-Path 'vcpkg_installed')"
if (Test-Path "vcpkg") {
Write-Host "vcpkg directory contents:"
Get-ChildItem "vcpkg" | Select-Object -First 10
}
Write-Host "Git status:"
git status --porcelain
Write-Host "=============================================" -ForegroundColor Red
# Fallback: Install dependencies manually if vcpkg fails
- name: Install dependencies manually (Windows fallback)
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'failure'
shell: pwsh
run: |
Write-Host "vcpkg setup failed, installing dependencies manually..."
# Install Chocolatey if not present
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Host "Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
}
# Install basic build tools and dependencies
Write-Host "Installing build tools and dependencies..."
try {
choco install -y cmake ninja git python3
Write-Host "Successfully installed build tools via Chocolatey"
} catch {
Write-Host "Chocolatey installation failed, trying individual packages..."
choco install -y cmake || Write-Host "CMake installation failed"
choco install -y ninja || Write-Host "Ninja installation failed"
choco install -y git || Write-Host "Git installation failed"
choco install -y python3 || Write-Host "Python3 installation failed"
}
# Set up basic development environment
Write-Host "Setting up basic development environment..."
$env:Path += ";C:\Program Files\Git\bin"
# Verify installations
Write-Host "Verifying installations..."
cmake --version
ninja --version
git --version
# Set environment variable to indicate minimal build
echo "YAZE_MINIMAL_BUILD=ON" >> $env:GITHUB_ENV
echo "VCPKG_AVAILABLE=false" >> $env:GITHUB_ENV
Write-Host "Manual dependency installation completed"
Write-Host "Build will proceed with minimal configuration (no vcpkg dependencies)"
# Set vcpkg availability flag when vcpkg succeeds
- name: Set vcpkg availability flag
if: runner.os == 'Windows' && steps.vcpkg_setup.outcome == 'success'
shell: pwsh
run: |
echo "VCPKG_AVAILABLE=true" >> $env:GITHUB_ENV
Write-Host "vcpkg setup successful"
- name: Configure CMake (Windows) - name: Configure CMake (Windows)
if: runner.os == 'Windows' if: runner.os == 'Windows'
shell: pwsh shell: pwsh
run: | run: |
Write-Host "Configuring CMake for Windows build..." Write-Host "Configuring CMake for Windows build..."
# Check if vcpkg is available # Use vcpkg toolchain
if (Test-Path "${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -and $env:VCPKG_AVAILABLE -ne "false") {
Write-Host "Using vcpkg toolchain..."
cmake -B build ` cmake -B build `
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} ` -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 ` -DCMAKE_POLICY_VERSION_MINIMUM=3.16 `
@@ -422,39 +224,9 @@ jobs:
-DYAZE_MINIMAL_BUILD=OFF ` -DYAZE_MINIMAL_BUILD=OFF `
-G "${{ matrix.cmake_generator }}" ` -G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }} -A ${{ matrix.cmake_generator_platform }}
} else {
Write-Host "Using minimal build configuration (vcpkg not available)..."
cmake -B build `
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
-DCMAKE_POLICY_VERSION_MINIMUM=3.16 `
-DYAZE_BUILD_TESTS=OFF `
-DYAZE_BUILD_EMU=OFF `
-DYAZE_BUILD_Z3ED=OFF `
-DYAZE_ENABLE_ROM_TESTS=OFF `
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=ON `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
}
Write-Host "CMake configuration completed successfully" Write-Host "CMake configuration completed successfully"
# Verify CMake configuration (Windows only)
- name: Verify CMake configuration (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
Write-Host "Verifying CMake configuration..."
if (Test-Path "build/CMakeCache.txt") {
Write-Host "✓ CMakeCache.txt found"
Write-Host "Build type: $(Select-String -Path 'build/CMakeCache.txt' -Pattern 'CMAKE_BUILD_TYPE' | ForEach-Object { $_.Line.Split('=')[1] })"
Write-Host "Minimal build: $(Select-String -Path 'build/CMakeCache.txt' -Pattern 'YAZE_MINIMAL_BUILD' | ForEach-Object { $_.Line.Split('=')[1] })"
} else {
Write-Error "CMakeCache.txt not found - CMake configuration failed!"
exit 1
}
# Build # Build
- name: Build - name: Build
run: | run: |
@@ -462,193 +234,22 @@ jobs:
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
echo "Build completed successfully!" echo "Build completed successfully!"
# Validate Visual Studio project builds (Windows only) # Test executable functionality
# Generate yaze_config.h for Visual Studio builds - name: Test executable functionality
- name: Generate yaze_config.h
if: runner.os == 'Windows'
shell: pwsh
run: |
$version = "${{ needs.validate-and-prepare.outputs.tag_name }}" -replace '^v', ''
$versionParts = $version -split '\.'
$major = if ($versionParts.Length -gt 0) { $versionParts[0] } else { "0" }
$minor = if ($versionParts.Length -gt 1) { $versionParts[1] } else { "0" }
$patch = if ($versionParts.Length -gt 2) { $versionParts[2] -split '-' | Select-Object -First 1 } else { "0" }
Write-Host "Generating yaze_config.h with version: $major.$minor.$patch"
Copy-Item "src\yaze_config.h.in" "yaze_config.h"
(Get-Content 'yaze_config.h') -replace '@yaze_VERSION_MAJOR@', $major -replace '@yaze_VERSION_MINOR@', $minor -replace '@yaze_VERSION_PATCH@', $patch | Set-Content 'yaze_config.h'
Write-Host "Generated yaze_config.h:"
Get-Content 'yaze_config.h'
- name: Validate Visual Studio Project Build
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Validating Visual Studio Project Build" -ForegroundColor Cyan
Write-Host "Platform: ${{ matrix.cmake_generator_platform }}" -ForegroundColor Yellow
Write-Host "Configuration: ${{ env.BUILD_TYPE }}" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Cyan
# Check if we're in the right directory
if (-not (Test-Path "yaze.sln")) {
Write-Error "yaze.sln not found. Please run this script from the project root directory."
exit 1
}
Write-Host "✓ yaze.sln found" -ForegroundColor Green
# Build using MSBuild
Write-Host "Building with MSBuild..." -ForegroundColor Yellow
$msbuildArgs = @(
"yaze.sln"
"/p:Configuration=${{ env.BUILD_TYPE }}"
"/p:Platform=${{ matrix.cmake_generator_platform }}"
"/p:VcpkgEnabled=true"
"/p:VcpkgManifestInstall=true"
"/m" # Multi-processor build
"/verbosity:minimal"
)
Write-Host "MSBuild command: msbuild $($msbuildArgs -join ' ')" -ForegroundColor Gray
& msbuild @msbuildArgs
if ($LASTEXITCODE -ne 0) {
Write-Error "MSBuild failed with exit code $LASTEXITCODE"
exit 1
}
Write-Host "✓ Visual Studio build completed successfully" -ForegroundColor Green
# Verify executable was created
$exePath = "build\bin\${{ env.BUILD_TYPE }}\yaze.exe"
if (-not (Test-Path $exePath)) {
Write-Error "Executable not found at expected path: $exePath"
exit 1
}
Write-Host "✓ Executable created: $exePath" -ForegroundColor Green
# Test that the executable runs (basic test)
Write-Host "Testing executable startup..." -ForegroundColor Yellow
$testResult = & $exePath --help 2>&1
$exitCode = $LASTEXITCODE
# Check if it's the test main or app main
if ($testResult -match "Google Test" -or $testResult -match "gtest") {
Write-Error "Executable is running test main instead of app main!"
Write-Host "Output: $testResult" -ForegroundColor Red
exit 1
}
Write-Host "✓ Executable runs correctly (exit code: $exitCode)" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "✓ Visual Studio build validation PASSED" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
# Test executable functionality (Windows)
- name: Test executable functionality (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
# Debug: List build directory contents
Write-Host "Build directory contents:" -ForegroundColor Cyan
if (Test-Path "build") {
Get-ChildItem -Recurse build -Name | Select-Object -First 20
} else {
Write-Host "build directory does not exist" -ForegroundColor Red
}
# Determine executable path for Windows
$exePath = "build\bin\${{ env.BUILD_TYPE }}\yaze.exe"
if (Test-Path $exePath) {
Write-Host "✓ Executable found: $exePath" -ForegroundColor Green
# Test that it's not the test main
$testResult = & $exePath --help 2>&1
$exitCode = $LASTEXITCODE
if ($testResult -match "Google Test" -or $testResult -match "gtest") {
Write-Error "Executable is running test main instead of app main!"
Write-Host "Output: $testResult" -ForegroundColor Red
exit 1
}
Write-Host "✓ Executable runs correctly (exit code: $exitCode)" -ForegroundColor Green
# Display file info
$exeInfo = Get-Item $exePath
Write-Host "Executable size: $([math]::Round($exeInfo.Length / 1MB, 2)) MB" -ForegroundColor Cyan
} else {
Write-Error "Executable not found at: $exePath"
exit 1
}
# Test executable functionality (macOS)
- name: Test executable functionality (macOS)
if: runner.os == 'macOS'
shell: bash shell: bash
run: | run: |
set -e set -e
echo "Build directory contents:" echo "Testing executable for ${{ matrix.name }}..."
if [ -d "build" ]; then
find build -name "*.app" -o -name "yaze" | head -10
else
echo "build directory does not exist"
exit 1
fi
# Determine executable path for macOS # Determine executable path based on platform
if [[ "${{ runner.os }}" == "Windows" ]]; then
exePath="build/bin/${{ env.BUILD_TYPE }}/yaze.exe"
elif [[ "${{ runner.os }}" == "macOS" ]]; then
exePath="build/bin/yaze.app/Contents/MacOS/yaze" exePath="build/bin/yaze.app/Contents/MacOS/yaze"
if [ -f "$exePath" ]; then
echo "✓ Executable found: $exePath"
# Test that it's not the test main
testResult=$($exePath --help 2>&1 || true)
exitCode=$?
if echo "$testResult" | grep -q "Google Test\|gtest"; then
echo "ERROR: Executable is running test main instead of app main!"
echo "Output: $testResult"
exit 1
fi
echo "✓ Executable runs correctly (exit code: $exitCode)"
# Display file info
fileSize=$(stat -f%z "$exePath")
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l)
echo "Executable size: ${fileSizeMB} MB"
else else
echo "ERROR: Executable not found at: $exePath"
exit 1
fi
# Test executable functionality (Linux)
- name: Test executable functionality (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
set -e
echo "Build directory contents:"
if [ -d "build" ]; then
find build -type f -name "yaze" | head -10
else
echo "build directory does not exist"
exit 1
fi
# Determine executable path for Linux
exePath="build/bin/yaze" exePath="build/bin/yaze"
fi
if [ -f "$exePath" ]; then if [ -f "$exePath" ]; then
echo "✓ Executable found: $exePath" echo "✓ Executable found: $exePath"
@@ -666,37 +267,99 @@ jobs:
echo "✓ Executable runs correctly (exit code: $exitCode)" echo "✓ Executable runs correctly (exit code: $exitCode)"
# Display file info # Display file info
fileSize=$(stat -c%s "$exePath") if [[ "${{ runner.os }}" == "Windows" ]]; then
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l) fileSize=$(stat -c%s "$exePath" 2>/dev/null || echo "0")
else
fileSize=$(stat -f%z "$exePath" 2>/dev/null || stat -c%s "$exePath" 2>/dev/null || echo "0")
fi
fileSizeMB=$(echo "scale=2; $fileSize / 1024 / 1024" | bc -l 2>/dev/null || echo "0")
echo "Executable size: ${fileSizeMB} MB" echo "Executable size: ${fileSizeMB} MB"
else else
echo "ERROR: Executable not found at: $exePath" echo "ERROR: Executable not found at: $exePath"
exit 1 exit 1
fi fi
# Verify build artifacts
- name: Verify build artifacts
shell: bash
run: |
echo "Verifying build artifacts for ${{ matrix.name }}..."
if [ -d "build/bin" ]; then
echo "Build directory contents:"
find build/bin -type f -name "yaze*" -o -name "*.exe" -o -name "*.app" | head -10
else
echo "ERROR: build/bin directory not found!"
exit 1
fi
# Package # Package
- name: Package - name: Package
shell: bash shell: bash
run: | run: |
set -e set -e
echo "Packaging for ${{ matrix.name }}..." echo "Packaging for ${{ matrix.name }}..."
${{ matrix.package_cmd }}
if [[ "${{ runner.os }}" == "Windows" ]]; then
# Windows packaging
mkdir -p package
cp -r build/bin/${{ env.BUILD_TYPE }}/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
cd package && zip -r ../${{ matrix.artifact_name }}.zip *
elif [[ "${{ runner.os }}" == "macOS" ]]; then
# macOS packaging
if [ -d "build/bin/yaze.app" ]; then
echo "Found macOS bundle, using it directly"
cp -r build/bin/yaze.app ./Yaze.app
# Add additional resources to the bundle
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Update Info.plist with correct version
if [ -f "cmake/yaze.plist.in" ]; then
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
sed "s/@yaze_VERSION@/$VERSION_NUM/g" cmake/yaze.plist.in > "Yaze.app/Contents/Info.plist"
fi
else
echo "No bundle found, creating manual bundle"
mkdir -p "Yaze.app/Contents/MacOS"
mkdir -p "Yaze.app/Contents/Resources"
cp build/bin/yaze "Yaze.app/Contents/MacOS/"
cp -r assets "Yaze.app/Contents/Resources/" 2>/dev/null || echo "assets directory not found"
# Create Info.plist with correct version
VERSION_NUM=$(echo "${{ needs.validate-and-prepare.outputs.tag_name }}" | sed 's/^v//')
cat > "Yaze.app/Contents/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>yaze</string>
<key>CFBundleIdentifier</key>
<string>com.yaze.editor</string>
<key>CFBundleName</key>
<string>Yaze</string>
<key>CFBundleVersion</key>
<string>$VERSION_NUM</string>
<key>CFBundleShortVersionString</key>
<string>$VERSION_NUM</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
EOF
fi
# Create DMG
mkdir dmg_staging
cp -r Yaze.app dmg_staging/
cp LICENSE dmg_staging/ 2>/dev/null || echo "LICENSE not found"
cp README.md dmg_staging/ 2>/dev/null || echo "README.md not found"
cp -r docs dmg_staging/ 2>/dev/null || echo "docs directory not found"
hdiutil create -srcfolder dmg_staging -format UDZO -volname "Yaze ${{ needs.validate-and-prepare.outputs.tag_name }}" ${{ matrix.artifact_name }}.dmg
else
# Linux packaging
mkdir package
cp build/bin/yaze package/
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp -r docs package/ 2>/dev/null || echo "docs directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
tar -czf ${{ matrix.artifact_name }}.tar.gz -C package .
fi
echo "Packaging completed successfully!" echo "Packaging completed successfully!"
# Create release with artifacts (will create release if it doesn't exist) # Create release with artifacts
- name: Upload to Release - name: Upload to Release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v1
env: env:
@@ -709,7 +372,6 @@ jobs:
prerelease: ${{ contains(needs.validate-and-prepare.outputs.tag_name, 'beta') || contains(needs.validate-and-prepare.outputs.tag_name, 'alpha') || contains(needs.validate-and-prepare.outputs.tag_name, 'rc') }} prerelease: ${{ contains(needs.validate-and-prepare.outputs.tag_name, 'beta') || contains(needs.validate-and-prepare.outputs.tag_name, 'alpha') || contains(needs.validate-and-prepare.outputs.tag_name, 'rc') }}
files: | files: |
${{ matrix.artifact_name }}.* ${{ matrix.artifact_name }}.*
fail_on_unmatched_files: false
publish-packages: publish-packages:
name: Publish Packages name: Publish Packages
@@ -718,11 +380,6 @@ jobs:
if: success() if: success()
steps: steps:
- name: Update release status
run: |
echo "Release has been published successfully"
echo "All build artifacts have been uploaded"
- name: Announce release - name: Announce release
run: | run: |
echo "🎉 Yaze ${{ needs.validate-and-prepare.outputs.tag_name }} has been released!" echo "🎉 Yaze ${{ needs.validate-and-prepare.outputs.tag_name }} has been released!"

View File

@@ -0,0 +1,323 @@
# Windows Development Guide for YAZE
This guide will help you set up a Windows development environment for YAZE and build the project successfully.
## Prerequisites
### Required Software
1. **Visual Studio 2022** (Community, Professional, or Enterprise)
- Download from: https://visualstudio.microsoft.com/downloads/
- Required workloads:
- Desktop development with C++
- Game development with C++ (optional, for additional tools)
2. **Git for Windows**
- Download from: https://git-scm.com/download/win
- Use default installation options
3. **Python 3.8 or later**
- Download from: https://www.python.org/downloads/
- Make sure to check "Add Python to PATH" during installation
### Optional Software
- **PowerShell 7** (recommended for better script support)
- **Windows Terminal** (for better terminal experience)
## Quick Setup
### Automated Setup
The easiest way to get started is to use our automated setup script:
```powershell
# Run from the YAZE project root directory
.\scripts\setup-windows-dev.ps1
```
This script will:
- Check for required software
- Set up vcpkg
- Install dependencies
- Generate Visual Studio project files
- Perform a test build
### Manual Setup
If you prefer to set up manually or the automated script fails:
#### 1. Clone the Repository
```bash
git clone https://github.com/your-username/yaze.git
cd yaze
```
#### 2. Set up vcpkg
```bash
# Clone vcpkg
git clone https://github.com/Microsoft/vcpkg.git vcpkg
# Bootstrap vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
cd ..
# Install dependencies
.\vcpkg\vcpkg.exe install --triplet x64-windows
```
#### 3. Generate Visual Studio Project Files
```bash
python scripts/generate-vs-projects.py
```
#### 4. Build the Project
```bash
# Using PowerShell script (recommended)
.\scripts\build-windows.ps1 -Configuration Release -Platform x64
# Or using batch script
.\scripts\build-windows.bat Release x64
# Or using Visual Studio
# Open YAZE.sln in Visual Studio 2022 and build
```
## Building the Project
### Using Visual Studio
1. Open `YAZE.sln` in Visual Studio 2022
2. Select your desired configuration:
- **Debug**: For development and debugging
- **Release**: For optimized builds
- **RelWithDebInfo**: Release with debug information
- **MinSizeRel**: Minimal size release
3. Select your platform:
- **x64**: 64-bit (recommended)
- **x86**: 32-bit
- **ARM64**: ARM64 (if supported)
4. Build the solution (Ctrl+Shift+B)
### Using Command Line
#### PowerShell Script (Recommended)
```powershell
# Build Release x64 (default)
.\scripts\build-windows.ps1
# Build Debug x64
.\scripts\build-windows.ps1 -Configuration Debug -Platform x64
# Build Release x86
.\scripts\build-windows.ps1 -Configuration Release -Platform x86
# Clean build
.\scripts\build-windows.ps1 -Clean
# Verbose output
.\scripts\build-windows.ps1 -Verbose
```
#### Batch Script
```batch
REM Build Release x64 (default)
.\scripts\build-windows.bat
REM Build Debug x64
.\scripts\build-windows.bat Debug x64
REM Build Release x86
.\scripts\build-windows.bat Release x86
```
#### Direct MSBuild
```bash
# Build Release x64
msbuild YAZE.sln /p:Configuration=Release /p:Platform=x64 /p:VcpkgEnabled=true /p:VcpkgManifestInstall=true /m
# Build Debug x64
msbuild YAZE.sln /p:Configuration=Debug /p:Platform=x64 /p:VcpkgEnabled=true /p:VcpkgManifestInstall=true /m
```
## Project Structure
```
yaze/
├── YAZE.sln # Visual Studio solution file
├── YAZE.vcxproj # Visual Studio project file
├── vcpkg.json # vcpkg dependencies
├── scripts/ # Build and setup scripts
│ ├── build-windows.ps1 # PowerShell build script
│ ├── build-windows.bat # Batch build script
│ ├── setup-windows-dev.ps1 # Setup script
│ └── generate-vs-projects.py # Project generator
├── src/ # Source code
├── incl/ # Public headers
├── assets/ # Game assets
└── docs/ # Documentation
```
## Troubleshooting
### Common Issues
#### 1. MSBuild Not Found
**Error**: `'msbuild' is not recognized as an internal or external command`
**Solution**:
- Install Visual Studio 2022 with C++ workload
- Or add MSBuild to your PATH:
```bash
# Add to PATH (adjust path as needed)
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin
```
#### 2. vcpkg Integration Issues
**Error**: `vcpkg.json not found` or dependency resolution fails
**Solution**:
- Ensure vcpkg is properly set up:
```bash
.\scripts\setup-windows-dev.ps1
```
- Or manually set up vcpkg as described in the manual setup section
#### 3. Python Script Execution Policy
**Error**: `execution of scripts is disabled on this system`
**Solution**:
```powershell
# Run as Administrator
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
#### 4. Missing Dependencies
**Error**: Linker errors about missing libraries
**Solution**:
- Ensure all dependencies are installed via vcpkg:
```bash
.\vcpkg\vcpkg.exe install --triplet x64-windows
```
- Regenerate project files:
```bash
python scripts/generate-vs-projects.py
```
#### 5. Build Failures
**Error**: Compilation or linking errors
**Solution**:
- Clean and rebuild:
```powershell
.\scripts\build-windows.ps1 -Clean
```
- Check that all source files are included in the project
- Verify that include paths are correct
### Getting Help
If you encounter issues not covered here:
1. Check the [main build instructions](02-build-instructions.md)
2. Review the [troubleshooting section](02-build-instructions.md#troubleshooting)
3. Check the [GitHub Issues](https://github.com/your-username/yaze/issues)
4. Create a new issue with:
- Your Windows version
- Visual Studio version
- Complete error message
- Steps to reproduce
## Development Workflow
### Making Changes
1. Make your changes to the source code
2. Build the project:
```powershell
.\scripts\build-windows.ps1 -Configuration Debug -Platform x64
```
3. Test your changes
4. If adding new source files, regenerate project files:
```bash
python scripts/generate-vs-projects.py
```
### Debugging
1. Set breakpoints in Visual Studio
2. Build in Debug configuration
3. Run with debugger (F5)
4. Use Visual Studio's debugging tools
### Testing
1. Build the project
2. Run the executable:
```bash
.\build\bin\Debug\yaze.exe
```
3. Test with a ROM file:
```bash
.\build\bin\Debug\yaze.exe --rom_file=path\to\your\rom.sfc
```
## Performance Tips
### Build Performance
- Use the `/m` flag for parallel builds
- Use SSD storage for better I/O performance
- Exclude build directories from antivirus scanning
- Use Release configuration for final builds
### Development Performance
- Use Debug configuration for development
- Use incremental builds (default in Visual Studio)
- Use RelWithDebInfo for performance testing with debug info
## Advanced Configuration
### Custom Build Configurations
You can create custom build configurations by modifying the Visual Studio project file or using CMake directly.
### Cross-Platform Development
While this guide focuses on Windows, YAZE also supports:
- Linux (Ubuntu/Debian)
- macOS
See the main build instructions for other platforms.
## Contributing
When contributing to YAZE on Windows:
1. Follow the [coding standards](B1-contributing.md)
2. Test your changes on Windows
3. Ensure the build scripts still work
4. Update documentation if needed
5. Submit a pull request
## Additional Resources
- [Visual Studio Documentation](https://docs.microsoft.com/en-us/visualstudio/)
- [vcpkg Documentation](https://vcpkg.readthedocs.io/)
- [CMake Documentation](https://cmake.org/documentation/)
- [YAZE API Reference](04-api-reference.md)

129
scripts/build-windows.bat Normal file
View File

@@ -0,0 +1,129 @@
@echo off
REM Simple Windows build script for YAZE
REM This script sets up the environment and builds the project using Visual Studio
setlocal enabledelayedexpansion
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 Visual Studio
echo Checking for Visual Studio...
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
echo Checking for vcpkg...
if not exist "vcpkg.json" (
echo ERROR: vcpkg.json not found. Please ensure vcpkg is properly configured.
pause
exit /b 1
)
echo ✓ vcpkg.json found
REM Set up environment variables
echo Setting up build environment...
set BUILD_CONFIG=Release
set BUILD_PLATFORM=x64
REM Allow user to override configuration
if "%1" neq "" set BUILD_CONFIG=%1
if "%2" neq "" set BUILD_PLATFORM=%2
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 Generate yaze_config.h if it doesn't exist
if not exist "yaze_config.h" (
echo Generating yaze_config.h...
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
)
REM Build using MSBuild
echo Building with MSBuild...
echo Command: msbuild YAZE.sln /p:Configuration=%BUILD_CONFIG% /p:Platform=%BUILD_PLATFORM% /p:VcpkgEnabled=true /p:VcpkgManifestInstall=true /m /verbosity:minimal
msbuild YAZE.sln /p:Configuration=%BUILD_CONFIG% /p:Platform=%BUILD_PLATFORM% /p:VcpkgEnabled=true /p:VcpkgManifestInstall=true /m /verbosity:minimal
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.
pause

168
scripts/build-windows.ps1 Normal file
View File

@@ -0,0 +1,168 @@
# PowerShell script to build YAZE on Windows
# This script sets up the environment and builds the project using Visual Studio
param(
[string]$Configuration = "Release",
[string]$Platform = "x64",
[switch]$Clean = $false,
[switch]$Verbose = $false
)
$ErrorActionPreference = "Stop"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "YAZE Windows Build Script" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
# Check if we're in the right directory
if (-not (Test-Path "YAZE.sln")) {
Write-Error "YAZE.sln not found. Please run this script from the project root directory."
exit 1
}
Write-Host "✓ YAZE.sln found" -ForegroundColor Green
# Check for Visual Studio
Write-Host "Checking for Visual Studio..." -ForegroundColor Yellow
try {
$msbuildPath = Get-Command msbuild -ErrorAction Stop
Write-Host "✓ MSBuild found at: $($msbuildPath.Source)" -ForegroundColor Green
} catch {
Write-Error "MSBuild not found. Please install Visual Studio 2022 or later with the C++ development workload."
exit 1
}
# Check for vcpkg
Write-Host "Checking for vcpkg..." -ForegroundColor Yellow
if (-not (Test-Path "vcpkg.json")) {
Write-Error "vcpkg.json not found. Please ensure vcpkg is properly configured."
exit 1
}
Write-Host "✓ vcpkg.json found" -ForegroundColor Green
# Display build configuration
Write-Host "Build Configuration: $Configuration" -ForegroundColor Yellow
Write-Host "Build Platform: $Platform" -ForegroundColor Yellow
# Create build directories
Write-Host "Creating build directories..." -ForegroundColor Yellow
$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-Host "✓ Created directory: $dir" -ForegroundColor Green
}
}
# Clean build if requested
if ($Clean) {
Write-Host "Cleaning build directories..." -ForegroundColor Yellow
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-Host "✓ Build directories cleaned" -ForegroundColor Green
}
# Generate yaze_config.h if it doesn't exist
if (-not (Test-Path "yaze_config.h")) {
Write-Host "Generating yaze_config.h..." -ForegroundColor Yellow
if (Test-Path "src\yaze_config.h.in") {
Copy-Item "src\yaze_config.h.in" "yaze_config.h"
(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'
Write-Host "✓ Generated yaze_config.h" -ForegroundColor Green
} else {
Write-Warning "yaze_config.h.in not found, creating basic config"
@"
// 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-Host "Building with MSBuild..." -ForegroundColor Yellow
$msbuildArgs = @(
"YAZE.sln"
"/p:Configuration=$Configuration"
"/p:Platform=$Platform"
"/p:VcpkgEnabled=true"
"/p:VcpkgManifestInstall=true"
"/m" # Multi-processor build
)
if ($Verbose) {
$msbuildArgs += "/verbosity:detailed"
} else {
$msbuildArgs += "/verbosity:minimal"
}
$msbuildCommand = "msbuild $($msbuildArgs -join ' ')"
Write-Host "Command: $msbuildCommand" -ForegroundColor Gray
try {
& msbuild @msbuildArgs
if ($LASTEXITCODE -ne 0) {
throw "MSBuild failed with exit code $LASTEXITCODE"
}
Write-Host "✓ Build completed successfully" -ForegroundColor Green
} catch {
Write-Error "Build failed: $_"
exit 1
}
# Verify executable was created
$exePath = "build\bin\$Configuration\yaze.exe"
if (-not (Test-Path $exePath)) {
Write-Error "Executable not found at expected path: $exePath"
exit 1
}
Write-Host "✓ Executable created: $exePath" -ForegroundColor Green
# Test that the executable runs (basic test)
Write-Host "Testing executable startup..." -ForegroundColor Yellow
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-Error "Executable is running test main instead of app main!"
Write-Host "Output: $testResult" -ForegroundColor Red
exit 1
}
Write-Host "✓ Executable runs correctly (exit code: $exitCode)" -ForegroundColor Green
} catch {
Write-Warning "Could not test executable: $_"
}
# Display file info
$exeInfo = Get-Item $exePath
$fileSizeMB = [math]::Round($exeInfo.Length / 1MB, 2)
Write-Host "Executable size: $fileSizeMB MB" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "✓ YAZE Windows build completed successfully!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "Build Configuration: $Configuration" -ForegroundColor White
Write-Host "Build Platform: $Platform" -ForegroundColor White
Write-Host "Executable: $exePath" -ForegroundColor White
Write-Host ""
Write-Host "To run YAZE:" -ForegroundColor Yellow
Write-Host " $exePath" -ForegroundColor White
Write-Host ""
Write-Host "To build other configurations:" -ForegroundColor Yellow
Write-Host " .\scripts\build-windows.ps1 -Configuration Debug -Platform x64" -ForegroundColor White
Write-Host " .\scripts\build-windows.ps1 -Configuration Release -Platform x86" -ForegroundColor White
Write-Host " .\scripts\build-windows.ps1 -Configuration RelWithDebInfo -Platform ARM64" -ForegroundColor White
Write-Host " .\scripts\build-windows.ps1 -Clean" -ForegroundColor White
Write-Host ""

View File

@@ -0,0 +1,533 @@
# PowerShell script to generate proper Visual Studio project files for YAZE
# This script creates a comprehensive .vcxproj file with all necessary source files
param(
[string]$ProjectRoot = ".",
[string]$OutputDir = "."
)
$ErrorActionPreference = "Stop"
Write-Host "Generating Visual Studio project files for YAZE..." -ForegroundColor Green
# Source file lists (from CMake files)
$AppCoreSrc = @(
"app/core/controller.cc",
"app/emu/emulator.cc",
"app/core/project.cc",
"app/core/window.cc",
"app/core/asar_wrapper.cc",
"app/core/platform/font_loader.cc",
"app/core/platform/clipboard.cc",
"app/core/platform/file_dialog.cc"
)
$AppEmuSrc = @(
"app/emu/audio/apu.cc",
"app/emu/audio/spc700.cc",
"app/emu/audio/dsp.cc",
"app/emu/audio/internal/addressing.cc",
"app/emu/audio/internal/instructions.cc",
"app/emu/cpu/internal/addressing.cc",
"app/emu/cpu/internal/instructions.cc",
"app/emu/cpu/cpu.cc",
"app/emu/video/ppu.cc",
"app/emu/memory/dma.cc",
"app/emu/memory/memory.cc",
"app/emu/snes.cc"
)
$AppEditorSrc = @(
"app/editor/editor_manager.cc",
"app/editor/dungeon/dungeon_editor.cc",
"app/editor/dungeon/dungeon_room_selector.cc",
"app/editor/dungeon/dungeon_canvas_viewer.cc",
"app/editor/dungeon/dungeon_object_selector.cc",
"app/editor/dungeon/dungeon_toolset.cc",
"app/editor/dungeon/dungeon_object_interaction.cc",
"app/editor/dungeon/dungeon_renderer.cc",
"app/editor/dungeon/dungeon_room_loader.cc",
"app/editor/dungeon/dungeon_usage_tracker.cc",
"app/editor/overworld/overworld_editor.cc",
"app/editor/overworld/overworld_editor_manager.cc",
"app/editor/sprite/sprite_editor.cc",
"app/editor/music/music_editor.cc",
"app/editor/message/message_editor.cc",
"app/editor/message/message_data.cc",
"app/editor/message/message_preview.cc",
"app/editor/code/assembly_editor.cc",
"app/editor/graphics/screen_editor.cc",
"app/editor/graphics/graphics_editor.cc",
"app/editor/graphics/palette_editor.cc",
"app/editor/overworld/tile16_editor.cc",
"app/editor/overworld/map_properties.cc",
"app/editor/graphics/gfx_group_editor.cc",
"app/editor/overworld/entity.cc",
"app/editor/system/settings_editor.cc",
"app/editor/system/command_manager.cc",
"app/editor/system/extension_manager.cc",
"app/editor/system/shortcut_manager.cc",
"app/editor/system/popup_manager.cc",
"app/test/test_manager.cc"
)
$AppGfxSrc = @(
"app/gfx/arena.cc",
"app/gfx/background_buffer.cc",
"app/gfx/bitmap.cc",
"app/gfx/compression.cc",
"app/gfx/scad_format.cc",
"app/gfx/snes_palette.cc",
"app/gfx/snes_tile.cc",
"app/gfx/snes_color.cc",
"app/gfx/tilemap.cc"
)
$AppZelda3Src = @(
"app/zelda3/hyrule_magic.cc",
"app/zelda3/overworld/overworld_map.cc",
"app/zelda3/overworld/overworld.cc",
"app/zelda3/screen/inventory.cc",
"app/zelda3/screen/title_screen.cc",
"app/zelda3/screen/dungeon_map.cc",
"app/zelda3/sprite/sprite.cc",
"app/zelda3/sprite/sprite_builder.cc",
"app/zelda3/music/tracker.cc",
"app/zelda3/dungeon/room.cc",
"app/zelda3/dungeon/room_object.cc",
"app/zelda3/dungeon/object_parser.cc",
"app/zelda3/dungeon/object_renderer.cc",
"app/zelda3/dungeon/room_layout.cc",
"app/zelda3/dungeon/dungeon_editor_system.cc",
"app/zelda3/dungeon/dungeon_object_editor.cc"
)
$GuiSrc = @(
"app/gui/modules/asset_browser.cc",
"app/gui/modules/text_editor.cc",
"app/gui/canvas.cc",
"app/gui/canvas_utils.cc",
"app/gui/enhanced_palette_editor.cc",
"app/gui/input.cc",
"app/gui/style.cc",
"app/gui/color.cc",
"app/gui/zeml.cc",
"app/gui/theme_manager.cc",
"app/gui/background_renderer.cc"
)
$UtilSrc = @(
"util/bps.cc",
"util/flag.cc",
"util/hex.cc"
)
# Combine all source files
$AllSourceFiles = @(
"yaze.cc",
"app/main.cc",
"app/rom.cc"
) + $AppCoreSrc + $AppEmuSrc + $AppEditorSrc + $AppGfxSrc + $AppZelda3Src + $GuiSrc + $UtilSrc
# Header files
$HeaderFiles = @(
"incl/yaze.h",
"incl/zelda.h",
"src/yaze_config.h.in"
)
# Generate the .vcxproj file
$VcxprojContent = @"
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x86">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x86">
<Configuration>Release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x86">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|ARM64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x86">
<Configuration>MinSizeRel</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|ARM64">
<Configuration>MinSizeRel</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<ProjectGuid>{B2C3D4E5-F6G7-8901-BCDE-F23456789012}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>YAZE</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>YAZE</ProjectName>
<VcpkgEnabled>true</VcpkgEnabled>
<VcpkgManifestInstall>true</VcpkgManifestInstall>
</PropertyGroup>
<Import Project="`$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="`$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Debug|x64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Debug|x86'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Debug|ARM64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Release|x64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Release|x86'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='Release|ARM64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x86'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|ARM64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x86'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|ARM64'">
<Import Project="`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props" Condition="exists('`$(UserRootDir)\Microsoft.Cpp.`$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|x86'">
<LinkIncremental>true</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='RelWithDebInfo|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'`$(Configuration)|`$(Platform)'=='MinSizeRel|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>`$(SolutionDir)build\bin\`$(Configuration)\</OutDir>
<IntDir>`$(SolutionDir)build\obj\`$(Configuration)\</IntDir>
</PropertyGroup>
"@
# Add compiler and linker settings for all configurations
$Configurations = @("Debug", "Release", "RelWithDebInfo", "MinSizeRel")
$Platforms = @("x64", "x86", "ARM64")
foreach ($Config in $Configurations) {
foreach ($Platform in $Platforms) {
$IsDebug = ($Config -eq "Debug")
$DebugFlags = if ($IsDebug) { "_DEBUG;_CONSOLE;%(PreprocessorDefinitions)" } else { "NDEBUG;_CONSOLE;%(PreprocessorDefinitions)" }
$LinkIncremental = if ($IsDebug) { "true" } else { "false" }
$GenerateDebugInfo = if ($Config -eq "MinSizeRel") { "false" } else { "true" }
$VcxprojContent += @"
<ItemDefinitionGroup Condition="'`$(Configuration)|`$(Platform)'=='$Config|$Platform'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>$DebugFlags</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>`$(ProjectDir)src;`$(ProjectDir)incl;`$(ProjectDir)src\lib;`$(ProjectDir)src\lib\asar\src;`$(ProjectDir)src\lib\asar\src\asar;`$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;`$(ProjectDir)src\lib\imgui;`$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreaded$($IsDebug ? "Debug" : "")DLL</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>$GenerateDebugInfo</GenerateDebugInformation>
<EnableCOMDATFolding>$($IsDebug ? "false" : "true")</EnableCOMDATFolding>
<OptimizeReferences>$($IsDebug ? "false" : "true")</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
"@
}
}
# Add source files
$VcxprojContent += @"
<ItemGroup>
"@
foreach ($Header in $HeaderFiles) {
$VcxprojContent += " <ClInclude Include=`"$Header`" />`n"
}
$VcxprojContent += @"
</ItemGroup>
<ItemGroup>
"@
foreach ($Source in $AllSourceFiles) {
$VcxprojContent += " <ClCompile Include=`"src\$Source`" />`n"
}
$VcxprojContent += @"
</ItemGroup>
<ItemGroup>
<None Include="CMakeLists.txt" />
<None Include="CMakePresets.json" />
<None Include="vcpkg.json" />
<None Include="README.md" />
<None Include="LICENSE" />
</ItemGroup>
<Import Project="`$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
"@
# Write the .vcxproj file
$VcxprojPath = Join-Path $OutputDir "YAZE.vcxproj"
$VcxprojContent | Out-File -FilePath $VcxprojPath -Encoding UTF8
Write-Host "Generated: $VcxprojPath" -ForegroundColor Green
# Generate a simple solution file
$SolutionContent = @"
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "YAZE", "YAZE.vcxproj", "{B2C3D4E5-F6G7-8901-BCDE-F23456789012}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Debug|ARM64 = Debug|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
Release|ARM64 = Release|ARM64
RelWithDebInfo|x64 = RelWithDebInfo|x64
RelWithDebInfo|x86 = RelWithDebInfo|x86
RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64
MinSizeRel|x64 = MinSizeRel|x64
MinSizeRel|x86 = MinSizeRel|x86
MinSizeRel|ARM64 = MinSizeRel|ARM64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x64.ActiveCfg = Debug|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x64.Build.0 = Debug|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x86.ActiveCfg = Debug|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x86.Build.0 = Debug|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|ARM64.ActiveCfg = Debug|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|ARM64.Build.0 = Debug|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x64.ActiveCfg = Release|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x64.Build.0 = Release|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x86.ActiveCfg = Release|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x86.Build.0 = Release|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|ARM64.ActiveCfg = Release|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|ARM64.Build.0 = Release|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|ARM64.Build.0 = RelWithDebInfo|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x86.Build.0 = MinSizeRel|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|ARM64.ActiveCfg = MinSizeRel|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|ARM64.Build.0 = MinSizeRel|ARM64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
EndGlobalSection
EndGlobal
"@
$SolutionPath = Join-Path $OutputDir "YAZE.sln"
$SolutionContent | Out-File -FilePath $SolutionPath -Encoding UTF8
Write-Host "Generated: $SolutionPath" -ForegroundColor Green
Write-Host "Visual Studio project files generated successfully!" -ForegroundColor Green
Write-Host ""
Write-Host "To build:" -ForegroundColor Yellow
Write-Host "1. Open YAZE.sln in Visual Studio 2022" -ForegroundColor White
Write-Host "2. Ensure vcpkg is installed and configured" -ForegroundColor White
Write-Host "3. Select your desired configuration (Debug/Release) and platform (x64/x86/ARM64)" -ForegroundColor White
Write-Host "4. Build the solution (Ctrl+Shift+B)" -ForegroundColor White

View File

@@ -0,0 +1,540 @@
#!/usr/bin/env python3
"""
Python script to generate proper Visual Studio project files for YAZE
This script creates a comprehensive .vcxproj file with all necessary source files
"""
import os
import sys
from pathlib import Path
def generate_vcxproj():
"""Generate the YAZE.vcxproj file with all source files"""
# Source file lists (from CMake files)
app_core_src = [
"app/core/controller.cc",
"app/emu/emulator.cc",
"app/core/project.cc",
"app/core/window.cc",
"app/core/asar_wrapper.cc",
"app/core/platform/font_loader.cc",
"app/core/platform/clipboard.cc",
"app/core/platform/file_dialog.cc"
]
app_emu_src = [
"app/emu/audio/apu.cc",
"app/emu/audio/spc700.cc",
"app/emu/audio/dsp.cc",
"app/emu/audio/internal/addressing.cc",
"app/emu/audio/internal/instructions.cc",
"app/emu/cpu/internal/addressing.cc",
"app/emu/cpu/internal/instructions.cc",
"app/emu/cpu/cpu.cc",
"app/emu/video/ppu.cc",
"app/emu/memory/dma.cc",
"app/emu/memory/memory.cc",
"app/emu/snes.cc"
]
app_editor_src = [
"app/editor/editor_manager.cc",
"app/editor/dungeon/dungeon_editor.cc",
"app/editor/dungeon/dungeon_room_selector.cc",
"app/editor/dungeon/dungeon_canvas_viewer.cc",
"app/editor/dungeon/dungeon_object_selector.cc",
"app/editor/dungeon/dungeon_toolset.cc",
"app/editor/dungeon/dungeon_object_interaction.cc",
"app/editor/dungeon/dungeon_renderer.cc",
"app/editor/dungeon/dungeon_room_loader.cc",
"app/editor/dungeon/dungeon_usage_tracker.cc",
"app/editor/overworld/overworld_editor.cc",
"app/editor/overworld/overworld_editor_manager.cc",
"app/editor/sprite/sprite_editor.cc",
"app/editor/music/music_editor.cc",
"app/editor/message/message_editor.cc",
"app/editor/message/message_data.cc",
"app/editor/message/message_preview.cc",
"app/editor/code/assembly_editor.cc",
"app/editor/graphics/screen_editor.cc",
"app/editor/graphics/graphics_editor.cc",
"app/editor/graphics/palette_editor.cc",
"app/editor/overworld/tile16_editor.cc",
"app/editor/overworld/map_properties.cc",
"app/editor/graphics/gfx_group_editor.cc",
"app/editor/overworld/entity.cc",
"app/editor/system/settings_editor.cc",
"app/editor/system/command_manager.cc",
"app/editor/system/extension_manager.cc",
"app/editor/system/shortcut_manager.cc",
"app/editor/system/popup_manager.cc",
"app/test/test_manager.cc"
]
app_gfx_src = [
"app/gfx/arena.cc",
"app/gfx/background_buffer.cc",
"app/gfx/bitmap.cc",
"app/gfx/compression.cc",
"app/gfx/scad_format.cc",
"app/gfx/snes_palette.cc",
"app/gfx/snes_tile.cc",
"app/gfx/snes_color.cc",
"app/gfx/tilemap.cc"
]
app_zelda3_src = [
"app/zelda3/hyrule_magic.cc",
"app/zelda3/overworld/overworld_map.cc",
"app/zelda3/overworld/overworld.cc",
"app/zelda3/screen/inventory.cc",
"app/zelda3/screen/title_screen.cc",
"app/zelda3/screen/dungeon_map.cc",
"app/zelda3/sprite/sprite.cc",
"app/zelda3/sprite/sprite_builder.cc",
"app/zelda3/music/tracker.cc",
"app/zelda3/dungeon/room.cc",
"app/zelda3/dungeon/room_object.cc",
"app/zelda3/dungeon/object_parser.cc",
"app/zelda3/dungeon/object_renderer.cc",
"app/zelda3/dungeon/room_layout.cc",
"app/zelda3/dungeon/dungeon_editor_system.cc",
"app/zelda3/dungeon/dungeon_object_editor.cc"
]
gui_src = [
"app/gui/modules/asset_browser.cc",
"app/gui/modules/text_editor.cc",
"app/gui/canvas.cc",
"app/gui/canvas_utils.cc",
"app/gui/enhanced_palette_editor.cc",
"app/gui/input.cc",
"app/gui/style.cc",
"app/gui/color.cc",
"app/gui/zeml.cc",
"app/gui/theme_manager.cc",
"app/gui/background_renderer.cc"
]
util_src = [
"util/bps.cc",
"util/flag.cc",
"util/hex.cc"
]
# Combine all source files
all_source_files = (
["yaze.cc", "app/main.cc", "app/rom.cc"] +
app_core_src + app_emu_src + app_editor_src +
app_gfx_src + app_zelda3_src + gui_src + util_src
)
# Header files
header_files = [
"incl/yaze.h",
"incl/zelda.h",
"src/yaze_config.h.in"
]
# Generate the .vcxproj file content
vcxproj_content = '''<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x86">
<Configuration>Debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x86">
<Configuration>Release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x86">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|ARM64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x86">
<Configuration>MinSizeRel</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|ARM64">
<Configuration>MinSizeRel</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<ProjectGuid>{B2C3D4E5-F6G7-8901-BCDE-F23456789012}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>YAZE</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>YAZE</ProjectName>
<VcpkgEnabled>true</VcpkgEnabled>
<VcpkgManifestInstall>true</VcpkgManifestInstall>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x86'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x86'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|ARM64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x86'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|ARM64'">
<Import Project="$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x86'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)build\\bin\\$(Configuration)\\</OutDir>
<IntDir>$(SolutionDir)build\\obj\\$(Configuration)\\</IntDir>
</PropertyGroup>'''
# Add compiler and linker settings for all configurations
configurations = ["Debug", "Release", "RelWithDebInfo", "MinSizeRel"]
platforms = ["x64", "x86", "ARM64"]
for config in configurations:
for platform in platforms:
is_debug = (config == "Debug")
debug_flags = "_DEBUG;_CONSOLE;%(PreprocessorDefinitions)" if is_debug else "NDEBUG;_CONSOLE;%(PreprocessorDefinitions)"
link_incremental = "true" if is_debug else "false"
generate_debug_info = "false" if config == "MinSizeRel" else "true"
vcxproj_content += f'''
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='{config}|{platform}'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>{debug_flags}</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\\lib;$(ProjectDir)src\\lib\\asar\\src;$(ProjectDir)src\\lib\\asar\\src\\asar;$(ProjectDir)src\\lib\\asar\\src\\asar-dll-bindings\\c;$(ProjectDir)src\\lib\\imgui;$(ProjectDir)src\\lib\\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreaded{"Debug" if is_debug else ""}DLL</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>{generate_debug_info}</GenerateDebugInformation>
<EnableCOMDATFolding>{"false" if is_debug else "true"}</EnableCOMDATFolding>
<OptimizeReferences>{"false" if is_debug else "true"}</OptimizeReferences>
</Link>
</ItemDefinitionGroup>'''
# Add source files
vcxproj_content += '''
<ItemGroup>
'''
for header in header_files:
vcxproj_content += f' <ClInclude Include="{header}" />\n'
vcxproj_content += ''' </ItemGroup>
<ItemGroup>
'''
for source in all_source_files:
vcxproj_content += f' <ClCompile Include="src\\{source}" />\n'
vcxproj_content += ''' </ItemGroup>
<ItemGroup>
<None Include="CMakeLists.txt" />
<None Include="CMakePresets.json" />
<None Include="vcpkg.json" />
<None Include="README.md" />
<None Include="LICENSE" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>'''
return vcxproj_content
def generate_solution():
"""Generate the YAZE.sln file"""
return '''Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "YAZE", "YAZE.vcxproj", "{B2C3D4E5-F6G7-8901-BCDE-F23456789012}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Debug|ARM64 = Debug|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
Release|ARM64 = Release|ARM64
RelWithDebInfo|x64 = RelWithDebInfo|x64
RelWithDebInfo|x86 = RelWithDebInfo|x86
RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64
MinSizeRel|x64 = MinSizeRel|x64
MinSizeRel|x86 = MinSizeRel|x86
MinSizeRel|ARM64 = MinSizeRel|ARM64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x64.ActiveCfg = Debug|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x64.Build.0 = Debug|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x86.ActiveCfg = Debug|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|x86.Build.0 = Debug|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|ARM64.ActiveCfg = Debug|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Debug|ARM64.Build.0 = Debug|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x64.ActiveCfg = Release|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x64.Build.0 = Release|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x86.ActiveCfg = Release|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|x86.Build.0 = Release|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|ARM64.ActiveCfg = Release|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.Release|ARM64.Build.0 = Release|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.RelWithDebInfo|ARM64.Build.0 = RelWithDebInfo|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|x86.Build.0 = MinSizeRel|x86
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|ARM64.ActiveCfg = MinSizeRel|ARM64
{B2C3D4E5-F6G7-8901-BCDE-F23456789012}.MinSizeRel|ARM64.Build.0 = MinSizeRel|ARM64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
EndGlobalSection
EndGlobal'''
def main():
"""Main function to generate Visual Studio project files"""
print("Generating Visual Studio project files for YAZE...")
# Get the project root directory
script_dir = Path(__file__).parent
project_root = script_dir.parent
# Generate .vcxproj file
vcxproj_content = generate_vcxproj()
vcxproj_path = project_root / "YAZE.vcxproj"
with open(vcxproj_path, 'w', encoding='utf-8') as f:
f.write(vcxproj_content)
print(f"Generated: {vcxproj_path}")
# Generate .sln file
solution_content = generate_solution()
solution_path = project_root / "YAZE.sln"
with open(solution_path, 'w', encoding='utf-8') as f:
f.write(solution_content)
print(f"Generated: {solution_path}")
print("Visual Studio project files generated successfully!")
print("")
print("To build:")
print("1. Open YAZE.sln in Visual Studio 2022")
print("2. Ensure vcpkg is installed and configured")
print("3. Select your desired configuration (Debug/Release) and platform (x64/x86/ARM64)")
print("4. Build the solution (Ctrl+Shift+B)")
if __name__ == "__main__":
main()

View File

@@ -1,115 +1,180 @@
# Setup script for Windows development environment # PowerShell script to set up Windows development environment for YAZE
# This script installs the necessary tools for YAZE development on Windows # This script helps developers get started with building YAZE on Windows
param( param(
[switch]$Force = $false [switch]$SkipVcpkg = $false,
[switch]$SkipVS = $false
) )
Write-Host "Setting up Windows development environment for YAZE..." -ForegroundColor Green $ErrorActionPreference = "Stop"
# Check if we're on Windows Write-Host "========================================" -ForegroundColor Cyan
if ($env:OS -ne "Windows_NT") { Write-Host "YAZE Windows Development Setup" -ForegroundColor Cyan
Write-Host "This script is designed for Windows only." -ForegroundColor Red Write-Host "========================================" -ForegroundColor Cyan
# Check if we're in the right directory
if (-not (Test-Path "YAZE.sln")) {
Write-Error "YAZE.sln not found. Please run this script from the project root directory."
exit 1 exit 1
} }
# Check if running as administrator Write-Host "✓ Found YAZE project files" -ForegroundColor Green
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
if (-not $isAdmin) {
Write-Host "This script requires administrator privileges to install software." -ForegroundColor Yellow
Write-Host "Please run PowerShell as Administrator and try again." -ForegroundColor Yellow
exit 1
}
# Install Chocolatey if not present
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Host "Installing Chocolatey package manager..." -ForegroundColor Yellow
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Refresh environment variables
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
Write-Host "Chocolatey installed successfully" -ForegroundColor Green
} else {
Write-Host "Chocolatey already installed" -ForegroundColor Green
}
# Install required tools
$tools = @(
@{Name="cmake"; Description="CMake build system"},
@{Name="git"; Description="Git version control"},
@{Name="ninja"; Description="Ninja build system"},
@{Name="python3"; Description="Python 3 for scripts"}
)
foreach ($tool in $tools) {
Write-Host "Checking $($tool.Description)..." -ForegroundColor Cyan
$installed = $false
if ($tool.Name -eq "cmake") {
$installed = Get-Command cmake -ErrorAction SilentlyContinue
} elseif ($tool.Name -eq "git") {
$installed = Get-Command git -ErrorAction SilentlyContinue
} elseif ($tool.Name -eq "ninja") {
$installed = Get-Command ninja -ErrorAction SilentlyContinue
} elseif ($tool.Name -eq "python3") {
$installed = Get-Command python3 -ErrorAction SilentlyContinue
}
if (-not $installed -or $Force) {
Write-Host "Installing $($tool.Description)..." -ForegroundColor Yellow
choco install -y $tool.Name
if ($LASTEXITCODE -eq 0) {
Write-Host "$($tool.Description) installed successfully" -ForegroundColor Green
} else {
Write-Host "Failed to install $($tool.Description)" -ForegroundColor Red
}
} else {
Write-Host "$($tool.Description) already installed" -ForegroundColor Green
}
}
# Refresh environment variables
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
# Verify installations
Write-Host "`nVerifying installations..." -ForegroundColor Cyan
$toolsToVerify = @("cmake", "git", "ninja", "python3")
foreach ($tool in $toolsToVerify) {
$path = Get-Command $tool -ErrorAction SilentlyContinue
if ($path) {
Write-Host "$tool found at: $($path.Source)" -ForegroundColor Green
} else {
Write-Host "$tool not found" -ForegroundColor Red
}
}
# Check for Visual Studio # Check for Visual Studio
Write-Host "`nChecking for Visual Studio..." -ForegroundColor Cyan if (-not $SkipVS) {
$vsWhere = Get-Command "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -ErrorAction SilentlyContinue Write-Host "Checking for Visual Studio..." -ForegroundColor Yellow
if (-not $vsWhere) {
$vsWhere = Get-Command vswhere -ErrorAction SilentlyContinue
}
if ($vsWhere) { $vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vsInstallPath = & $vsWhere.Source -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath if (Test-Path $vsWhere) {
if ($vsInstallPath) { $vsInstall = & $vsWhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
Write-Host "✓ Visual Studio found at: $vsInstallPath" -ForegroundColor Green if ($vsInstall) {
Write-Host "✓ Visual Studio found at: $vsInstall" -ForegroundColor Green
# Check for MSBuild
$msbuildPath = Join-Path $vsInstall "MSBuild\Current\Bin\MSBuild.exe"
if (Test-Path $msbuildPath) {
Write-Host "✓ MSBuild found" -ForegroundColor Green
} else { } else {
Write-Host "✗ Visual Studio 2022 with C++ workload not found" -ForegroundColor Red Write-Warning "MSBuild not found. Please ensure C++ development workload is installed."
Write-Host "Please install Visual Studio 2022 with the 'Desktop development with C++' workload" -ForegroundColor Yellow
} }
} else { } else {
Write-Host "✗ vswhere not found - cannot detect Visual Studio" -ForegroundColor Red Write-Warning "Visual Studio 2022 with C++ workload not found."
Write-Host "Please install Visual Studio 2022 with the following workloads:" -ForegroundColor Yellow
Write-Host " - Desktop development with C++" -ForegroundColor White
Write-Host " - Game development with C++" -ForegroundColor White
}
} else {
Write-Warning "Visual Studio Installer not found. Please install Visual Studio 2022."
}
} else {
Write-Host "Skipping Visual Studio check" -ForegroundColor Yellow
} }
Write-Host "`n🎉 Windows development environment setup complete!" -ForegroundColor Green # Check for Git
Write-Host "`nNext steps:" -ForegroundColor Cyan Write-Host "Checking for Git..." -ForegroundColor Yellow
Write-Host "1. Run the Visual Studio project generation script:" -ForegroundColor White try {
Write-Host " .\scripts\generate-vs-projects.ps1" -ForegroundColor Gray $gitVersion = & git --version 2>$null
Write-Host "2. Or use CMake presets:" -ForegroundColor White if ($LASTEXITCODE -eq 0) {
Write-Host " cmake --preset windows-debug" -ForegroundColor Gray Write-Host "✓ Git found: $gitVersion" -ForegroundColor Green
Write-Host "3. Open YAZE.sln in Visual Studio and build" -ForegroundColor White } else {
throw "Git not found"
}
} catch {
Write-Warning "Git not found. Please install Git for Windows."
Write-Host "Download from: https://git-scm.com/download/win" -ForegroundColor Yellow
}
# Check for Python
Write-Host "Checking for Python..." -ForegroundColor Yellow
try {
$pythonVersion = & python --version 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Python found: $pythonVersion" -ForegroundColor Green
} else {
throw "Python not found"
}
} catch {
Write-Warning "Python not found. Please install Python 3.8 or later."
Write-Host "Download from: https://www.python.org/downloads/" -ForegroundColor Yellow
}
# Set up vcpkg
if (-not $SkipVcpkg) {
Write-Host "Setting up vcpkg..." -ForegroundColor Yellow
if (-not (Test-Path "vcpkg")) {
Write-Host "Cloning vcpkg..." -ForegroundColor Yellow
try {
& git clone https://github.com/Microsoft/vcpkg.git vcpkg
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ vcpkg cloned successfully" -ForegroundColor Green
} else {
throw "Failed to clone vcpkg"
}
} catch {
Write-Error "Failed to clone vcpkg: $_"
exit 1
}
} else {
Write-Host "✓ vcpkg directory already exists" -ForegroundColor Green
}
# Bootstrap vcpkg
$vcpkgExe = "vcpkg\vcpkg.exe"
if (-not (Test-Path $vcpkgExe)) {
Write-Host "Bootstrapping vcpkg..." -ForegroundColor Yellow
try {
Push-Location vcpkg
& .\bootstrap-vcpkg.bat
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ vcpkg bootstrapped successfully" -ForegroundColor Green
} else {
throw "Failed to bootstrap vcpkg"
}
Pop-Location
} catch {
Pop-Location
Write-Error "Failed to bootstrap vcpkg: $_"
exit 1
}
} else {
Write-Host "✓ vcpkg already bootstrapped" -ForegroundColor Green
}
# Install dependencies
Write-Host "Installing dependencies with vcpkg..." -ForegroundColor Yellow
try {
& $vcpkgExe install --triplet x64-windows
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Dependencies installed successfully" -ForegroundColor Green
} else {
Write-Warning "Some dependencies may not have installed correctly"
}
} catch {
Write-Warning "Failed to install dependencies: $_"
}
} else {
Write-Host "Skipping vcpkg setup" -ForegroundColor Yellow
}
# Generate Visual Studio project files
Write-Host "Generating Visual Studio project files..." -ForegroundColor Yellow
try {
& python scripts/generate-vs-projects.py
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Visual Studio project files generated" -ForegroundColor Green
} else {
throw "Failed to generate project files"
}
} catch {
Write-Warning "Failed to generate project files: $_"
Write-Host "You can manually run: python scripts/generate-vs-projects.py" -ForegroundColor Yellow
}
# Test build
Write-Host "Testing build..." -ForegroundColor Yellow
try {
& .\scripts\build-windows.ps1 -Configuration Release -Platform x64
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Test build successful" -ForegroundColor Green
} else {
Write-Warning "Test build failed, but setup is complete"
}
} catch {
Write-Warning "Test build failed: $_"
Write-Host "You can manually run: .\scripts\build-windows.ps1" -ForegroundColor Yellow
}
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. Open YAZE.sln in Visual Studio 2022" -ForegroundColor White
Write-Host "2. Select your desired configuration (Debug/Release) and platform (x64/x86/ARM64)" -ForegroundColor White
Write-Host "3. Build the solution (Ctrl+Shift+B)" -ForegroundColor White
Write-Host ""
Write-Host "Or use the 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/02-build-instructions.md" -ForegroundColor Yellow

View File

@@ -2,88 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59 VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FOLDER-GUID-ROOT}"
ProjectSection(SolutionItems) = preProject
CMakeLists.txt = CMakeLists.txt
CMakePresets.json = CMakePresets.json
vcpkg.json = vcpkg.json
README.md = README.md
LICENSE = LICENSE
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{FOLDER-GUID-DOCS}"
ProjectSection(SolutionItems) = preProject
docs\index.md = docs\index.md
docs\01-getting-started.md = docs\01-getting-started.md
docs\02-build-instructions.md = docs\02-build-instructions.md
docs\03-asar-integration.md = docs\03-asar-integration.md
docs\04-api-reference.md = docs\04-api-reference.md
docs\A1-testing-guide.md = docs\A1-testing-guide.md
docs\B1-contributing.md = docs\B1-contributing.md
docs\B2-platform-compatibility.md = docs\B2-platform-compatibility.md
docs\B3-build-presets.md = docs\B3-build-presets.md
docs\C1-changelog.md = docs\C1-changelog.md
docs\D1-roadmap.md = docs\D1-roadmap.md
docs\E1-asm-style-guide.md = docs\E1-asm-style-guide.md
docs\E2-dungeon-editor-guide.md = docs\E2-dungeon-editor-guide.md
docs\E3-dungeon-editor-design.md = docs\E3-dungeon-editor-design.md
docs\E4-dungeon-editor-refactoring.md = docs\E4-dungeon-editor-refactoring.md
docs\E5-dungeon-object-system.md = docs\E5-dungeon-object-system.md
docs\F1-overworld-loading.md = docs\F1-overworld-loading.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{FOLDER-GUID-SCRIPTS}"
ProjectSection(SolutionItems) = preProject
scripts\create_release.sh = scripts\create_release.sh
scripts\extract_changelog.py = scripts\extract_changelog.py
scripts\generate-vs-projects.ps1 = scripts\generate-vs-projects.ps1
scripts\generate-vs-projects.bat = scripts\generate-vs-projects.bat
scripts\setup-vcpkg-windows.ps1 = scripts\setup-vcpkg-windows.ps1
scripts\setup-vcpkg-windows.bat = scripts\setup-vcpkg-windows.bat
scripts\quality_check.sh = scripts\quality_check.sh
scripts\test_asar_integration.py = scripts\test_asar_integration.py
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{FOLDER-GUID-ASSETS}"
ProjectSection(SolutionItems) = preProject
assets\themes\yaze_classic.theme = assets\themes\yaze_classic.theme
assets\themes\cyberpunk.theme = assets\themes\cyberpunk.theme
assets\themes\sunset.theme = assets\themes\sunset.theme
assets\themes\forest.theme = assets\themes\forest.theme
assets\themes\midnight.theme = assets\themes\midnight.theme
assets\layouts\ow_toolset.zeml = assets\layouts\ow_toolset.zeml
assets\yaze.icns = assets\yaze.icns
assets\yaze.png = assets\yaze.png
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Headers", "Headers", "{FOLDER-GUID-HEADERS}"
ProjectSection(SolutionItems) = preProject
incl\yaze.h = incl\yaze.h
incl\zelda.h = incl\zelda.h
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CMake", "CMake", "{FOLDER-GUID-CMAKE}"
ProjectSection(SolutionItems) = preProject
cmake\absl.cmake = cmake\absl.cmake
cmake\asar.cmake = cmake\asar.cmake
cmake\grpc.cmake = cmake\grpc.cmake
cmake\gtest.cmake = cmake\gtest.cmake
cmake\imgui.cmake = cmake\imgui.cmake
cmake\mingw64.cmake = cmake\mingw64.cmake
cmake\packaging.cmake = cmake\packaging.cmake
cmake\sdl2.cmake = cmake\sdl2.cmake
cmake\vcpkg.cmake = cmake\vcpkg.cmake
cmake\yaze.desktop.in = cmake\yaze.desktop.in
cmake\yaze.plist.in = cmake\yaze.plist.in
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub Actions", "GitHub Actions", "{FOLDER-GUID-GITHUB}"
ProjectSection(SolutionItems) = preProject
.github\workflows\ci.yml = .github\workflows\ci.yml
.github\workflows\release.yml = .github\workflows\release.yml
.github\workflows\doxy.yml = .github\workflows\doxy.yml
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "YAZE", "YAZE.vcxproj", "{B2C3D4E5-F6G7-8901-BCDE-F23456789012}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "YAZE", "YAZE.vcxproj", "{B2C3D4E5-F6G7-8901-BCDE-F23456789012}"
EndProject EndProject
Global Global
@@ -133,13 +51,4 @@ Global
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A1B2C3D4-E5F6-7890-ABCD-EF1234567890} SolutionGuid = {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{B2C3D4E5-F6G7-8901-BCDE-F23456789012} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-DOCS} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-SCRIPTS} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-ASSETS} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-HEADERS} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-CMAKE} = {FOLDER-GUID-ROOT}
{FOLDER-GUID-GITHUB} = {FOLDER-GUID-ROOT}
EndGlobalSection
EndGlobal EndGlobal

View File

@@ -57,6 +57,8 @@
<RootNamespace>YAZE</RootNamespace> <RootNamespace>YAZE</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>YAZE</ProjectName> <ProjectName>YAZE</ProjectName>
<VcpkgEnabled>true</VcpkgEnabled>
<VcpkgManifestInstall>true</VcpkgManifestInstall>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
@@ -248,11 +250,17 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
@@ -261,11 +269,17 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
@@ -274,173 +288,289 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<OptimizeReferences>false</OptimizeReferences>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x86'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x86'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|ARM64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|ARM64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x86'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x86'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|ARM64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|ARM64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)src;$(ProjectDir)incl;$(ProjectDir)src\lib;$(ProjectDir)src\lib\asar\src;$(ProjectDir)src\lib\asar\src\asar;$(ProjectDir)src\lib\asar\src\asar-dll-bindings\c;$(ProjectDir)src\lib\imgui;$(ProjectDir)src\lib\imgui_test_engine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp23</LanguageStandard>
<BigObj>true</BigObj>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="incl\yaze.h" /> <ClInclude Include="incl/yaze.h" />
<ClInclude Include="incl\zelda.h" /> <ClInclude Include="incl/zelda.h" />
<ClInclude Include="src\yaze_config.h.in" /> <ClInclude Include="src/yaze_config.h.in" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\yaze.cc" /> <ClCompile Include="src\yaze.cc" />
<ClCompile Include="src\app/main.cc" />
<ClCompile Include="src\app/rom.cc" />
<ClCompile Include="src\app/core/controller.cc" />
<ClCompile Include="src\app/emu/emulator.cc" />
<ClCompile Include="src\app/core/project.cc" />
<ClCompile Include="src\app/core/window.cc" />
<ClCompile Include="src\app/core/asar_wrapper.cc" />
<ClCompile Include="src\app/core/platform/font_loader.cc" />
<ClCompile Include="src\app/core/platform/clipboard.cc" />
<ClCompile Include="src\app/core/platform/file_dialog.cc" />
<ClCompile Include="src\app/emu/audio/apu.cc" />
<ClCompile Include="src\app/emu/audio/spc700.cc" />
<ClCompile Include="src\app/emu/audio/dsp.cc" />
<ClCompile Include="src\app/emu/audio/internal/addressing.cc" />
<ClCompile Include="src\app/emu/audio/internal/instructions.cc" />
<ClCompile Include="src\app/emu/cpu/internal/addressing.cc" />
<ClCompile Include="src\app/emu/cpu/internal/instructions.cc" />
<ClCompile Include="src\app/emu/cpu/cpu.cc" />
<ClCompile Include="src\app/emu/video/ppu.cc" />
<ClCompile Include="src\app/emu/memory/dma.cc" />
<ClCompile Include="src\app/emu/memory/memory.cc" />
<ClCompile Include="src\app/emu/snes.cc" />
<ClCompile Include="src\app/editor/editor_manager.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_editor.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_room_selector.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_canvas_viewer.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_object_selector.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_toolset.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_object_interaction.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_renderer.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_room_loader.cc" />
<ClCompile Include="src\app/editor/dungeon/dungeon_usage_tracker.cc" />
<ClCompile Include="src\app/editor/overworld/overworld_editor.cc" />
<ClCompile Include="src\app/editor/overworld/overworld_editor_manager.cc" />
<ClCompile Include="src\app/editor/sprite/sprite_editor.cc" />
<ClCompile Include="src\app/editor/music/music_editor.cc" />
<ClCompile Include="src\app/editor/message/message_editor.cc" />
<ClCompile Include="src\app/editor/message/message_data.cc" />
<ClCompile Include="src\app/editor/message/message_preview.cc" />
<ClCompile Include="src\app/editor/code/assembly_editor.cc" />
<ClCompile Include="src\app/editor/graphics/screen_editor.cc" />
<ClCompile Include="src\app/editor/graphics/graphics_editor.cc" />
<ClCompile Include="src\app/editor/graphics/palette_editor.cc" />
<ClCompile Include="src\app/editor/overworld/tile16_editor.cc" />
<ClCompile Include="src\app/editor/overworld/map_properties.cc" />
<ClCompile Include="src\app/editor/graphics/gfx_group_editor.cc" />
<ClCompile Include="src\app/editor/overworld/entity.cc" />
<ClCompile Include="src\app/editor/system/settings_editor.cc" />
<ClCompile Include="src\app/editor/system/command_manager.cc" />
<ClCompile Include="src\app/editor/system/extension_manager.cc" />
<ClCompile Include="src\app/editor/system/shortcut_manager.cc" />
<ClCompile Include="src\app/editor/system/popup_manager.cc" />
<ClCompile Include="src\app/test/test_manager.cc" />
<ClCompile Include="src\app/gfx/arena.cc" />
<ClCompile Include="src\app/gfx/background_buffer.cc" />
<ClCompile Include="src\app/gfx/bitmap.cc" />
<ClCompile Include="src\app/gfx/compression.cc" />
<ClCompile Include="src\app/gfx/scad_format.cc" />
<ClCompile Include="src\app/gfx/snes_palette.cc" />
<ClCompile Include="src\app/gfx/snes_tile.cc" />
<ClCompile Include="src\app/gfx/snes_color.cc" />
<ClCompile Include="src\app/gfx/tilemap.cc" />
<ClCompile Include="src\app/zelda3/hyrule_magic.cc" />
<ClCompile Include="src\app/zelda3/overworld/overworld_map.cc" />
<ClCompile Include="src\app/zelda3/overworld/overworld.cc" />
<ClCompile Include="src\app/zelda3/screen/inventory.cc" />
<ClCompile Include="src\app/zelda3/screen/title_screen.cc" />
<ClCompile Include="src\app/zelda3/screen/dungeon_map.cc" />
<ClCompile Include="src\app/zelda3/sprite/sprite.cc" />
<ClCompile Include="src\app/zelda3/sprite/sprite_builder.cc" />
<ClCompile Include="src\app/zelda3/music/tracker.cc" />
<ClCompile Include="src\app/zelda3/dungeon/room.cc" />
<ClCompile Include="src\app/zelda3/dungeon/room_object.cc" />
<ClCompile Include="src\app/zelda3/dungeon/object_parser.cc" />
<ClCompile Include="src\app/zelda3/dungeon/object_renderer.cc" />
<ClCompile Include="src\app/zelda3/dungeon/room_layout.cc" />
<ClCompile Include="src\app/zelda3/dungeon/dungeon_editor_system.cc" />
<ClCompile Include="src\app/zelda3/dungeon/dungeon_object_editor.cc" />
<ClCompile Include="src\app/gui/modules/asset_browser.cc" />
<ClCompile Include="src\app/gui/modules/text_editor.cc" />
<ClCompile Include="src\app/gui/canvas.cc" />
<ClCompile Include="src\app/gui/canvas_utils.cc" />
<ClCompile Include="src\app/gui/enhanced_palette_editor.cc" />
<ClCompile Include="src\app/gui/input.cc" />
<ClCompile Include="src\app/gui/style.cc" />
<ClCompile Include="src\app/gui/color.cc" />
<ClCompile Include="src\app/gui/zeml.cc" />
<ClCompile Include="src\app/gui/theme_manager.cc" />
<ClCompile Include="src\app/gui/background_renderer.cc" />
<ClCompile Include="src\util/bps.cc" />
<ClCompile Include="src\util/flag.cc" />
<ClCompile Include="src\util/hex.cc" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="CMakeLists.txt" /> <None Include="CMakeLists.txt" />
@@ -449,63 +579,6 @@
<None Include="README.md" /> <None Include="README.md" />
<None Include="LICENSE" /> <None Include="LICENSE" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Text Include="docs\index.md" />
<Text Include="docs\01-getting-started.md" />
<Text Include="docs\02-build-instructions.md" />
<Text Include="docs\03-asar-integration.md" />
<Text Include="docs\04-api-reference.md" />
<Text Include="docs\A1-testing-guide.md" />
<Text Include="docs\B1-contributing.md" />
<Text Include="docs\B2-platform-compatibility.md" />
<Text Include="docs\B3-build-presets.md" />
<Text Include="docs\C1-changelog.md" />
<Text Include="docs\D1-roadmap.md" />
<Text Include="docs\E1-asm-style-guide.md" />
<Text Include="docs\E2-dungeon-editor-guide.md" />
<Text Include="docs\E3-dungeon-editor-design.md" />
<Text Include="docs\E4-dungeon-editor-refactoring.md" />
<Text Include="docs\E5-dungeon-object-system.md" />
<Text Include="docs\F1-overworld-loading.md" />
</ItemGroup>
<ItemGroup>
<Text Include="scripts\create_release.sh" />
<Text Include="scripts\extract_changelog.py" />
<Text Include="scripts\generate-vs-projects.ps1" />
<Text Include="scripts\generate-vs-projects.bat" />
<Text Include="scripts\setup-vcpkg-windows.ps1" />
<Text Include="scripts\setup-vs-windows.bat" />
<Text Include="scripts\quality_check.sh" />
<Text Include="scripts\test_asar_integration.py" />
</ItemGroup>
<ItemGroup>
<Text Include="assets\themes\yaze_classic.theme" />
<Text Include="assets\themes\cyberpunk.theme" />
<Text Include="assets\themes\sunset.theme" />
<Text Include="assets\themes\forest.theme" />
<Text Include="assets\themes\midnight.theme" />
<Text Include="assets\layouts\ow_toolset.zeml" />
<Text Include="assets\yaze.icns" />
<Text Include="assets\yaze.png" />
</ItemGroup>
<ItemGroup>
<Text Include="cmake\absl.cmake" />
<Text Include="cmake\asar.cmake" />
<Text Include="cmake\grpc.cmake" />
<Text Include="cmake\gtest.cmake" />
<Text Include="cmake\imgui.cmake" />
<Text Include="cmake\mingw64.cmake" />
<Text Include="cmake\packaging.cmake" />
<Text Include="cmake\sdl2.cmake" />
<Text Include="cmake\vcpkg.cmake" />
<Text Include="cmake\yaze.desktop.in" />
<Text Include="cmake\yaze.plist.in" />
</ItemGroup>
<ItemGroup>
<Text Include=".github\workflows\ci.yml" />
<Text Include=".github\workflows\release.yml" />
<Text Include=".github\workflows\doxy.yml" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>