# 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:compatibility.bzl", "host_backend_alias")
load("@pigweed//targets/host_device_simulator:transition.bzl", "host_device_simulator_binary")
load("@pigweed//targets/rp2040:flash.bzl", "flash_rp2040")
load("//targets/rp2:binary.bzl", "rp2040_binary", "rp2350_binary")
load("//tools:tools.bzl", "sense_device_console", "sense_host_console")

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

cc_binary(
    name = "production",
    srcs = ["main.cc"],
    deps = [
        "//modules/air_sensor:service",
        "//modules/board:service",
        "//modules/event_timers",
        "//modules/morse_code:encoder",
        "//modules/proximity:manager",
        "//modules/pubsub:service",
        "//modules/state_manager",
        "//modules/state_manager:service",
        "//system:pubsub",
        "//system:worker",
        "//system",
        ":threads",
        "@pigweed//pw_assert:check",
        "@pigweed//pw_async2:system_time_provider",
        "@pigweed//pw_log",
        "@pigweed//pw_system:async",
        "@pigweed//pw_thread:thread",
        "//modules/sampling_thread",

        # These should be provided by pw_system:async.
        "@pigweed//pw_assert:assert_backend_impl",
        "@pigweed//pw_assert:check_backend_impl",
        "@pigweed//pw_log:backend_impl",
        "@pigweed//pw_system:extra_platform_libs",
    ],
)

cc_library(
    name = "threads_headers",
    hdrs = ["threads.h"],
    deps = ["@pigweed//pw_thread:thread"],
)

label_flag(
    name = "threads",
    build_setting_default = ":unspecified_backend",
)

host_backend_alias(
    name = "unspecified_backend",
    backend = "//targets/host:production_app_threads",
)

# Create an rp2040 flashable ELF
rp2040_binary(
    name = "rp2040.elf",
    binary = ":production",
)

# Create an rp2350 flashable ELF
rp2350_binary(
    name = "rp2350.elf",
    binary = ":production",
)

# Create a host binary using the Pigweed upstream pw_system host_device_simulator.
host_device_simulator_binary(
    name = "simulator",
    binary = ":production",
)

sense_host_console(
    name = "simulator_console",
    binary = ":simulator",
)

sense_host_console(
    name = "simulator_webconsole",
    binary = ":simulator",
    extra_args = ["--browser"],
)

sense_device_console(
    name = "rp2040_console",
    binary = ":rp2040.elf",
)

sense_device_console(
    name = "rp2040_webconsole",
    binary = ":rp2040.elf",
    extra_args = ["--browser"],
)

sense_device_console(
    name = "rp2350_console",
    binary = ":rp2350.elf",
)

sense_device_console(
    name = "rp2350_webconsole",
    binary = ":rp2350.elf",
    extra_args = ["--browser"],
)

alias(
    name = "flash",
    actual = ":flash_rp2040",
)

flash_rp2040(
    name = "flash_rp2040",
    rp2040_binary = "rp2040.elf",
)

# Note: Despite the name, the rule works for the 2350.
flash_rp2040(
    name = "flash_rp2350",
    rp2040_binary = "rp2350.elf",
)
