# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

load("@pigweed//pw_build:merge_flags.bzl", "flags_from_dict")
load("@pigweed//targets/rp2040:transition.bzl", "RP2_SYSTEM_FLAGS")
load("@rules_cc//cc:cc_library.bzl", "cc_library")

package(default_visibility = ["//visibility:public"])

platform(
    name = "rp2040",
    constraint_values = [
        "//libraries/pw_board_led_rp2040:backend_constraint_value",
        "@freertos//:disable_task_statics",
        "@freertos//:port_ARM_CM0",
        "@pico-sdk//bazel/constraint:rp2040",
        "@pigweed//pw_build/constraints/rtos:freertos",
        "@pigweed//pw_interrupt_cortex_m:backend",
        "@pigweed//targets/rp2040:freertos_config_cv",
        "@platforms//os:none",

        # For toolchain selection.
        "@platforms//cpu:armv6-m",
        "@pigweed//pw_build/constraints/arm:cortex-m0",
    ],
    flags = flags_from_dict(RP2_SYSTEM_FLAGS | {
        "@pigweed//pw_system:extra_platform_libs": "//targets/rp2040:extra_platform_libs",
    }),
)

cc_library(
    name = "extra_platform_libs",
    deps = [
        "@pico-sdk//src/rp2_common/pico_stdlib:pico_stdlib",
        "@pigweed//pw_libcxx",
        "@pigweed//pw_tokenizer:linker_script",
        "@pigweed//targets/rp2040:pre_init",
    ],
    alwayslink = 1,
)
