# 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_function/function.gni")
import("$dir_pw_unit_test/test.gni")

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 = [
    "$dir_pw_third_party/fuchsia:fit",
    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" ]
}

config("enable_dynamic_allocation_config") {
  defines = [ "PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION=1" ]
  visibility = [ ":*" ]
}

# Use this for pw_function_CONFIG to enable dynamic allocation.
pw_source_set("enable_dynamic_allocation") {
  public_configs = [ ":enable_dynamic_allocation_config" ]
}

pw_source_set("pointer") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_function/pointer.h" ]
  sources = [ "public/pw_function/internal/static_invoker.h" ]
}

pw_source_set("scope_guard") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_function/scope_guard.h" ]
}

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

pw_test_group("tests") {
  tests = [
    ":function_test",
    ":pointer_test",
    ":scope_guard_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_test("pointer_test") {
  deps = [
    ":pointer",
    ":pw_function",
  ]
  sources = [ "pointer_test.cc" ]
}

pw_test("scope_guard_test") {
  sources = [ "scope_guard_test.cc" ]
  deps = [
    ":pw_function",
    ":scope_guard",
  ]
}

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"
    },
  ]
}
