# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/clang/clang.gni")
import("//build/config/clang/crash_diagnostics.gni")
import("//build/config/clang/time_trace.gni")
import("//build/config/compiler.gni")
import("//build/config/linker.gni")
import("//build/rust/config.gni")
import("//build/toolchain/ccache.gni")
import("//build/toolchain/concurrent_jobs.gni")
import("//build/toolchain/goma.gni")
import("//build/unification/global_variables.gni")
import("//zircon/public/gn/config/experimental_cxx_version.gni")

declare_args() {
  if (is_fuchsia) {
    # Controls whether the compiler emits full stack frames for function calls.
    # This reduces performance but increases the ability to generate good
    # stack traces, especially when we have bugs around unwind table generation.
    # It applies only for Fuchsia targets (see below where it is unset).
    #
    # TODO(fxbug.dev/32216): Theoretically unwind tables should be good enough so we can
    # remove this option when the issues are addressed.
    enable_frame_pointers = is_debug
  }

  # Controls whether the rust compiler uses v0 symbol mangling scheme
  # (see https://github.com/rust-lang/rfcs/blob/HEAD/text/2603-rust-symbol-name-mangling-v0.md).
  # The v0 symbol mangling scheme requires upstream LLVM support when demangling,
  # so it is not on by default.
  # TODO(fxbug.dev/57302): Enable v0 mangling by default.
  rust_v0_symbol_mangling = false
}

# No frame pointers for host compiles.
if (!is_fuchsia) {
  enable_frame_pointers = false
}

# Turns on the rust compilation analysis generator. This will produce a
# directory $OUT/save-analysis-temp, which will dump all the source analysis
# that the compiler collected while analyzing the source.  This config is
# included conditionally, see //build/config/BUILDCONFIG.gn for details.
config("rust_analysis") {
  rustflags = [ "-Zsave-analysis" ]
}

config("rust_edition_2018") {
  rustflags = [ "--edition=2018" ]
}

config("rust_edition_2015") {
  rustflags = [ "--edition=2015" ]
}

config("rust_opt_level_z") {
  rustflags = [ "-Copt-level=z" ]
}

config("rust_no_features") {
  rustflags = [ "-Zallow-features=" ]
}

config("netstack3_only_specialization_feature") {
  rustflags = [
    "-Zallow-features=specialization",
    "-Aincomplete-features",
  ]
}

config("rust_2018_idioms") {
  rustflags = [ "-Wrust-2018-idioms" ]
}

config("rust_target") {
  rustflags = [
    "--target",
    rust_target,
    "--cap-lints=$rust_cap_lints",
  ]
}

config("rust_panic_abort") {
  rustflags = [
    "-Cpanic=abort",
    "-Cforce-unwind-tables=yes",
    "-Zpanic_abort_tests",
  ]
}

config("rust_v0_symbol_mangling") {
  if (rust_v0_symbol_mangling) {
    rustflags = [ "-Zsymbol-mangling-version=v0" ]
  }
}

config("language") {
  cflags_c = [ "-std=c11" ]
  cflags_cc = [ "-std=c++$experimental_cxx_version" ]
  if (current_os == "mac") {
    # macOS needs this to not complain about C++17isms that older macOS
    # system libc++ doesn't support.  But we use our own toolchain's static
    # libc++ anyway.
    cflags_cc += [ "-faligned-allocation" ]

    # libc++ headers mark some symbols as unavailable on macOS by default
    # because the system libc++ doesn't support them.  But we use our own
    # toolchain's static libc++ anyway.
    defines = [ "_LIBCPP_DISABLE_AVAILABILITY" ]
  }
}

config("color_diagnostics") {
  # GCC correctly defaults this from the terminal, so leave it alone.
  if (!is_gcc) {
    cflags = [ "-fcolor-diagnostics" ]
    asmflags = cflags
    ldflags = cflags

    # The macOS linker does not support `--color-diagnostics`.
    if (current_os != "mac") {
      ldflags += [ "-Wl,--color-diagnostics" ]
    }
  }
}

config("crash-diagnostics-dir") {
  if (!is_gcc && crash_diagnostics_dir != "") {
    cflags = [ "-fcrash-diagnostics-dir=" +
               rebase_path(crash_diagnostics_dir, root_build_dir) ]
    asmflags = cflags
    ldflags = cflags
  }
}

config("time-trace") {
  if (!is_gcc && time_trace) {
    cflags = [ "-ftime-trace" ]
    asmflags = cflags
    ldflags = cflags
  }
}

