# 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", "flash_rp2350")
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",
)

flash_rp2350(
    name = "flash_rp2350",
    rp2350_binary = "rp2350.elf",
)
