// Copyright 2014 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.
package com.google.devtools.build.lib.rules.cpp;

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;

/**
 * A helper class for creating action_configs for the c++ actions.
 *
 * <p>TODO(b/30109612): Replace this with action_configs in the crosstool instead of putting it in
 * legacy features.
 */
public class CppActionConfigs {

  /** A platform for C++ tool invocations. */
  public enum CppPlatform {
    LINUX,
    MAC
  }

  public static String getCppActionConfigs(
      CppPlatform platform,
      ImmutableSet<String> existingFeatureNames,
      String gccToolPath,
      String cppLinkDynamicLibraryToolPath,
      String arToolPath,
      String stripToolPath,
      boolean supportsEmbeddedRuntimes,
      boolean supportsInterfaceSharedLibraries) {
    String cppDynamicLibraryLinkerTool = "";
    if (!existingFeatureNames.contains("dynamic_library_linker_tool")
        && supportsInterfaceSharedLibraries) {
      cppDynamicLibraryLinkerTool =
          ""
              + "feature {"
              + "  name: 'dynamic_library_linker_tool'"
              + "  flag_set {"
              + "    action: 'c++-link-dynamic-library'"
              + "    flag_group {"
              + "      flag: '"
              + cppLinkDynamicLibraryToolPath
              + "'"
              + "    }"
              + "  }"
              + "}";
    }
    return Joiner.on("\n")
        .join(
            ImmutableList.of(
                "action_config {",
                "  config_name: 'assemble'",
                "  action_name: 'assemble'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'preprocess-assemble'",
                "  action_name: 'preprocess-assemble'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'linkstamp-compile'",
                "  action_name: 'linkstamp-compile'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c-compile'",
                "  action_name: 'c-compile'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c++-compile'",
                "  action_name: 'c++-compile'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c++-header-parsing'",
                "  action_name: 'c++-header-parsing'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c++-header-preprocessing'",
                "  action_name: 'c++-header-preprocessing'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c++-module-compile'",
                "  action_name: 'c++-module-compile'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                "action_config {",
                "  config_name: 'c++-module-codegen'",
                "  action_name: 'c++-module-codegen'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'legacy_compile_flags'",
                "  implies: 'user_compile_flags'",
                "  implies: 'sysroot'",
                "  implies: 'unfiltered_compile_flags'",
                "}",
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.LEGACY_COMPILE_FLAGS),
                    "feature {",
                    "  name: 'legacy_compile_flags'",
                    "  enabled: true",
                    "  flag_set {",
                    "    expand_if_all_available: 'legacy_compile_flags'",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'c++-module-codegen'",
                    "    action: 'lto-backend'",
                    "    action: 'clif-match'",
                    "    flag_group {",
                    "      iterate_over: 'legacy_compile_flags'",
                    "      flag: '%{legacy_compile_flags}'",
                    "    }",
                    "  }",
                    "}"),
                // Gcc options:
                //  -MD turns on .d file output as a side-effect (doesn't imply -E)
                //  -MM[D] enables user includes only, not system includes
                //  -MF <name> specifies the dotd file name
                // Issues:
                //  -M[M] alone subverts actual .o output (implies -E)
                //  -M[M]D alone breaks some of the .d naming assumptions
                // This combination gets user and system includes with specified name:
                //  -MD -MF <name>
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.DEPENDENCY_FILE),
                    "feature {",
                    "  name: 'dependency_file'",
                    "  flag_set {",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-compile'",
                    "    action: 'objc-compile'",
                    "    action: 'objc++-compile'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'clif-match'",
                    "    expand_if_all_available: 'dependency_file'",
                    "    flag_group {",
                    "      flag: '-MD'",
                    "      flag: '-MF'",
                    "      flag: '%{dependency_file}'",
                    "    }",
                    "  }",
                    "}"),
                // GCC and Clang give randomized names to symbols which are defined in
                // an anonymous namespace but have external linkage.  To make
                // computation of these deterministic, we want to override the
                // default seed for the random number generator.  It's safe to use
                // any value which differs for all translation units; we use the
                // path to the object file.
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.RANDOM_SEED),
                    "feature {",
                    "  name: 'random_seed'",
                    "  flag_set {",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-codegen'",
                    "    action: 'c++-module-compile'",
                    "    flag_group {",
                    "      flag: '-frandom-seed=%{output_file}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.PIC),
                    "feature {",
                    "  name: 'pic'",
                    "  flag_set {",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-codegen'",
                    "    action: 'c++-module-compile'",
                    "    expand_if_all_available: 'pic'",
                    "    flag_group {",
                    "      flag: '-fPIC'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.PER_OBJECT_DEBUG_INFO),
                    "feature {",
                    "  name: 'per_object_debug_info'",
                    "  flag_set {",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-codegen'",
                    "    expand_if_all_available: 'per_object_debug_info_file'",
                    "    flag_group {",
                    "      flag: '-gsplit-dwarf'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.PREPROCESSOR_DEFINES),
                    "feature {",
                    "  name: 'preprocessor_defines'",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'clif-match'",
                    "    flag_group {",
                    "      iterate_over: 'preprocessor_defines'",
                    "      flag: '-D%{preprocessor_defines}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("includes"),
                    "feature {",
                    "  name: 'includes'",
                    "  enabled: true",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'clif-match'",
                    "    action: 'objc-compile'",
                    "    action: 'objc++-compile'",
                    "    flag_group {",
                    "      expand_if_all_available: 'includes'",
                    "      iterate_over: 'includes'",
                    "      flag: '-include'",
                    "      flag: '%{includes}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.INCLUDE_PATHS),
                    "feature {",
                    "  name: 'include_paths'",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'clif-match'",
                    "    action: 'objc-compile'",
                    "    action: 'objc++-compile'",
                    "    flag_group {",
                    "      iterate_over: 'quote_include_paths'",
                    "      flag: '-iquote'",
                    "      flag: '%{quote_include_paths}'",
                    "    }",
                    "    flag_group {",
                    "      iterate_over: 'include_paths'",
                    "      flag: '-I%{include_paths}'",
                    "    }",
                    "    flag_group {",
                    "      iterate_over: 'system_include_paths'",
                    "      flag: '-isystem'",
                    "      flag: '%{system_include_paths}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.FDO_INSTRUMENT),
                    "feature {",
                    "  name: 'fdo_instrument'",
                    "  provides: 'profile'",
                    "  flag_set {",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-link-interface-dynamic-library'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'c++-link-executable'",
                    "    flag_group {",
                    "      flag: '-fprofile-generate=%{fdo_instrument_path}'",
                    "      flag: '-fno-data-sections'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.FDO_OPTIMIZE),
                    "feature {",
                    "  name: 'fdo_optimize'",
                    "  provides: 'profile'",
                    "  flag_set {",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    expand_if_all_available: 'fdo_profile_path'",
                    "    flag_group {",
                    "      flag: '-fprofile-use=%{fdo_profile_path}'",
                    "      flag: '-Xclang-only=-Wno-profile-instr-unprofiled'",
                    "      flag: '-Xclang-only=-Wno-profile-instr-out-of-date'",
                    "      flag: '-fprofile-correction'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.AUTOFDO),
                    "feature {",
                    "  name: 'autofdo'",
                    "  provides: 'profile'",
                    "  flag_set {",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    expand_if_all_available: 'fdo_profile_path'",
                    "    flag_group {",
                    "      flag: '-fauto-profile=%{fdo_profile_path}'",
                    "      flag: '-fprofile-correction'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.LIPO),
                    "feature {",
                    "  name: 'lipo'",
                    "  requires { feature: 'autofdo' }",
                    "  requires { feature: 'fdo_optimize' }",
                    "  requires { feature: 'fdo_instrument' }",
                    "  flag_set {",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    flag_group {",
                    "      flag: '-fripa'",
                    "    }",
                    "  }",
                    "}"),
                "action_config {",
                "  config_name: 'c++-link-executable'",
                "  action_name: 'c++-link-executable'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                "  implies: 'symbol_counts'",
                "  implies: 'strip_debug_symbols'",
                "  implies: 'linkstamps'",
                "  implies: 'output_execpath_flags'",
                "  implies: 'runtime_library_search_directories'",
                "  implies: 'library_search_directories'",
                "  implies: 'libraries_to_link'",
                "  implies: 'force_pic_flags'",
                "  implies: 'legacy_link_flags'",
                "  implies: 'linker_param_file'",
                "  implies: 'fission_support'",
                "  implies: 'sysroot'",
                "}",
                "action_config {",
                "  config_name: 'c++-link-dynamic-library'",
                "  action_name: 'c++-link-dynamic-library'",
                "  tool {",
                "    tool_path: '" + gccToolPath + "'",
                "  }",
                ifTrue(
                    supportsInterfaceSharedLibraries,
                    "implies: 'build_interface_libraries'",
                    "implies: 'dynamic_library_linker_tool'"),
                "  implies: 'symbol_counts'",
                "  implies: 'strip_debug_symbols'",
                "  implies: 'shared_flag'",
                "  implies: 'linkstamps'",
                "  implies: 'output_execpath_flags'",
                "  implies: 'runtime_library_search_directories'",
                "  implies: 'library_search_directories'",
                "  implies: 'libraries_to_link'",
                "  implies: 'legacy_link_flags'",
                "  implies: 'linker_param_file'",
                "  implies: 'fission_support'",
                "  implies: 'sysroot'",
                "}",
                "action_config {",
                "  config_name: 'c++-link-static-library'",
                "  action_name: 'c++-link-static-library'",
                "  tool {",
                "    tool_path: '" + arToolPath + "'",
                "  }",
                "  implies: 'archiver_flags'",
                "  implies: 'linker_param_file'",
                "}",
                "action_config {",
                "  config_name: 'c++-link-alwayslink-static-library'",
                "  action_name: 'c++-link-alwayslink-static-library'",
                "  tool {",
                "    tool_path: '" + arToolPath + "'",
                "  }",
                "  implies: 'archiver_flags'",
                "  implies: 'linker_param_file'",
                "}",
                "action_config {",
                "  config_name: 'c++-link-pic-static-library'",
                "  action_name: 'c++-link-pic-static-library'",
                "  tool {",
                "    tool_path: '" + arToolPath + "'",
                "  }",
                "  implies: 'archiver_flags'",
                "  implies: 'linker_param_file'",
                "}",
                "action_config {",
                "  config_name: 'c++-link-alwayslink-pic-static-library'",
                "  action_name: 'c++-link-alwayslink-pic-static-library'",
                "  tool {",
                "    tool_path: '" + arToolPath + "'",
                "  }",
                "  implies: 'archiver_flags'",
                "  implies: 'linker_param_file'",
                "}",
                ifTrue(
                    supportsInterfaceSharedLibraries,
                    "feature {",
                    "  name: 'build_interface_libraries'",
                    "  flag_set {",
                    "    expand_if_all_available: 'generate_interface_library'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      flag: '%{generate_interface_library}'",
                    "      flag: '%{interface_library_builder_path}'",
                    "      flag: '%{interface_library_input_path}'",
                    "      flag: '%{interface_library_output_path}'",
                    "    }",
                    "  }",
                    "}",
                    // Order of feature declaration matters, cppDynamicLibraryLinkerTool has to
                    // follow right after build_interface_libraries.
                    cppDynamicLibraryLinkerTool),
                ifTrue(
                    !existingFeatureNames.contains("symbol_counts"),
                    "feature {",
                    "  name: 'symbol_counts'",
                    "  flag_set {",
                    "    expand_if_all_available: 'symbol_counts_output'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      flag: '-Wl,--print-symbol-counts=%{symbol_counts_output}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("shared_flag"),
                    "feature {",
                    "  name: 'shared_flag'",
                    "  flag_set {",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      flag: '-shared'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("linkstamps"),
                    "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}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("output_execpath_flags"),
                    "feature {",
                    "  name: 'output_execpath_flags'",
                    "  flag_set {",
                    "    expand_if_all_available: 'output_execpath'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'c++-link-executable'",
                    "    flag_group {",
                    "      flag: '-o'",
                    "      flag: '%{output_execpath}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("runtime_library_search_directories"),
                    "feature {",
                    "  name: 'runtime_library_search_directories',",
                    "  flag_set {",
                    "    expand_if_all_available: 'runtime_library_search_directories'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      iterate_over: 'runtime_library_search_directories'",
                    "      flag_group {",
                    // TODO(b/27153401): This should probably be @loader_path on osx.
                    ifTrue(
                        supportsEmbeddedRuntimes,
                        "    expand_if_all_available: 'is_cc_test_link_action'",
                        "    flag: ",
                        "      '-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_all_available: 'is_not_cc_test_link_action'"),
                    "        flag: '-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}'",
                    "      }",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("library_search_directories"),
                    "feature {",
                    "  name: 'library_search_directories'",
                    "  flag_set {",
                    "    expand_if_all_available: 'library_search_directories'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      iterate_over: 'library_search_directories'",
                    "      flag: '-L%{library_search_directories}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("archiver_flags"),
                    "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 {",
                    ifLinux(platform, "flag: 'rcsD'", "flag: '%{output_execpath}'"),
                    ifMac(
                        platform,
                        "  flag: '-static'",
                        "  flag: '-s'",
                        "  flag: '-o'",
                        "  flag: '%{output_execpath}'"),
                    "    }",
                    "  }",
                    "  flag_set { ",
                    "    expand_if_all_available: 'libraries_to_link'",
                    "    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'",
                    "        }",
                    "        flag: '%{libraries_to_link.name}'",
                    "      }",
                    "      flag_group {",
                    "        expand_if_equal {",
                    "          variable: 'libraries_to_link.type'",
                    "          value: 'object_file_group'",
                    "        }",
                    "        iterate_over: 'libraries_to_link.object_files'",
                    "        flag: '%{libraries_to_link.object_files}'",
                    "      }",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("libraries_to_link"),
                    "feature {",
                    "  name: 'libraries_to_link'",
                    "  flag_set {",
                    "    expand_if_all_available: 'libraries_to_link'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      iterate_over: 'libraries_to_link'",
                    "      flag_group {",
                    "        expand_if_equal: {",
                    "          variable: 'libraries_to_link.type'",
                    "          value: 'object_file_group'",
                    "        }",
                    "        flag: '-Wl,--start-lib'",
                    "      }",
                    ifLinux(
                        platform,
                        "  flag_group {",
                        "    expand_if_true: 'libraries_to_link.is_whole_archive'",
                        "    flag: '-Wl,-whole-archive'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "        variable: 'libraries_to_link.type'",
                        "        value: 'object_file_group'",
                        "    }",
                        "    iterate_over: 'libraries_to_link.object_files'",
                        "    flag: '%{libraries_to_link.object_files}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'object_file'",
                        "    }",
                        "    flag: '%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'interface_library'",
                        "    }",
                        "    flag: '%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'static_library'",
                        "    }",
                        "    flag: '%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'dynamic_library'",
                        "    }",
                        "    flag: '-l%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'versioned_dynamic_library'",
                        "    }",
                        "    flag: '-l:%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_true: 'libraries_to_link.is_whole_archive'",
                        "    flag: '-Wl,-no-whole-archive'",
                        "  }"),
                    ifMac(
                        platform,
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'object_file_group'",
                        "    }",
                        "    iterate_over: 'libraries_to_link.object_files'",
                        "    flag_group {",
                        "      expand_if_false: 'libraries_to_link.is_whole_archive'",
                        "      flag: '%{libraries_to_link.object_files}'",
                        "    }",
                        "    flag_group {",
                        "      expand_if_true: 'libraries_to_link.is_whole_archive'",
                        "      flag: '-Wl,-force_load,%{libraries_to_link.object_files}'",
                        "    }",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'object_file'",
                        "    }",
                        "    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: '-Wl,-force_load,%{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: '-Wl,-force_load,%{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: '-Wl,-force_load,%{libraries_to_link.name}'",
                        "    }",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'dynamic_library'",
                        "    }",
                        "    flag: '-l%{libraries_to_link.name}'",
                        "  }",
                        "  flag_group {",
                        "    expand_if_equal: {",
                        "      variable: 'libraries_to_link.type'",
                        "      value: 'versioned_dynamic_library'",
                        "    }",
                        "    flag: '-l:%{libraries_to_link.name}'",
                        "  }"),
                    "      flag_group {",
                    "        expand_if_equal: {",
                    "          variable: 'libraries_to_link.type'",
                    "          value: 'object_file_group'",
                    "        }",
                    "        flag: '-Wl,--end-lib'",
                    "      }",
                    "    }",
                    "    flag_group {",
                    "      expand_if_true: 'thinlto_param_file'",
                    "      flag: '-Wl,@%{thinlto_param_file}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("force_pic_flags"),
                    "feature {",
                    "  name: 'force_pic_flags'",
                    "  flag_set {",
                    "    expand_if_all_available: 'force_pic'",
                    "    action: 'c++-link-executable'",
                    "    flag_group {",
                    "      flag: '-pie'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("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}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("fission_support"),
                    "feature {",
                    "  name: 'fission_support'",
                    "  flag_set {",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'c++-link-interface-dynamic-library'",
                    "    flag_group {",
                    "      expand_if_all_available: 'is_using_fission'",
                    "      flag: '-Wl,--gdb-index'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("strip_debug_symbols"),
                    "feature {",
                    "  name: 'strip_debug_symbols'",
                    "  flag_set {",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'c++-link-interface-dynamic-library'",
                    "    flag_group {",
                    "      expand_if_all_available: 'strip_debug_symbols'",
                    "      flag: '-Wl,-S'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains(CppRuleClasses.COVERAGE),
                    "feature {",
                    "  name: 'coverage'",
                    "}",
                    "feature {",
                    "  name: 'llvm_coverage_map_format'",
                    "  provides: 'profile'",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-compile'",
                    "    action: 'objc-compile'",
                    "    action: 'objc++-compile'",
                    "    flag_group {",
                    "      flag: '-fprofile-instr-generate'",
                    "      flag: '-fcoverage-mapping'",
                    "    }",
                    "  }",
                    "  flag_set {",
                    "    action: 'c++-link-interface-dynamic-library'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'c++-link-executable'",
                    "    action: 'objc-executable'",
                    "    action: 'objc++-executable'",
                    "    flag_group {",
                    "      flag: '-fprofile-instr-generate'",
                    "    }",
                    "  }",
                    "  requires {",
                    "    feature: 'coverage'",
                    "  }",
                    "}",
                    "feature {",
                    "  name: 'gcc_coverage_map_format'",
                    "  provides: 'profile'",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-module-compile'",
                    "    action: 'objc-compile'",
                    "    action: 'objc++-compile'",
                    "    action: 'objc-executable'",
                    "    action: 'objc++-executable'",
                    "    flag_group {",
                    "      expand_if_all_available: 'gcov_gcno_file'",
                    "      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'",
                    "    }",
                    "  }",
                    "  requires {",
                    "    feature: 'coverage'",
                    "  }",
                    "}"),
                "action_config {",
                "  config_name: 'strip'",
                "  action_name: 'strip'",
                "  tool {",
                "    tool_path: '" + stripToolPath + "'",
                "  }",
                "  flag_set {",
                "    flag_group {",
                "      flag: '-S'",
                ifLinux(platform, "flag: '-p'"),
                "      flag: '-o'",
                "      flag: '%{output_file}'",
                "    }",
                ifLinux(
                    platform,
                    "    flag_group {",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.quote_paths'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.bracket_paths'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.system_paths'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.cpp_defines'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.cpp_includes'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.cl_args'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.lipo_info'",
                    "      flag: '-R'",
                    "      flag: '.gnu.switches.text.annotation'",
                    "    }"),
                "    flag_group {",
                "      iterate_over: 'stripopts'",
                "      flag: '%{stripopts}'",
                "    }",
                "    flag_group {",
                "      flag: '%{input_file}'",
                "    }",
                "  }",
                "}"));
  }

  public static String getFeaturesToAppearLastInToolchain(
      ImmutableSet<String> existingFeatureNames) {
    return Joiner.on("\n")
        .join(
            ImmutableList.of(
                ifTrue(
                    !existingFeatureNames.contains("user_compile_flags"),
                    "feature {",
                    "  name: 'user_compile_flags'",
                    "  enabled: true",
                    "  flag_set {",
                    "    expand_if_all_available: 'user_compile_flags'",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'c++-module-codegen'",
                    "    action: 'lto-backend'",
                    "    action: 'clif-match'",
                    "    flag_group {",
                    "      iterate_over: 'user_compile_flags'",
                    "      flag: '%{user_compile_flags}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("sysroot"),
                    "feature {",
                    "  name: 'sysroot'",
                    "  enabled: true",
                    "  flag_set {",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    action: 'clif-match'",
                    "    action: 'lto-backend'",
                    "    flag_group {",
                    "      expand_if_all_available: 'sysroot'",
                    "      flag: '--sysroot=%{sysroot}'",
                    "    }",
                    "  }",
                    "}"),
                // unfiltered_compile_flags contain system include paths. These must be added
                // after the user provided options (present in legacy_compile_flags build
                // variable above), otherwise users adding include paths will not pick up their own
                // include paths first.
                ifTrue(
                    !existingFeatureNames.contains("unfiltered_compile_flags"),
                    "feature {",
                    "  name: 'unfiltered_compile_flags'",
                    "  enabled: true",
                    "  flag_set {",
                    "    expand_if_all_available: 'unfiltered_compile_flags'",
                    "    action: 'assemble'",
                    "    action: 'preprocess-assemble'",
                    "    action: 'linkstamp-compile'",
                    "    action: 'c-compile'",
                    "    action: 'c++-compile'",
                    "    action: 'c++-header-parsing'",
                    "    action: 'c++-header-preprocessing'",
                    "    action: 'c++-module-compile'",
                    "    action: 'c++-module-codegen'",
                    "    action: 'lto-backend'",
                    "    action: 'clif-match'",
                    "    flag_group {",
                    "      iterate_over: 'unfiltered_compile_flags'",
                    "      flag: '%{unfiltered_compile_flags}'",
                    "    }",
                    "  }",
                    "}"),
                ifTrue(
                    !existingFeatureNames.contains("linker_param_file"),
                    "feature {",
                    "  name: 'linker_param_file'",
                    "  flag_set {",
                    "    expand_if_all_available: 'linker_param_file'",
                    "    action: 'c++-link-executable'",
                    "    action: 'c++-link-dynamic-library'",
                    "    flag_group {",
                    "      flag: '-Wl,@%{linker_param_file}'",
                    "    }",
                    "  }",
                    "  flag_set {",
                    "    expand_if_all_available: 'linker_param_file'",
                    "    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}'",
                    "    }",
                    "  }",
                    "}")));
  }

  private static String ifLinux(CppPlatform platform, String... lines) {
    // Platform `LINUX` also includes FreeBSD.
    return ifTrue(platform == CppPlatform.LINUX, lines);
  }

  private static String ifMac(CppPlatform platform, String... lines) {
    return ifTrue(platform == CppPlatform.MAC, lines);
  }

  private static String ifTrue(boolean condition, String... lines) {
    if (condition) {
      return Joiner.on("\n").join(lines);
    } else {
      return "";
    }
  }
}