config("compiler") {
  cflags = []
  cflags_cc = [ "-fvisibility-inlines-hidden" ]
  cflags_objcc = [ "-fvisibility-inlines-hidden" ]
  configs = [
    ":color_diagnostics",
    ":crash-diagnostics-dir",
    ":rust_panic_cfg",
    ":time-trace",
    ":toolchain_version_stamp",
  ]

  if (!is_gcc) {
    configs += [ ":clang_defaults" ]
  }

  if (current_os == "fuchsia") {
    configs += [ "//build/config/fuchsia:compiler" ]
  } else {
    if (current_os == "linux") {
      configs += [ "//build/config/linux:compiler" ]
    } else if (current_os == "mac") {
      configs += [ "//build/config/mac:compiler" ]
    }
  }

  asmflags = cflags
}

# These flags are enabled by default in Fuchsia's Clang toolchain, but we set
# them explicitly to support other Clang toolchains and Clang-based tools.
config("clang_defaults") {
  cflags = [ "-fexperimental-new-pass-manager" ]
  asmflags = cflags
  ldflags = cflags
  if (clang_embed_bitcode) {
    cflags += [
      "-Xclang",
      "-fembed-bitcode=all",
    ]
  }
  if (current_cpu == "x64") {
    asmflags += [ "-Wa,--mrelax-relocations=yes" ]
  }
}

# We want to force a recompile and relink of the world whenever our toolchain
# changes since artifacts from an older version of the toolchain may or may not
# be compatible with newer ones.
#
# To achieve this, we insert an unused flag in the compile line.
config("toolchain_version_stamp") {
  if (clang_prefix == default_clang_prefix) {
    clang_version = read_file(
            "//prebuilt/third_party/clang/${host_platform}/.versions/clang.cipd_version",
            "json")
    defines = [ "TOOLCHAIN_VERSION=${clang_version.instance_id}" ]
  }
  rustflags = [ "--cfg=__rust_toolchain=\"${rustc_version_string}\"" ]
}

config("relative_paths") {
  # TODO(fxbug.dev/54161): Keep in sync with //zircon/public/gn/config:relative_paths
  # until build unification completes.

  if (is_gcc) {
    if (use_goma) {
      # TODO(fxbug.dev/27308): `-fdebug-prefix-map` is also used by Goma to canonicalize
      # build commands, allowing it to reuse compilation results for users running
      # out of different working directories. However, it only supports a single
      # "-fdebug-prefix-map" prefix. Attempting to provide more than one causes
      # canonicalization to fail, meaning that builds running out of different
      # directories won't share cache results. For now, we just provide a single
      # debug-prefix-map, even though more would be ideal.

      # Map "/some/dir/fuchsia" to "../..".
      cflags = [ "-fdebug-prefix-map=" + rebase_path("$zx/..") + "=" +
                 rebase_path("$zx/..", root_build_dir) ]
    } else {
      cflags = [
        # Map "/some/dir/fuchsia/out/my-build.my-arch" to ".".
        "-fdebug-prefix-map=" + rebase_path(root_build_dir) + "=.",

        # Map "/some/dir/fuchsia/out" to "..".
        "-fdebug-prefix-map=" + rebase_path("$root_build_dir/..") + "=..",

        # Map "/some/dir/fuchsia" to "../..".
        "-fdebug-prefix-map=" + rebase_path("$zx/..") + "=" +
            rebase_path("$zx/..", root_build_dir),
      ]
    }
  } else {
    # Make builds independent of the absolute file path. -fdebug-prefix-map=
    # can be used to the same effect, but it requires putting the absolute path
    # to the build directory in the compile command, thus making it dependent
    # on the absolute path of build directory. -fdebug-compilation-dir is
    # designed to address this issue, making both debug info and the compile
    # command itself independent of the absolute path of the build directory.
    cflags = [
      "-fdebug-compilation-dir",
      ".",
    ]
  }

  if (!is_gcc) {
    # This makes sure that include directories in the toolchain are
    # represented as relative to the build directory (because that's how we
    # invoke the compiler), rather than absolute.  This can affect __FILE__
    # expansions (e.g. assertions in system headers).  We normally run a
    # compiler that's someplace within the source tree, so its absolute
    # installation path will have a prefix matching `absolute_path` and
    # hence be mapped to `relative_path` in the debugging information, so
    # this should actually be superfluous for purposes of the debugging
    # information.
    cflags += [ "-no-canonical-prefixes" ]
  }

  asmflags = cflags
  ldflags = cflags

  if (current_os == "win") {
    ldflags += [
      # This embeds just "name.pdb" in the binary instead of the absolute
      # path to the PDB file.
      "-Wl,/pdbaltpath:%_PDB%",

      # This embeds a fake Windows-style absolute path rather than the real
      # build-time absolute path in the PDB file.  Windows apparently
      # requires an absolute path here, so we use an arbitrary fake one for
      # reproducibility.
      "-Wl,/pdbsourcepath:c:\\src",
    ]
  }

  rustflags = [
    "--remap-path-prefix",
    rebase_path("//") + "=" + rebase_path("//", root_build_dir),
  ]
}

