<commit_before>// Copyright 2015 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.packages.util;

import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import java.io.IOException;

/**
 * Bazel implementation of {@link MockCcSupport}
 */
public final class BazelMockCcSupport extends MockCcSupport {
  public static final BazelMockCcSupport INSTANCE = new BazelMockCcSupport();

  private static final String MOCK_CROSSTOOL_PATH =
      "com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL";

  /** Filter to remove implicit dependencies of C/C++ rules. */
  private static final Predicate<String> CC_LABEL_NAME_FILTER =
      new Predicate<String>() {
        @Override
        public boolean apply(String label) {
          return !label.startsWith("@blaze_tools//tools/cpp/stl")
              && !label.startsWith("@blaze_tools//tools/cpp/link_dynamic_library");
        }
      };

  private BazelMockCcSupport() {}

  private static final ImmutableList<String> CROSSTOOL_ARCHS =
      ImmutableList.of("piii", "k8", "armeabi-v7a", "ppc");

  protected static void createBasePackage(MockToolsConfig config) throws IOException {
    config.create(
        "base/BUILD",
        "package(default_visibility=['//visibility:public'])",
        "cc_library(name = 'system_malloc', linkstatic = 1)",
        "cc_library(name = 'base', srcs=['timestamp.h'])");
    if (config.isRealFileSystem()) {
      config.linkTool("base/timestamp.h");
    } else {
      config.create("base/timestamp.h", "");
    }
  }

  @Override
  protected String getRealFilesystemCrosstoolTopPath() {
    assert false;
    return null;
  }

  @Override
  protected String[] getRealFilesystemTools(String crosstoolTop) {
    assert false;
    return null;
  }

  @Override
  protected ImmutableList<String> getCrosstoolArchs() {
    return CROSSTOOL_ARCHS;
  }

