# Copyright 2022 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("@bazel_skylib//rules:common_settings.bzl", "string_flag") load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_python//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library") load("//pw_build:compatibility.bzl", "incompatible_with_mcu") load("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test") package(default_visibility = ["//visibility:public"]) licenses(["notice"]) # One specific flavor of duct tape for now. string_flag( name = "cortex-m_toolchain_kind", build_setting_default = "gcc", values = [ "clang", "gcc", ], ) config_setting( name = "use_clang_for_cortex-m", flag_values = {":cortex-m_toolchain_kind": "clang"}, ) alias( name = "cortex-m_cc_toolchain", actual = select({ ":use_clang_for_cortex-m": "//pw_toolchain/arm_clang:arm_clang_toolchain_cortex-m", "//conditions:default": "//pw_toolchain/arm_gcc:arm_gcc_toolchain_cortex-m", }), ) # This is an interim solution to allow flag-based toolchain selection. # Do not rely on this, as it is likely to change. toolchain( name = "cc_toolchain_cortex-m0", target_compatible_with = [ "//pw_build/constraints/arm:cortex-m0", ], toolchain = ":cortex-m_cc_toolchain", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", ) toolchain( name = "cc_toolchain_cortex-m0plus", target_compatible_with = [ "//pw_build/constraints/arm:cortex-m0plus", ], toolchain = ":cortex-m_cc_toolchain", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", ) toolchain( name = "cc_toolchain_cortex-m33", target_compatible_with = [ "//pw_build/constraints/arm:cortex-m33", ], toolchain = ":cortex-m_cc_toolchain", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", ) toolchain( name = "cc_toolchain_cortex-m3", target_compatible_with = [ "//pw_build/constraints/arm:cortex-m3", ], toolchain = ":cortex-m_cc_toolchain", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", ) cc_library( name = "constexpr_tag", hdrs = ["public/pw_toolchain/constexpr_tag.h"], strip_include_prefix = "public", ) cc_library( name = "no_destructor", hdrs = ["public/pw_toolchain/no_destructor.h"], strip_include_prefix = "public", deps = ["//pw_polyfill"], ) cc_library( name = "globals", hdrs = ["public/pw_toolchain/globals.h"], strip_include_prefix = "public", ) cc_library( name = "infinite_loop", hdrs = ["public/pw_toolchain/infinite_loop.h"], strip_include_prefix = "public", deps = ["//pw_preprocessor"], ) pw_cc_test( name = "no_destructor_test", srcs = ["no_destructor_test.cc"], deps = [ ":no_destructor", "//pw_assert:check", "//pw_polyfill", ], ) pw_cc_test( name = "globals_test", srcs = ["globals_test.cc"], deps = [ ":globals", "//pw_assert:check", "//pw_polyfill", ], ) pw_cc_test( name = "infinite_loop_test", srcs = [ "infinite_loop_test.cc", "infinite_loop_test_c.c", ], deps = [ ":infinite_loop", "//pw_unit_test", ], ) cc_library( name = "sibling_cast", hdrs = ["public/pw_toolchain/internal/sibling_cast.h"], strip_include_prefix = "public", visibility = ["//:__subpackages__"], # Restrict to Pigweed ) pw_cc_test( name = "sibling_cast_test", srcs = ["sibling_cast_test.cc"], deps = [ ":sibling_cast", "//pw_compilation_testing:negative_compilation_testing", ], ) cc_library( name = "wrap_abort", srcs = ["wrap_abort.cc"], implementation_deps = ["//pw_assert:check"], linkopts = ["-Wl,--wrap=abort"], alwayslink = 1, ) filegroup( name = "doxygen", srcs = [ "public/pw_toolchain/constexpr_tag.h", "public/pw_toolchain/globals.h", "public/pw_toolchain/infinite_loop.h", "public/pw_toolchain/no_destructor.h", ], ) sphinx_docs_library( name = "docs", srcs = [ "bazel.rst", "docs.rst", "globals_test.cc", "gn.rst", ], prefix = "pw_toolchain/", target_compatible_with = incompatible_with_mcu(), )