# 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 (is_perfetto_build_generator) {
    # On Android in-tree builds we don't need anything special in GN. However
    # remember to add the target to the |target_host_only| list in
    # tools/gen_android_bp to instruct the Android.bp generator.
    executable(target_name) {
      forward_variables_from(invoker, "*")
    }
  } else {
    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) {
        # 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",
          ]
        }
      }
    }
  }  # if (is_perfetto_build_generator)
}
