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

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

config("no_cpp_includes") {
  cflags = [ "-nostdinc++" ]
}

config("use_minimal_cpp_stdlib") {
  configs = [
    ":public_include_path",
    ":no_cpp_includes",
  ]
}

pw_source_set("pw_minimal_cpp_stdlib") {
  public_configs = [ ":public_include_path" ]
  configs = [ ":no_cpp_includes" ]
  public = [
    "public/algorithm",
    "public/array",
    "public/cinttypes",
    "public/climits",
    "public/cmath",
    "public/cstdarg",
    "public/cstddef",
    "public/cstdint",
    "public/cstdio",
    "public/cstring",
    "public/initializer_list",
    "public/iterator",
    "public/limits",
    "public/new",
    "public/string_view",
    "public/type_traits",
    "public/utility",
  ]
  sources = [
    "public/internal/algorithm.h",
    "public/internal/array.h",
    "public/internal/cinttypes.h",
    "public/internal/climits.h",
    "public/internal/cmath.h",
    "public/internal/cstdarg.h",
    "public/internal/cstddef.h",
    "public/internal/cstdint.h",
    "public/internal/cstdio.h",
    "public/internal/cstring.h",
    "public/internal/initializer_list.h",
    "public/internal/iterator.h",
    "public/internal/limits.h",
    "public/internal/new.h",
    "public/internal/string_view.h",
    "public/internal/type_traits.h",
    "public/internal/utility.h",
  ]
  public_deps = [ dir_pw_polyfill ]
}

pw_test_group("tests") {
  tests = []
  if (host_os != "win") {
    # TODO(amontanez): pw_minimal_cpp_stdlib tests do not build on windows.
    tests += [
      ":minimal_cpp_stdlib_test",
      ":standard_library_test",
    ]
  }
}

pw_source_set("minimal_cpp_stdlib_isolated_test") {
  configs = [ ":no_cpp_includes" ]
  deps = [
    ":pw_minimal_cpp_stdlib",
    dir_pw_polyfill,
    dir_pw_preprocessor,
  ]
  sources = [ "isolated_test.cc" ]
  visibility = [ ":*" ]
}

pw_test("minimal_cpp_stdlib_test") {
  deps = [ ":minimal_cpp_stdlib_isolated_test" ]
  sources = [ "test.cc" ]
}

pw_test("standard_library_test") {
  deps = [
    dir_pw_polyfill,
    dir_pw_preprocessor,
  ]
  sources = [
    "isolated_test.cc",
    "test.cc",
  ]
}

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