blob: 4dd3c83ed0593288f5646e5fad1085c02132bb20 [file] [edit]
# 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",
"verilator",
],
)
config_setting(
name = "silicon",
flag_values = {":target_type": "silicon"},
)
config_setting(
name = "fpga",
flag_values = {":target_type": "fpga"},
)
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"],
":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 = "config",
srcs = ["config.rs"],
crate_features = select({
":fpga": ["fpga"],
":silicon": ["silicon"],
":verilator": ["verilator"],
"//conditions:default": [],
}),
crate_name = "kernel_config",
edition = "2024",
target_compatible_with = TARGET_COMPATIBLE_WITH,
visibility = [":__subpackages__"],
deps = [
"@pigweed//pw_kernel/config:kernel_config_interface",
"@pigweed//pw_kernel/lib/memory_config",
],
)
filegroup(
name = "linker_script_template",
srcs = ["target.ld.jinja"],
visibility = [":__subpackages__"],
)