From ee6a4a00f47caee6e52bc6896074da4a1841c99e Mon Sep 17 00:00:00 2001 From: boykopovar Date: Fri, 2 Oct 2026 21:40:38 +0300 Subject: [PATCH] docs(build): add prject build md instruction --- README.md | 14 +------------- docs/dev/BUILD.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 docs/dev/BUILD.md diff --git a/README.md b/README.md index 7b78e635b..7a2975c01 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Tool for automatic executables porting to Linux and Windows. Includes a [relinker](core/relinker) that converts executable to the target system's native format and implementations of [system prx libraries](core/libs/prx) suitable for dynamic linking. No emulation or separate runtime process. - +[Build instructions](docs/dev/BUILD.md), [Technical debt of the project](docs/dev/TechnicalDebt.md), [code style conventions](docs/dev/CONVENTIONS.md), [contributing](CONTRIBUTING.md) ## Status @@ -22,18 +22,6 @@ Unsupported or unexpected states strictly throw `std::runtime_error`. `what()` i The [shader recompiler](core/shader/recompiler/Recompiler.cpp) successfully produces SPIR-V (validated via [Spirv-Tools](3rdparty/SPIRV-Tools) when built with `ANYPS5_ENABLE_SPIRV_TOOLS`). -[Technical debt of the project](docs/dev/TechnicalDebt.md), [code style conventions](docs/dev/CONVENTIONS.md), [contributing](CONTRIBUTING.md) - -## Build - -The relinker uses only the C++20 standard library and should build with any conforming compiler. - -On Intel hosts, pass `--to-intel` to the relinker to lower supported AMD-only instructions in the executable and bundled `sce_module`/`sce_modules` PRX files. Unsupported instructions or stub jumps outside the x86-64 relative branch range produce an error. - -[libc.prx](core/libs/prx/libc) implementations contain compiler-specific code. Linux builds work with GCC; on Windows, MinGW-w64 GCC 15.2.0 (`winlibs-gcc15`, `x86_64-ucrt-posix-seh`) is currently required. - -The project targets maximum compiler portability (but now it is not implemented). - ## Compatibility See the [game compatibility list](docs/user/COMPATIBILITY.md) for tested games and known issues. diff --git a/docs/dev/BUILD.md b/docs/dev/BUILD.md new file mode 100644 index 000000000..f447ecfd2 --- /dev/null +++ b/docs/dev/BUILD.md @@ -0,0 +1,49 @@ +# Build + +```sh +git submodule update --init --recursive +``` + +## Requirements + +- x86-64, Git, CMake 3.22.1 or newer, Ninja, C++20. +- Linux: GCC, G++, binutils. +- Windows: only MinGW-w64 GCC 15.2.0 (WinLibs `x86_64-ucrt-posix-seh`, release `15.2.0posix-14.0.0-ucrt-r7`) is currently supported. Add its `mingw64/bin` directory to `PATH` before configuring. +- FFmpeg binaries are downloaded during configuration unless `FFMPEG_PREBUILT_DIR` is set. + +## Commands + +```sh +cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ +cmake --build build --parallel +cmake --build build --target libs --parallel +``` + +## CMake flags + +Project switches accept `ON` or `OFF`: + +| Flag | Default | Effect | +|----------------------------------|---------|--------------------------------------------------| +| `-DBUILD_TESTING=ON` | `OFF` | Build and register tests. | +| `-DANYPS5_ENABLE_SPIRV_TOOLS=ON` | `OFF` | Enable SPIR-V validation and optimization. | +| `-DAPS5_ENABLE_TIMING_LOG=ON` | `OFF` | Compile frame timing logging. | +| `-DAPS5_AGC_CREATE_LOG=OFF` | `ON` | Disable successful `sceAgcCreateShader` logging. | +| `-DAGC_BUILD_VISUAL_TEST=ON` | `OFF` | Build the standalone AGC SPIR-V visual test. | + +Build configuration parameters: + +| Flag | Value | +|----------------------------------------|--------------------------------------------------------------------| +| `-DCMAKE_BUILD_TYPE=Release` | `Debug`, `Release`, `RelWithDebInfo`, or `MinSizeRel`. | +| `-DCMAKE_C_COMPILER=gcc` | C compiler name or absolute path. | +| `-DCMAKE_CXX_COMPILER=g++` | C++ compiler name or absolute path. | +| `-DCMAKE_C_COMPILER_LAUNCHER=ccache` | Optional C compiler cache; requires `ccache`. | +| `-DCMAKE_CXX_COMPILER_LAUNCHER=ccache` | Optional C++ compiler cache; requires `ccache`. | +| `-DFFMPEG_PREBUILT_DIR=` | Unpacked FFmpeg package for the target platform; empty by default. | + +SDL and FreeType settings forced by the root `CMakeLists.txt` cannot be overridden with `-D`. + +## Shader recompiler + +The shader recompilation logic in [core/shader/recompiler](../../core/shader/recompiler) is isolated from the rest of the project and is a pure function of its input data, designed for integration into any other project. The current CMake target also includes cache support and links a supplied runtime target, glslang, and optionally SPIRV-Tools.