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

import("$dir_pw_bloat/bloat.gni")
import("$dir_pw_build/module_config.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

declare_args() {
  # The build target that overrides the default configuration options for this
  # module. This should point to a source set that provides defines through a
  # public config (which may -include a file or add defines directly).
  pw_function_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

config("public_include_path") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

pw_source_set("config") {
  public = [ "public/pw_function/config.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [ pw_function_CONFIG ]
  visibility = [ ":*" ]
}

pw_source_set("pw_function") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":config",
    "$dir_pw_third_party/fuchsia:fit",
    dir_pw_assert,
    dir_pw_preprocessor,
  ]
  public = [ "public/pw_function/function.h" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  report_deps = [
    ":callable_size",
    ":function_size",
  ]
}

pw_test_group("tests") {
  tests = [
    ":function_test",
    "$dir_pw_third_party/fuchsia:function_tests",
  ]
}

pw_test("function_test") {
  deps = [
    ":pw_function",
    dir_pw_polyfill,
  ]
  sources = [ "function_test.cc" ]
  negative_compilation_tests = true
}

pw_size_diff("function_size") {
  title = "Pigweed function size report"

  binaries = [
    {
      target = "size_report:basic_function"
      base = "size_report:pointer_base"
      label = "Simple pw::Function vs. function pointer"
    },
  ]
}

pw_size_diff("callable_size") {
  title = "Size comparison of callable objects"

  binaries = [
    {
      target = "size_report:callable_size_function_pointer"
      base = "size_report:callable_size_base"
      label = "Function pointer"
    },
    {
      target = "size_report:callable_size_static_lambda"
      base = "size_report:callable_size_base"
      label = "Static lambda (operator+)"
    },
    {
      target = "size_report:callable_size_simple_lambda"
      base = "size_report:callable_size_base"
      label = "Non-capturing lambda"
    },
    {
      target = "size_report:callable_size_capturing_lambda"
      base = "size_report:callable_size_base"
      label = "Simple capturing lambda"
    },
    {
      target = "size_report:callable_size_multi_capturing_lambda"
      base = "size_report:callable_size_base"
      label = "Multi-argument capturing lambda"
    },
    {
      target = "size_report:callable_size_custom_class"
      base = "size_report:callable_size_base"
      label = "Custom class"
    },
  ]
}