  @Override
  public void setup(MockToolsConfig config) throws IOException {
    config.create(
        "/bazel_tools_workspace/tools/cpp/BUILD",
        "package(default_visibility=['//visibility:public'])",
        "cc_library(name = 'stl')",
        "toolchain_type(name = 'toolchain_type')",
        "cc_library(name = 'malloc')",
        "cc_toolchain_suite(",
        "    name = 'toolchain',",
        "    toolchains = {",
        "      'local': ':cc-compiler-local',",
        "      'k8': ':cc-compiler-k8',",
        "      'piii': ':cc-compiler-piii-gcc-4.4.0',",
        "      'darwin': ':cc-compiler-darwin',",
        "      'ios_x86_64': ':cc-compiler-ios_x86_64',",
        "      'armeabi-v7a': ':cc-compiler-armeabi-v7a',",
        "      'x64_windows': ':cc-compiler-x64_windows',",
        "      'ppc': ':cc-compiler-ppc',",
        "      'local|compiler': ':cc-compiler-local',",
        "      'k8|compiler': ':cc-compiler-k8',",
        "      'k8|compiler_no_dyn_linker': ':cc-no-dyn-linker-k8',",
        "      'piii|compiler': ':cc-compiler-piii-gcc-4.4.0',",
        "      'darwin|compiler': ':cc-compiler-darwin',",
        "      'darwin|compiler_no_dyn_linker': ':cc-no-dyn-linker-darwin',",
        "      'ios_x86_64|compiler': ':cc-compiler-ios_x86_64',",
        "      'armeabi-v7a|compiler': ':cc-compiler-armeabi-v7a',",
        "      'x64_windows|windows_msys64': ':cc-compiler-x64_windows',",
        "      'x64_windows|compiler_no_dyn_linker': ':cc-no-dyn-linker-x64_windows',",
        "      'ppc|compiler': ':cc-compiler-ppc',",
        "    })",
        "cc_toolchain(name = 'cc-compiler-local', all_files = ':empty', compiler_files = ':empty',",
        "    toolchain_identifier = 'toolchain-identifier-local',",
        "    cpu = 'local',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        // No toolchain entry for cc-compiler-local so it can't be selected by toolchain resolution.
        "toolchain(name = 'cc-toolchain-local',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-local',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',",
        "    toolchain_identifier = 'toolchain-identifier-k8',",
        "    cpu = 'k8',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-k8',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-k8',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-k8', all_files = ':empty', ",
        "    compiler_files = ':empty', cpu = 'k8', compiler = 'compiler_no_dyn_linker', ",
        "    dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-k8',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-k8',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-ppc', all_files = ':empty', compiler_files = ':empty',",
        "    cpu = 'ppc',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-ppc',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:ppc',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-ppc',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-piii-gcc-4.4.0',",
        "    all_files = ':all-files-piii',",
        "    compiler_files = ':compiler-files-piii',",
        "    cpu = 'piii',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-piii',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_32',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-piii-gcc-4.4.0',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-darwin', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'darwin',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-darwin',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:osx',",
        "    ],",
        "    toolchain = ':cc-compiler-darwin',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-darwin', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'darwin',",
        "    compiler = 'compiler_no_dyn_linker',",
        "    dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-darwin',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:osx',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-darwin',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-ios_x86_64', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'ios_x86_64',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-ios_x86_64',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:ios',",
        "    ],",
        "    toolchain = ':cc-compiler-ios_x86_64',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-armeabi-v7a', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'armeabi-v7a',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-armeabi-v7a',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:arm',",
        "        '@bazel_tools//platforms:android',",
        "    ],",
        "    toolchain = ':cc-compiler-armeabi-v7a',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-x64_windows', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'x64_windows',",
        "    compiler = 'windows_msys64',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-x64_windows',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:windows',",
        "    ],",
        "    toolchain = ':cc-compiler-x64_windows',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-x64_windows', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'x64_windows',",
        "    compiler = 'compiler_no_dyn_linker',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-x64_windows',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:windows',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-x64_windows',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "filegroup(",
        "    name = 'interface_library_builder',",
        "    srcs = ['build_interface_so'],",
        ")",
        "filegroup(",
        "    name = 'link_dynamic_library',",
        "    srcs = ['link_dynamic_library.sh'],",
        ")",
        "cc_toolchain_alias(name = 'current_cc_toolchain')",
        "filegroup(",
        "    name = 'crosstool',",
        "    srcs = [':current_cc_toolchain'],",
        ")");
    config.create(
        "/bazel_tools_workspace/tools/cpp/CROSSTOOL",
        readCrosstoolFile());
    if (config.isRealFileSystem()) {
      config.linkTool("tools/cpp/link_dynamic_library.sh");
    } else {
      config.create("tools/cpp/link_dynamic_library.sh", "");
    }
    MockPlatformSupport.setup(config, "/bazel_tools_workspace/platforms");
    MockPlatformSupport.setup(config, "/bazel_tools_workspace/");
  }

  @Override
  public String getMockCrosstoolVersion() {
    return "gcc-4.4.0-glibc-2.3.6";
  }

  @Override
  public Label getMockCrosstoolLabel() {
    return Label.parseAbsoluteUnchecked("@bazel_tools//tools/cpp:toolchain");
  }

  @Override
  public String readCrosstoolFile() throws IOException {
    return ResourceLoader.readFromResources(MOCK_CROSSTOOL_PATH);
  }

  @Override
  public String getMockCrosstoolPath() {
    return "/bazel_tools_workspace/tools/cpp/";
  }

  @Override
  public Predicate<String> labelNameFilter() {
    return CC_LABEL_NAME_FILTER;
  }
}
<commit_msg>Remove outdated comment about cc-toolchain-local.<commit_after>// Copyright 2015 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.packages.util;

import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.cmdline.Label;
import java.io.IOException;

/**
 * Bazel implementation of {@link MockCcSupport}
 */
public final class BazelMockCcSupport extends MockCcSupport {
  public static final BazelMockCcSupport INSTANCE = new BazelMockCcSupport();

  private static final String MOCK_CROSSTOOL_PATH =
      "com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL";