config("debug") {
  # TODO(phosek): remove this config when nothing refers on it.
}

config("release") {
  defines = [ "NDEBUG=1" ]
}

config("exceptions") {
  cflags_cc = [ "-fexceptions" ]
  cflags_objcc = cflags_cc
  ldflags = cflags_cc
}

config("no_exceptions") {
  cflags_cc = [ "-fno-exceptions" ]
  cflags_objcc = cflags_cc
  ldflags = cflags_cc
}

config("rtti") {
  cflags_cc = [ "-frtti" ]
  cflags_objcc = cflags_cc
  ldflags = cflags_cc
}

config("no_rtti") {
  cflags_cc = [ "-fno-rtti" ]
  cflags_objcc = cflags_cc
  ldflags = cflags_cc
}

config("default_include_dirs") {
  include_dirs = [
    "//",
    root_gen_dir,
  ]
}

config("linker_gc") {
  cflags = [
    "-fdata-sections",
    "-ffunction-sections",
  ]
  ldflags = cflags
  if (current_os == "mac") {
    ldflags += [ "-Wl,-dead_strip" ]
  } else if (current_os == "win") {
    ldflags += [ "-Wl,/opt:ref" ]
  } else {
    ldflags += [ "-Wl,--gc-sections" ]
  }
}

config("linker_string_merging") {
  if (current_os == "win") {
    ldflags = [ "-Wl,/opt:lldtailmerge" ]
  } else if (current_os != "mac") {
    ldflags = [ "-Wl,-O2" ]
  }
}

# Each optimize_$optimize config below corresponds to a single setting that's
# controlled by the optimize argument. The default_optimize level is set to
# optimize_$optimize for convenience, but individual targets can override their
# optimization level by remove default_optimize and manually applying one of
# the configs below.
#
# The linker_gc_$optimize configs are an exact parallel.  default_linker_gc
# is separate from default_optimize so it can be removed separately.

# NOTE: Keep in sync with //zircon/public/gn/config/BUILD.gn

config("optimize_none") {
  cflags = [ "-O0" ]
  ldflags = cflags
  rustflags = [ "-Copt-level=0" ]
}

config("optimize_debug") {
  if (false) {
    # TODO(phosek): consider different settings to improve performance.
    # -Og is what the compiler documents as "optimize the debugging
    # experience", but zxdb team has reported Clang's -Og is problematic.
    # This should have a bug# for a detailed bug about -Og and/or Rust-O1
    # making debugging difficult in known specific reproducible ways.
    cflags = [ "-Og" ]
    ldflags = cflags
    rustflags = [ "-Copt-level=1" ]
  } else {
    configs = [ ":optimize_none" ]
  }
}

config("optimize_default") {
  cflags = [ "-O2" ]
  ldflags = cflags
  rustflags = [ "-Copt-level=2" ]
}

config("optimize_size") {
  if (is_gcc) {
    cflags = [ "-Os" ]
  } else {
    cflags = [ "-Oz" ]
  }
  ldflags = cflags
  if (!is_gcc && clang_ml_inliner) {
    cflags += [
      # `release` uses AOT model embedded inside the compiler.
      "-mllvm",
      "-enable-ml-inliner=release",
    ]
  }
  rustflags = [ "-Copt-level=z" ]
  configs = [ ":linker_string_merging" ]
}

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

  # TODO(http://fxbug.dev/63313): This should be the same as for C/C++. Also,
  # we don't fully understand why -Os is smaller than -Oz.
  rustflags = [ "-Copt-level=s" ]
  configs = [ ":linker_string_merging" ]
}

config("optimize_sanitizer") {
  # Instrumentation adds overhead that is greatly improved by optimization.
  # -O1 is well-tested with the instrumentation modes and does not degrade the
  # comprehensibility of backtraces produced by sanitizer failures.
  cflags = [ "-O1" ]
  ldflags = cflags
  rustflags = [ "-Copt-level=1" ]
}

config("optimize_profile") {
  # TODO(fxbug.dev/51509): Perhaps use a different default.
  configs = [ ":optimize_none" ]
}

config("default_optimize") {
  configs = [ ":optimize_${optimize}" ]
}

config("linker_gc_none") {
  # No linker GC when wholly unoptimized.
}

# Linker GC is a good default for most cases.
config("linker_gc_debug") {
  configs = [ ":linker_gc" ]
}

