# Licensed under the Apache-2.0 license
# SPDX-License-Identifier: Apache-2.0

load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@pigweed//pw_build:merge_flags.bzl", "flags_from_dict")
load("@pigweed//pw_kernel:flags.bzl", "KERNEL_DEVICE_COMMON_FLAGS")
load("@rules_rust//rust:defs.bzl", "rust_library")
load("//target/earlgrey:defs.bzl", "TARGET_COMPATIBLE_WITH")

platform(
    name = "earlgrey",
    constraint_values = [
        ":target_earlgrey",
        "@pigweed//pw_kernel/arch/riscv:timer_mtime",
        "@pigweed//pw_build/constraints/riscv/extensions:I",
        "@pigweed//pw_build/constraints/riscv/extensions:M",
        "@pigweed//pw_build/constraints/riscv/extensions:C",
        "@pigweed//pw_build/constraints/riscv/extensions:A.not",
        "@pigweed//pw_build/constraints/riscv/extensions:Smepmp",
        "@pigweed//pw_build/constraints/rust:no_std",
        "@platforms//cpu:riscv32",
        "@platforms//os:none",
    ],
    flags = flags_from_dict(
        KERNEL_DEVICE_COMMON_FLAGS | {
            "@pigweed//pw_kernel/arch/riscv:exceptions_reload_pmp": True,
            "@pigweed//pw_kernel/config:kernel_config": ":config",
            "@pigweed//pw_kernel/subsys/console:console_backend": ":console",
            "@pigweed//pw_log/rust:pw_log_backend": "@pigweed//pw_kernel:log_backend_basic",
        },
    ),
    visibility = [":__subpackages__"],
)

string_flag(
    name = "target_type",
    build_setting_default = "silicon",
    values = [
        "silicon",
        "fpga",
        "qemu",
        "verilator",
    ],
)

config_setting(
    name = "silicon",
    flag_values = {":target_type": "silicon"},
)

config_setting(
    name = "fpga",
    flag_values = {":target_type": "fpga"},
)

config_setting(
    name = "qemu",
    flag_values = {":target_type": "qemu"},
)

config_setting(
    name = "verilator",
    flag_values = {":target_type": "verilator"},
)

constraint_value(
    name = "target_earlgrey",
    constraint_setting = "@pigweed//pw_kernel/target:target",
    visibility = [":__subpackages__"],
)

rust_library(
    name = "entry",
    srcs = [
        "entry.rs",
        "epmp.rs",
    ],
    crate_features = select({
        ":fpga": ["fpga"],
        ":qemu": ["qemu"],
        ":silicon": ["silicon"],
        ":verilator": ["verilator"],
        "//conditions:default": [],
    }),
    edition = "2024",
    tags = ["kernel"],
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    visibility = [":__subpackages__"],
    deps = [
        ":config",
        "@pigweed//pw_kernel/arch/riscv:arch_riscv",
        "@pigweed//pw_kernel/kernel",
        "@pigweed//pw_kernel/lib/memory_config",
        "@rust_crates//:riscv-rt",
    ],
)

rust_library(
    name = "gpio",
    srcs = ["gpio.rs"],
    crate_name = "earlgrey_gpio",
    edition = "2024",
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    visibility = ["//visibility:public"],
    deps = [
        ":pinmux",
        "//hal/blocking",
        "//target/earlgrey/registers",
        "@ureg",
    ],
)

rust_library(
    name = "pinmux",
    srcs = ["pinmux.rs"],
    crate_name = "earlgrey_pinmux",
    edition = "2024",
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    visibility = ["//visibility:public"],
    deps = [
        "//target/earlgrey/registers",
        "@ureg",
    ],
)

rust_library(
    name = "console",
    srcs = ["console.rs"],
    crate_name = "console_backend",
    edition = "2024",
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    deps = [
        "//target/earlgrey/registers",
        "@pigweed//pw_kernel/arch/riscv:arch_riscv",
        "@pigweed//pw_kernel/kernel",
        "@pigweed//pw_status/rust:pw_status",
        "@rust_crates//:embedded-io",
    ],
)

rust_library(
    name = "clock_domain",
    srcs = ["clock_domain.rs"],
    crate_features = select({
        ":fpga": ["fpga"],
        ":qemu": ["qemu"],
        ":silicon": ["silicon"],
        ":verilator": ["verilator"],
        "//conditions:default": [],
    }),
    crate_name = "earlgrey_clock_domain",
    edition = "2024",
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    visibility = ["//visibility:public"],
)

rust_library(
    name = "config",
    srcs = ["config.rs"],
    crate_features = select({
        ":fpga": ["fpga"],
        ":qemu": ["qemu"],
        ":silicon": ["silicon"],
        ":verilator": ["verilator"],
        "//conditions:default": [],
    }),
    crate_name = "kernel_config",
    edition = "2024",
    target_compatible_with = TARGET_COMPATIBLE_WITH,
    visibility = [":__subpackages__"],
    deps = [
        ":clock_domain",
        "@pigweed//pw_kernel/config:kernel_config_interface",
        "@pigweed//pw_kernel/lib/memory_config",
    ],
)

filegroup(
    name = "linker_script_template",
    srcs = ["target.ld.jinja"],
    visibility = [":__subpackages__"],
)
