# Copyright 2024 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("//build_overrides/pigweed.gni")

import("$dir_pw_build/gn_internal/build_target.gni")

# Note: In general, prefer to import target_types.gni rather than this file.
#
# This template wraps a configurable target type specified by the current
# toolchain to be used for all pw_rust_static_library targets. A wrapper for
# GN's built-in rust_static_library target, it is analogous to
# pw_static_library with additions to support rust specific parameters such
# as rust edition and cargo config features.
#
# For more information on the features provided by this template, see the full
# docs at https://pigweed.dev/pw_build/?highlight=pw_rust_static_library
template("pw_rust_static_library") {
  pw_internal_build_target(target_name) {
    forward_variables_from(invoker, "*")

    if (!defined(crate_name)) {
      crate_name = target_name
    }

    _edition = "2021"
    if (defined(edition)) {
      _edition = edition
    }
    assert(_edition == "2015" || _edition == "2018" || _edition == "2021" ||
               _edition == "2024",
           "edition ${_edition} is not supported")

    if (!defined(configs)) {
      configs = []
    }
    configs += [ "$dir_pw_build:rust_edition_${_edition}" ]

    if (!defined(rustflags)) {
      rustflags = []
    }

    if (defined(features)) {
      foreach(i, features) {
        rustflags += [ "--cfg=feature=\"${i}\"" ]
      }
    }

    if (!defined(underlying_target_type)) {
      underlying_target_type = "static_library"
    }

    crate_name = string_replace(crate_name, "-", "_")
    output_dir = "${target_out_dir}/lib"
    add_global_link_deps = false
    libs = [ "${crate_name}" ]
  }
}