config("linker_gc_default") {
  configs = [ ":linker_gc" ]
}

config("linker_gc_size") {
  configs = [ ":linker_gc" ]
}

config("linker_gc_speed") {
  configs = [ ":linker_gc" ]
}

config("linker_gc_sanitizer") {
  configs = [ ":linker_gc" ]
}

config("linker_gc_profile") {
  # TODO(fxbug.dev/51509): See if we can enable linker GC for profile.
}

config("default_linker_gc") {
  configs = [ ":linker_gc_$optimize" ]
}

# Each of the debuginfo_$debuginfo configs below corresponds to a single setting
# that controls the amount of debugging information used and is controlled by
# the debuginfo argument. The default_debuginfo level is set to
# debuginfo_$debuginfo for convenience, but individual targets can override
# their debuginfo level by manually applying one of the configs below.

# NOTE: Keep in sync with //zircon/public/gn/config/BUILD.gn

config("debuginfo_none") {
  cflags = [ "-g0" ]
  asmflags = cflags
  ldflags = cflags
  rustflags = [ "-Cdebuginfo=0" ]
}

config("debuginfo_backtrace") {
  cflags = [ "-g1" ]
  asmflags = cflags
  ldflags = cflags
  rustflags = [ "-Cdebuginfo=1" ]
}

config("debuginfo_debug") {
  cflags = [ "-g3" ]
  asmflags = cflags
  ldflags = cflags
  rustflags = [ "-Cdebuginfo=2" ]
}

config("default_debuginfo") {
  configs = [ ":debuginfo_${debuginfo}" ]
  if (debuginfo != "none" && current_os == "win") {
    # TODO(fxbug.dev/55244): This produces the .pdb file, but it doesn't seem
    # to get the DWARF data out of the main output file.
    ldflags = [ "-Wl,/debug:full" ]
  }
}

config("default_frame_pointers") {
  if (enable_frame_pointers) {
    configs = [ ":frame_pointers" ]
  } else {
    configs = [ ":no_frame_pointers" ]
  }
}

config("frame_pointers") {
  cflags = [ "-fno-omit-frame-pointer" ]
  ldflags = cflags
  rustflags = [ "-Cforce-frame-pointers" ]
}

config("no_frame_pointers") {
  cflags = [ "-fomit-frame-pointer" ]
  ldflags = cflags

  # rustc automatically does this for release builds, and there's no way to
  # force it for non-release.
}

config("default_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wnewline-eof",
    "-Wconversion",
    "-Wno-unused-parameter",
    "-Wno-unknown-warning-option",
    "-Wno-sign-conversion",

    # TODO(fxbug.dev/35965): Temporarily disable C99 designator warnings introduced in
    # https://reviews.llvm.org/D59754. After the new Clang toolchain lands
    # and we do some cleanup, this will be re-enabled.
    "-Wno-unknown-warning-option",
    "-Wno-c99-designator",

    # TODO(fxbug.dev/37215): Temporarily disable this warning until we roll toolchain.
    # Then we can re-enable it and cleanup instances it appears.
    "-Wno-int-in-bool-context",

    # TODO(fxbug.dev/37765): Keep this flag here while it is enabled in ZN to keep the
    # flags unified.
    "-Wno-address-of-packed-member",

    # TODO(fxbug.dev/43681): Temporarily disable this warning until we roll toolchain,
    # then come back and fix the instances this appears after rolling.
    "-Wno-range-loop-analysis",

    # TODO(fxbug.dev/49143): Temporarily disable this warning until we disable it
    # individually for affected third_party libraries.
    "-Wno-deprecated-declarations",
  ]
  cflags_cc = [
    # TODO(fxbug.dev/38640): Keep this flag here while it is enabled in ZN to keep the
    # flags unified.
    "-Wno-deprecated-copy",

    # TODO(fxbug.dev/45689): Temporarily disable this warning until we roll toolchain,
    # then come back and fix the instances this appears after rolling.
    "-Wno-non-c-typedef-for-linkage",

    # TODO(fxbug.dev/56202): Temporarily disable this warning until we roll toolchain,
    # then come back and fix the instances this appears after rolling.
    "-Wno-unknown-warning-option",
    "-Wno-suggest-override",
  ]
}

# TODO(fxbug.dev/58160): clean up instances of this outside of third party code.
config("Wno-reorder-init-list") {
  cflags = [ "-Wno-reorder-init-list" ]
  visibility = [
    "//garnet/examples/intl/wisdom/tests/*",
    "//src/developer/memory/metrics/tests/*",
    "//src/graphics/examples/vkcube/*",
    "//src/graphics/lib/compute/tests/*",
    "//src/graphics/tests/vkext/*",
    "//src/lib/elflib/*",
    "//src/lib/vulkan/tests/*",
    "//src/modular/bin/basemgr/*",
    "//src/modular/tests/*",
    "//third_party/*",
  ]
}

