# Copyright 2023 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("@rules_rust//rust:defs.bzl", "rust_doc_test", "rust_library", "rust_proc_macro", "rust_test") load("//pw_build:selects.bzl", "TARGET_COMPATIBLE_WITH_HOST_SELECT") rust_library( name = "pw_log", srcs = [ "pw_log.rs", ], crate_features = select({ "@rust_crates//:std": ["std"], "//conditions:default": [""], }), visibility = ["//visibility:public"], deps = [ ":pw_log_backend", ":pw_log_backend_api", ], ) rust_test( name = "pw_log_test", crate = ":pw_log", crate_features = select({ "@rust_crates//:std": ["std"], "//conditions:default": [""], }), # TODO: b/343726867 - support on-device rust tests target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) rust_doc_test( name = "pw_log_doc_test", crate = ":pw_log", target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) rust_library( name = "pw_log_backend_api", srcs = [ "pw_log_backend_api.rs", ], visibility = ["//visibility:public"], ) rust_library( name = "pw_log_backend_println", srcs = [ "pw_log_backend_println.rs", ], crate_name = "pw_log_backend", proc_macro_deps = [":pw_log_backend_println_macro"], # TODO: b/343467774 - provide no_std backend by default tags = ["manual"], visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", ], ) rust_proc_macro( name = "pw_log_backend_println_macro", srcs = [ "pw_log_backend_println_macro.rs", ], visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", "//pw_format/rust:pw_format", "//pw_status/rust:pw_status", "@rust_crates//:proc-macro2", "@rust_crates//:quote", "@rust_crates//:syn", ], ) # Declare two targets. One named `pw_log_backend_printf` which uses the # crate name `pw_log_backend` for use with `pw_log`'s facade pattern. The # second named `pw_log_backend_printf_docs` with the crate name # `pw_log_backend_printf` used for generating docs for the crate. rust_library( name = "pw_log_backend_printf", srcs = [ "pw_log_backend_printf/lib.rs", "pw_log_backend_printf/varargs.rs", ], crate_name = "pw_log_backend", proc_macro_deps = [":pw_log_backend_printf_macro"], # TODO: b/343467774 - provide no_std backend by default target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", "//pw_bytes/rust:pw_bytes", "//pw_format/rust:pw_format_core", ], ) rust_library( name = "pw_log_backend_printf_docs", srcs = [ "pw_log_backend_printf/lib.rs", "pw_log_backend_printf/varargs.rs", ], crate_name = "pw_log_backend_printf", proc_macro_deps = [":pw_log_backend_printf_macro"], # TODO: b/343467774 - provide no_std backend by default target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", "//pw_bytes/rust:pw_bytes", "//pw_format/rust:pw_format_core", ], ) # Use the _docs target for tests and doc tests so they get the unique crate # name. rust_test( name = "pw_log_backend_printf_test", crate = ":pw_log_backend_printf_docs", # TODO: b/343726867 - support on-device rust tests target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) rust_doc_test( name = "pw_log_backend_printf_doc_test", crate = ":pw_log_backend_printf_docs", target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) rust_proc_macro( name = "pw_log_backend_printf_macro", srcs = [ "pw_log_backend_printf_macro.rs", ], visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", "//pw_format/rust:pw_format", "//pw_status/rust:pw_status", "@rust_crates//:proc-macro2", "@rust_crates//:quote", "@rust_crates//:syn", ], ) rust_library( name = "printf_backend_test", srcs = [ "backend_tests.rs", "printf_backend_test.rs", ], visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", ":pw_log_backend_printf", "@rust_crates//:libc", "@rust_crates//:nix", ], ) rust_test( name = "printf_backend_test_test", crate = ":printf_backend_test", # TODO: b/343726867 - support on-device rust tests target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) rust_library( name = "println_backend_test", srcs = [ "backend_tests.rs", "println_backend_test.rs", ], target_compatible_with = select({ # This test needs unstable features. "@rules_rust//rust/toolchain/channel:nightly": [], "//conditions:default": ["@platforms//:incompatible"], }), visibility = ["//visibility:public"], deps = [ ":pw_log_backend_api", ":pw_log_backend_println", ], ) rust_test( name = "println_backend_test_test", crate = ":println_backend_test", # TODO: b/343726867 - support on-device rust tests target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), ) label_flag( name = "pw_log_backend", build_setting_default = ":pw_log_backend_printf", )