285 lines
9.1 KiB
Markdown
285 lines
9.1 KiB
Markdown
# Visual Studio Setup Guide
|
|
|
|
> **Note**: This document provides detailed Visual Studio setup information. For the most up-to-date build instructions, see [Build Instructions](02-build-instructions.md).
|
|
|
|
This guide will help Visual Studio users set up and build the yaze project on Windows.
|
|
|
|
## Prerequisites
|
|
|
|
### Required Software
|
|
1. **Visual Studio 2022** (Community, Professional, or Enterprise)
|
|
- Install with "Desktop development with C++" workload
|
|
- Ensure CMake tools are included
|
|
- Install Git for Windows (or use built-in Git support)
|
|
|
|
2. **vcpkg** (Package Manager)
|
|
- Download from: https://github.com/Microsoft/vcpkg
|
|
- Follow installation instructions to integrate with Visual Studio
|
|
|
|
3. **CMake** (3.16 or later)
|
|
- Usually included with Visual Studio 2022
|
|
- Verify with: `cmake --version`
|
|
|
|
### Environment Setup
|
|
|
|
1. **Set up vcpkg environment variable:**
|
|
```cmd
|
|
set VCPKG_ROOT=C:\vcpkg
|
|
```
|
|
|
|
2. **Integrate vcpkg with Visual Studio:**
|
|
```cmd
|
|
cd C:\vcpkg
|
|
.\vcpkg integrate install
|
|
```
|
|
|
|
## Project Setup
|
|
|
|
### 1. Clone the Repository
|
|
```cmd
|
|
git clone --recursive https://github.com/your-username/yaze.git
|
|
cd yaze
|
|
```
|
|
|
|
### 2. Install Dependencies via vcpkg
|
|
The project uses `vcpkg.json` for automatic dependency management. Dependencies will be installed automatically during CMake configuration.
|
|
|
|
Manual installation (if needed):
|
|
```cmd
|
|
vcpkg install zlib:x64-windows
|
|
vcpkg install libpng:x64-windows
|
|
vcpkg install sdl2[vulkan]:x64-windows
|
|
vcpkg install abseil:x64-windows
|
|
vcpkg install gtest:x64-windows
|
|
```
|
|
|
|
### 3. Configure Build System
|
|
|
|
#### Option A: Using Visual Studio Project File (Easiest)
|
|
1. Open Visual Studio 2022
|
|
2. Select "Open a project or solution"
|
|
3. Navigate to the yaze project folder and open `yaze.sln`
|
|
4. The project is pre-configured with vcpkg integration and proper dependencies
|
|
5. Select your desired build configuration (Debug/Release) and platform (x64/x86)
|
|
6. Press F5 to build and run, or Ctrl+Shift+B to build only
|
|
|
|
#### Option B: Using CMake with Visual Studio (Recommended for developers)
|
|
1. Open Visual Studio 2022
|
|
2. Select "Open a local folder" and navigate to the yaze project folder
|
|
3. Visual Studio will automatically detect the CMake project
|
|
4. Wait for CMake configuration to complete (check Output window)
|
|
|
|
#### Option C: Using Command Line
|
|
```cmd
|
|
mkdir build
|
|
cd build
|
|
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
|
|
```
|
|
|
|
### 4. Build Configuration
|
|
|
|
#### Using Visual Studio Project File (.vcxproj)
|
|
- **Debug Build:** Select "Debug" configuration and press F5 or Ctrl+Shift+B
|
|
- **Release Build:** Select "Release" configuration and press F5 or Ctrl+Shift+B
|
|
- **Platform:** Choose x64 (recommended) or x86 from the platform dropdown
|
|
|
|
#### Using CMake (Command Line)
|
|
```cmd
|
|
# For Development (Debug Build)
|
|
cmake --build . --config Debug --target yaze
|
|
|
|
# For Release Build
|
|
cmake --build . --config Release --target yaze
|
|
|
|
# For Testing (Optional)
|
|
cmake --build . --config Debug --target yaze_test
|
|
```
|
|
|
|
## Common Issues and Solutions
|
|
|
|
### Issue 1: zlib Import Errors
|
|
**Problem:** `fatal error C1083: Cannot open include file: 'zlib.h'`
|
|
|
|
**Solution:**
|
|
1. Ensure vcpkg is properly integrated with Visual Studio
|
|
2. Verify the vcpkg toolchain file is set:
|
|
```cmd
|
|
cmake .. -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
|
|
```
|
|
3. Check that zlib is installed:
|
|
```cmd
|
|
vcpkg list zlib
|
|
```
|
|
|
|
### Issue 2: Executable Runs Tests Instead of Main App
|
|
**Problem:** Running `yaze.exe` starts the test framework instead of the application
|
|
|
|
**Solution:** This has been fixed in the latest version. The issue was caused by linking `gtest_main` to the main executable. The fix removes `gtest_main` from the main application while keeping `gtest` for testing capabilities.
|
|
|
|
### Issue 3: SDL2 Configuration Issues
|
|
**Problem:** SDL2 not found or linking errors
|
|
|
|
**Solution:**
|
|
1. Install SDL2 with vcpkg:
|
|
```cmd
|
|
vcpkg install sdl2[vulkan]:x64-windows
|
|
```
|
|
2. Ensure the project uses the vcpkg toolchain file
|
|
|
|
### Issue 4: Build Errors with Abseil
|
|
**Problem:** Missing Abseil symbols or linking issues
|
|
|
|
**Solution:**
|
|
1. Install Abseil via vcpkg:
|
|
```cmd
|
|
vcpkg install abseil:x64-windows
|
|
```
|
|
2. The project is configured to use Abseil 20240116.2 (see vcpkg.json overrides)
|
|
|
|
## Visual Studio Configuration
|
|
|
|
### CMake Settings
|
|
Create or modify `.vscode/settings.json` or use Visual Studio's CMake settings:
|
|
|
|
```json
|
|
{
|
|
"cmake.configureArgs": [
|
|
"-DCMAKE_TOOLCHAIN_FILE=${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
|
"-Dyaze_BUILD_TESTS=ON",
|
|
"-Dyaze_BUILD_APP=ON",
|
|
"-Dyaze_BUILD_LIB=ON"
|
|
],
|
|
"cmake.buildDirectory": "${workspaceFolder}/build"
|
|
}
|
|
```
|
|
|
|
### Build Presets
|
|
The project includes CMake presets in `CMakePresets.json`. Use these in Visual Studio:
|
|
|
|
1. **Debug Build:** `debug` preset
|
|
2. **Release Build:** `release` preset
|
|
3. **Development Build:** `dev` preset (includes ROM testing)
|
|
|
|
## Running the Application
|
|
|
|
### Using Visual Studio Project File
|
|
1. Open `yaze.sln` in Visual Studio
|
|
2. Set `yaze` as the startup project (should be default)
|
|
3. Configure command line arguments in Project Properties > Debugging > Command Arguments
|
|
- Example: `--rom_file=C:\path\to\your\zelda3.sfc`
|
|
4. Press F5 to build and run, or Ctrl+F5 to run without debugging
|
|
|
|
### Command Line
|
|
```cmd
|
|
cd build/bin/Debug # or Release
|
|
yaze.exe --rom_file=path/to/your/zelda3.sfc
|
|
```
|
|
|
|
### Visual Studio (CMake)
|
|
1. Set `yaze` as the startup project
|
|
2. Configure command line arguments in Project Properties > Debugging
|
|
3. Press F5 to run
|
|
|
|
## Testing
|
|
|
|
### Run Unit Tests
|
|
```cmd
|
|
cd build
|
|
ctest --build-config Debug
|
|
```
|
|
|
|
### Run Specific Test Suite
|
|
```cmd
|
|
cd build/bin/Debug
|
|
yaze_test.exe
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Clean Build
|
|
If you encounter persistent issues:
|
|
```cmd
|
|
rmdir /s build
|
|
mkdir build
|
|
cd build
|
|
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
|
|
cmake --build . --config Debug
|
|
```
|
|
|
|
### Check Dependencies
|
|
Verify all dependencies are properly installed:
|
|
```cmd
|
|
vcpkg list
|
|
```
|
|
|
|
### CMake Cache Issues
|
|
Clear CMake cache:
|
|
```cmd
|
|
del CMakeCache.txt
|
|
cmake .. -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
|
|
```
|
|
|
|
## Visual Studio Project File Features
|
|
|
|
The included `yaze.vcxproj` and `yaze.sln` files provide:
|
|
|
|
### **Automatic Dependency Management**
|
|
- **vcpkg Integration:** Automatically installs and links dependencies from `vcpkg.json`
|
|
- **Platform Support:** Pre-configured for both x64 and x86 builds
|
|
- **Library Linking:** Automatically links SDL2, zlib, libpng, and system libraries
|
|
|
|
### **Build Configuration**
|
|
- **Debug Configuration:** Includes debugging symbols and runtime checks
|
|
- **Release Configuration:** Optimized for performance with full optimizations
|
|
- **C++23 Standard:** Uses modern C++ features and standard library
|
|
|
|
### **Asset Management**
|
|
- **Automatic Asset Copying:** Post-build events copy themes and assets to output directory
|
|
- **ROM File Handling:** Automatically copies `zelda3.sfc` if present in project root
|
|
- **Resource Organization:** Properly structures output directory for distribution
|
|
|
|
### **Development Features**
|
|
- **IntelliSense Support:** Full code completion and error detection
|
|
- **Debugging Integration:** Native Visual Studio debugging support
|
|
- **Project Properties:** Easy access to compiler and linker settings
|
|
|
|
## CI/CD Integration
|
|
|
|
The Visual Studio project files are fully integrated into the CI/CD pipeline:
|
|
|
|
### **Automated Validation**
|
|
- **Pre-commit checks:** Visual Studio builds are validated on every pull request
|
|
- **Release validation:** Both CMake and Visual Studio builds are tested before release
|
|
- **Multi-platform testing:** x64 and x86 builds are validated on Windows
|
|
- **Dependency verification:** vcpkg integration is tested automatically
|
|
|
|
### **Build Matrix**
|
|
The CI/CD pipeline tests:
|
|
- **Windows x64 Debug/Release** using Visual Studio 2022
|
|
- **Windows x86 Debug/Release** using Visual Studio 2022
|
|
- **CMake builds** alongside Visual Studio builds for compatibility
|
|
- **Asset copying** and executable functionality
|
|
|
|
### **Quality Assurance**
|
|
- **Test main detection:** Prevents the test framework from hijacking the main application
|
|
- **Asset validation:** Ensures themes and resources are properly copied
|
|
- **Executable testing:** Verifies the application starts correctly
|
|
- **Dependency checking:** Validates all required libraries are properly linked
|
|
|
|
## Additional Notes
|
|
|
|
- The project supports both x64 and x86 builds (use appropriate vcpkg triplets)
|
|
- For ARM64 Windows builds, use `arm64-windows` triplet
|
|
- The CI/CD pipeline validates both CMake and Visual Studio builds
|
|
- Development builds include additional debugging features and ROM testing capabilities
|
|
- The `.vcxproj` file provides the easiest setup for Visual Studio users who prefer traditional project files over CMake
|
|
- All builds are automatically validated to ensure they produce working executables
|
|
|
|
## Support
|
|
|
|
If you encounter issues not covered in this guide:
|
|
1. Check the project's GitHub issues
|
|
2. Verify your Visual Studio and vcpkg installations
|
|
3. Ensure all dependencies are properly installed via vcpkg
|
|
4. Try a clean build following the troubleshooting steps above
|