# Commandline options

# To build updater-related targets, you need to set this option
AddOption(
    "--with-updater",
    dest="fullenv",
    action="store_true",
    help="Full firmware environment",
)

AddOption(
    "--options",
    dest="optionfile",
    type="string",
    nargs=1,
    action="store",
    default="fbt_options.py",
    help="Environment option file",
)

AddOption(
    "--extra-int-apps",
    action="store",
    dest="extra_int_apps",
    default="",
    help="List of applications to add to firmware's built-ins. Also see FIRMWARE_APP_SET and FIRMWARE_APPS",
)

AddOption(
    "--extra-define",
    action="append",
    dest="extra_defines",
    default=[],
    help="Extra global define that will be passed to C/C++ compiler, can be specified multiple times",
)

AddOption(
    "--extra-ext-apps",
    action="store",
    dest="extra_ext_apps",
    default="",
    help="List of applications to forcefully build as standalone .elf",
)

AddOption(
    "--proxy-env",
    action="store",
    dest="proxy_env",
    default="",
    help="Comma-separated list of additional environment variables to pass to child SCons processes",
)


# Construction environment variables

vars = Variables(GetOption("optionfile"), ARGUMENTS)

vars.AddVariables(
    BoolVariable(
        "VERBOSE",
        help="Print full commands",
        default=False,
    ),
    BoolVariable(
        "FORCE",
        help="Force target action (for supported targets)",
        default=False,
    ),
    BoolVariable(
        "DEBUG",
        help="Enable debug build",
        default=True,
    ),
    BoolVariable(
        "LIB_DEBUG",
        help="Enable debug build for libraries",
        default=False,
    ),
    BoolVariable(
        "COMPACT",
        help="Optimize for size",
        default=False,
    ),
    EnumVariable(
        "TARGET_HW",
        help="Hardware target",
        default="7",
        allowed_values=[
            "7",
            "18",
        ],
    ),
    (
        "DIST_SUFFIX",
        "Suffix for binaries in build output for dist targets",
        "local",
    ),
    (
        "UPDATE_VERSION_STRING",
        "Version string for updater package",
        "${DIST_SUFFIX}",
    ),
    (
        "COPRO_CUBE_VERSION",
        "Cube version",
        "",
    ),
    (
        "COPRO_STACK_ADDR",
        "Core2 Firmware address",
        "0",
    ),
    (
        "COPRO_STACK_BIN",
        "Core2 Firmware file name",
        "",
    ),
    (
        "COPRO_DISCLAIMER",
        "Value to pass to bundling script to confirm dangerous operations",
        "",
    ),
    PathVariable(
        "COPRO_OB_DATA",
        help="Path to OB reference data",
        validator=PathVariable.PathIsFile,
        default="",
    ),
    PathVariable(
        "COPRO_STACK_BIN_DIR",
        help="Path to ST-provided stacks",
        validator=PathVariable.PathIsDir,
        default="",
    ),
    PathVariable(
        "COPRO_CUBE_DIR",
        help="Path to Cube root",
        validator=PathVariable.PathIsDir,
        default="",
    ),
    EnumVariable(
        "COPRO_STACK_TYPE",
        help="Core2 stack type",
        default="ble_light",
        allowed_values=[
            "ble_full",
            "ble_light",
            "ble_basic",
        ],
    ),
    PathVariable(
        "SVD_FILE",
        help="Path to SVD file",
        validator=PathVariable.PathAccept,
        default="",
    ),
    PathVariable(
        "OTHER_ELF",
        help="Path to prebuilt ELF file to debug",
        validator=PathVariable.PathAccept,
        default="",
    ),
    (
        "FBT_TOOLCHAIN_VERSIONS",
        "Whitelisted toolchain versions (leave empty for no check)",
        tuple(),
    ),
    (
        "OPENOCD_OPTS",
        "Options to pass to OpenOCD",
        "",
    ),
    (
        "BLACKMAGIC",
        "Blackmagic probe location",
        "auto",
    ),
    EnumVariable(
        "SWD_TRANSPORT",
        help="SWD interface adapter type",
        default="auto",
        allowed_values=[
            "auto",
            "cmsis-dap",
            "stlink",
            "blackmagic_usb",
            "blackmagic_wifi",
        ],
    ),
    (
        "SWD_TRANSPORT_SERIAL",
        "SWD interface adapter serial number",
        "auto",
    ),
    (
        "UPDATE_SPLASH",
        "Directory name with slideshow frames to render after installing update package",
        "update_default",
    ),
    (
        "LOADER_AUTOSTART",
        "Application name to automatically run on Flipper boot",
        "",
    ),
    (
        "FIRMWARE_APPS",
        "Map of (configuration_name->application_list)",
        {
            "default": (
                # Svc
                "basic_services",
                # Apps
                "main_apps",
                "system_apps",
                # Settings
                "settings_apps",
            ),
        },
    ),
    (
        "FIRMWARE_APP_SET",
        "Application set to use from FIRMWARE_APPS",
        "default",
    ),
    (
        "APPSRC",
        "Application source directory for app to build & upload",
        "",
    ),
    # List of tuples (directory, add_to_global_include_path)
    (
        "APPDIRS",
        "Directories to search for firmware components & external apps",
        [
            ("applications", False),
            ("applications/services", True),
            ("applications/main", True),
            ("applications/settings", False),
            ("applications/system", False),
            ("applications/debug", False),
            ("applications/examples", False),
            ("applications/drivers", False),
            ("applications_user", False),
        ],
    ),
    BoolVariable(
        "PVSNOBROWSER",
        help="Don't open browser after generating error repots",
        default=False,
    ),
    (
        "FIRMWARE_ORIGIN",
        "Firmware origin. 'Official' if follows upstream's API structure, otherwise fork name. "
        " This will also create a C define FW_ORIGIN_<origin> so that "
        " app can check what version it is being built for.",
        "Official",
    ),
    (
        "FLIP_PORT",
        "Full port name of Flipper to use, if multiple Flippers are connected",
        "auto",
    ),
    EnumVariable(
        "LANG_SERVER",
        help="Language server type for vscode_dist.",
        default="clangd",
        allowed_values=[
            "cpptools",
            "clangd",
        ],
    ),
    BoolVariable(
        "STRICT_FAP_IMPORT_CHECK",
        help="Enable strict import check for .faps",
        default=True,
    ),
    (
        "ARGS",
        "Extra arguments to pass to certain scripts supporting it",
        "",
    ),
)

Return("vars")
