import("//llvm/utils/gn/build/buildflags.gni") import("//llvm/utils/gn/build/mac_sdk.gni") import("//llvm/utils/gn/build/toolchain/compiler.gni") import("//llvm/utils/gn/build/toolchain/target_flags.gni") config("compiler_defaults") { defines = [] if (!llvm_enable_assertions) { defines += [ "NDEBUG" ] } asmflags = target_flags cflags = target_flags ldflags = target_flags + target_ldflags if (host_os == "mac" && clang_base_path != "") { cflags += [ "-isysroot", mac_sdk_path, ] } if (host_os != "win") { if (is_debug) { cflags += [ "-g" ] } if (is_optimized) { cflags += [ "-O3" ] } cflags += [ "-fdiagnostics-color" ] cflags_cc = [ "-std=c++11", "-fvisibility-inlines-hidden", ] } else { if (is_debug) { cflags += [ "/Zi", "/FS", ] ldflags += [ "/DEBUG" ] } if (is_optimized) { cflags += [ "/O2", "/Zc:inline", ] ldflags += [ "/OPT:REF", "/OPT:ICF", ] } defines += [ "_CRT_SECURE_NO_DEPRECATE", "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE", "_CRT_NONSTDC_NO_WARNINGS", "_SCL_SECURE_NO_DEPRECATE", "_SCL_SECURE_NO_WARNINGS", "_HAS_EXCEPTIONS=0", "_UNICODE", "UNICODE", ] cflags += [ "/EHs-c-" ] # The MSVC default value (1 MB) is not enough for parsing recursive C++ # templates in Clang. ldflags += [ "/STACK:10000000" ] } # Warning setup. if (host_os == "win" && !is_clang) { cflags += [ # Suppress ''modifier' : used more than once' (__forceinline and inline). "-wd4141", # Suppress 'conversion from 'type1' to 'type2', possible loss of data'. "-wd4244", # Suppress 'conversion from 'size_t' to 'type', possible loss of data'. "-wd4267", # Suppress 'no matching operator delete found'. "-wd4291", # Suppress 'noexcept used with no exception handling mode specified'. "-wd4577", # Suppress 'destructor was implicitly defined as deleted'. "-wd4624", # Suppress 'unsafe mix of type and type in operation'. "-wd4805", ] } else { if (host_os == "win") { cflags += [ "/W4" ] } else { cflags += [ "-Wall", "-Wextra", ] } cflags += [ "-Wno-unused-parameter" ] if (is_clang) { cflags += [ "-Wdelete-non-virtual-dtor", "-Wstring-conversion", ] } else { cflags += [ # GCC's -Wcomment complains about // comments ending with '\' if the # next line is also a // comment. "-Wno-comment", # Disable gcc's potentially uninitialized use analysis as it presents # lots of false positives. "-Wno-maybe-uninitialized", ] cflags_cc += [ # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not # useful. "-Wno-noexcept-type", ] } if (is_clang && use_goma) { # goma converts all paths to lowercase on the server, breaking this # warning. cflags += [ "-Wno-nonportable-include-path" ] } } # On Windows, the linker is not invoked through the compiler driver. if (use_lld && host_os != "win") { ldflags += [ "-fuse-ld=lld" ] } } config("no_exceptions") { if (host_os != "win") { cflags_cc = [ "-fno-exceptions" ] } } config("no_rtti") { if (current_os == "win") { cflags_cc = [ "/GR-" ] } else { cflags_cc = [ "-fno-rtti" ] } } # To make an archive that can be distributed, you need to remove this config and # set complete_static_lib. config("thin_archive") { if (current_os != "win" && current_os != "mac") { arflags = [ "-T" ] } } config("llvm_code") { include_dirs = [ "//llvm/include", "$root_gen_dir/llvm/include", ] } config("lld_code") { include_dirs = [ "//lld/include", "$root_gen_dir/lld/include", ] } config("clang_code") { if (host_os != "win") { cflags = [ "-fno-strict-aliasing" ] } include_dirs = [ "//clang/include", "$root_gen_dir/clang/include", ] } config("crt_code") { include_dirs = [ "//compiler-rt/lib" ] cflags = [ "-fPIC", "-funwind-tables", "-gline-tables-only", ] } config("warn_covered_switch_default") { if (is_clang) { cflags = [ "-Wcovered-switch-default" ] } }