{
  "schema_version": 1,
  "generated_by": "BuildTools/docs_cmake.py",
  "source_manifest": "BuildTools/cmake/ProjectInterface.json",
  "repository": "cvet/fonline",
  "source_ref": "master",
  "scope": {
    "surface": "cmake-project-interface",
    "stability": "experimental",
    "since": null,
    "support_note": "No versioned support line is declared yet; embedding projects should pin an engine revision.",
    "included": [
      "project cache options declared during the Init stage",
      "ordered project-generation stage entrypoints and hooks",
      "selected embedding-project helper commands"
    ],
    "excluded": [
      "internal CMake implementation helpers",
      "package declaration grammar and payload layouts",
      "BuildTools command-line interfaces",
      "toolchain files and platform preset policy"
    ]
  },
  "option_override_precedence": [
    "matching FO_ environment variable",
    "existing CMake cache or -D value",
    "SetOption value supplied by the embedding project",
    "declared interface default"
  ],
  "summary": {
    "option_count": 45,
    "required_option_count": 9,
    "optional_option_count": 36,
    "options_by_cache_type": {
      "BOOL": 23,
      "STRING": 22
    },
    "options_by_category": {
      "capacity": 2,
      "dependency": 5,
      "diagnostics": 1,
      "feature": 3,
      "geometry": 4,
      "model-shape": 4,
      "native-interface": 1,
      "output": 2,
      "profiling": 1,
      "project-identity": 4,
      "quality": 2,
      "rendering": 2,
      "rendering-shape": 2,
      "scripting": 3,
      "target": 5,
      "toolchain": 3,
      "tooling": 1
    },
    "stage_count": 10,
    "helper_count": 6
  },
  "options": [
    {
      "name": "FO_MAIN_CONFIG",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": true,
      "default": null,
      "category": "project-identity",
      "description": "Path to the embedding project's main .fomain configuration file.",
      "id": "cmake.option.FO_MAIN_CONFIG"
    },
    {
      "name": "FO_DEV_NAME",
      "cache_type": "STRING",
      "value_kind": "identifier",
      "required": true,
      "default": null,
      "category": "project-identity",
      "description": "Short project identifier used as the generated target and binary prefix.",
      "id": "cmake.option.FO_DEV_NAME"
    },
    {
      "name": "FO_NICE_NAME",
      "cache_type": "STRING",
      "value_kind": "string",
      "required": true,
      "default": null,
      "category": "project-identity",
      "description": "Human-readable project name used by generated applications and packages.",
      "id": "cmake.option.FO_NICE_NAME"
    },
    {
      "name": "FO_GEOMETRY",
      "cache_type": "STRING",
      "value_kind": "enum",
      "required": true,
      "default": null,
      "allowed_values": [
        "HEXAGONAL",
        "SQUARE"
      ],
      "category": "geometry",
      "description": "World-grid geometry mode.",
      "id": "cmake.option.FO_GEOMETRY"
    },
    {
      "name": "FO_MAP_HEX_WIDTH",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": true,
      "default": null,
      "category": "geometry",
      "description": "Map cell width in pixels.",
      "id": "cmake.option.FO_MAP_HEX_WIDTH"
    },
    {
      "name": "FO_MAP_HEX_HEIGHT",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": true,
      "default": null,
      "category": "geometry",
      "description": "Map cell height in pixels.",
      "id": "cmake.option.FO_MAP_HEX_HEIGHT"
    },
    {
      "name": "FO_MAP_CAMERA_ANGLE",
      "cache_type": "STRING",
      "value_kind": "number",
      "required": true,
      "default": null,
      "category": "geometry",
      "description": "Map camera angle in degrees.",
      "id": "cmake.option.FO_MAP_CAMERA_ANGLE"
    },
    {
      "name": "FO_APP_ICON",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": true,
      "default": null,
      "category": "project-identity",
      "description": "Application icon source used by generated platform targets.",
      "id": "cmake.option.FO_APP_ICON"
    },
    {
      "name": "FO_OUTPUT_PATH",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": true,
      "default": null,
      "category": "output",
      "description": "Common root for generated binaries, packages, baking data, and validation output.",
      "id": "cmake.option.FO_OUTPUT_PATH"
    },
    {
      "name": "FO_CXX_STANDARD",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "20",
      "category": "toolchain",
      "description": "C++ language standard used for project compilation; values below 20 are unsupported.",
      "id": "cmake.option.FO_CXX_STANDARD"
    },
    {
      "name": "FO_BINARY_OUTPUT_POSTFIX",
      "cache_type": "STRING",
      "value_kind": "string",
      "required": false,
      "default": "",
      "category": "output",
      "description": "Optional postfix appended to generated binary output directory names.",
      "id": "cmake.option.FO_BINARY_OUTPUT_POSTFIX"
    },
    {
      "name": "FO_EMBEDDED_DATA_CAPACITY",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "200000",
      "category": "capacity",
      "description": "Capacity reserved for embedded data in generated binaries.",
      "id": "cmake.option.FO_EMBEDDED_DATA_CAPACITY"
    },
    {
      "name": "FO_EFFECT_SCRIPT_VALUES",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "16",
      "category": "rendering-shape",
      "description": "Number of float slots in ScriptValueBuf; the value must be a multiple of four.",
      "id": "cmake.option.FO_EFFECT_SCRIPT_VALUES"
    },
    {
      "name": "FO_EFFECT_MAX_PASSES",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "6",
      "category": "rendering-shape",
      "description": "Maximum number of passes in one effect.",
      "id": "cmake.option.FO_EFFECT_MAX_PASSES"
    },
    {
      "name": "FO_MODEL_LAYERS_COUNT",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "30",
      "category": "model-shape",
      "description": "Number of model rendering layers compiled into the engine shape contract.",
      "id": "cmake.option.FO_MODEL_LAYERS_COUNT"
    },
    {
      "name": "FO_MODEL_MAX_TEXTURES",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "8",
      "category": "model-shape",
      "description": "Maximum number of textures available to one 3D model.",
      "id": "cmake.option.FO_MODEL_MAX_TEXTURES"
    },
    {
      "name": "FO_MODEL_MAX_BONES",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "54",
      "category": "model-shape",
      "description": "Maximum number of bone matrices available to one 3D model.",
      "id": "cmake.option.FO_MODEL_MAX_BONES"
    },
    {
      "name": "FO_MODEL_BONES_PER_VERTEX",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "4",
      "category": "model-shape",
      "description": "Number of bone influences compiled into each 3D model vertex.",
      "id": "cmake.option.FO_MODEL_BONES_PER_VERTEX"
    },
    {
      "name": "FO_STRING_INLINE_CAPACITY",
      "cache_type": "STRING",
      "value_kind": "integer",
      "required": false,
      "default": "31",
      "category": "capacity",
      "description": "Characters kept inside an engine string before it allocates; the value must be one less than a multiple of eight.",
      "id": "cmake.option.FO_STRING_INLINE_CAPACITY"
    },
    {
      "name": "FO_MSAN_LIBCXX_ROOT",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": false,
      "default": "",
      "category": "toolchain",
      "description": "Install prefix of an MSan-instrumented libc++ used by San_Memory configurations.",
      "id": "cmake.option.FO_MSAN_LIBCXX_ROOT"
    },
    {
      "name": "FO_MSAN_IGNORELIST",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": false,
      "default": "${CMAKE_CURRENT_SOURCE_DIR}/${FO_ENGINE_ROOT}/BuildTools/sanitizers/msan-ignorelist.txt",
      "category": "toolchain",
      "description": "MemorySanitizer ignorelist path.",
      "id": "cmake.option.FO_MSAN_IGNORELIST"
    },
    {
      "name": "FO_RESHARPER_SETTINGS",
      "cache_type": "STRING",
      "value_kind": "path",
      "required": false,
      "default": "",
      "category": "tooling",
      "description": "Optional ReSharper solution settings file copied during finalization.",
      "id": "cmake.option.FO_RESHARPER_SETTINGS"
    },
    {
      "name": "FO_ENABLE_3D",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "feature",
      "description": "Compile support for 3D models.",
      "id": "cmake.option.FO_ENABLE_3D"
    },
    {
      "name": "FO_SPARK_PARTICLES",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "feature",
      "description": "Compile the SPARK particle baker, runtime backend, and Mapper authoring tools.",
      "id": "cmake.option.FO_SPARK_PARTICLES"
    },
    {
      "name": "FO_EFFEKSEER_PARTICLES",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "feature",
      "description": "Compile the Effekseer project compiler and runtime backend.",
      "id": "cmake.option.FO_EFFEKSEER_PARTICLES"
    },
    {
      "name": "FO_NATIVE_SCRIPTING",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "scripting",
      "description": "Reserve the Native scripting source-root option; the current tree has no implemented Native backend.",
      "id": "cmake.option.FO_NATIVE_SCRIPTING"
    },
    {
      "name": "FO_ANGELSCRIPT_SCRIPTING",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "scripting",
      "description": "Compile the AngelScript scripting backend.",
      "id": "cmake.option.FO_ANGELSCRIPT_SCRIPTING"
    },
    {
      "name": "FO_MANAGED_SCRIPTING",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "scripting",
      "description": "Compile the Managed C# scripting backend and embedded Mono runtime.",
      "id": "cmake.option.FO_MANAGED_SCRIPTING"
    },
    {
      "name": "FO_MEMORY_DIAGNOSTICS",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "profiling",
      "description": "Enable rpmalloc occupancy statistics in regular builds; Debug and Tracy already enable them when rpmalloc is available.",
      "id": "cmake.option.FO_MEMORY_DIAGNOSTICS"
    },
    {
      "name": "FO_DISABLE_RPMALLOC",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "dependency",
      "description": "Disable the bundled rpmalloc allocator.",
      "id": "cmake.option.FO_DISABLE_RPMALLOC"
    },
    {
      "name": "FO_DISABLE_MONGO",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "dependency",
      "description": "Disable MongoDB backend support.",
      "id": "cmake.option.FO_DISABLE_MONGO"
    },
    {
      "name": "FO_DISABLE_SQLITE",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "dependency",
      "description": "Disable SQLite backend support.",
      "id": "cmake.option.FO_DISABLE_SQLITE"
    },
    {
      "name": "FO_DISABLE_ASIO",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "dependency",
      "description": "Disable the Asio networking backend.",
      "id": "cmake.option.FO_DISABLE_ASIO"
    },
    {
      "name": "FO_DISABLE_WEB_SOCKETS",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "dependency",
      "description": "Disable WebSocket transport support.",
      "id": "cmake.option.FO_DISABLE_WEB_SOCKETS"
    },
    {
      "name": "FO_DISABLE_NAMESPACE",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "native-interface",
      "description": "Compile engine native symbols without the FOnline namespace.",
      "id": "cmake.option.FO_DISABLE_NAMESPACE"
    },
    {
      "name": "FO_DISABLE_VULKAN",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "rendering",
      "description": "Disable the Vulkan rendering backend.",
      "id": "cmake.option.FO_DISABLE_VULKAN"
    },
    {
      "name": "FO_DISABLE_SDL_GPU",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "rendering",
      "description": "Disable the SDL_GPU rendering backend.",
      "id": "cmake.option.FO_DISABLE_SDL_GPU"
    },
    {
      "name": "FO_VERBOSE_BUILD",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "diagnostics",
      "description": "Enable verbose FOnline build-system status output.",
      "id": "cmake.option.FO_VERBOSE_BUILD"
    },
    {
      "name": "FO_BUILD_CLIENT",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "target",
      "description": "Generate client application targets.",
      "id": "cmake.option.FO_BUILD_CLIENT"
    },
    {
      "name": "FO_BUILD_SERVER",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "target",
      "description": "Generate server application targets.",
      "id": "cmake.option.FO_BUILD_SERVER"
    },
    {
      "name": "FO_BUILD_MAPPER",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "target",
      "description": "Generate mapper application targets.",
      "id": "cmake.option.FO_BUILD_MAPPER"
    },
    {
      "name": "FO_BUILD_ASCOMPILER",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "target",
      "description": "Generate the AngelScript compiler application target.",
      "id": "cmake.option.FO_BUILD_ASCOMPILER"
    },
    {
      "name": "FO_BUILD_BAKER",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "target",
      "description": "Generate baker application targets.",
      "id": "cmake.option.FO_BUILD_BAKER"
    },
    {
      "name": "FO_UNIT_TESTS",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "quality",
      "description": "Generate engine unit-test targets.",
      "id": "cmake.option.FO_UNIT_TESTS"
    },
    {
      "name": "FO_CODE_COVERAGE",
      "cache_type": "BOOL",
      "value_kind": "boolean",
      "required": false,
      "default": "OFF",
      "category": "quality",
      "description": "Generate the code-coverage configuration; this mode cannot be combined with application or unit-test build modes.",
      "id": "cmake.option.FO_CODE_COVERAGE"
    }
  ],
  "stages": [
    {
      "order": 1,
      "name": "Init",
      "entrypoint": "StartProjectGeneration",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/Init.cmake",
      "description": "Declare options, detect the platform/toolchain, and establish common build state.",
      "id": "cmake.stage.Init"
    },
    {
      "order": 2,
      "name": "ProjectOptions",
      "entrypoint": "RegisterProjectOptions",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/ProjectOptions.cmake",
      "description": "Normalize project option combinations and reject incompatible build modes.",
      "id": "cmake.stage.ProjectOptions"
    },
    {
      "order": 3,
      "name": "ThirdParty",
      "entrypoint": "AddThirdPartyLibraries",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/ThirdParty.cmake",
      "description": "Register bundled third-party dependencies and package lookup isolation.",
      "id": "cmake.stage.ThirdParty"
    },
    {
      "order": 4,
      "name": "EngineSources",
      "entrypoint": "RegisterEngineSources",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/EngineSources.cmake",
      "description": "Aggregate engine and embedding-project source lists and generated resource inputs.",
      "id": "cmake.stage.EngineSources"
    },
    {
      "order": 5,
      "name": "Codegen",
      "entrypoint": "SetupCodeGeneration",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/Codegen.cmake",
      "description": "Define generated metadata/source outputs and code-generation targets.",
      "id": "cmake.stage.Codegen"
    },
    {
      "order": 6,
      "name": "CoreLibs",
      "entrypoint": "BuildCoreLibraries",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/CoreLibs.cmake",
      "description": "Create reusable engine libraries from the registered source groups.",
      "id": "cmake.stage.CoreLibs"
    },
    {
      "order": 7,
      "name": "Applications",
      "entrypoint": "BuildApplications",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/Applications.cmake",
      "description": "Create enabled client, server, mapper, compiler, baker, viewer, and test applications.",
      "id": "cmake.stage.Applications"
    },
    {
      "order": 8,
      "name": "ScriptsAndBaking",
      "entrypoint": "SetupScriptsAndBaking",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/ScriptsAndBaking.cmake",
      "description": "Create script compilation and resource baking targets.",
      "id": "cmake.stage.ScriptsAndBaking"
    },
    {
      "order": 9,
      "name": "Packages",
      "entrypoint": "BuildPackages",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/Packages.cmake",
      "description": "Create package targets from embedding-project package declarations.",
      "id": "cmake.stage.Packages"
    },
    {
      "order": 10,
      "name": "Finalize",
      "entrypoint": "FinalizeProjectGeneration",
      "hooks": [
        "Pre",
        "Post"
      ],
      "source": "BuildTools/cmake/stages/Finalize.cmake",
      "description": "Finalize target organization and verify that every stage ran exactly once.",
      "id": "cmake.stage.Finalize"
    }
  ],
  "helpers": [
    {
      "name": "SetOption",
      "kind": "function",
      "signature": "SetOption(<name> <value>)",
      "source": "BuildTools/Init.cmake",
      "description": "Set an embedding-project default only when the variable is not already defined.",
      "id": "cmake.helper.SetOption"
    },
    {
      "name": "AddStageHook",
      "kind": "macro",
      "signature": "AddStageHook(<stage> <Pre|Post> <macro-name>)",
      "source": "BuildTools/Init.cmake",
      "description": "Register a project macro at a stage boundary before that stage executes.",
      "id": "cmake.helper.AddStageHook"
    },
    {
      "name": "RegisterFindPackageHandler",
      "kind": "macro",
      "signature": "RegisterFindPackageHandler(<package> <handler-macro>)",
      "source": "BuildTools/Init.cmake",
      "description": "Register the explicit package lookup handler used by the ThirdParty-stage find_package interceptor.",
      "id": "cmake.helper.RegisterFindPackageHandler"
    },
    {
      "name": "AddEngineSources",
      "kind": "macro",
      "signature": "AddEngineSources(<role> <path-or-glob> [<role> <path-or-glob> ...])",
      "source": "BuildTools/cmake/helpers/Build.cmake",
      "allowed_roles": [
        "COMMON",
        "SERVER",
        "CLIENT",
        "MAPPER",
        "BAKER",
        "TESTS"
      ],
      "description": "Add role-scoped embedding-project native sources before RegisterEngineSources.",
      "id": "cmake.helper.AddEngineSources"
    },
    {
      "name": "AddNativeIncludeDir",
      "kind": "macro",
      "signature": "AddNativeIncludeDir(<directory> [...])",
      "source": "BuildTools/cmake/helpers/Build.cmake",
      "description": "Add project-relative include directories when Native scripting is enabled.",
      "id": "cmake.helper.AddNativeIncludeDir"
    },
    {
      "name": "AddBakingTarget",
      "kind": "function",
      "signature": "AddBakingTarget(<target> [SUB_CONFIG <name>] [FORCE] [COMMENT <text>])",
      "source": "BuildTools/cmake/stages/ScriptsAndBaking.cmake",
      "description": "Create a project baking target with an optional subconfig, force mode, and build-hash update after SetupScriptsAndBaking.",
      "id": "cmake.helper.AddBakingTarget"
    }
  ]
}
