# Copyright (C) 2019 The Android Open Source Project
#
# 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
#
#      http://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.

# Noop function used to override rules we don't want to support in standalone.
def _noop_override(**kwargs):
    pass

PERFETTO_CONFIG = struct(
    # This is used to refer to deps within perfetto's BUILD files.
    # In standalone and bazel-based embedders use '//', because perfetto has its
    # own repository, and //xxx would be relative to @perfetto//xxx.
    # In Google internal builds, instead, this is set to //third_party/perfetto,
    # because perfetto doesn't have its own repository there.
    root = "//",

    # These variables map dependencies to perfetto third-party projects. This is
    # to allow perfetto embedders (e.g. gapid) and google internal builds to
    # override paths and target names to their own third_party.
    deps = struct(
        # Target exposing the build config header. It should be a valid
        # cc_library dependency as it will become a dependency of every
        # perfetto_cc_library target. It needs to expose a
        # "perfetto_build_flags.h" file that can be included via:
        # #include "perfetto_build_flags.h".
        build_config = ["//:build_config_hdr"],

        # Target exposing the PERFETTO_VERSION_STRING() and
        # PERFETTO_VERSION_SCM_REVISION() macros. This is overridden in google
        # internal builds.
        version_header = ["//:cc_perfetto_version_header"],

        # Target exposing platform-specific functionality for base. This is
        # overriden in Google internal builds.
        base_platform = ["//:perfetto_base_default_platform"],

        zlib = ["@perfetto_dep_zlib//:zlib"],
        expat = ["@perfetto_dep_expat//:expat"],
        jsoncpp = ["@perfetto_dep_jsoncpp//:jsoncpp"],
        linenoise = ["@perfetto_dep_linenoise//:linenoise"],
        sqlite = ["@perfetto_dep_sqlite//:sqlite"],
        sqlite_ext_percentile = ["@perfetto_dep_sqlite_src//:percentile_ext"],
        protoc = ["@com_google_protobuf//:protoc"],
        protoc_lib = ["@com_google_protobuf//:protoc_lib"],
        protobuf_lite = ["@com_google_protobuf//:protobuf_lite"],
        protobuf_full = ["@com_google_protobuf//:protobuf"],
        protobuf_descriptor_proto = ["@com_google_protobuf//:descriptor_proto"],

        # The Python targets are empty on the standalone build because we assume
        # any relevant deps are installed on the system or are not applicable.
        protobuf_py = [],
        pandas_py = [],
        tp_vendor_py = [],
        tp_resolvers_py = [],

        # There are multiple configurations for the function name demangling
        # logic in trace processor:
        # (1) The following defaults include a subset of demangling sources
        #     from llvm-project. This is the most complete implementation.
        # (2) You can avoid the llvm dependency by setting "llvm_demangle = []"
        #     here and PERFETTO_LLVM_DEMANGLE to false in your
        #     perfetto_build_flags.h. Then the implementation will use a
        #     demangler from the c++ runtime, which will most likely handle
        #     only itanium mangling, and is unavailable on some platforms (e.g.
        #     Windows, where it becomes a nop).
        # (3) You can override the whole demangle_wrapper below, and provide
        #     your own demangling implementation.
        demangle_wrapper = [ "//:src_trace_processor_demangle" ],
        llvm_demangle = ["@perfetto_dep_llvm_demangle//:llvm_demangle"],
    ),

    # This struct allows embedders to customize the cc_opts for Perfetto
    # 3rd party dependencies. They only have an effect if the dependencies are
    # initialized with the Perfetto build files (i.e. via perfetto_deps()).
    deps_copts = struct(
        zlib = [],
        expat = [],
        jsoncpp = [],
        linenoise = [],
        sqlite = [],
        llvm_demangle = [],
    ),

    # Allow Bazel embedders to change the visibility of "public" targets.
    # This variable has been introduced to limit the change to Bazel and avoid
    # making the targets fully public in the google internal tree.
    public_visibility = [
        "//visibility:public",
    ],

    # Allow Bazel embedders to change the visibility of the proto targets.
    # This variable has been introduced to limit the change to Bazel and avoid
    # making the targets public in the google internal tree.
    proto_library_visibility = "//visibility:private",

    # Allow Bazel embedders to change the visibility of the Go protos.
    # Go protos have all sorts of strange behaviour in Google3 so need special
    # handling as the rules for other languages do not work for Go.
    go_proto_library_visibility = "//visibility:private",

    # This struct allows the embedder to customize copts and other args passed
    # to rules like cc_binary. Prefixed rules (e.g. perfetto_cc_binary) will
    # look into this struct before falling back on native.cc_binary().
    # This field is completely optional, the embedder can omit the whole
    # |rule_overrides| or invidivual keys. They are assigned to None or noop
    # actions here just for documentation purposes.
    rule_overrides = struct(
        proto_library = None,

        cc_binary = None,
        cc_library = None,
        cc_proto_library = None,

        # Supporting java rules pulls in the JDK and generally is not something
        # we need for most embedders.
        java_proto_library = _noop_override,
        java_lite_proto_library = _noop_override,

        py_binary = None,
        py_library = None,
        py_proto_library = None,

        go_proto_library = None,

        jspb_proto_library = None,
    ),

    # The default copts which we use to compile C++ code.
    default_copts = [
        "-std=c++17",
    ]
)
