Documentation

Building ArcadeDuck from source

ArcadeDuck currently supports building on Windows x64 using the Visual Studio/MSBuild workflow.

Requirements

What you need

Required

Git

Used to clone ArcadeDuck and switch between the main development and experimental hardware branches.

Required

Visual Studio 2022

Install the Desktop development with C++ workload and a Windows SDK.

Required

Windows x64 dependency package

ArcadeDuck uses a prebuilt third-party dependency bundle for the normal Windows build workflow.

Optional

LLVM / Clang

Install LLVM/Clang if you want to use one of the Clang-based build configurations.

Step 1

Clone ArcadeDuck

git clone https://github.com/StillJC/ArcadeDuck.git
cd ArcadeDuck

For current development work, switch to the dev branch unless you specifically need one of the experimental hardware branches.

git switch dev

Step 2

Install the Windows dependencies

The dependency package is intentionally kept out of Git and distributed separately from the source repository.

From the ArcadeDuck release assets, download the current files matching:

ArcadeDuck-Windows-x64-Dependencies-*.zip
ArcadeDuck-Windows-x64-Dependency-Sources-*.zip
SHA256SUMS.txt

The Dependencies ZIP is required to build ArcadeDuck. The Dependency-Sources ZIP preserves the corresponding third-party source archives and notices.

Verify the dependency ZIP against SHA256SUMS.txt, then extract the contents of the dependency ZIP directly into the ArcadeDuck repository root.

After extraction, this file should exist:

dep\msvc\deps-x64\bin\uic.exe

Third-party package metadata is installed under:

dep\msvc\dependency-metadata\

Step 3

Build the solution

Open the Visual Studio solution:

ArcadeDuck.sln

Select an appropriate x64 configuration and build the solution in Visual Studio.

The dependency package has been validated using a fresh ArcadeDuck worktree and the Visual Studio/MSBuild build path.

Advanced

Rebuilding the dependency tree

The prebuilt dependency package is the recommended route for contributors. If you need to rebuild the Windows x64 third-party dependency tree yourself, ArcadeDuck includes:

scripts\deps\build-dependencies-windows-x64.bat

That script defines the dependency versions, source locations, and hashes used by the project. Rebuilding the full dependency set requires additional developer tools beyond a normal ArcadeDuck build.

Platform Development

Porting ArcadeDuck

Windows x64 is the only currently supported and validated build target, but contributions for additional platforms and frontends are welcome.

Platform Port

Linux, Android, macOS, and other targets

New targets should use an appropriate native or reproducible dependency workflow rather than relying on the Windows dependency package.

Frontend Port

RetroArch / libretro

A libretro target is not just another operating-system build. It requires a frontend adapter for content loading, configuration, input, audio/video, arcade peripherals, external outputs, and other standalone ArcadeDuck behavior.

Architecture

Keep shared code portable

Platform-specific code should remain isolated from the shared emulator and arcade-hardware implementation wherever practical. New ports should avoid introducing Windows-only assumptions into shared code.

Contribution Workflow

Coordinate large ports early

Large platform or frontend ports should be discussed through GitHub before restructuring shared subsystems. Keep toolchain and dependency setup reproducible and document it with the target.

Important

Visual Studio/MSBuild is the supported packaged workflow.

Some generated Qt CMake metadata can contain paths from the machine on which Qt was originally built. The prebuilt dependency package should not currently be treated as a portable standalone CMake SDK.

Third-Party Sources

Keep the source package with the dependency release.

The dependency source package preserves the exact third-party source archives or commits corresponding to the published Windows x64 dependency bundle, together with source hashes and collected license/notice files.