# Copyright 2022 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/python.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}

config("fit_public_include_path") {
  include_dirs = [ "repo/sdk/lib/fit/include" ]
  visibility = [ ":*" ]
}

config("stdcompat_public_include_path") {
  include_dirs = [ "repo/sdk/lib/stdcompat/include" ]
  visibility = [ ":*" ]
}

pw_source_set("fit") {
  public_configs = [ ":fit_public_include_path" ]
  public_deps = [
    ":stdcompat",
    dir_pw_assert,
  ]
  public = [
    "repo/sdk/lib/fit/include/lib/fit/function.h",
    "repo/sdk/lib/fit/include/lib/fit/nullable.h",
    "repo/sdk/lib/fit/include/lib/fit/result.h",
    "repo/sdk/lib/fit/include/lib/fit/traits.h",
  ]
  sources = [
    "repo/sdk/lib/fit/include/lib/fit/internal/compiler.h",
    "repo/sdk/lib/fit/include/lib/fit/internal/function.h",
    "repo/sdk/lib/fit/include/lib/fit/internal/result.h",
    "repo/sdk/lib/fit/include/lib/fit/internal/utility.h",
  ]
}

pw_test("function_tests") {
  sources = [ "repo/sdk/lib/fit/test/function_tests.cc" ]
  deps = [ ":fit" ]

  # Define EXPECT_NULL(), which Pigweed's test framework does not have
  defines = [ "EXPECT_NULL(arg)=EXPECT_EQ((arg), nullptr)" ]

  # This test does not build with strict warnings, so disable them.
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

pw_source_set("stdcompat") {
  public_configs = [ ":stdcompat_public_include_path" ]
  public = [
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/bit.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/functional.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/memory.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/optional.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/type_traits.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/utility.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/version.h",
  ]
  sources = [
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/bit.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/constructors.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/exception.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/storage.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/type_traits.h",
    "repo/sdk/lib/stdcompat/include/lib/stdcompat/internal/utility.h",
  ]
}

pw_python_script("generate_fuchsia_patch") {
  sources = [ "generate_fuchsia_patch.py" ]
}