# TODO(fxbug.dev/58161): clean up instances of this outside of third party code.
config("Wno-unused-function") {
  cflags = [ "-Wno-unused-function" ]
  visibility = [
    "//src/devices/i2c/drivers/aml-i2c:aml-i2c",
    "//src/devices/i2c/drivers/intel-i2c",
    "//zircon/third_party/uapp/dash",
  ]
}

# TODO(fxbug.dev/58162): clean up instances of this outside of third party code.
config("Wno-conversion") {
  cflags = [ "-Wno-conversion" ]
  visibility = [
    "//garnet/bin/catapult_converter/*",
    "//garnet/bin/cpuperf/*",
    "//garnet/bin/cpuperf_provider/*",
    "//garnet/bin/insntrace/*",
    "//garnet/bin/insntrace/tests/*",
    "//garnet/bin/ktrace_provider/*",
    "//garnet/bin/run_test_component/*",
    "//garnet/bin/sched/*",
    "//garnet/bin/test_runner/report_result/*",
    "//garnet/bin/time/*",
    "//garnet/bin/trace/*",
    "//garnet/bin/trace2json/*",
    "//garnet/bin/trace_manager/*",
    "//garnet/bin/ui/benchmarks/*",
    "//garnet/bin/ui/benchmarks/transparency_benchmark/*",
    "//garnet/lib/debugger_utils/*",
    "//garnet/lib/loader/*",
    "//garnet/lib/perfmon/*",
    "//garnet/lib/profiler/*",
    "//garnet/lib/trace_converters/*",
    "//garnet/public/lib/fostr/*",
    "//garnet/public/lib/test_runner/cpp/*",
    "//sdk/lib/media/audio/cpp/*",
    "//sdk/lib/media/cpp/*",
    "//sdk/lib/sys/cpp/*",
    "//sdk/lib/sys/service/cpp/*",
    "//sdk/lib/syslog/streams/cpp/*",
    "//sdk/lib/ui/scenic/cpp/*",
    "//sdk/lib/vfs/cpp/*",
    "//src/bringup/bin/bootsvc/*",
    "//src/bringup/bin/netsvc/*",
    "//src/bringup/bin/ptysvc/*",
    "//src/cobalt/bin/system-metrics/*",
    "//src/cobalt/bin/testapp/*",
    "//src/cobalt/bin/testing/*",
    "//src/connectivity/bluetooth/core/bt-host/*",
    "//src/connectivity/bluetooth/examples/bt-le-heart-rate-peripheral/*",
    "//src/connectivity/bluetooth/hci/transport/uart/*",
    "//src/connectivity/bluetooth/hci/vendor/broadcom/*",
    "//src/connectivity/bluetooth/hci/vendor/intel/*",
    "//src/connectivity/bluetooth/tools/bt-hci-tool/*",
    "//src/connectivity/bluetooth/tools/bt-intel-tool/*",
    "//src/connectivity/network/tools/nc/third_party/openbsd-netcat:nc",
    "//src/connectivity/openthread/drivers/ot-radio/*",
    "//src/connectivity/openthread/ot-stack/*",
    "//src/connectivity/openthread/tests/fake-drivers/fake-ot-radio/*",
    "//src/connectivity/openthread/third_party/*",
    "//src/connectivity/telephony/drivers/qmi-fake-transport/*",
    "//src/connectivity/telephony/drivers/qmi-usb-transport/*",
    "//src/connectivity/telephony/tests/driver-unit/*",
    "//src/connectivity/telephony/tests/fake-drivers/*",
    "//src/connectivity/wlan/drivers/realtek/rtl88xx/*",
    "//src/connectivity/wlan/drivers/testing/lib/sim-env/*",
    "//src/connectivity/wlan/drivers/third_party/*",
    "//src/connectivity/wlan/lib/common/cpp/*",
    "//src/connectivity/wlan/lib/mlme/cpp/*",
    "//src/connectivity/wlan/testing/wlantap-driver/*",
    "//src/developer/debug/debug_agent/*",
    "//src/developer/debug/ipc/*",
    "//src/developer/debug/shared/*",
    "//src/developer/debug/third_party/libunwindstack/*",
    "//src/developer/debug/zxdb/client/*",
    "//src/developer/debug/zxdb/common/*",
    "//src/developer/debug/zxdb/console/*",
    "//src/developer/debug/zxdb/expr/*",
    "//src/developer/debug/zxdb/symbols/*",
    "//src/developer/memory/mem/*",
    "//src/developer/memory/metrics/*",
    "//src/developer/memory/metrics/tests/*",
    "//src/developer/memory/monitor/*",
    "//src/developer/system_monitor/*",
    "//src/developer/system_monitor/bin/harvester/*",
    "//src/devices/usb/bin/lsusb/*",
    "//src/diagnostics/validator/inspect/lib/cpp/*",
    "//src/graphics/display/drivers/*",
    "//src/graphics/display/drivers/display/*",
    "//src/graphics/display/drivers/ssd1306/*",
    "//src/graphics/display/testing/*",
    "//src/graphics/drivers/misc/goldfish/*",
    "//src/graphics/drivers/misc/goldfish_address_space/*",
    "//src/graphics/lib/compute/common/*",
    "//src/graphics/lib/compute/hotsort/hotsort_gen/*",
    "//src/graphics/lib/compute/hotsort/platforms/vk/*",
    "//src/graphics/lib/compute/spinel/*",
    "//src/graphics/lib/compute/svg/*",
    "//src/graphics/lib/compute/tests/*",
    "//src/graphics/tests/goldfish_benchmark/*",
    "//src/lib/backoff/*",
    "//src/lib/chunked-compression/*",
    "//src/lib/cobalt/cpp/*",
    "//src/lib/containers/cpp/*",
    "//src/lib/ddk/*",
    "//src/lib/elflib/*",
    "//src/lib/fidl_codec/*",
    "//src/lib/files/*",
    "//src/lib/framebuffer/*",
    "//src/lib/fsl/socket/*",
    "//src/lib/fsl/vmo/*",
    "//src/lib/fxl/*",
    "//src/lib/icu/tools/extractor/*",
    "//src/lib/inet/*",
    "//src/lib/json_parser/*",
    "//src/lib/line_input/*",
    "//src/lib/listnode/*",
    "//src/lib/process_builder/*",
    "//src/lib/ui/input/*",
    "//src/lib/ui/scenic/cpp/*",
    "//src/lib/usb_bulk/cpp/*",
    "//src/lib/vulkan/imagepipe_view/*",
    "//src/lib/vulkan/swapchain/*",
    "//src/lib/vulkan/tests/*",
    "//src/media/audio/audio_core/*",
    "//src/media/audio/audio_core/mixer/*",
    "//src/media/audio/audio_core/test/hardware/*",
    "//src/media/audio/drivers/aml-g12-tdm/test/*",
    "//src/media/audio/drivers/intel-hda/controller/*",
    "//src/media/audio/drivers/test/*",
    "//src/media/audio/drivers/virtual_audio/*",
    "//src/media/audio/effects/test_effects/*",
    "//src/media/audio/examples/effects/*",
    "//src/media/audio/examples/fx/*",
    "//src/media/audio/examples/simple_sine/*",
    "//src/media/audio/examples/sync_sine/*",
    "//src/media/audio/examples/tones/*",
    "//src/media/audio/lib/analysis/*",
    "//src/media/audio/lib/clock/*",
    "//src/media/audio/lib/effects_loader/*",
    "//src/media/audio/lib/format/*",
    "//src/media/audio/lib/simple-audio-stream/*",
    "//src/media/audio/lib/test/*",
    "//src/media/audio/lib/timeline/*",
    "//src/media/audio/lib/wav/*",
    "//src/media/audio/tools/audio-capture-timestamp-validator/*",
    "//src/media/audio/tools/audio-driver-ctl/*",
    "//src/media/codec/codecs/*",
    "//src/media/codec/examples/encode_camera/*",
    "//src/media/codec/examples/encode_file/*",
    "//src/media/codec/examples/use_media_decoder/*",
    "//src/media/drivers/amlogic_decoder/*",
    "//src/media/lib/codec_impl/*",
    "//src/media/lib/test/*",
    "//src/media/playback/mediaplayer/*",
    "//src/media/playback/mediaplayer/demux/*",
    "//src/media/playback/mediaplayer/graph/*",
    "//src/media/playback/mediaplayer/metrics/*",
    "//src/media/sounds/soundplayer/*",
    "//src/modular/bin/sessionctl/*",
    "//src/modular/bin/sessionmgr/*",
    "//src/modular/lib/async/cpp/*",
    "//src/modular/lib/fidl/*",
    "//src/modular/lib/integration_testing/cpp/*",
    "//src/power/thermd/*",
    "//src/security/tee_manager/*",
    "//src/storage/bin/dd/*",
    "//src/storage/blobfs/*",
    "//src/storage/blobfs/test/*",
    "//src/storage/fvm/*",
    "//src/storage/minfs/*",
    "//src/storage/volume_image/ftl/*",
    "//src/storage/volume_image/utils/*",
    "//src/sys/activity/*",
    "//src/sys/appmgr/*",
    "//src/sys/bin/psutils/*",
    "//src/sys/lib/chrealm/*",
    "//src/sys/pkg/lib/far/*",
    "//src/sys/sysmgr/*",
    "//src/sys/time/lib/network_time/*",
    "//src/sys/tools/activity-ctl/*",
    "//src/sys/tools/log/*",
    "//src/testing/loadbench/*",
    "//src/ui/a11y/bin/a11y_manager/tests/util/*",
    "//src/ui/a11y/lib/annotation/*",
    "//src/ui/a11y/lib/semantics/util/tests/*",
    "//src/ui/a11y/lib/util/*",
    "//src/ui/bin/root_presenter/*",
    "//src/ui/examples/*",
    "//src/ui/examples/bouncing_ball/*",
    "//src/ui/examples/embedder/*",
    "//src/ui/input/drivers/ft8201/*",
    "//src/ui/input/drivers/hid/*",
    "//src/ui/input/drivers/pc-ps2/*",
    "//src/ui/input/lib/hid-input-report/*",
    "//src/ui/scenic/lib/display/*",
    "//src/ui/scenic/lib/gfx/*",
    "//src/ui/scenic/lib/scenic/util/*",
    "//src/ui/scenic/lib/scheduling/*",
    "//src/ui/scenic/lib/watchdog/*",
    "//src/ui/tools/simple-touch/*",
    "//src/ui/tools/tiles_ctl/*",
    "//src/virtualization/bin/guest/*",
    "//src/virtualization/bin/guest_manager/*",
    "//src/virtualization/bin/vmm/*",
    "//src/virtualization/bin/vmm/device/*",
    "//src/virtualization/buildtools/*",
    "//src/virtualization/lib/vsh/*",
    "//src/virtualization/tests/*",
    "//src/virtualization/third_party/fdt/*",
    "//src/zircon/tests/evil/*",
    "//third_party/*",
    "//tools/bootserver_old/*",
    "//tools/fidlcat/*",
    "//tools/loglistener/*",
    "//tools/netprotocol/*",
    "//tools/vboot_reference/*",
    "//vendor/*",
    "//zircon/system/ulib/audio-utils-legacy/*",
    "//zircon/system/ulib/audio-utils/*",
    "//zircon/system/ulib/cobalt-client/*",
    "//zircon/system/ulib/disk_inspector/*",
    "//zircon/system/ulib/driver-info/*",
    "//zircon/system/ulib/edid/*",
    "//zircon/system/ulib/elf-search/*",
    "//zircon/system/ulib/fs-host/*",
    "//zircon/system/ulib/fs/*",
    "//zircon/system/ulib/ftl/*",
    "//zircon/system/ulib/fzl/*",
    "//zircon/system/ulib/hid-parser/*",
    "//zircon/system/ulib/hid/*",
    "//zircon/system/ulib/image-format/*",
    "//zircon/system/ulib/inet6/*",
    "//zircon/system/ulib/inspect/*",
    "//zircon/system/ulib/inspector/*",
    "//zircon/system/ulib/intel-hda/*",
    "//zircon/system/ulib/kcounter/*",
    "//zircon/system/ulib/ktrace/*",
    "//zircon/system/ulib/launchpad/*",
    "//zircon/system/ulib/log/*",
    "//zircon/system/ulib/logger/*",
    "//zircon/system/ulib/memfs/*",
    "//zircon/system/ulib/mini-process/*",
    "//zircon/system/ulib/profile/*",
    "//zircon/system/ulib/ramdevice-client/*",
    "//zircon/system/ulib/runtests-utils/*",
    "//zircon/system/ulib/sysconfig-client/*",
    "//zircon/system/ulib/syslog/*",
    "//zircon/system/ulib/sysmem-version/*",
    "//zircon/system/ulib/task-utils/*",
    "//zircon/system/ulib/tee-client-api/*",
    "//zircon/system/ulib/trace-engine/*",
    "//zircon/system/ulib/trace-reader/*",
    "//zircon/system/ulib/trace-test-utils/*",
    "//zircon/system/ulib/trace/*",
    "//zircon/system/ulib/unittest/*",
    "//zircon/system/ulib/virtio/*",
    "//zircon/system/ulib/zbi-bootfs/*",
    "//zircon/system/ulib/zxio/*",
    "//zircon/system/utest/msd/*",
    "//zircon/third_party/*",
    "//zircon/tools/blobfs/*",
    "//zircon/tools/ktrace-dump/*",
    "//zircon/tools/lz4/*",
    "//zircon/tools/merkleroot/*",
    "//zircon/tools/minfs/*",
    "//zircon/tools/mtd-redundant-storage/*",
    "//zircon/tools/xdc-server/*",
  ]
}

