| major_version: "local" |
| minor_version: "" |
| default_target_cpu: "same_as_host" |
| |
| default_toolchain { |
| cpu: "k8" |
| toolchain_identifier: "local_linux" |
| } |
| default_toolchain { |
| cpu: "piii" |
| toolchain_identifier: "local_linux" |
| } |
| default_toolchain { |
| cpu: "arm" |
| toolchain_identifier: "local_linux" |
| } |
| default_toolchain { |
| cpu: "darwin" |
| toolchain_identifier: "local_darwin" |
| } |
| default_toolchain { |
| cpu: "ppc" |
| toolchain_identifier: "local_linux" |
| } |
| default_toolchain { |
| cpu: "x64_windows" |
| toolchain_identifier: "local_windows" |
| } |
| |
| toolchain { |
| abi_version: "local" |
| abi_libc_version: "local" |
| compiler: "compiler" |
| host_system_name: "local" |
| needsPic: true |
| target_libc: "local" |
| target_cpu: "local" |
| target_system_name: "local" |
| toolchain_identifier: "local_linux" |
| |
| feature { |
| name: "c++11" |
| flag_set { |
| action: "c++-compile" |
| flag_group { |
| flag: "-std=c++11" |
| } |
| } |
| } |
| |
| feature { |
| name: "stdlib" |
| flag_set { |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "-lstdc++" |
| } |
| } |
| } |
| |
| feature { |
| name: "determinism" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # Make C++ compilation deterministic. Use linkstamping instead of these |
| # compiler symbols. |
| flag: "-Wno-builtin-macro-redefined" |
| flag: "-D__DATE__=\"redacted\"" |
| flag: "-D__TIMESTAMP__=\"redacted\"" |
| flag: "-D__TIME__=\"redacted\"" |
| } |
| } |
| } |
| |
| feature { |
| name: "alwayslink" |
| flag_set { |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| action: "c++-link-executable" |
| flag_group { |
| flag: "-Wl,-no-as-needed" |
| } |
| } |
| } |
| |
| # This feature will be enabled for builds that support pic by bazel. |
| feature { |
| name: "pic" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| expand_if_all_available: "pic" |
| flag: "-fPIC" |
| } |
| flag_group { |
| expand_if_none_available: "pic" |
| flag: "-fPIE" |
| } |
| } |
| } |
| |
| # Security hardening on by default. |
| feature { |
| name: "hardening" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. |
| # We need to undef it before redefining it as some distributions now |
| # have it enabled by default. |
| flag: "-U_FORTIFY_SOURCE" |
| flag: "-D_FORTIFY_SOURCE=1" |
| flag: "-fstack-protector" |
| } |
| } |
| flag_set { |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "-Wl,-z,relro,-z,now" |
| } |
| } |
| flag_set { |
| action: "c++-link-executable" |
| flag_group { |
| flag: "-pie" |
| flag: "-Wl,-z,relro,-z,now" |
| } |
| } |
| } |
| |
| feature { |
| name: "warnings" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # All warnings are enabled. Maybe enable -Werror as well? |
| flag: "-Wall" |
| |
| } |
| } |
| } |
| |
| # Keep stack frames for debugging, even in opt mode. |
| feature { |
| name: "frame-pointer" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-fno-omit-frame-pointer" |
| } |
| } |
| } |
| |
| feature { |
| name: "build-id" |
| flag_set { |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| # Stamp the binary with a unique identifier. |
| flag: "-Wl,--build-id=md5" |
| flag: "-Wl,--hash-style=gnu" |
| } |
| } |
| } |
| |
| feature { |
| name: "no-canonical-prefixes" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag:"-no-canonical-prefixes" |
| } |
| } |
| } |
| |
| feature { |
| name: "disable-assertions" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-DNDEBUG" |
| } |
| } |
| } |
| |
| feature { |
| name: "linker-bin-path" |
| |
| flag_set { |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "-B/usr/bin" |
| } |
| } |
| } |
| |
| feature { |
| name: "common" |
| implies: "stdlib" |
| implies: "c++11" |
| implies: "determinism" |
| implies: "alwayslink" |
| implies: "hardening" |
| implies: "warnings" |
| implies: "frame-pointer" |
| implies: "build-id" |
| implies: "no-canonical-prefixes" |
| implies: "linker-bin-path" |
| } |
| |
| feature { |
| name: "opt" |
| implies: "common" |
| implies: "disable-assertions" |
| |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # No debug symbols. |
| # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt |
| # or even generally? However, that can't happen here, as it requires |
| # special handling in Bazel. |
| flag: "-g0" |
| |
| # Conservative choice for -O |
| # -O3 can increase binary size and even slow down the resulting binaries. |
| # Profile first and / or use FDO if you need better performance than this. |
| flag: "-O2" |
| |
| # Removal of unused code and data at link time (can this increase binary size in some cases?). |
| flag: "-ffunction-sections" |
| flag: "-fdata-sections" |
| } |
| } |
| flag_set { |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| action: "c++-link-executable" |
| flag_group { |
| flag: "-Wl,--gc-sections" |
| } |
| } |
| } |
| |
| feature { |
| name: "fastbuild" |
| implies: "common" |
| } |
| |
| feature { |
| name: "dbg" |
| implies: "common" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-g" |
| } |
| } |
| } |
| |
| # Set clang as a C/C++ compiler. |
| tool_path { name: "gcc" path: "clang/bin/crosstool_wrapper_driver_is_not_gcc" } |
| |
| # Use the default system toolchain for everything else. |
| tool_path { name: "ar" path: "/usr/bin/ar" } |
| tool_path { name: "compat-ld" path: "/usr/bin/ld" } |
| tool_path { name: "cpp" path: "/usr/bin/cpp" } |
| tool_path { name: "dwp" path: "/usr/bin/dwp" } |
| tool_path { name: "gcov" path: "/usr/bin/gcov" } |
| tool_path { name: "ld" path: "/usr/bin/ld" } |
| tool_path { name: "nm" path: "/usr/bin/nm" } |
| tool_path { name: "objcopy" path: "/usr/bin/objcopy" } |
| tool_path { name: "objdump" path: "/usr/bin/objdump" } |
| tool_path { name: "strip" path: "/usr/bin/strip" } |
| |
| # Enabled dynamic linking. |
| linking_mode_flags { mode: DYNAMIC } |
| |
| |
| cxx_builtin_include_directory: "/" |
| } |
| |
| toolchain { |
| abi_version: "local" |
| abi_libc_version: "local" |
| compiler: "compiler" |
| host_system_name: "local" |
| needsPic: true |
| target_libc: "macosx" |
| target_cpu: "darwin" |
| target_system_name: "local" |
| toolchain_identifier: "local_darwin" |
| feature { |
| name: "c++11" |
| flag_set { |
| action: "c++-compile" |
| flag_group { |
| flag: "-std=c++11" |
| } |
| } |
| } |
| |
| feature { |
| name: "stdlib" |
| flag_set { |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "-lc++" |
| } |
| } |
| } |
| |
| feature { |
| name: "determinism" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # Make C++ compilation deterministic. Use linkstamping instead of these |
| # compiler symbols. |
| flag: "-Wno-builtin-macro-redefined" |
| flag: "-D__DATE__=\"redacted\"" |
| flag: "-D__TIMESTAMP__=\"redacted\"" |
| flag: "-D__TIME__=\"redacted\"" |
| } |
| } |
| } |
| |
| # This feature will be enabled for builds that support pic by bazel. |
| feature { |
| name: "pic" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| expand_if_all_available: "pic" |
| flag: "-fPIC" |
| } |
| flag_group { |
| expand_if_none_available: "pic" |
| flag: "-fPIE" |
| } |
| } |
| } |
| |
| # Security hardening on by default. |
| feature { |
| name: "hardening" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. |
| # We need to undef it before redefining it as some distributions now |
| # have it enabled by default. |
| flag: "-U_FORTIFY_SOURCE" |
| flag: "-D_FORTIFY_SOURCE=1" |
| flag: "-fstack-protector" |
| } |
| } |
| flag_set { |
| action: "c++-link-executable" |
| flag_group { |
| flag: "-pie" |
| } |
| } |
| } |
| |
| feature { |
| name: "warnings" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # All warnings are enabled. Maybe enable -Werror as well? |
| flag: "-Wall" |
| |
| } |
| } |
| } |
| |
| # Keep stack frames for debugging, even in opt mode. |
| feature { |
| name: "frame-pointer" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-fno-omit-frame-pointer" |
| } |
| } |
| } |
| |
| feature { |
| name: "no-canonical-prefixes" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag:"-no-canonical-prefixes" |
| } |
| } |
| } |
| |
| feature { |
| name: "disable-assertions" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-DNDEBUG" |
| } |
| } |
| } |
| |
| feature { |
| name: "linker-bin-path" |
| |
| flag_set { |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "-B/usr/bin" |
| } |
| } |
| } |
| |
| feature { |
| name: "undefined-dynamic" |
| flag_set { |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| action: "c++-link-executable" |
| flag_group { |
| flag: "-undefined" |
| flag: "dynamic_lookup" |
| } |
| } |
| } |
| |
| feature { |
| name: "common" |
| implies: "stdlib" |
| implies: "c++11" |
| implies: "determinism" |
| implies: "hardening" |
| implies: "warnings" |
| implies: "frame-pointer" |
| implies: "no-canonical-prefixes" |
| implies: "linker-bin-path" |
| implies: "undefined-dynamic" |
| } |
| |
| feature { |
| name: "opt" |
| implies: "common" |
| implies: "disable-assertions" |
| |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| # No debug symbols. |
| # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt |
| # or even generally? However, that can't happen here, as it requires |
| # special handling in Bazel. |
| flag: "-g0" |
| |
| # Conservative choice for -O |
| # -O3 can increase binary size and even slow down the resulting binaries. |
| # Profile first and / or use FDO if you need better performance than this. |
| flag: "-O2" |
| |
| # Removal of unused code and data at link time (can this increase binary size in some cases?). |
| flag: "-ffunction-sections" |
| flag: "-fdata-sections" |
| } |
| } |
| } |
| |
| feature { |
| name: "fastbuild" |
| implies: "common" |
| } |
| |
| feature { |
| name: "dbg" |
| implies: "common" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| flag_group { |
| flag: "-g" |
| } |
| } |
| } |
| |
| # Set clang as a C/C++ compiler. |
| tool_path { name: "gcc" path: "clang/bin/crosstool_wrapper_driver_is_not_gcc" } |
| |
| # Use the default system toolchain for everything else. |
| tool_path { name: "ar" path: "/usr/bin/libtool" } |
| tool_path { name: "compat-ld" path: "/usr/bin/ld" } |
| tool_path { name: "cpp" path: "/usr/bin/cpp" } |
| tool_path { name: "dwp" path: "/usr/bin/dwp" } |
| tool_path { name: "gcov" path: "/usr/bin/gcov" } |
| tool_path { name: "ld" path: "/usr/bin/ld" } |
| tool_path { name: "nm" path: "/usr/bin/nm" } |
| tool_path { name: "objcopy" path: "/usr/bin/objcopy" } |
| tool_path { name: "objdump" path: "/usr/bin/objdump" } |
| tool_path { name: "strip" path: "/usr/bin/strip" } |
| |
| # Enabled dynamic linking. |
| linking_mode_flags { mode: DYNAMIC } |
| |
| |
| cxx_builtin_include_directory: "/" |
| } |
| |
| toolchain { |
| toolchain_identifier: "local_windows" |
| host_system_name: "local" |
| target_system_name: "local" |
| |
| abi_version: "local" |
| abi_libc_version: "local" |
| target_cpu: "x64_windows" |
| compiler: "msvc-cl" |
| target_libc: "msvcrt" |
| |
| |
| |
| tool_path { |
| name: "ar" |
| path: "" |
| } |
| tool_path { |
| name: "ml" |
| path: "" |
| } |
| tool_path { |
| name: "cpp" |
| path: "" |
| } |
| tool_path { |
| name: "gcc" |
| path: "" |
| } |
| tool_path { |
| name: "gcov" |
| path: "wrapper/bin/msvc_nop.bat" |
| } |
| tool_path { |
| name: "ld" |
| path: "" |
| } |
| tool_path { |
| name: "nm" |
| path: "wrapper/bin/msvc_nop.bat" |
| } |
| tool_path { |
| name: "objcopy" |
| path: "wrapper/bin/msvc_nop.bat" |
| } |
| tool_path { |
| name: "objdump" |
| path: "wrapper/bin/msvc_nop.bat" |
| } |
| tool_path { |
| name: "strip" |
| path: "wrapper/bin/msvc_nop.bat" |
| } |
| supports_interface_shared_objects: true |
| |
| # TODO(pcloudy): Review those flags below, they should be defined by cl.exe |
| compiler_flag: "/DCOMPILER_MSVC" |
| |
| # Don't define min/max macros in windows.h. |
| compiler_flag: "/DNOMINMAX" |
| |
| # Platform defines. |
| compiler_flag: "/D_WIN32_WINNT=0x0600" |
| # Turn off warning messages. |
| compiler_flag: "/D_CRT_SECURE_NO_DEPRECATE" |
| compiler_flag: "/D_CRT_SECURE_NO_WARNINGS" |
| compiler_flag: "/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS" |
| |
| # Useful options to have on for compilation. |
| # Increase the capacity of object files to 2^32 sections. |
| compiler_flag: "/bigobj" |
| # Allocate 500MB for precomputed headers. |
| compiler_flag: "/Zm500" |
| # Use unsigned char by default. |
| compiler_flag: "/J" |
| # Use function level linking. |
| compiler_flag: "/Gy" |
| # Use string pooling. |
| compiler_flag: "/GF" |
| # Catch C++ exceptions only and tell the compiler to assume that functions declared |
| # as extern "C" never throw a C++ exception. |
| compiler_flag: "/EHsc" |
| |
| # Globally disabled warnings. |
| # Don't warn about elements of array being be default initialized. |
| compiler_flag: "/wd4351" |
| # Don't warn about no matching delete found. |
| compiler_flag: "/wd4291" |
| # Don't warn about diamond inheritance patterns. |
| compiler_flag: "/wd4250" |
| # Don't warn about insecure functions (e.g. non _s functions). |
| compiler_flag: "/wd4996" |
| |
| linker_flag: "/MACHINE:X64" |
| |
| feature { |
| name: "no_legacy_features" |
| } |
| |
| # Suppress startup banner. |
| feature { |
| name: "nologo" |
| flag_set { |
| action: "c-compile" |
| action: "c++-compile" |
| action: "c++-module-compile" |
| action: "c++-module-codegen" |
| action: "c++-header-parsing" |
| action: "assemble" |
| action: "preprocess-assemble" |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| action: "c++-link-static-library" |
| flag_group { |
| flag: "/nologo" |
| } |
| } |
| } |
| |
| feature { |
| name: 'has_configured_linker_path' |
| } |
| |
| # This feature indicates strip is not supported, building stripped binary will just result a copy of orignial binary |
| feature { |
| name: 'no_stripping' |
| } |
| |
| # This feature indicates this is a toolchain targeting Windows. |
| feature { |
| name: 'targets_windows' |
| implies: 'copy_dynamic_libraries_to_binary' |
| enabled: true |
| } |
| |
| feature { |
| name: 'copy_dynamic_libraries_to_binary' |
| } |
| |
| action_config { |
| config_name: 'assemble' |
| action_name: 'assemble' |
| tool { |
| tool_path: '' |
| } |
| implies: 'compiler_input_flags' |
| implies: 'compiler_output_flags' |
| implies: 'nologo' |
| implies: 'msvc_env' |
| implies: 'sysroot' |
| } |
| |
| action_config { |
| config_name: 'preprocess-assemble' |
| action_name: 'preprocess-assemble' |
| tool { |
| tool_path: '' |
| } |
| implies: 'compiler_input_flags' |
| implies: 'compiler_output_flags' |
| implies: 'nologo' |
| implies: 'msvc_env' |
| implies: 'sysroot' |
| } |
| |
| action_config { |
| config_name: 'c-compile' |
| action_name: 'c-compile' |
| tool { |
| tool_path: '' |
| } |
| implies: 'compiler_input_flags' |
| implies: 'compiler_output_flags' |
| implies: 'legacy_compile_flags' |
| implies: 'nologo' |
| implies: 'msvc_env' |
| implies: 'parse_showincludes' |
| implies: 'user_compile_flags' |
| implies: 'sysroot' |
| implies: 'unfiltered_compile_flags' |
| } |
| |
| action_config { |
| config_name: 'c++-compile' |
| action_name: 'c++-compile' |
| tool { |
| tool_path: '' |
| } |
| implies: 'compiler_input_flags' |
| implies: 'compiler_output_flags' |
| implies: 'legacy_compile_flags' |
| implies: 'nologo' |
| implies: 'msvc_env' |
| implies: 'parse_showincludes' |
| implies: 'user_compile_flags' |
| implies: 'sysroot' |
| implies: 'unfiltered_compile_flags' |
| } |
| |
| action_config { |
| config_name: 'c++-link-executable' |
| action_name: 'c++-link-executable' |
| tool { |
| tool_path: '' |
| } |
| implies: 'nologo' |
| implies: 'linkstamps' |
| implies: 'output_execpath_flags' |
| implies: 'input_param_flags' |
| implies: 'user_link_flags' |
| implies: 'legacy_link_flags' |
| implies: 'linker_subsystem_flag' |
| implies: 'linker_param_file' |
| implies: 'msvc_env' |
| implies: 'no_stripping' |
| } |
| |
| action_config { |
| config_name: 'c++-link-dynamic-library' |
| action_name: 'c++-link-dynamic-library' |
| tool { |
| tool_path: '' |
| } |
| implies: 'nologo' |
| implies: 'shared_flag' |
| implies: 'linkstamps' |
| implies: 'output_execpath_flags' |
| implies: 'input_param_flags' |
| implies: 'user_link_flags' |
| implies: 'legacy_link_flags' |
| implies: 'linker_subsystem_flag' |
| implies: 'linker_param_file' |
| implies: 'msvc_env' |
| implies: 'no_stripping' |
| implies: 'has_configured_linker_path' |
| implies: 'def_file' |
| } |
| |
| action_config { |
| config_name: 'c++-link-nodeps-dynamic-library' |
| action_name: 'c++-link-nodeps-dynamic-library' |
| tool { |
| tool_path: '' |
| } |
| implies: 'nologo' |
| implies: 'shared_flag' |
| implies: 'linkstamps' |
| implies: 'output_execpath_flags' |
| implies: 'input_param_flags' |
| implies: 'user_link_flags' |
| implies: 'legacy_link_flags' |
| implies: 'linker_subsystem_flag' |
| implies: 'linker_param_file' |
| implies: 'msvc_env' |
| implies: 'no_stripping' |
| implies: 'has_configured_linker_path' |
| implies: 'def_file' |
| } |
| |
| action_config { |
| config_name: 'c++-link-static-library' |
| action_name: 'c++-link-static-library' |
| tool { |
| tool_path: '' |
| } |
| implies: 'nologo' |
| implies: 'archiver_flags' |
| implies: 'input_param_flags' |
| implies: 'linker_param_file' |
| implies: 'msvc_env' |
| } |
| |
| # TODO(b/65151735): Remove legacy_compile_flags feature when legacy fields are |
| # not used in this crosstool |
| feature { |
| name: 'legacy_compile_flags' |
| flag_set { |
| expand_if_all_available: 'legacy_compile_flags' |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| flag_group { |
| iterate_over: 'legacy_compile_flags' |
| flag: '%{legacy_compile_flags}' |
| } |
| } |
| } |
| |
| feature { |
| name: "msvc_env" |
| env_set { |
| action: "c-compile" |
| action: "c++-compile" |
| action: "c++-module-compile" |
| action: "c++-module-codegen" |
| action: "c++-header-parsing" |
| action: "assemble" |
| action: "preprocess-assemble" |
| action: "c++-link-executable" |
| action: "c++-link-dynamic-library" |
| action: "c++-link-nodeps-dynamic-library" |
| action: "c++-link-static-library" |
| env_entry { |
| key: "PATH" |
| value: "" |
| } |
| env_entry { |
| key: "INCLUDE" |
| value: "" |
| } |
| env_entry { |
| key: "LIB" |
| value: "" |
| } |
| env_entry { |
| key: "TMP" |
| value: "" |
| } |
| env_entry { |
| key: "TEMP" |
| value: "" |
| } |
| } |
| } |
| |
| feature { |
| name: 'include_paths' |
| flag_set { |
| action: "assemble" |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| flag_group { |
| iterate_over: 'quote_include_paths' |
| flag: '/I%{quote_include_paths}' |
| } |
| flag_group { |
| iterate_over: 'include_paths' |
| flag: '/I%{include_paths}' |
| } |
| flag_group { |
| iterate_over: 'system_include_paths' |
| flag: '/I%{system_include_paths}' |
| } |
| } |
| } |
| |
| feature { |
| name: "preprocessor_defines" |
| flag_set { |
| action: "assemble" |
| action: "preprocess-assemble" |
| action: "c-compile" |
| action: "c++-compile" |
| action: "c++-header-parsing" |
| action: "c++-module-compile" |
| flag_group { |
| flag: "/D%{preprocessor_defines}" |
| iterate_over: "preprocessor_defines" |
| } |
| } |
| } |
| |
| # Tell Bazel to parse the output of /showIncludes |
| feature { |
| name: 'parse_showincludes' |
| flag_set { |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-module-compile' |
| action: 'c++-header-parsing' |
| flag_group { |
| flag: "/showIncludes" |
| } |
| } |
| } |
| |
| |
| feature { |
| name: 'generate_pdb_file' |
| requires: { |
| feature: 'dbg' |
| } |
| requires: { |
| feature: 'fastbuild' |
| } |
| } |
| |
| feature { |
| name: 'shared_flag' |
| flag_set { |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: '/DLL' |
| } |
| } |
| } |
| |
| feature { |
| name: 'linkstamps' |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| expand_if_all_available: 'linkstamp_paths' |
| flag_group { |
| iterate_over: 'linkstamp_paths' |
| flag: '%{linkstamp_paths}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'output_execpath_flags' |
| flag_set { |
| expand_if_all_available: 'output_execpath' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: '/OUT:%{output_execpath}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'archiver_flags' |
| flag_set { |
| expand_if_all_available: 'output_execpath' |
| action: 'c++-link-static-library' |
| flag_group { |
| flag: '/OUT:%{output_execpath}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'input_param_flags' |
| flag_set { |
| expand_if_all_available: 'interface_library_output_path' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/IMPLIB:%{interface_library_output_path}" |
| } |
| } |
| flag_set { |
| expand_if_all_available: 'libopts' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| iterate_over: 'libopts' |
| flag: '%{libopts}' |
| } |
| } |
| flag_set { |
| expand_if_all_available: 'libraries_to_link' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| action: 'c++-link-static-library' |
| flag_group { |
| iterate_over: 'libraries_to_link' |
| flag_group { |
| expand_if_equal: { |
| variable: 'libraries_to_link.type' |
| value: 'object_file_group' |
| } |
| iterate_over: 'libraries_to_link.object_files' |
| flag_group { |
| flag: '%{libraries_to_link.object_files}' |
| } |
| } |
| flag_group { |
| expand_if_equal: { |
| variable: 'libraries_to_link.type' |
| value: 'object_file' |
| } |
| flag_group { |
| flag: '%{libraries_to_link.name}' |
| } |
| } |
| flag_group { |
| expand_if_equal: { |
| variable: 'libraries_to_link.type' |
| value: 'interface_library' |
| } |
| flag_group { |
| flag: '%{libraries_to_link.name}' |
| } |
| } |
| flag_group { |
| expand_if_equal: { |
| variable: 'libraries_to_link.type' |
| value: 'static_library' |
| } |
| flag_group { |
| expand_if_false: 'libraries_to_link.is_whole_archive' |
| flag: '%{libraries_to_link.name}' |
| } |
| flag_group { |
| expand_if_true: 'libraries_to_link.is_whole_archive' |
| flag: '/WHOLEARCHIVE:%{libraries_to_link.name}' |
| } |
| } |
| } |
| } |
| } |
| |
| # Since this feature is declared earlier in the CROSSTOOL than |
| # "user_link_flags", this feature will be applied prior to it anwyhere they |
| # are both implied. And since "user_link_flags" contains the linkopts from |
| # the build rule, this allows the user to override the /SUBSYSTEM in the BUILD |
| # file. |
| feature { |
| name: 'linker_subsystem_flag' |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: '/SUBSYSTEM:CONSOLE' |
| } |
| } |
| } |
| |
| # The "user_link_flags" contains user-defined linkopts (from build rules) |
| # so it should be defined after features that declare user-overridable flags. |
| # For example the "linker_subsystem_flag" defines a default "/SUBSYSTEM" flag |
| # but we want to let the user override it, therefore "link_flag_subsystem" is |
| # defined earlier in the CROSSTOOL file than "user_link_flags". |
| feature { |
| name: 'user_link_flags' |
| flag_set { |
| expand_if_all_available: 'user_link_flags' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| iterate_over: 'user_link_flags' |
| flag: '%{user_link_flags}' |
| } |
| } |
| } |
| feature { |
| name: 'legacy_link_flags' |
| flag_set { |
| expand_if_all_available: 'legacy_link_flags' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| iterate_over: 'legacy_link_flags' |
| flag: '%{legacy_link_flags}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'linker_param_file' |
| flag_set { |
| expand_if_all_available: 'linker_param_file' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| action: 'c++-link-static-library' |
| flag_group { |
| flag: '@%{linker_param_file}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'static_link_msvcrt' |
| } |
| |
| feature { |
| name: 'static_link_msvcrt_no_debug' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/MT" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEFAULTLIB:libcmt.lib" |
| } |
| } |
| requires: { feature: 'fastbuild'} |
| requires: { feature: 'opt'} |
| } |
| |
| feature { |
| name: 'dynamic_link_msvcrt_no_debug' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/MD" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEFAULTLIB:msvcrt.lib" |
| } |
| } |
| requires: { feature: 'fastbuild'} |
| requires: { feature: 'opt'} |
| } |
| |
| feature { |
| name: 'static_link_msvcrt_debug' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/MTd" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEFAULTLIB:libcmtd.lib" |
| } |
| } |
| requires: { feature: 'dbg'} |
| } |
| |
| feature { |
| name: 'dynamic_link_msvcrt_debug' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/MDd" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEFAULTLIB:msvcrtd.lib" |
| } |
| } |
| requires: { feature: 'dbg'} |
| } |
| |
| feature { |
| name: 'dbg' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/Od" |
| flag: "/Z7" |
| flag: "/DDEBUG" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEBUG:FULL" |
| flag: "/INCREMENTAL:NO" |
| } |
| } |
| implies: 'generate_pdb_file' |
| } |
| |
| feature { |
| name: 'fastbuild' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/Od" |
| flag: "/Z7" |
| flag: "/DDEBUG" |
| } |
| } |
| flag_set { |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEBUG:FASTLINK" |
| flag: "/INCREMENTAL:NO" |
| } |
| } |
| implies: 'generate_pdb_file' |
| } |
| |
| feature { |
| name: 'opt' |
| flag_set { |
| action: 'c-compile' |
| action: 'c++-compile' |
| flag_group { |
| flag: "/O2" |
| flag: "/DNDEBUG" |
| } |
| } |
| } |
| |
| feature { |
| name: 'user_compile_flags' |
| flag_set { |
| expand_if_all_available: 'user_compile_flags' |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| flag_group { |
| iterate_over: 'user_compile_flags' |
| flag: '%{user_compile_flags}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'sysroot' |
| flag_set { |
| expand_if_all_available: 'sysroot' |
| action: 'assemble' |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| iterate_over: 'sysroot' |
| flag: '--sysroot=%{sysroot}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'unfiltered_compile_flags' |
| flag_set { |
| expand_if_all_available: 'unfiltered_compile_flags' |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| flag_group { |
| iterate_over: 'unfiltered_compile_flags' |
| flag: '%{unfiltered_compile_flags}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'compiler_output_flags' |
| flag_set { |
| action: 'assemble' |
| flag_group { |
| expand_if_all_available: 'output_file' |
| expand_if_none_available: 'output_assembly_file' |
| expand_if_none_available: 'output_preprocess_file' |
| flag: '/Fo%{output_file}' |
| flag: '/Zi' |
| } |
| } |
| flag_set { |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| flag_group { |
| expand_if_all_available: 'output_file' |
| expand_if_none_available: 'output_assembly_file' |
| expand_if_none_available: 'output_preprocess_file' |
| flag: '/Fo%{output_file}' |
| } |
| flag_group { |
| expand_if_all_available: 'output_file' |
| expand_if_all_available: 'output_assembly_file' |
| flag: '/Fa%{output_file}' |
| } |
| flag_group { |
| expand_if_all_available: 'output_file' |
| expand_if_all_available: 'output_preprocess_file' |
| flag: '/P' |
| flag: '/Fi%{output_file}' |
| } |
| } |
| } |
| |
| feature { |
| name: 'compiler_input_flags' |
| flag_set { |
| action: 'assemble' |
| action: 'preprocess-assemble' |
| action: 'c-compile' |
| action: 'c++-compile' |
| action: 'c++-header-parsing' |
| action: 'c++-module-compile' |
| action: 'c++-module-codegen' |
| flag_group { |
| expand_if_all_available: 'source_file' |
| flag: '/c' |
| flag: '%{source_file}' |
| } |
| } |
| } |
| |
| feature { |
| name : 'def_file', |
| flag_set { |
| expand_if_all_available: 'def_file_path' |
| action: 'c++-link-executable' |
| action: 'c++-link-dynamic-library' |
| action: "c++-link-nodeps-dynamic-library" |
| flag_group { |
| flag: "/DEF:%{def_file_path}" |
| # We can specify a different DLL name in DEF file, /ignore:4070 suppresses |
| # the warning message about DLL name doesn't match the default one. |
| # See https://msdn.microsoft.com/en-us/library/sfkk2fz7.aspx |
| flag: "/ignore:4070" |
| } |
| } |
| } |
| |
| feature { |
| name: 'windows_export_all_symbols' |
| } |
| |
| feature { |
| name: 'no_windows_export_all_symbols' |
| } |
| |
| linking_mode_flags { mode: DYNAMIC } |
| } |