# 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_docgen/docs.gni")

config("colorize_output") {
  cflags = [
    # Colorize output. Ninja's Clang invocation disables color by default.
    "-fdiagnostics-color",
  ]
  ldflags = cflags
}

config("debugging") {
  # Enable debug symbol generation. This has no effect on final code size.
  cflags = [ "-g" ]
}

config("extra_debugging") {
  # Include things like macro expansion in debug info.
  cflags = [ "-g3" ]
}

# Optimization levels
config("optimize_debugging") {
  cflags = [ "-Og" ]
  ldflags = cflags
}

config("optimize_speed") {
  cflags = [ "-O2" ]
  ldflags = cflags
}

config("optimize_more_speed") {
  cflags = [ "-O3" ]
  ldflags = cflags
}

config("optimize_size") {
  cflags = [ "-Os" ]
  ldflags = cflags
}

# Standard compiler flags to reduce output binary size.
config("reduced_size") {
  cflags = [
    "-fno-common",
    "-fno-exceptions",
    "-ffunction-sections",
    "-fdata-sections",
  ]
  cflags_cc = [ "-fno-rtti" ]
}

config("strict_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wimplicit-fallthrough",
    "-Wcast-qual",
    "-Wundef",

    # Make all warnings errors, except for the exemptions below.
    "-Werror",
    "-Wno-error=cpp",  # preprocessor #warning statement
    "-Wno-error=deprecated-declarations",  # [[deprecated]] attribute
  ]
  cflags_cc = [ "-Wnon-virtual-dtor" ]
}

# This config contains warnings that we don't necessarily recommend projects
# enable, but are enabled for upstream Pigweed for maximum project
# compatibility.
config("extra_strict_warnings") {
  cflags = [ "-Wshadow" ]
}

config("cpp11") {
  cflags_cc = [ "-std=c++11" ]
}

config("cpp14") {
  cflags_cc = [ "-std=c++14" ]
}

config("cpp17") {
  cflags_cc = [
    "-std=c++17",

    # Allow uses of the register keyword, which may appear in C headers.
    "-Wno-register",
  ]
}

# This empty target is used as the default value for module configurations.
# Projects may set pw_build_DEFAULT_MODULE_CONFIG to a different GN target that
# overrides modules' configuration options via macro definitions or a header
# forcibly included with `-include`.
group("empty") {
}

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

# Pool to limit a single thread to download external Go packages at a time.
pool("go_download_pool") {
  depth = 1
}
