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

import("python_action.gni")
import("target_types.gni")

# Creates a pw_source_set that pulls in a static library hosted in CIPD.
#
# Let's say you have a package with a static library:
# CIPD package path: `pigweed/third_party/libsomething`
# Files:
#   ./libsomething/include/something.h
#   ./libsomething/libsomething.a
# Installed by your manifest at //tools/my_packages.json.
#
# Your usage might look like this:
#
#   import("$dir_pw_build/copy_from_cipd.gni")
#
#   # This target links in the .a file.
#   pw_cipd_static_library("libsomething") {
#     manifest = "//tools/my_packages.json"
#     library_path = "libsomething/libsomething.a"
#     cipd_package = "pigweed/third_party/libsomething"
#   }
#
#   # This target needs libsomething.a to be linked in.
#   pw_source_set("math_stuff") {
#     sources = [ "optimized_math.cc" ]
#     ...
#     deps = [ ":libsomething" ]
#   }
#
# Args:
#   manifest: (required) GN-style path to the JSON manifest file that the
#     package of interest is defined in.
#   library_path: (required) The path of the static library of interest,
#     relative to the root where the manifest's CIPD packages were installed to.
#     e.g. if the package is installed by pigweed.json, and the .a file is at
#     //environment/cipd/packages/pigweed/libs/libsomething.a, this argument
#     should be "libs/libsomething.a".
#   cipd_package: (required) The name of the CIPD package. This is the "path" of
#     the package in the manifest file.
#
template("pw_cipd_static_library") {
  _out_dir = "${target_out_dir}/cipd/$target_name"
  _out_relative = rebase_path(_out_dir, root_build_dir)
  _out_file = "$_out_dir/${invoker.library_path}"
  _manifest_path = rebase_path(invoker.manifest, root_build_dir)
  pw_python_action("$target_name.check_copy") {
    module = "pw_build.copy_from_cipd"
    args = [
      "--package-name=${invoker.cipd_package}",
      "--manifest=${_manifest_path}",
      "--file=${invoker.library_path}",
      "--out-dir=${_out_relative}",
    ]

    # Parallel calls might both be invoking CIPD on the same directory which
    # might work but is redundant, so serialize calls.
    pool = "$dir_pw_build/pool:copy_from_cipd($default_toolchain)"

    # TODO: b/234884827 - This should somehow track the actual .a for changes as
    # well.
    inputs = [ invoker.manifest ]
    outputs = [ _out_file ]

    python_deps = [ "$dir_pw_build/py" ]
  }

  pw_source_set(target_name) {
    forward_variables_from(invoker,
                           "*",
                           [
                             "manifest",
                             "library_path",
                             "cipd_package",
                           ])
    if (!defined(libs)) {
      libs = []
    }
    if (!defined(deps)) {
      deps = []
    }
    libs += [ _out_file ]
    deps += [ ":$target_name.check_copy" ]
  }
}
