blob: fe9e8ae5abda01d6aafdd2285b9e338c23c4e208 [file] [log] [blame]
# This sets up the GN configs that are used by default in GN targets in
# BUILDCONFIG.gn.
#
# This is based on LLVM `utils/gn/build/BUILD.gn`. Only the LLVM and Clang
# related options are retained
import("//build_overrides/clspv.gni")
declare_args() {
# Whether to build everything with test coverage information.
# After building with this, run tests and then run
# llvm/utils/prepare-code-coverage-artifact.py \
# --compilation-dir=out/gn \
# .../llvm-profdata .../llvm-cov out/gn/profiles/ report/ \
# out/gn/bin/llvm-undname ...
# to generate a HTML report for the binaries passed in the last line.
llvm_build_instrumented_coverage = false
# Whether to build everything with instrumentation for PGO
# After building with this:
# 1. Remove old profile data with `rm *.profraw`
# 2. Run the built instrumented binaries.
# This will produce *.profraw files in the current working directory.
# 3. Run `llvm-profdata merge *.profraw -o llvm.profdata` to merge them.
# 4. Then build again, with this set to false, and with
# `llvm_pgo_use = "//llvm.profdata"` set to use the created profile.
llvm_pgo_instrument = false
# If non-empty, path to merged profiling data used for optimization
# See documentation for llvm_pgo_instrument for how to create profile data.
llvm_pgo_use = ""
# If set, puts relative paths in debug info.
# Makes the build output independent of the build directory, but makes
# most debuggers harder to use. See "Getting to local determinism" and
# "Getting debuggers to work well with locally deterministic builds" in
# http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
# for more information.
use_relative_paths_in_debug_info = false
# The version of host gcc. Ignored if is_clang is true.
gcc_version = 9
}
assert(!llvm_build_instrumented_coverage || is_clang,
"llvm_build_instrumented_coverage requires clang as host compiler")
assert(!llvm_pgo_instrument || is_clang,
"llvm_pgo_instrument requires clang as host compiler")
assert(llvm_pgo_use == "" || is_clang,
"llvm_pgo_use requires clang as host compiler")
assert(!llvm_pgo_instrument || llvm_pgo_use == "",
"set at most one of llvm_pgo_instrument and llvm_pgo_use")
config("llvm_code") {
include_dirs = [
"//$clspv_llvm_dir/llvm/include",
"$root_gen_dir/$clspv_llvm_dir//llvm/include",
]
if (current_os != "win") {
cflags = [ "-fPIC" ]
if (is_clang) {
cflags += [
"-Wno-deprecated-declarations",
"-Wno-deprecated-this-capture",
"-Wno-deprecated-enum-enum-conversion",
"-Wno-deprecated-anon-enum-enum-conversion",
]
}
}
}
config("clang_code") {
if (current_os != "win") {
cflags = [
"-fno-strict-aliasing",
"-Wno-deprecated-declarations",
]
} else {
defines = [ "CLANG_EXPORTS" ]
}
include_dirs = [
"//$clspv_llvm_dir/clang/include",
"$root_gen_dir/$clspv_llvm_dir//clang/include",
]
}
config("warn_covered_switch_default") {
if (is_clang) {
cflags = [ "-Wcovered-switch-default" ]
}
}