# 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.

import("perfetto.gni")

# A template to make host tools handier. The main problem it solves is that when
# building host toolchain tools on an Android build, the executables end up in
# out/xxx/gcc_like_host, which is an inconvenient location. Our developers
# (and also some of our scripts) expect them to live in out/xxx/.
# This template takes care takes care of building the target only on the host
# toolchain and copy it over in the root build directory.
template("perfetto_host_executable") {
  if (current_toolchain == host_toolchain) {
    executable(target_name) {
      forward_variables_from(invoker, "*")
    }
  } else {
    not_needed(invoker, "*", [ "testonly" ])
    _host_target = ":$target_name($host_toolchain)"
    _testonly = defined(invoker.testonly) && invoker.testonly
    if (perfetto_build_with_embedder || is_perfetto_build_generator) {
      # Don't copy anythin in Chromium, just add a dependency to the host
      # target. V8 and other GN embedder builds. This causes problems on
      # some bot (see crbug.com/1002599).
      group(target_name) {
        testonly = _testonly
        deps = [
          _host_target,
        ]
      }
    } else {
      copy(target_name) {
        testonly = _testonly
        deps = [
          _host_target,
        ]
        _host_out_dir = get_label_info(_host_target, "root_out_dir")
        sources = [
          "$_host_out_dir/$target_name",
        ]
        outputs = [
          "$root_out_dir/$target_name",
        ]
      }
    }
  }
}
