# 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_third_party/emboss/emboss.gni")

config("default_config") {
  # EMBOSS_DCHECK is used as an assert() for logic embedded in Emboss, where
  # EMBOSS_CHECK is used to check preconditions on application logic (e.g.
  # Write() checks the [requires: ...] attribute).
  defines = [
    "EMBOSS_CHECK=PW_DASSERT",
    "EMBOSS_CHECK_ABORTS",
    "EMBOSS_DCHECK=PW_DASSERT",
    "EMBOSS_DCHECK_ABORTS",
  ]
  cflags_cc = [
    "-include",
    rebase_path("$dir_pw_assert/public/pw_assert/assert.h", root_build_dir),
  ]
}

pw_source_set("default_overrides") {
  public_configs = [ ":default_config" ]
  public_deps = [ "$dir_pw_assert" ]
}

config("disable_warnings") {
  cflags_cc = [
    "-Wno-unused-parameter",
    "-Wno-deprecated-copy",
    "-Wno-format-invalid-specifier",
  ]
}

pw_source_set("cpp_utils") {
  # emboss depends on a separate checkout not included in pigweed, so
  # ignore gn check for this module.
  check_includes = false
  public = [
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_arithmetic.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_arithmetic_all_known_generated.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_arithmetic_maximum_operation_generated.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_array_view.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_bit_util.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_constant_view.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_cpp_types.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_cpp_util.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_defines.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_enum_view.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_maybe.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_memory_util.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_prelude.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_text_util.h",
    "$dir_pw_third_party_emboss/runtime/cpp/emboss_view_parameters.h",
  ]
  public_configs = [ ":disable_warnings" ]
  public_deps = [ pw_third_party_emboss_CONFIG ]
  visibility = [ "*" ]
}

# Exists solely to satisfy presubmit. embossc_runner.py is used for real in
# build_defs.gni.
action("embossc_runner") {
  script = "embossc_runner.py"
  visibility = []
  outputs = [ "$target_gen_dir/foo" ]
}

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