| # Copyright 2016 The Bazel Authors. All rights reserved. | |
| # | |
| # 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 | |
| # | |
| # http://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. | |
| major_version: "local" | |
| minor_version: "" | |
| default_target_cpu: "same_as_host" | |
| default_toolchain { | |
| cpu: "k8" | |
| toolchain_identifier: "linux_gnu_x86" | |
| } | |
| default_toolchain { | |
| cpu: "armeabi-v7a" | |
| toolchain_identifier: "stub_armeabi-v7a" | |
| } | |
| default_toolchain { | |
| cpu: "x64_windows_msvc" | |
| toolchain_identifier: "msvc_x64" | |
| } | |
| default_toolchain { | |
| cpu: "x64_windows_msys" | |
| toolchain_identifier: "msys_x64" | |
| } | |
| default_toolchain { | |
| cpu: "s390x" | |
| toolchain_identifier: "linux_gnu_x86" | |
| } | |
| default_toolchain { | |
| cpu: "ios_x86_64" | |
| toolchain_identifier: "ios_x86_64" | |
| } | |
| # Android tooling requires a default toolchain for the armeabi-v7a cpu. | |
| toolchain { | |
| abi_version: "armeabi-v7a" | |
| abi_libc_version: "armeabi-v7a" | |
| builtin_sysroot: "" | |
| compiler: "compiler" | |
| host_system_name: "armeabi-v7a" | |
| needsPic: true | |
| supports_gold_linker: false | |
| supports_incremental_linker: false | |
| supports_fission: false | |
| supports_interface_shared_objects: false | |
| supports_normalizing_ar: false | |
| supports_start_end_lib: false | |
| target_libc: "armeabi-v7a" | |
| target_cpu: "armeabi-v7a" | |
| target_system_name: "armeabi-v7a" | |
| toolchain_identifier: "stub_armeabi-v7a" | |
| tool_path { name: "ar" path: "/bin/false" } | |
| tool_path { name: "compat-ld" path: "/bin/false" } | |
| tool_path { name: "cpp" path: "/bin/false" } | |
| tool_path { name: "dwp" path: "/bin/false" } | |
| tool_path { name: "gcc" path: "/bin/false" } | |
| tool_path { name: "gcov" path: "/bin/false" } | |
| tool_path { name: "ld" path: "/bin/false" } | |
| tool_path { name: "nm" path: "/bin/false" } | |
| tool_path { name: "objcopy" path: "/bin/false" } | |
| tool_path { name: "objdump" path: "/bin/false" } | |
| tool_path { name: "strip" path: "/bin/false" } | |
| linking_mode_flags { mode: DYNAMIC } | |
| } | |
| toolchain { | |
| toolchain_identifier: "ios_x86_64" | |
| host_system_name: "x86_64-apple-macosx" | |
| target_system_name: "x86_64-apple-ios" | |
| target_cpu: "ios_x86_64" | |
| target_libc: "ios" | |
| compiler: "compiler" | |
| abi_version: "local" | |
| abi_libc_version: "local" | |
| supports_gold_linker: false | |
| supports_incremental_linker: false | |
| supports_fission: false | |
| supports_interface_shared_objects: false | |
| supports_normalizing_ar: false | |
| supports_start_end_lib: false | |
| tool_path { name: "ar" path: "/bin/false" } | |
| tool_path { name: "compat-ld" path: "/bin/false" } | |
| tool_path { name: "cpp" path: "/bin/false" } | |
| tool_path { name: "dwp" path: "/bin/false" } | |
| tool_path { name: "gcc" path: "/bin/false" } | |
| tool_path { name: "gcov" path: "/bin/false" } | |
| tool_path { name: "ld" path: "/bin/false" } | |
| tool_path { name: "nm" path: "/bin/false" } | |
| tool_path { name: "objcopy" path: "/bin/false" } | |
| tool_path { name: "objdump" path: "/bin/false" } | |
| tool_path { name: "strip" path: "/bin/false" } | |
| linking_mode_flags { mode: DYNAMIC } | |
| } | |
| toolchain { | |
| toolchain_identifier: "linux_gnu_x86" | |
| abi_version: "clang" | |
| abi_libc_version: "glibc_2.19" | |
| builtin_sysroot: "" | |
| compiler: "clang" | |
| host_system_name: "i686-unknown-linux-gnu" | |
| needsPic: true | |
| supports_gold_linker: true | |
| supports_incremental_linker: false | |
| supports_fission: false | |
| supports_interface_shared_objects: false | |
| supports_normalizing_ar: false | |
| supports_start_end_lib: true | |
| target_libc: "glibc_2.19" | |
| target_cpu: "k8" | |
| target_system_name: "x86_64-unknown-linux-gnu" | |
| cxx_flag: "-std=c++0x" | |
| linker_flag: "-lstdc++" | |
| linker_flag: "-lm" | |
| linker_flag: "-fuse-ld=gold" | |
| linker_flag: "-B/usr/local/bin" | |
| linker_flag: "-B/usr/bin" | |
| cxx_builtin_include_directory: "/usr/include/c++/4.9" | |
| cxx_builtin_include_directory: "/usr/include/x86_64-linux-gnu/c++/4.9" | |
| cxx_builtin_include_directory: "/usr/include/c++/4.9/backward" | |
| cxx_builtin_include_directory: "/usr/local/include" | |
| cxx_builtin_include_directory: "/usr/local/lib/clang/6.0.0/include" | |
| cxx_builtin_include_directory: "/usr/include/x86_64-linux-gnu" | |
| cxx_builtin_include_directory: "/usr/include" | |
| objcopy_embed_flag: "-I" | |
| objcopy_embed_flag: "binary" | |
| unfiltered_cxx_flag: "-Wno-builtin-macro-redefined" | |
| unfiltered_cxx_flag: "-D__DATE__=\"redacted\"" | |
| unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\"" | |
| unfiltered_cxx_flag: "-D__TIME__=\"redacted\"" | |
| compiler_flag: "-U_FORTIFY_SOURCE" | |
| compiler_flag: "-fstack-protector" | |
| compiler_flag: "-Wall" | |
| compiler_flag: "-B/usr/local/bin" | |
| compiler_flag: "-B/usr/bin" | |
| compiler_flag: "-fcolor-diagnostics" | |
| compiler_flag: "-fno-omit-frame-pointer" | |
| tool_path {name: "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: "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" } | |
| tool_path {name: "gcc" path: "/usr/local/bin/clang" } | |
| tool_path {name: "ar" path: "/usr/bin/ar" } | |
| compilation_mode_flags { | |
| mode: DBG | |
| compiler_flag: "-g" | |
| } | |
| compilation_mode_flags { | |
| mode: OPT | |
| compiler_flag: "-g0" | |
| compiler_flag: "-O2" | |
| compiler_flag: "-D_FORTIFY_SOURCE=1" | |
| compiler_flag: "-DNDEBUG" | |
| compiler_flag: "-ffunction-sections" | |
| compiler_flag: "-fdata-sections" | |
| linker_flag: "-Wl,--gc-sections" | |
| } | |
| linking_mode_flags { mode: DYNAMIC } | |
| feature { | |
| name: 'coverage' | |
| provides: 'profile' | |
| flag_set { | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-header-parsing' | |
| action: 'c++-header-preprocessing' | |
| action: 'c++-module-compile' | |
| flag_group { | |
| flag: '-fprofile-arcs' | |
| flag: '-ftest-coverage' | |
| } | |
| } | |
| flag_set { | |
| action: 'c++-link-interface-dynamic-library' | |
| action: 'c++-link-dynamic-library' | |
| action: 'c++-link-executable' | |
| flag_group { | |
| flag: '-lgcov' | |
| } | |
| } | |
| } | |
| } | |
| toolchain { | |
| toolchain_identifier: "msvc_x64" | |
| host_system_name: "local" | |
| target_system_name: "local" | |
| abi_version: "local" | |
| abi_libc_version: "local" | |
| target_cpu: "x64_windows" | |
| compiler: "cl" | |
| target_libc: "msvcrt140" | |
| default_python_version: "python2.7" | |
| tool_path { | |
| name: "ar" | |
| 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_gold_linker: false | |
| supports_start_end_lib: false | |
| supports_interface_shared_objects: true | |
| supports_incremental_linker: false | |
| supports_normalizing_ar: true | |
| needsPic: false | |
| # 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 both asynchronous (structured) and synchronous (C++) exceptions. | |
| 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: "c++-header-preprocessing" | |
| action: "assemble" | |
| action: "preprocess-assemble" | |
| action: "c++-link-executable" | |
| action: "c++-link-dynamic-library" | |
| action: "c++-link-static-library" | |
| action: "c++-link-alwayslink-static-library" | |
| action: "c++-link-pic-static-library" | |
| action: "c++-link-alwayslink-pic-static-library" | |
| flag_group { | |
| flag: "/nologo" | |
| } | |
| } | |
| } | |
| # This feature is just for enabling flag_set in action_config for -c and -o options during the transitional period | |
| feature { | |
| name: 'compile_action_flags_in_flag_set' | |
| } | |
| 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: 'c-compile' | |
| action_name: 'c-compile' | |
| tool { | |
| tool_path: '' | |
| } | |
| flag_set { | |
| flag_group { | |
| flag: '/c' | |
| flag: '%{source_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_object_file' | |
| flag_group { | |
| flag: '/Fo%{output_object_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_assembly_file' | |
| flag_group { | |
| flag: '/Fa%{output_assembly_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_preprocess_file' | |
| flag_group { | |
| flag: '/P' | |
| flag: '/Fi%{output_preprocess_file}' | |
| } | |
| } | |
| 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: '' | |
| } | |
| flag_set { | |
| flag_group { | |
| flag: '/c' | |
| flag: '%{source_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_object_file' | |
| flag_group { | |
| flag: '/Fo%{output_object_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_assembly_file' | |
| flag_group { | |
| flag: '/Fa%{output_assembly_file}' | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'output_preprocess_file' | |
| flag_group { | |
| flag: '/P' | |
| flag: '/Fi%{output_preprocess_file}' | |
| } | |
| } | |
| 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: 'legacy_link_flags' | |
| implies: 'linker_subsystem_flag' | |
| implies: 'linker_param_file' | |
| implies: 'msvc_env' | |
| implies: 'use_linker' | |
| 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: 'legacy_link_flags' | |
| implies: 'linker_subsystem_flag' | |
| implies: 'linker_param_file' | |
| implies: 'msvc_env' | |
| implies: 'use_linker' | |
| implies: 'no_stripping' | |
| implies: 'has_configured_linker_path' | |
| } | |
| 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' | |
| } | |
| action_config { | |
| config_name: 'c++-link-alwayslink-static-library' | |
| action_name: 'c++-link-alwayslink-static-library' | |
| tool { | |
| tool_path: '' | |
| } | |
| implies: 'nologo' | |
| implies: 'archiver_flags' | |
| implies: 'input_param_flags' | |
| implies: 'linker_param_file' | |
| implies: 'msvc_env' | |
| } | |
| # TODO(pcloudy): The following action_config is listed in MANDATORY_LINK_TARGET_TYPES. | |
| # But do we really need them on Windows? | |
| action_config { | |
| config_name: 'c++-link-pic-static-library' | |
| action_name: 'c++-link-pic-static-library' | |
| tool { | |
| tool_path: '' | |
| } | |
| implies: 'nologo' | |
| implies: 'archiver_flags' | |
| implies: 'input_param_flags' | |
| implies: 'linker_param_file' | |
| implies: 'msvc_env' | |
| } | |
| action_config { | |
| config_name: 'c++-link-alwayslink-pic-static-library' | |
| action_name: 'c++-link-alwayslink-pic-static-library' | |
| tool { | |
| tool_path: '' | |
| } | |
| implies: 'nologo' | |
| implies: 'archiver_flags' | |
| implies: 'input_param_flags' | |
| implies: 'linker_param_file' | |
| implies: 'msvc_env' | |
| } | |
| action_config { | |
| config_name: 'c++-link-interface-dynamic-library' | |
| action_name: 'c++-link-interface-dynamic-library' | |
| tool { | |
| tool_path: '' | |
| } | |
| implies: 'nologo' | |
| 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: 'assemble' | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-header-parsing' | |
| action: 'c++-header-preprocessing' | |
| 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: "c++-header-preprocessing" | |
| action: "assemble" | |
| action: "preprocess-assemble" | |
| action: "c++-link-executable" | |
| action: "c++-link-dynamic-library" | |
| action: "c++-link-static-library" | |
| action: "c++-link-alwayslink-static-library" | |
| action: "c++-link-pic-static-library" | |
| action: "c++-link-alwayslink-pic-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: "use_linker" | |
| env_set { | |
| action: "c++-link-executable" | |
| action: "c++-link-dynamic-library" | |
| env_entry { | |
| key: "USE_LINKER" | |
| value: "1" | |
| } | |
| } | |
| } | |
| feature { | |
| name: 'include_paths' | |
| flag_set { | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-header-parsing' | |
| action: 'c++-header-preprocessing' | |
| 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: "preprocess-assemble" | |
| action: "c-compile" | |
| action: "c++-compile" | |
| action: "c++-header-parsing" | |
| action: "c++-header-preprocessing" | |
| 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: 'assemble' | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-module-compile' | |
| action: 'c++-header-preprocessing' | |
| 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' | |
| flag_group { | |
| flag: '/DLL' | |
| } | |
| } | |
| } | |
| feature { | |
| name: 'linkstamps' | |
| flag_set { | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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' | |
| flag_group { | |
| flag: '/OUT:%{output_execpath}' | |
| } | |
| } | |
| } | |
| feature { | |
| name: 'archiver_flags' | |
| flag_set { | |
| expand_if_all_available: 'output_execpath' | |
| action: 'c++-link-static-library' | |
| action: 'c++-link-alwayslink-static-library' | |
| action: 'c++-link-pic-static-library' | |
| action: 'c++-link-alwayslink-pic-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' | |
| flag_group { | |
| flag: "/IMPLIB:%{interface_library_output_path}" | |
| } | |
| } | |
| flag_set { | |
| expand_if_all_available: 'libopts' | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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-static-library' | |
| action: 'c++-link-alwayslink-static-library' | |
| action: 'c++-link-pic-static-library' | |
| action: 'c++-link-alwayslink-pic-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 { | |
| 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}' | |
| } | |
| } | |
| 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}' | |
| } | |
| } | |
| flag_group { | |
| expand_if_equal: { | |
| variable: 'libraries_to_link.type' | |
| value: 'dynamic_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}' | |
| } | |
| } | |
| flag_group { | |
| expand_if_equal: { | |
| variable: 'libraries_to_link.type' | |
| value: 'versioned_dynamic_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 | |
| # "legacy_link_flags", this feature will be applied prior to it anwyhere they | |
| # are both implied. And since "legacy_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' | |
| flag_group { | |
| flag: '/SUBSYSTEM:CONSOLE' | |
| } | |
| } | |
| } | |
| # The "legacy_link_flags" may contain 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 "legacy_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' | |
| 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-static-library' | |
| action: 'c++-link-alwayslink-static-library' | |
| action: 'c++-link-pic-static-library' | |
| action: 'c++-link-alwayslink-pic-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' | |
| 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' | |
| 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' | |
| 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' | |
| 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_set { | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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_set { | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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" | |
| } | |
| } | |
| } | |
| feature { | |
| name: 'user_compile_flags' | |
| flag_set { | |
| expand_if_all_available: 'user_compile_flags' | |
| action: 'assemble' | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-header-parsing' | |
| action: 'c++-header-preprocessing' | |
| 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++-header-preprocessing' | |
| action: 'c++-module-compile' | |
| action: 'c++-module-codegen' | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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: 'assemble' | |
| action: 'preprocess-assemble' | |
| action: 'c-compile' | |
| action: 'c++-compile' | |
| action: 'c++-header-parsing' | |
| action: 'c++-header-preprocessing' | |
| action: 'c++-module-compile' | |
| action: 'c++-module-codegen' | |
| flag_group { | |
| iterate_over: 'unfiltered_compile_flags' | |
| flag: '%{unfiltered_compile_flags}' | |
| } | |
| } | |
| } | |
| feature { | |
| name: 'windows_export_all_symbols' | |
| flag_set { | |
| expand_if_all_available: 'def_file_path' | |
| action: 'c++-link-executable' | |
| action: 'c++-link-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: 'no_windows_export_all_symbols' | |
| } | |
| linking_mode_flags { mode: DYNAMIC } | |
| } |