  /** Filter to remove implicit dependencies of C/C++ rules. */
  private static final Predicate<String> CC_LABEL_NAME_FILTER =
      new Predicate<String>() {
        @Override
        public boolean apply(String label) {
          return !label.startsWith("@blaze_tools//tools/cpp/stl")
              && !label.startsWith("@blaze_tools//tools/cpp/link_dynamic_library");
        }
      };

  private BazelMockCcSupport() {}

  private static final ImmutableList<String> CROSSTOOL_ARCHS =
      ImmutableList.of("piii", "k8", "armeabi-v7a", "ppc");

  protected static void createBasePackage(MockToolsConfig config) throws IOException {
    config.create(
        "base/BUILD",
        "package(default_visibility=['//visibility:public'])",
        "cc_library(name = 'system_malloc', linkstatic = 1)",
        "cc_library(name = 'base', srcs=['timestamp.h'])");
    if (config.isRealFileSystem()) {
      config.linkTool("base/timestamp.h");
    } else {
      config.create("base/timestamp.h", "");
    }
  }

  @Override
  protected String getRealFilesystemCrosstoolTopPath() {
    assert false;
    return null;
  }

  @Override
  protected String[] getRealFilesystemTools(String crosstoolTop) {
    assert false;
    return null;
  }

  @Override
  protected ImmutableList<String> getCrosstoolArchs() {
    return CROSSTOOL_ARCHS;
  }

