Files
Xenia-Canary/docs/building.md
Herman S. a90f5996de [Build] Python min version -> 3.6
Remove 3.10 syntax sugar and reduce min required python version to avoid
having to do needless python upgrades on various dev systems as 3.10 is
not yet ubiquitous and building on older systems is also still a thing.
2026-03-26 21:14:04 +09:00

144 lines
4.5 KiB
Markdown

# Building
You must have a 64-bit machine for building and running the project. Always
run your system updater before building and make sure you have the latest
drivers.
## Setup
### Windows
* Windows 10 or later
* [Visual Studio 2022](https://www.visualstudio.com/downloads/)
* CMake 3.10+ (or C++ CMake tools for Windows)
* Windows 11 SDK version 10.0.22000.0 (for Visual Studio 2022, this or any newer version)
* [Python 3.6+ 64-bit](https://www.python.org/downloads/)
* Ensure Python is in PATH.
* [Vulkan SDK](https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe)
* The build script will automatically detect it if installed at `C:\VulkanSDK`
```
git clone https://github.com/xenia-canary/xenia-canary.git
cd xenia-canary
xb setup
# Build on command line (add --config=release for release):
xb build
# Pull latest changes, rebase, update submodules, and run premake:
xb pull
# Run premake and open Visual Studio (run the 'xenia-app' project):
xb devenv
# Run premake to update the sln/vcproj's:
xb premake
# Format code to the style guide:
xb format
```
<!--
# Remove intermediate files and build outputs (doesn't work on Linux):
xb clean
# Check for lint errors with clang-format:
xb lint
# Run the style checker on all code:
xb style
# Remove all build/ output and do a hard git reset:
xb nuke
# Runs the clang-tidy checker on all code:
xb tidy
## Testing:
# Generate tests:
xb gentests
# Run tests:
xb test
# Run GPU tests:
xb gputest
## Other:
# Generate SPIR-V binaries and header files:
xb genspirv
-->
#### Debugging
VS behaves oddly with the debug paths. Open the 'xenia-app' project properties
and set the 'Command' to `$(SolutionDir)$(TargetPath)` and the
'Working Directory' to `$(SolutionDir)..\..`. You can specify flags and
the file to run in the 'Command Arguments' field (or use `--flagfile=flags.txt`).
By default logs are written to a file with the name of the executable. You can
override this with `--log_file=log.txt`.
If running under Visual Studio and you want to look at the JIT'ed code
(available around 0xA0000000) you should pass `--emit_source_annotations` to
get helpful spacers/movs in the disassembly.
### Linux
Linux support is extremely experimental and presently incomplete.
The build script uses Clang 19. GCC while it should work in theory, is not easily
interchangeable right now.
* Normal building via `xb build` uses CMake+Ninja.
* Environment variables:
Name | Default Value
----- | -------------
`CC` | `clang`
`CXX` | `clang++`
<!--* [CodeLite](https://codelite.org) is supported. `xb devenv` will generate a workspace and attempt to open it. Your distribution's version may be out of date so check their website.
* Experimental CMake generation is available to facilitate use of other IDEs such as [CLion](https://www.jetbrains.com/clion/). If `clion` is available inside `$PATH`, `xb devenv` will start it. Otherwise `build/CMakeLists.txt` needs to be generated by invoking `xb premake --devenv=cmake` manually.-->
Clang-19 or newer should be available from system repositories on all up to date distributions.
You will also need some development libraries. To get them on an Ubuntu system:
```sh
sudo apt-get install build-essential mesa-vulkan-drivers valgrind libc++-dev libc++abi-dev libgtk-3-dev liblz4-dev libsdl2-dev libvulkan-dev libx11-xcb-dev clang-19 llvm-19 ninja-build
```
In addition, you will need up to date Vulkan libraries and drivers for your hardware, which most distributions have in their standard repositories nowadays.
**Vulkan SDK (for shader compilation)**
The build uses `spirv-opt` and `glslangValidator` for shader compilation. Check
if your system version is recent enough:
```sh
spirv-opt --version
```
If the version is older than 2026.1, the system `spirv-tools` package will not
support all required options (e.g. `--canonicalize-ids`). In that case, install
the [Vulkan SDK from LunarG](https://vulkan.lunarg.com/sdk/home) and set
`VULKAN_SDK` so the build picks up the correct tools:
```sh
wget -qO vulkan-sdk.tar.xz https://sdk.lunarg.com/sdk/download/latest/linux/vulkan-sdk.tar.xz
mkdir -p ~/vulkan-sdk
tar -xf vulkan-sdk.tar.xz -C ~/vulkan-sdk
rm vulkan-sdk.tar.xz
export VULKAN_SDK=$HOME/vulkan-sdk/$(ls ~/vulkan-sdk)/x86_64
export PATH="$VULKAN_SDK/bin:$PATH"
```
Add the `export` lines to your shell profile to persist them across sessions.
## Running
To make life easier you can set the program startup arguments in your IDE to something like `--log_file=stdout /path/to/Default.xex` to log to console rather than a file and start up the emulator right away.