# TODO(fxbug.dev/58162): clean up instances of this outside of third party code.
# This is the same as "Wno-conversion" above but without a visibility list.
# This in turn allows us to have generated code depend on this config. Having
# an explicit allowlist for generated code (e.g. fidl_cpp template expansions)
# is not practical.
# Please use with care, or not at all.
config("Wno-conversion-generated") {
  cflags = [ "-Wno-conversion" ]
}

config("symbol_visibility_hidden") {
  # Disable libc++ visibility annotations to make sure that the compiler option
  # has effect on symbols defined in libc++ headers. Note that we don't want to
  # disable these annotations altogether to ensure that our toolchain is usable
  # outside of our build since not every user uses hidden visibility by default.
  defines = [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
  cflags = [ "-fvisibility=hidden" ]
}

config("symbol_no_undefined") {
  if (current_os == "mac") {
    ldflags = [ "-Wl,-undefined,error" ]
  } else {
    ldflags = [ "-Wl,--no-undefined" ]
  }
}

config("shared_library_config") {
  configs = []
  cflags = []

  if (current_os == "fuchsia") {
    configs += [ "//build/config/fuchsia:shared_library_config" ]
  } else if (current_os == "linux") {
    cflags += [ "-fPIC" ]
  } else if (current_os == "mac") {
    configs += [ "//build/config/mac:mac_dynamic_flags" ]
  }
}

config("executable_config") {
  configs = []

  if (current_os == "fuchsia") {
    configs += [ "//build/config/fuchsia:executable_config" ]
  } else if (current_os == "mac") {
    configs += [
      "//build/config/mac:mac_dynamic_flags",
      "//build/config/mac:mac_executable_flags",
    ]
  }
}

config("default_libs") {
  configs = []

  if (current_os == "mac") {
    configs += [ "//build/config/mac:default_libs" ]
  }
}

config("no-shadow-call-stack") {
  if (current_cpu == "arm64") {
    cflags = [ "-fsanitize=no-shadow-call-stack" ]
  }
}

# Defines a Rust cfg flag with the value of the rust_panic build arg.
# Useful for changing behavior of code based on panic behavior.
config("rust_panic_cfg") {
  rustflags = [ "--cfg=rust_panic=\"${rust_panic}\"" ]
}

config("werror") {
  if (!use_ccache) {
    cflags = [
      "-Werror",

      # Declarations marked as deprecated should cause build failures, rather
      # they should emit warnings to notify developers about the use of
      # deprecated interfaces.
      "-Wno-error=deprecated-declarations",

      # Do not add additional -Wno-error to this config.
    ]

    asmflags = [ "-Wa,--fatal-warnings" ]
    cflags += asmflags
  }
  rustflags = [ "-Dwarnings" ]
}

config("temporarily_disable_ubsan_do_not_use") {
  cflags = [ "-fno-sanitize=undefined" ]
}

config("no_stack_protector") {
  cflags = [ "-fno-stack-protector" ]
}

config("no_sanitizers") {
  cflags = [
    "-fno-sanitize=all",
    "-fsanitize-coverage=0",
  ]
  configs = [ ":no_stack_protector" ]
}

config("no_profile") {
  # The difference between this config and removing //build/config/profile is
  # the dynamic linker setting which is necessary for it to use at runtime with
  # the libraries it was linked against.
  cflags = [
    "-fno-profile-instr-generate",
    "-fno-coverage-mapping",
  ]
}

# IMPORTANT: Keep the configs below in sync with //zircon/public/gn/config/BUILD.zircon.gn
# TODO(fxbug.dev/54322): Remove above comment after build unification.

config("icf") {
  # This changes C/C++ semantics and might be incompatible with third-party
  # code that relies on function pointers comparison.
  if (current_os == "win" && (linker == "lld" || !is_gcc)) {
    ldflags = [ "-Wl,/opt:icf=all" ]
  } else if (linker == "gold" || linker == "lld") {
    ldflags = [ "-Wl,--icf=all" ]
  }
}

# "_ALL_SOURCE" is used by some system headers to expose more features (say in fcntl.h) beyond those
# strictly defined in standard.
config("all_source") {
  defines = [ "_ALL_SOURCE" ]
}

config("thread_safety_annotations") {
  if (!is_gcc) {
    cflags = [ "-Wthread-safety" ]
    defines = [ "_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS" ]
  }
}

# Tools that must be executed locally.
pool("local") {
  depth = default_concurrent_jobs.local
}
