# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# 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("//starboard/raspi/shared/toolchain/raspi_shared_toolchain.gni")
template("install_target") {
  installable_target_name = invoker.installable_target_name

  # TODO(b/218889313): raspi relies on install_content being adjacent to the
  # executable. In order to make tests pass we need to overload the install
  # subdir and install content subdir.
  if (invoker.type == "executable") {
    # install_subdir = "bin"
    install_subdir = ""
    source_name = installable_target_name
  } else if (invoker.type == "shared_library") {
    install_subdir = "lib"
    source_name = "lib${installable_target_name}.so"
  } else {
    assert(false, "You can only install an executable or shared library.")
  }

  action(target_name) {
    forward_variables_from(invoker, [ "testonly" ])

    script = "//starboard/build/run_bash.py"

    strip_executable = gcc_toolchain_strip
    inputs = [
      strip_executable,
      "$root_out_dir/$source_name",
    ]

    deps = invoker.deps
    deps += [ ":$installable_target_name" ]

    outputs = [ "$sb_install_output_dir/$install_subdir/$installable_target_name/$source_name" ]

    args = [
      rebase_path(strip_executable, root_build_dir),
      "-o",
      rebase_path(outputs[0], root_out_dir),
      rebase_path("$root_out_dir/$source_name", root_out_dir),
    ]
  }
}