  @Override
  public void setup(MockToolsConfig config) throws IOException {
    config.create(
        "/bazel_tools_workspace/tools/cpp/BUILD",
        "package(default_visibility=['//visibility:public'])",
        "cc_library(name = 'stl')",
        "toolchain_type(name = 'toolchain_type')",
        "cc_library(name = 'malloc')",
        "cc_toolchain_suite(",
        "    name = 'toolchain',",
        "    toolchains = {",
        "      'local': ':cc-compiler-local',",
        "      'k8': ':cc-compiler-k8',",
        "      'piii': ':cc-compiler-piii-gcc-4.4.0',",
        "      'darwin': ':cc-compiler-darwin',",
        "      'ios_x86_64': ':cc-compiler-ios_x86_64',",
        "      'armeabi-v7a': ':cc-compiler-armeabi-v7a',",
        "      'x64_windows': ':cc-compiler-x64_windows',",
        "      'ppc': ':cc-compiler-ppc',",
        "      'local|compiler': ':cc-compiler-local',",
        "      'k8|compiler': ':cc-compiler-k8',",
        "      'k8|compiler_no_dyn_linker': ':cc-no-dyn-linker-k8',",
        "      'piii|compiler': ':cc-compiler-piii-gcc-4.4.0',",
        "      'darwin|compiler': ':cc-compiler-darwin',",
        "      'darwin|compiler_no_dyn_linker': ':cc-no-dyn-linker-darwin',",
        "      'ios_x86_64|compiler': ':cc-compiler-ios_x86_64',",
        "      'armeabi-v7a|compiler': ':cc-compiler-armeabi-v7a',",
        "      'x64_windows|windows_msys64': ':cc-compiler-x64_windows',",
        "      'x64_windows|compiler_no_dyn_linker': ':cc-no-dyn-linker-x64_windows',",
        "      'ppc|compiler': ':cc-compiler-ppc',",
        "    })",
        "cc_toolchain(name = 'cc-compiler-local', all_files = ':empty', compiler_files = ':empty',",
        "    toolchain_identifier = 'toolchain-identifier-local',",
        "    cpu = 'local',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-local',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-local',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',",
        "    toolchain_identifier = 'toolchain-identifier-k8',",
        "    cpu = 'k8',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-k8',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-k8',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-k8', all_files = ':empty', ",
        "    compiler_files = ':empty', cpu = 'k8', compiler = 'compiler_no_dyn_linker', ",
        "    dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-k8',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-k8',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-ppc', all_files = ':empty', compiler_files = ':empty',",
        "    cpu = 'ppc',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-ppc',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:ppc',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-ppc',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-piii-gcc-4.4.0',",
        "    all_files = ':all-files-piii',",
        "    compiler_files = ':compiler-files-piii',",
        "    cpu = 'piii',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-piii',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_32',",
        "        '@bazel_tools//platforms:linux',",
        "    ],",
        "    toolchain = ':cc-compiler-piii-gcc-4.4.0',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-darwin', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'darwin',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-darwin',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:osx',",
        "    ],",
        "    toolchain = ':cc-compiler-darwin',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-darwin', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'darwin',",
        "    compiler = 'compiler_no_dyn_linker',",
        "    dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-darwin',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:osx',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-darwin',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-ios_x86_64', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'ios_x86_64',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-ios_x86_64',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:ios',",
        "    ],",
        "    toolchain = ':cc-compiler-ios_x86_64',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-armeabi-v7a', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'armeabi-v7a',",
        "    compiler = 'compiler',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-armeabi-v7a',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:arm',",
        "        '@bazel_tools//platforms:android',",
        "    ],",
        "    toolchain = ':cc-compiler-armeabi-v7a',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-compiler-x64_windows', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'x64_windows',",
        "    compiler = 'windows_msys64',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-x64_windows',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:windows',",
        "    ],",
        "    toolchain = ':cc-compiler-x64_windows',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "cc_toolchain(name = 'cc-no-dyn-linker-x64_windows', all_files = ':empty', ",
        "    compiler_files = ':empty',",
        "    cpu = 'x64_windows',",
        "    compiler = 'compiler_no_dyn_linker',",
        "    dwp_files = ':empty',",
        "    dynamic_runtime_libs = [':empty'], ",
        "    ar_files = ':empty', as_files = ':empty', linker_files = ':empty',",
        "    module_map = 'crosstool.cppmap', supports_header_parsing = 1,",
        "    objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',",
        ")",
        "toolchain(name = 'cc-toolchain-no-dyn-linker-x64_windows',",
        // Needs to be compatible with all execution environments for tests to work properly.
        "    exec_compatible_with = [],",
        "    target_compatible_with = [",
        "        '@bazel_tools//platforms:x86_64',",
        "        '@bazel_tools//platforms:windows',",
        "    ],",
        "    toolchain = ':cc-no-dyn-linker-x64_windows',",
        "    toolchain_type = ':toolchain_type',",
        ")",
        "filegroup(",
        "    name = 'interface_library_builder',",
        "    srcs = ['build_interface_so'],",
        ")",
        "filegroup(",
        "    name = 'link_dynamic_library',",
        "    srcs = ['link_dynamic_library.sh'],",
        ")",
        "cc_toolchain_alias(name = 'current_cc_toolchain')",
        "filegroup(",
        "    name = 'crosstool',",
        "    srcs = [':current_cc_toolchain'],",
        ")");
    config.create(
        "/bazel_tools_workspace/tools/cpp/CROSSTOOL",
        readCrosstoolFile());
    if (config.isRealFileSystem()) {
      config.linkTool("tools/cpp/link_dynamic_library.sh");
    } else {
      config.create("tools/cpp/link_dynamic_library.sh", "");
    }
    MockPlatformSupport.setup(config, "/bazel_tools_workspace/platforms");
    MockPlatformSupport.setup(config, "/bazel_tools_workspace/");
  }

  @Override
  public String getMockCrosstoolVersion() {
    return "gcc-4.4.0-glibc-2.3.6";
  }

  @Override
  public Label getMockCrosstoolLabel() {
    return Label.parseAbsoluteUnchecked("@bazel_tools//tools/cpp:toolchain");
  }

  @Override
  public String readCrosstoolFile() throws IOException {
    return ResourceLoader.readFromResources(MOCK_CROSSTOOL_PATH);
  }

  @Override
  public String getMockCrosstoolPath() {
    return "/bazel_tools_workspace/tools/cpp/";
  }

  @Override
  public Predicate<String> labelNameFilter() {
    return CC_LABEL_NAME_FILTER;
  }
}

{'fraction_non_alphanumeric': 0.16621060993909437, 'fraction_numerical': 0.00959190278635949, 'mean_word_length': 2.4258643281927226, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4048278', 'n_tokens_mistral': 11346, 'n_tokens_neox': 11179, 'n_words': 1829}