Upgrade bazel to 4.0.0rc2

A few things of note here:
- I disabled a few incompatible flags in order to minimize the number
  of changes we have to deal with.
- I had to upgrade the typescript rules because the old ones didn't
  work with new bazel anymore. That brought a typescript compiler
  upgrade along. This in turn required me to turn off strict mode.
  Otherwise, there are a _ton_ of errors in our typescript files. The
  vast majority of them are related to `null` checking.
- The `default_python_version` attribute on Python rules doesn't exist
  anymore. It's now replaced by `python_version`.
- I removed the CROSSTOOL in favour of a Starlark-equivalent
  configuration function. See `tools/cpp/toolchain_config.bzl` for
  more details. This new file is auto-generated using the migration
  tools from `rules_cc`. I have made no attempt to beautify this file.
  Relatedly, all CROSSTOOL-related files/functionality are gone as well.
- The `config_setting` targets to detect the compiler names had to
  change. This is perhaps not surprising. Thanks to Austin for
  pointing this out to me.
- The `cc_toolchain` targets all required `ar_files` and `as_files`
  attributes where they didn't before. Not really sure what changed,
  but the compilations appears to work with these changes.

Change-Id: I2317e5160fa3f8d87f94106b0c3b328918d0c42c
diff --git a/.bazelrc b/.bazelrc
index 1318580..1e65f3a 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -6,11 +6,17 @@
 # Always include debug information in the non-.stripped binaries.
 build --strip=never
 
+build --noincompatible_disable_nocopts
+build --noincompatible_restrict_string_escapes
+
 # Use the malloc we want.
 build --custom_malloc=//tools/cpp:malloc
 
 # Use our hermetic Python runtime.
 build --python_top=//tools/python:runtime
+build --noincompatible_use_python_toolchains
+build --noincompatible_py3_is_default
+build --noincompatible_py2_outputs_are_suffixed
 
 build:asan --copt -fsanitize=address
 build:asan --linkopt -fsanitize=address --linkopt -ldl
@@ -83,5 +89,3 @@
 # https://github.com/bazelbuild/bazel/issues/6341 for ongoing discussion with
 # upstream about this.
 build --javabase=@openjdk_linux_archive//:jdk --host_javabase=@openjdk_linux_archive//:jdk
-
-build --noexperimental_separate_genfiles_directory
diff --git a/WORKSPACE b/WORKSPACE
index 6c9949d..a8c8a19 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -604,15 +604,11 @@
     url = "https://www.frc971.org/Build-Dependencies/webrtc-30376-4c4735b-linux-rio.tar.gz",
 )
 
-# Fetch our Bazel dependencies that aren't distributed on npm
-load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dependencies")
-
-rules_typescript_dependencies()
-
-# Setup TypeScript toolchain
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_setup_workspace")
-
-ts_setup_workspace()
+http_archive(
+    name = "build_bazel_rules_nodejs",
+    sha256 = "0d9660cf0894f1fe1e9840818553e0080fbce0851169812d77a70bdb9981c946",
+    urls = ["https://www.frc971.org/Build-Dependencies/rules_nodejs-0.37.0.tar.gz"],
+)
 
 # Setup the NodeJS toolchain
 load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories", "yarn_install")
@@ -620,12 +616,26 @@
 node_repositories()
 
 # Setup Bazel managed npm dependencies with the `yarn_install` rule.
+#
+# To run yarn by hand, use:
+#  bazel run @nodejs_linux_amd64//:bin/yarn -- list
+# I'm sure there is a better path, but that works...
 yarn_install(
     name = "npm",
     package_json = "//:package.json",
+    symlink_node_modules = False,
     yarn_lock = "//:yarn.lock",
 )
 
+# Install all Bazel dependencies needed for npm packages that supply Bazel rules
+load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
+
+install_bazel_dependencies()
+
+load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
+
+ts_setup_workspace()
+
 # Flatbuffers
 local_repository(
     name = "com_github_google_flatbuffers",
diff --git a/aos/network/BUILD b/aos/network/BUILD
index 8d49f20..c725ab7 100644
--- a/aos/network/BUILD
+++ b/aos/network/BUILD
@@ -381,8 +381,7 @@
     ],
     data = [
         "//aos/network/www:files",
-        "//aos/network/www:flatbuffers",
-        "//aos/network/www:main_bundle",
+        "//aos/network/www:main_bundle.min.js",
         "@com_github_google_flatbuffers//:flatjs",
     ],
     deps = [
diff --git a/aos/network/www/BUILD b/aos/network/www/BUILD
index 7ec26cc..4987a30 100644
--- a/aos/network/www/BUILD
+++ b/aos/network/www/BUILD
@@ -1,4 +1,4 @@
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle", "nodejs_binary")
 load("//aos:config.bzl", "aos_config")
 
@@ -40,10 +40,11 @@
 
 rollup_bundle(
     name = "main_bundle",
-    entry_point = "aos/network/www/main",
+    enable_code_splitting = False,
+    entry_point = "main.ts",
     visibility = ["//aos:__subpackages__"],
     deps = [
-        "main",
+        ":main",
     ],
 )
 
@@ -101,12 +102,16 @@
         ":plotter",
         ":proxy",
         ":reflection_ts",
+        "//aos:configuration_ts_fbs",
+        "//aos/network:connect_ts_fbs",
+        "@com_github_google_flatbuffers//ts:flatbuffers_ts",
     ],
 )
 
 rollup_bundle(
     name = "graph_main_bundle",
-    entry_point = "aos/network/www/graph_main",
+    enable_code_splitting = False,
+    entry_point = "graph_main.ts",
     deps = [
         ":graph_main",
     ],
@@ -126,7 +131,8 @@
 
 rollup_bundle(
     name = "reflection_test_bundle",
-    entry_point = "aos/network/www/reflection_test_main",
+    enable_code_splitting = False,
+    entry_point = "reflection_test_main.ts",
     deps = [
         ":reflection_test_main",
     ],
@@ -136,11 +142,10 @@
     name = "web_proxy_demo",
     srcs = ["web_proxy_demo.sh"],
     data = [
-        ":flatbuffers",
         ":graph.html",
-        ":graph_main_bundle",
+        ":graph_main_bundle.min.js",
         ":reflection_test.html",
-        ":reflection_test_bundle",
+        ":reflection_test_bundle.min.js",
         ":test_config",
         "//aos/network:web_proxy_main",
         "//y2020:config",
diff --git a/build_tests/BUILD b/build_tests/BUILD
index 11ad448..950b2f5 100644
--- a/build_tests/BUILD
+++ b/build_tests/BUILD
@@ -76,7 +76,7 @@
 py_test(
     name = "python3_opencv",
     srcs = ["python_opencv.py"],
-    default_python_version = "PY3",
+    python_version = "PY3",
     main = "python_opencv.py",
     srcs_version = "PY2AND3",
     deps = ["@opencv_contrib_nonfree_amd64//:python_opencv"],
diff --git a/debian/BUILD b/debian/BUILD
index c57713d..b893511 100644
--- a/debian/BUILD
+++ b/debian/BUILD
@@ -115,7 +115,7 @@
     srcs = [
         "download_packages.py",
     ],
-    default_python_version = "PY3",
+    python_version = "PY3",
     main = "download_packages.py",
     srcs_version = "PY2AND3",
 )
diff --git a/doc/make_bazel_package.sh b/doc/make_bazel_package.sh
index c961814..1cd8626 100755
--- a/doc/make_bazel_package.sh
+++ b/doc/make_bazel_package.sh
@@ -9,7 +9,7 @@
 
 BAZEL_SOURCE="$1"
 
-VERSION="0.19.0rc4-$(date +%Y%m%d%H%M)+$(GIT_DIR="${BAZEL_SOURCE}/.git" git rev-parse --short HEAD)"
+VERSION="4.0.0rc2-$(date +%Y%m%d%H%M)+$(GIT_DIR="${BAZEL_SOURCE}/.git" git rev-parse --short HEAD)"
 OUTPUT="bazel_${VERSION}"
 
 (
@@ -17,7 +17,7 @@
 bazel build -c opt //scripts/packages:with-jdk/bazel-real --embed_label="${VERSION}" --stamp=yes --experimental_sandbox_base=/dev/shm
 )
 
-cp "${BAZEL_SOURCE}/bazel-genfiles/scripts/packages/with-jdk/bazel-real" "${OUTPUT}"
+cp "${BAZEL_SOURCE}/bazel-bin/scripts/packages/with-jdk/bazel-real" "${OUTPUT}"
 xz "${OUTPUT}"
 
 echo "Output is at ${OUTPUT}.xz"
diff --git a/package.json b/package.json
index a627a3d..2478e0a 100644
--- a/package.json
+++ b/package.json
@@ -2,9 +2,10 @@
   "name": "971-Robot-Code",
   "license": "MIT",
   "devDependencies": {
-    "@bazel/bazel": "^0.19.1",
-    "@bazel/typescript": "0.21.0",
+    "@bazel/bazel": "^0.29.0",
     "@types/flatbuffers": "latest",
+    "@bazel/ibazel": "^0.10.3",
+    "@bazel/typescript": "^0.37.0",
     "typescript": "^3.1.6"
   }
 }
diff --git a/third_party/bazel/BUILD b/third_party/bazel/BUILD
index ed1724a..282cdad 100644
--- a/third_party/bazel/BUILD
+++ b/third_party/bazel/BUILD
@@ -2,6 +2,7 @@
 
 # Generated from Bazel's
 # 30df02a567cbd8a307b96037f0960fca66a5deaf://src/main/protobuf/extra_actions_base.proto.
+# TODO(phil): Update this once we upgrade protobuf.
 py_library(
     name = "extra_actions_proto_py",
     srcs = [
@@ -9,14 +10,3 @@
     ],
     visibility = ["//visibility:public"],
 )
-
-# Generated from Bazel's
-# aa7e972dbc96aa94f86522d452089dc30f6dbbcd://src/main/protobuf/crosstool_config.proto.
-py_library(
-    name = "crosstool_config_proto_py",
-    srcs = [
-        "protos/crosstool_config_pb2.py",
-    ],
-    visibility = ["//visibility:public"],
-    deps = ["@com_google_protobuf//:protobuf_python"],
-)
diff --git a/third_party/bazel/protos/crosstool_config_pb2.py b/third_party/bazel/protos/crosstool_config_pb2.py
deleted file mode 100644
index 1c10fb8..0000000
--- a/third_party/bazel/protos/crosstool_config_pb2.py
+++ /dev/null
@@ -1,1564 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: src/main/protobuf/crosstool_config.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='src/main/protobuf/crosstool_config.proto',
-  package='com.google.devtools.build.lib.view.config.crosstool',
-  syntax='proto2',
-  serialized_pb=_b('\n(src/main/protobuf/crosstool_config.proto\x12\x33\x63om.google.devtools.build.lib.view.config.crosstool\"\x8c \n\nCToolchain\x12X\n\x07\x66\x65\x61ture\x18\x32 \x03(\x0b\x32G.com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature\x12\x63\n\raction_config\x18\x35 \x03(\x0b\x32L.com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig\x12r\n\x15\x61rtifact_name_pattern\x18\x36 \x03(\x0b\x32S.com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern\x12\x1c\n\x14toolchain_identifier\x18\x01 \x02(\t\x12\x18\n\x10host_system_name\x18\x02 \x02(\t\x12\x1a\n\x12target_system_name\x18\x03 \x02(\t\x12\x12\n\ntarget_cpu\x18\x04 \x02(\t\x12\x13\n\x0btarget_libc\x18\x05 \x02(\t\x12\x10\n\x08\x63ompiler\x18\x06 \x02(\t\x12\x13\n\x0b\x61\x62i_version\x18\x07 \x02(\t\x12\x18\n\x10\x61\x62i_libc_version\x18\x08 \x02(\t\x12P\n\ttool_path\x18\t \x03(\x0b\x32=.com.google.devtools.build.lib.view.config.crosstool.ToolPath\x12#\n\x14supports_gold_linker\x18\n \x01(\x08:\x05\x66\x61lse\x12%\n\x16supports_thin_archives\x18\x0b \x01(\x08:\x05\x66\x61lse\x12%\n\x16supports_start_end_lib\x18\x1c \x01(\x08:\x05\x66\x61lse\x12\x30\n!supports_interface_shared_objects\x18  \x01(\x08:\x05\x66\x61lse\x12)\n\x1asupports_embedded_runtimes\x18( \x01(\x08:\x05\x66\x61lse\x12!\n\x19static_runtimes_filegroup\x18- \x01(\t\x12\"\n\x1a\x64ynamic_runtimes_filegroup\x18. \x01(\t\x12*\n\x1bsupports_incremental_linker\x18) \x01(\x08:\x05\x66\x61lse\x12&\n\x17supports_normalizing_ar\x18\x1a \x01(\x08:\x05\x66\x61lse\x12\x1f\n\x10supports_fission\x18+ \x01(\x08:\x05\x66\x61lse\x12\x1c\n\rsupports_dsym\x18\x33 \x01(\x08:\x05\x66\x61lse\x12\x17\n\x08needsPic\x18\x0c \x01(\x08:\x05\x66\x61lse\x12\x15\n\rcompiler_flag\x18\r \x03(\t\x12\x10\n\x08\x63xx_flag\x18\x0e \x03(\t\x12\x1b\n\x13unfiltered_cxx_flag\x18\x19 \x03(\t\x12\x13\n\x0blinker_flag\x18\x0f \x03(\t\x12#\n\x1b\x64ynamic_library_linker_flag\x18\x1b \x03(\t\x12\x1d\n\x15test_only_linker_flag\x18\x31 \x03(\t\x12\x1a\n\x12objcopy_embed_flag\x18\x10 \x03(\t\x12\x15\n\rld_embed_flag\x18\x17 \x03(\t\x12\x0f\n\x07\x61r_flag\x18/ \x03(\t\x12\x1d\n\x15\x61r_thin_archives_flag\x18\x30 \x03(\t\x12 \n\x18gcc_plugin_compiler_flag\x18\" \x03(\t\x12i\n\x16\x63ompilation_mode_flags\x18\x11 \x03(\x0b\x32I.com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags\x12[\n\x0flipo_mode_flags\x18, \x03(\x0b\x32\x42.com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags\x12\x61\n\x12linking_mode_flags\x18\x12 \x03(\x0b\x32\x45.com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags\x12#\n\x1bgcc_plugin_header_directory\x18\x13 \x03(\t\x12#\n\x1bmao_plugin_header_directory\x18\x14 \x03(\t\x12X\n\rmake_variable\x18\x15 \x03(\x0b\x32\x41.com.google.devtools.build.lib.view.config.crosstool.MakeVariable\x12%\n\x1d\x63xx_builtin_include_directory\x18\x16 \x03(\t\x12\x17\n\x0f\x62uiltin_sysroot\x18\x18 \x01(\t\x12\x1a\n\x12\x64\x65\x66\x61ult_python_top\x18\x1d \x01(\t\x12\x1e\n\x16\x64\x65\x66\x61ult_python_version\x18\x1e \x01(\t\x12\x1f\n\x17python_preload_swigdeps\x18* \x01(\x08\x12\x18\n\x10\x64\x65\x66\x61ult_grte_top\x18\x1f \x01(\t\x12\x1d\n\x15\x64\x65\x62ian_extra_requires\x18! \x03(\t\x12\x14\n\x0c\x63\x63_target_os\x18\x37 \x01(\t\x1a\xee\x02\n\tFlagGroup\x12\x0c\n\x04\x66lag\x18\x01 \x03(\t\x12]\n\nflag_group\x18\x02 \x03(\x0b\x32I.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup\x12\x14\n\x0citerate_over\x18\x03 \x01(\t\x12\x1f\n\x17\x65xpand_if_all_available\x18\x04 \x03(\t\x12 \n\x18\x65xpand_if_none_available\x18\x05 \x03(\t\x12\x16\n\x0e\x65xpand_if_true\x18\x06 \x01(\t\x12\x17\n\x0f\x65xpand_if_false\x18\x07 \x01(\t\x12j\n\x0f\x65xpand_if_equal\x18\x08 \x01(\x0b\x32Q.com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue\x1a\x34\n\x11VariableWithValue\x12\x10\n\x08variable\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\x1a&\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\x1a\x1d\n\nFeatureSet\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x1a\x36\n\x0eWithFeatureSet\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x03(\t\x12\x13\n\x0bnot_feature\x18\x02 \x03(\t\x1a\xff\x01\n\x07\x46lagSet\x12\x0e\n\x06\x61\x63tion\x18\x01 \x03(\t\x12]\n\nflag_group\x18\x02 \x03(\x0b\x32I.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup\x12\x64\n\x0cwith_feature\x18\x03 \x03(\x0b\x32N.com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet\x12\x1f\n\x17\x65xpand_if_all_available\x18\x04 \x03(\t\x1a\xdb\x01\n\x06\x45nvSet\x12\x0e\n\x06\x61\x63tion\x18\x01 \x03(\t\x12[\n\tenv_entry\x18\x02 \x03(\x0b\x32H.com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry\x12\x64\n\x0cwith_feature\x18\x03 \x03(\x0b\x32N.com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet\x1a\xdd\x02\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x07 \x01(\x08\x12Y\n\x08\x66lag_set\x18\x02 \x03(\x0b\x32G.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet\x12W\n\x07\x65nv_set\x18\x06 \x03(\x0b\x32\x46.com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet\x12\\\n\x08requires\x18\x03 \x03(\x0b\x32J.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet\x12\x0f\n\x07implies\x18\x04 \x03(\t\x12\x10\n\x08provides\x18\x05 \x03(\t\x1a\x9e\x01\n\x04Tool\x12\x11\n\ttool_path\x18\x01 \x02(\t\x12\x64\n\x0cwith_feature\x18\x02 \x03(\x0b\x32N.com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet\x12\x1d\n\x15\x65xecution_requirement\x18\x03 \x03(\t\x1aO\n\x13\x41rtifactNamePattern\x12\x15\n\rcategory_name\x18\x01 \x02(\t\x12\x0e\n\x06prefix\x18\x02 \x02(\t\x12\x11\n\textension\x18\x03 \x02(\t\x1a\xc0\x03\n\x0c\x41\x63tionConfig\x12\x13\n\x0b\x63onfig_name\x18\x01 \x02(\t\x12\x13\n\x0b\x61\x63tion_name\x18\x02 \x02(\t\x12\x0f\n\x07\x65nabled\x18\x08 \x01(\x08\x12R\n\x04tool\x18\x03 \x03(\x0b\x32\x44.com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool\x12Y\n\x08\x66lag_set\x18\x04 \x03(\x0b\x32G.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet\x12W\n\x07\x65nv_set\x18\x05 \x03(\x0b\x32\x46.com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet\x12\\\n\x08requires\x18\x06 \x03(\x0b\x32J.com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet\x12\x0f\n\x07implies\x18\x07 \x03(\t\"&\n\x08ToolPath\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x0c\n\x04path\x18\x02 \x02(\t\"\xa8\x01\n\x14\x43ompilationModeFlags\x12R\n\x04mode\x18\x01 \x02(\x0e\x32\x44.com.google.devtools.build.lib.view.config.crosstool.CompilationMode\x12\x15\n\rcompiler_flag\x18\x02 \x03(\t\x12\x10\n\x08\x63xx_flag\x18\x03 \x03(\t\x12\x13\n\x0blinker_flag\x18\x04 \x03(\t\"w\n\x10LinkingModeFlags\x12N\n\x04mode\x18\x01 \x02(\x0e\x32@.com.google.devtools.build.lib.view.config.crosstool.LinkingMode\x12\x13\n\x0blinker_flag\x18\x02 \x03(\t\"\x9a\x01\n\rLipoModeFlags\x12K\n\x04mode\x18\x01 \x02(\x0e\x32=.com.google.devtools.build.lib.view.config.crosstool.LipoMode\x12\x15\n\rcompiler_flag\x18\x02 \x03(\t\x12\x10\n\x08\x63xx_flag\x18\x03 \x03(\t\x12\x13\n\x0blinker_flag\x18\x04 \x03(\t\"+\n\x0cMakeVariable\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\"]\n\x13\x44\x65\x66\x61ultCpuToolchain\x12\x0b\n\x03\x63pu\x18\x01 \x02(\t\x12\x1c\n\x14toolchain_identifier\x18\x02 \x02(\t\x12\x1b\n\rsupports_lipo\x18\x03 \x01(\x08:\x04true\"\x95\x02\n\x10\x43rosstoolRelease\x12\x15\n\rmajor_version\x18\x01 \x02(\t\x12\x15\n\rminor_version\x18\x02 \x02(\t\x12\x1a\n\x12\x64\x65\x66\x61ult_target_cpu\x18\x03 \x02(\t\x12\x63\n\x11\x64\x65\x66\x61ult_toolchain\x18\x04 \x03(\x0b\x32H.com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain\x12R\n\ttoolchain\x18\x05 \x03(\x0b\x32?.com.google.devtools.build.lib.view.config.crosstool.CToolchain*@\n\x0f\x43ompilationMode\x12\r\n\tFASTBUILD\x10\x01\x12\x07\n\x03\x44\x42G\x10\x02\x12\x07\n\x03OPT\x10\x03\x12\x0c\n\x08\x43OVERAGE\x10\x04*\\\n\x0bLinkingMode\x12\x10\n\x0c\x46ULLY_STATIC\x10\x01\x12\x11\n\rMOSTLY_STATIC\x10\x02\x12\x0b\n\x07\x44YNAMIC\x10\x03\x12\x1b\n\x17MOSTLY_STATIC_LIBRARIES\x10\x04*\x1f\n\x08LipoMode\x12\x07\n\x03OFF\x10\x01\x12\n\n\x06\x42INARY\x10\x02\x42\x35\n3com.google.devtools.build.lib.view.config.crosstool')
-)
-
-_COMPILATIONMODE = _descriptor.EnumDescriptor(
-  name='CompilationMode',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationMode',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='FASTBUILD', index=0, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DBG', index=1, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPT', index=2, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='COVERAGE', index=3, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=5117,
-  serialized_end=5181,
-)
-_sym_db.RegisterEnumDescriptor(_COMPILATIONMODE)
-
-CompilationMode = enum_type_wrapper.EnumTypeWrapper(_COMPILATIONMODE)
-_LINKINGMODE = _descriptor.EnumDescriptor(
-  name='LinkingMode',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.LinkingMode',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='FULLY_STATIC', index=0, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MOSTLY_STATIC', index=1, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DYNAMIC', index=2, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MOSTLY_STATIC_LIBRARIES', index=3, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=5183,
-  serialized_end=5275,
-)
-_sym_db.RegisterEnumDescriptor(_LINKINGMODE)
-
-LinkingMode = enum_type_wrapper.EnumTypeWrapper(_LINKINGMODE)
-_LIPOMODE = _descriptor.EnumDescriptor(
-  name='LipoMode',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.LipoMode',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='OFF', index=0, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='BINARY', index=1, number=2,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=5277,
-  serialized_end=5308,
-)
-_sym_db.RegisterEnumDescriptor(_LIPOMODE)
-
-LipoMode = enum_type_wrapper.EnumTypeWrapper(_LIPOMODE)
-FASTBUILD = 1
-DBG = 2
-OPT = 3
-COVERAGE = 4
-FULLY_STATIC = 1
-MOSTLY_STATIC = 2
-DYNAMIC = 3
-MOSTLY_STATIC_LIBRARIES = 4
-OFF = 1
-BINARY = 2
-
-
-
-_CTOOLCHAIN_FLAGGROUP = _descriptor.Descriptor(
-  name='FlagGroup',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.flag', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='flag_group', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.flag_group', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='iterate_over', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.iterate_over', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_all_available', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.expand_if_all_available', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_none_available', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.expand_if_none_available', index=4,
-      number=5, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_true', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.expand_if_true', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_false', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.expand_if_false', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_equal', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup.expand_if_equal', index=7,
-      number=8, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2134,
-  serialized_end=2500,
-)
-
-_CTOOLCHAIN_VARIABLEWITHVALUE = _descriptor.Descriptor(
-  name='VariableWithValue',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='variable', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue.variable', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue.value', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2502,
-  serialized_end=2554,
-)
-
-_CTOOLCHAIN_ENVENTRY = _descriptor.Descriptor(
-  name='EnvEntry',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2556,
-  serialized_end=2594,
-)
-
-_CTOOLCHAIN_FEATURESET = _descriptor.Descriptor(
-  name='FeatureSet',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet.feature', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2596,
-  serialized_end=2625,
-)
-
-_CTOOLCHAIN_WITHFEATURESET = _descriptor.Descriptor(
-  name='WithFeatureSet',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet.feature', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='not_feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet.not_feature', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2627,
-  serialized_end=2681,
-)
-
-_CTOOLCHAIN_FLAGSET = _descriptor.Descriptor(
-  name='FlagSet',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet.action', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='flag_group', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet.flag_group', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='with_feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet.with_feature', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='expand_if_all_available', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet.expand_if_all_available', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2684,
-  serialized_end=2939,
-)
-
-_CTOOLCHAIN_ENVSET = _descriptor.Descriptor(
-  name='EnvSet',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet.action', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='env_entry', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet.env_entry', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='with_feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet.with_feature', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2942,
-  serialized_end=3161,
-)
-
-_CTOOLCHAIN_FEATURE = _descriptor.Descriptor(
-  name='Feature',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='enabled', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.enabled', index=1,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='flag_set', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.flag_set', index=2,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='env_set', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.env_set', index=3,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='requires', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.requires', index=4,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='implies', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.implies', index=5,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='provides', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature.provides', index=6,
-      number=5, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3164,
-  serialized_end=3513,
-)
-
-_CTOOLCHAIN_TOOL = _descriptor.Descriptor(
-  name='Tool',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='tool_path', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool.tool_path', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='with_feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool.with_feature', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='execution_requirement', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool.execution_requirement', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3516,
-  serialized_end=3674,
-)
-
-_CTOOLCHAIN_ARTIFACTNAMEPATTERN = _descriptor.Descriptor(
-  name='ArtifactNamePattern',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='category_name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern.category_name', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='prefix', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern.prefix', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='extension', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern.extension', index=2,
-      number=3, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3676,
-  serialized_end=3755,
-)
-
-_CTOOLCHAIN_ACTIONCONFIG = _descriptor.Descriptor(
-  name='ActionConfig',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.config_name', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='action_name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.action_name', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='enabled', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.enabled', index=2,
-      number=8, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='tool', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.tool', index=3,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='flag_set', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.flag_set', index=4,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='env_set', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.env_set', index=5,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='requires', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.requires', index=6,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='implies', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig.implies', index=7,
-      number=7, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3758,
-  serialized_end=4206,
-)
-
-_CTOOLCHAIN = _descriptor.Descriptor(
-  name='CToolchain',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='feature', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.feature', index=0,
-      number=50, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='action_config', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.action_config', index=1,
-      number=53, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='artifact_name_pattern', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.artifact_name_pattern', index=2,
-      number=54, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='toolchain_identifier', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.toolchain_identifier', index=3,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='host_system_name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.host_system_name', index=4,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='target_system_name', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.target_system_name', index=5,
-      number=3, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='target_cpu', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.target_cpu', index=6,
-      number=4, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='target_libc', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.target_libc', index=7,
-      number=5, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compiler', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.compiler', index=8,
-      number=6, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='abi_version', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.abi_version', index=9,
-      number=7, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='abi_libc_version', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.abi_libc_version', index=10,
-      number=8, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='tool_path', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.tool_path', index=11,
-      number=9, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_gold_linker', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_gold_linker', index=12,
-      number=10, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_thin_archives', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_thin_archives', index=13,
-      number=11, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_start_end_lib', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_start_end_lib', index=14,
-      number=28, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_interface_shared_objects', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_interface_shared_objects', index=15,
-      number=32, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_embedded_runtimes', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_embedded_runtimes', index=16,
-      number=40, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='static_runtimes_filegroup', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.static_runtimes_filegroup', index=17,
-      number=45, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dynamic_runtimes_filegroup', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.dynamic_runtimes_filegroup', index=18,
-      number=46, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_incremental_linker', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_incremental_linker', index=19,
-      number=41, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_normalizing_ar', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_normalizing_ar', index=20,
-      number=26, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_fission', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_fission', index=21,
-      number=43, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_dsym', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.supports_dsym', index=22,
-      number=51, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='needsPic', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.needsPic', index=23,
-      number=12, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compiler_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.compiler_flag', index=24,
-      number=13, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='cxx_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.cxx_flag', index=25,
-      number=14, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='unfiltered_cxx_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.unfiltered_cxx_flag', index=26,
-      number=25, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.linker_flag', index=27,
-      number=15, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='dynamic_library_linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.dynamic_library_linker_flag', index=28,
-      number=27, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='test_only_linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.test_only_linker_flag', index=29,
-      number=49, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='objcopy_embed_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.objcopy_embed_flag', index=30,
-      number=16, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='ld_embed_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ld_embed_flag', index=31,
-      number=23, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='ar_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ar_flag', index=32,
-      number=47, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='ar_thin_archives_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.ar_thin_archives_flag', index=33,
-      number=48, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='gcc_plugin_compiler_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.gcc_plugin_compiler_flag', index=34,
-      number=34, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compilation_mode_flags', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.compilation_mode_flags', index=35,
-      number=17, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='lipo_mode_flags', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.lipo_mode_flags', index=36,
-      number=44, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='linking_mode_flags', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.linking_mode_flags', index=37,
-      number=18, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='gcc_plugin_header_directory', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.gcc_plugin_header_directory', index=38,
-      number=19, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='mao_plugin_header_directory', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.mao_plugin_header_directory', index=39,
-      number=20, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='make_variable', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.make_variable', index=40,
-      number=21, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='cxx_builtin_include_directory', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.cxx_builtin_include_directory', index=41,
-      number=22, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='builtin_sysroot', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.builtin_sysroot', index=42,
-      number=24, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='default_python_top', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.default_python_top', index=43,
-      number=29, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='default_python_version', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.default_python_version', index=44,
-      number=30, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='python_preload_swigdeps', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.python_preload_swigdeps', index=45,
-      number=42, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='default_grte_top', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.default_grte_top', index=46,
-      number=31, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='debian_extra_requires', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.debian_extra_requires', index=47,
-      number=33, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='cc_target_os', full_name='com.google.devtools.build.lib.view.config.crosstool.CToolchain.cc_target_os', index=48,
-      number=55, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_CTOOLCHAIN_FLAGGROUP, _CTOOLCHAIN_VARIABLEWITHVALUE, _CTOOLCHAIN_ENVENTRY, _CTOOLCHAIN_FEATURESET, _CTOOLCHAIN_WITHFEATURESET, _CTOOLCHAIN_FLAGSET, _CTOOLCHAIN_ENVSET, _CTOOLCHAIN_FEATURE, _CTOOLCHAIN_TOOL, _CTOOLCHAIN_ARTIFACTNAMEPATTERN, _CTOOLCHAIN_ACTIONCONFIG, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=98,
-  serialized_end=4206,
-)
-
-
-_TOOLPATH = _descriptor.Descriptor(
-  name='ToolPath',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.ToolPath',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='com.google.devtools.build.lib.view.config.crosstool.ToolPath.name', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='path', full_name='com.google.devtools.build.lib.view.config.crosstool.ToolPath.path', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4208,
-  serialized_end=4246,
-)
-
-
-_COMPILATIONMODEFLAGS = _descriptor.Descriptor(
-  name='CompilationModeFlags',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='mode', full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags.mode', index=0,
-      number=1, type=14, cpp_type=8, label=2,
-      has_default_value=False, default_value=1,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compiler_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags.compiler_flag', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='cxx_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags.cxx_flag', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags.linker_flag', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4249,
-  serialized_end=4417,
-)
-
-
-_LINKINGMODEFLAGS = _descriptor.Descriptor(
-  name='LinkingModeFlags',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='mode', full_name='com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags.mode', index=0,
-      number=1, type=14, cpp_type=8, label=2,
-      has_default_value=False, default_value=1,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags.linker_flag', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4419,
-  serialized_end=4538,
-)
-
-
-_LIPOMODEFLAGS = _descriptor.Descriptor(
-  name='LipoModeFlags',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='mode', full_name='com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags.mode', index=0,
-      number=1, type=14, cpp_type=8, label=2,
-      has_default_value=False, default_value=1,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='compiler_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags.compiler_flag', index=1,
-      number=2, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='cxx_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags.cxx_flag', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='linker_flag', full_name='com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags.linker_flag', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4541,
-  serialized_end=4695,
-)
-
-
-_MAKEVARIABLE = _descriptor.Descriptor(
-  name='MakeVariable',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.MakeVariable',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='com.google.devtools.build.lib.view.config.crosstool.MakeVariable.name', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='com.google.devtools.build.lib.view.config.crosstool.MakeVariable.value', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4697,
-  serialized_end=4740,
-)
-
-
-_DEFAULTCPUTOOLCHAIN = _descriptor.Descriptor(
-  name='DefaultCpuToolchain',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='cpu', full_name='com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain.cpu', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='toolchain_identifier', full_name='com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain.toolchain_identifier', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='supports_lipo', full_name='com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain.supports_lipo', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=True, default_value=True,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4742,
-  serialized_end=4835,
-)
-
-
-_CROSSTOOLRELEASE = _descriptor.Descriptor(
-  name='CrosstoolRelease',
-  full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='major_version', full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease.major_version', index=0,
-      number=1, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='minor_version', full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease.minor_version', index=1,
-      number=2, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='default_target_cpu', full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease.default_target_cpu', index=2,
-      number=3, type=9, cpp_type=9, label=2,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='default_toolchain', full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease.default_toolchain', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='toolchain', full_name='com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease.toolchain', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto2',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4838,
-  serialized_end=5115,
-)
-
-_CTOOLCHAIN_FLAGGROUP.fields_by_name['flag_group'].message_type = _CTOOLCHAIN_FLAGGROUP
-_CTOOLCHAIN_FLAGGROUP.fields_by_name['expand_if_equal'].message_type = _CTOOLCHAIN_VARIABLEWITHVALUE
-_CTOOLCHAIN_FLAGGROUP.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_VARIABLEWITHVALUE.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_ENVENTRY.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_FEATURESET.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_WITHFEATURESET.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_FLAGSET.fields_by_name['flag_group'].message_type = _CTOOLCHAIN_FLAGGROUP
-_CTOOLCHAIN_FLAGSET.fields_by_name['with_feature'].message_type = _CTOOLCHAIN_WITHFEATURESET
-_CTOOLCHAIN_FLAGSET.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_ENVSET.fields_by_name['env_entry'].message_type = _CTOOLCHAIN_ENVENTRY
-_CTOOLCHAIN_ENVSET.fields_by_name['with_feature'].message_type = _CTOOLCHAIN_WITHFEATURESET
-_CTOOLCHAIN_ENVSET.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_FEATURE.fields_by_name['flag_set'].message_type = _CTOOLCHAIN_FLAGSET
-_CTOOLCHAIN_FEATURE.fields_by_name['env_set'].message_type = _CTOOLCHAIN_ENVSET
-_CTOOLCHAIN_FEATURE.fields_by_name['requires'].message_type = _CTOOLCHAIN_FEATURESET
-_CTOOLCHAIN_FEATURE.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_TOOL.fields_by_name['with_feature'].message_type = _CTOOLCHAIN_WITHFEATURESET
-_CTOOLCHAIN_TOOL.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_ARTIFACTNAMEPATTERN.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN_ACTIONCONFIG.fields_by_name['tool'].message_type = _CTOOLCHAIN_TOOL
-_CTOOLCHAIN_ACTIONCONFIG.fields_by_name['flag_set'].message_type = _CTOOLCHAIN_FLAGSET
-_CTOOLCHAIN_ACTIONCONFIG.fields_by_name['env_set'].message_type = _CTOOLCHAIN_ENVSET
-_CTOOLCHAIN_ACTIONCONFIG.fields_by_name['requires'].message_type = _CTOOLCHAIN_FEATURESET
-_CTOOLCHAIN_ACTIONCONFIG.containing_type = _CTOOLCHAIN
-_CTOOLCHAIN.fields_by_name['feature'].message_type = _CTOOLCHAIN_FEATURE
-_CTOOLCHAIN.fields_by_name['action_config'].message_type = _CTOOLCHAIN_ACTIONCONFIG
-_CTOOLCHAIN.fields_by_name['artifact_name_pattern'].message_type = _CTOOLCHAIN_ARTIFACTNAMEPATTERN
-_CTOOLCHAIN.fields_by_name['tool_path'].message_type = _TOOLPATH
-_CTOOLCHAIN.fields_by_name['compilation_mode_flags'].message_type = _COMPILATIONMODEFLAGS
-_CTOOLCHAIN.fields_by_name['lipo_mode_flags'].message_type = _LIPOMODEFLAGS
-_CTOOLCHAIN.fields_by_name['linking_mode_flags'].message_type = _LINKINGMODEFLAGS
-_CTOOLCHAIN.fields_by_name['make_variable'].message_type = _MAKEVARIABLE
-_COMPILATIONMODEFLAGS.fields_by_name['mode'].enum_type = _COMPILATIONMODE
-_LINKINGMODEFLAGS.fields_by_name['mode'].enum_type = _LINKINGMODE
-_LIPOMODEFLAGS.fields_by_name['mode'].enum_type = _LIPOMODE
-_CROSSTOOLRELEASE.fields_by_name['default_toolchain'].message_type = _DEFAULTCPUTOOLCHAIN
-_CROSSTOOLRELEASE.fields_by_name['toolchain'].message_type = _CTOOLCHAIN
-DESCRIPTOR.message_types_by_name['CToolchain'] = _CTOOLCHAIN
-DESCRIPTOR.message_types_by_name['ToolPath'] = _TOOLPATH
-DESCRIPTOR.message_types_by_name['CompilationModeFlags'] = _COMPILATIONMODEFLAGS
-DESCRIPTOR.message_types_by_name['LinkingModeFlags'] = _LINKINGMODEFLAGS
-DESCRIPTOR.message_types_by_name['LipoModeFlags'] = _LIPOMODEFLAGS
-DESCRIPTOR.message_types_by_name['MakeVariable'] = _MAKEVARIABLE
-DESCRIPTOR.message_types_by_name['DefaultCpuToolchain'] = _DEFAULTCPUTOOLCHAIN
-DESCRIPTOR.message_types_by_name['CrosstoolRelease'] = _CROSSTOOLRELEASE
-DESCRIPTOR.enum_types_by_name['CompilationMode'] = _COMPILATIONMODE
-DESCRIPTOR.enum_types_by_name['LinkingMode'] = _LINKINGMODE
-DESCRIPTOR.enum_types_by_name['LipoMode'] = _LIPOMODE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-CToolchain = _reflection.GeneratedProtocolMessageType('CToolchain', (_message.Message,), dict(
-
-  FlagGroup = _reflection.GeneratedProtocolMessageType('FlagGroup', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_FLAGGROUP,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
-    ))
-  ,
-
-  VariableWithValue = _reflection.GeneratedProtocolMessageType('VariableWithValue', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_VARIABLEWITHVALUE,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
-    ))
-  ,
-
-  EnvEntry = _reflection.GeneratedProtocolMessageType('EnvEntry', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_ENVENTRY,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
-    ))
-  ,
-
-  FeatureSet = _reflection.GeneratedProtocolMessageType('FeatureSet', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_FEATURESET,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
-    ))
-  ,
-
-  WithFeatureSet = _reflection.GeneratedProtocolMessageType('WithFeatureSet', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_WITHFEATURESET,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
-    ))
-  ,
-
-  FlagSet = _reflection.GeneratedProtocolMessageType('FlagSet', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_FLAGSET,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
-    ))
-  ,
-
-  EnvSet = _reflection.GeneratedProtocolMessageType('EnvSet', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_ENVSET,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
-    ))
-  ,
-
-  Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_FEATURE,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
-    ))
-  ,
-
-  Tool = _reflection.GeneratedProtocolMessageType('Tool', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_TOOL,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
-    ))
-  ,
-
-  ArtifactNamePattern = _reflection.GeneratedProtocolMessageType('ArtifactNamePattern', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_ARTIFACTNAMEPATTERN,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
-    ))
-  ,
-
-  ActionConfig = _reflection.GeneratedProtocolMessageType('ActionConfig', (_message.Message,), dict(
-    DESCRIPTOR = _CTOOLCHAIN_ACTIONCONFIG,
-    __module__ = 'src.main.protobuf.crosstool_config_pb2'
-    # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
-    ))
-  ,
-  DESCRIPTOR = _CTOOLCHAIN,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
-  ))
-_sym_db.RegisterMessage(CToolchain)
-_sym_db.RegisterMessage(CToolchain.FlagGroup)
-_sym_db.RegisterMessage(CToolchain.VariableWithValue)
-_sym_db.RegisterMessage(CToolchain.EnvEntry)
-_sym_db.RegisterMessage(CToolchain.FeatureSet)
-_sym_db.RegisterMessage(CToolchain.WithFeatureSet)
-_sym_db.RegisterMessage(CToolchain.FlagSet)
-_sym_db.RegisterMessage(CToolchain.EnvSet)
-_sym_db.RegisterMessage(CToolchain.Feature)
-_sym_db.RegisterMessage(CToolchain.Tool)
-_sym_db.RegisterMessage(CToolchain.ArtifactNamePattern)
-_sym_db.RegisterMessage(CToolchain.ActionConfig)
-
-ToolPath = _reflection.GeneratedProtocolMessageType('ToolPath', (_message.Message,), dict(
-  DESCRIPTOR = _TOOLPATH,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
-  ))
-_sym_db.RegisterMessage(ToolPath)
-
-CompilationModeFlags = _reflection.GeneratedProtocolMessageType('CompilationModeFlags', (_message.Message,), dict(
-  DESCRIPTOR = _COMPILATIONMODEFLAGS,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
-  ))
-_sym_db.RegisterMessage(CompilationModeFlags)
-
-LinkingModeFlags = _reflection.GeneratedProtocolMessageType('LinkingModeFlags', (_message.Message,), dict(
-  DESCRIPTOR = _LINKINGMODEFLAGS,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
-  ))
-_sym_db.RegisterMessage(LinkingModeFlags)
-
-LipoModeFlags = _reflection.GeneratedProtocolMessageType('LipoModeFlags', (_message.Message,), dict(
-  DESCRIPTOR = _LIPOMODEFLAGS,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
-  ))
-_sym_db.RegisterMessage(LipoModeFlags)
-
-MakeVariable = _reflection.GeneratedProtocolMessageType('MakeVariable', (_message.Message,), dict(
-  DESCRIPTOR = _MAKEVARIABLE,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
-  ))
-_sym_db.RegisterMessage(MakeVariable)
-
-DefaultCpuToolchain = _reflection.GeneratedProtocolMessageType('DefaultCpuToolchain', (_message.Message,), dict(
-  DESCRIPTOR = _DEFAULTCPUTOOLCHAIN,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
-  ))
-_sym_db.RegisterMessage(DefaultCpuToolchain)
-
-CrosstoolRelease = _reflection.GeneratedProtocolMessageType('CrosstoolRelease', (_message.Message,), dict(
-  DESCRIPTOR = _CROSSTOOLRELEASE,
-  __module__ = 'src.main.protobuf.crosstool_config_pb2'
-  # @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
-  ))
-_sym_db.RegisterMessage(CrosstoolRelease)
-
-
-DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n3com.google.devtools.build.lib.view.config.crosstool'))
-# @@protoc_insertion_point(module_scope)
diff --git a/third_party/flatbuffers/build_defs.bzl b/third_party/flatbuffers/build_defs.bzl
index afafe1c..be7ed13 100644
--- a/third_party/flatbuffers/build_defs.bzl
+++ b/third_party/flatbuffers/build_defs.bzl
@@ -5,7 +5,7 @@
 Rules for building C++ flatbuffers with Bazel.
 """
 
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 
 flatc_path = "@com_github_google_flatbuffers//:flatc"
 
diff --git a/third_party/flatbuffers/ts/BUILD b/third_party/flatbuffers/ts/BUILD
index ad59551..2787fbc 100644
--- a/third_party/flatbuffers/ts/BUILD
+++ b/third_party/flatbuffers/ts/BUILD
@@ -1,4 +1,4 @@
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 
 ts_library(
     name = "flatbuffers_ts",
diff --git a/tools/BUILD b/tools/BUILD
index 50ba0bb..50c9141 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -5,12 +5,16 @@
 # Don't use these directly! Use //tools/build_rules/*.bzl instead.
 config_setting(
     name = "compiler_clang",
-    values = {"compiler": "clang"},
+    flag_values = {
+        "@bazel_tools//tools/cpp:compiler": "clang",
+    }
 )
 
 config_setting(
     name = "compiler_gcc",
-    values = {"compiler": "gcc"},
+    flag_values = {
+        "@bazel_tools//tools/cpp:compiler": "gcc",
+    }
 )
 
 config_setting(
diff --git a/tools/bazel b/tools/bazel
index b4293a1..36e88ae 100755
--- a/tools/bazel
+++ b/tools/bazel
@@ -24,7 +24,7 @@
   exec "${BAZEL_OVERRIDE}" "$@"
 fi
 
-readonly VERSION="0.19.0rc4-201810201638+ac88041"
+readonly VERSION="4.0.0rc2-202011211956+37a429ad12"
 
 readonly DOWNLOAD_DIR="${HOME}/.cache/bazel"
 # Directory to unpack bazel into.  This must change whenever bazel changes.
diff --git a/tools/cpp/BUILD b/tools/cpp/BUILD
index fd41261..d370750 100644
--- a/tools/cpp/BUILD
+++ b/tools/cpp/BUILD
@@ -1,5 +1,14 @@
+load(":toolchain_config.bzl", "cc_toolchain_config")
+
 package(default_visibility = ["//visibility:public"])
 
+[cc_toolchain_config(
+    name = "{}_toolchain_config".format(cpu),
+    cpu = cpu,
+) for cpu in
+    ["armeabi-v7a", "armhf-debian", "cortex-m4f", "cortex-m4f-k22", "k8", "roborio"]
+]
+
 cc_library(
     name = "empty_main",
     srcs = ["empty_main.c"],
@@ -29,11 +38,11 @@
 cc_toolchain_suite(
     name = "toolchain",
     toolchains = {
-        "k8|clang": ":cc-compiler-k8",
-        "roborio|gcc": ":cc-compiler-roborio",
-        "armhf-debian|clang": "cc-compiler-armhf-debian",
-        "cortex-m4f|gcc": "cc-compiler-cortex-m4f",
-        "cortex-m4f-k22|gcc": "cc-compiler-cortex-m4f-k22",
+        "k8": ":cc-compiler-k8",
+        "roborio": ":cc-compiler-roborio",
+        "armhf-debian": "cc-compiler-armhf-debian",
+        "cortex-m4f": "cc-compiler-cortex-m4f",
+        "cortex-m4f-k22": "cc-compiler-cortex-m4f-k22",
     },
 )
 
@@ -62,6 +71,14 @@
 )
 
 filegroup(
+    name = "clang_6p0_ar_files",
+    srcs = [
+        "//tools/cpp/clang_6p0:ar",
+        "@clang_6p0_repo//:compiler_pieces",
+    ],
+)
+
+filegroup(
     name = "clang_6p0_linker_files",
     srcs = [
         "//tools/cpp/clang_6p0:ar",
@@ -95,15 +112,15 @@
     name = "cc-compiler-k8",
     all_files = ":clang_6p0_all_files",
     compiler_files = ":clang_6p0_compiler_files",
-    cpu = "k8",
     dwp_files = ":empty",
-    dynamic_runtime_libs = [":empty"],
     linker_files = ":clang_6p0_linker_files",
+    ar_files = ":clang_6p0_ar_files",
+    as_files = ":clang_6p0_compiler_files",
     objcopy_files = "//tools/cpp/clang_6p0:objcopy",
-    static_runtime_libs = [":empty"],
     strip_files = ":clang_6p0_strip_files",
     supports_param_files = 1,
     toolchain_identifier = "k8_linux",
+    toolchain_config = ":k8_toolchain_config",
 )
 
 filegroup(
@@ -128,6 +145,14 @@
 )
 
 filegroup(
+    name = "roborio_ar_files",
+    srcs = [
+        "//tools/cpp/arm-frc-linux-gnueabi:ar",
+        "@arm_frc_linux_gnueabi_repo//:compiler_pieces",
+    ],
+)
+
+filegroup(
     name = "roborio_compiler_files",
     srcs = [
         "//tools/cpp/arm-frc-linux-gnueabi:gcc",
@@ -149,15 +174,15 @@
     name = "cc-compiler-roborio",
     all_files = ":roborio-compiler-files",
     compiler_files = ":roborio_compiler_files",
-    cpu = "roborio",
     dwp_files = ":empty",
-    dynamic_runtime_libs = [":empty"],
     linker_files = ":roborio_linker_files",
+    ar_files = ":roborio_ar_files",
+    as_files = ":roborio_compiler_files",
     objcopy_files = "//tools/cpp/arm-frc-linux-gnueabi:objcopy",
-    static_runtime_libs = [":empty"],
     strip_files = ":roborio_strip_files",
     supports_param_files = 1,
     toolchain_identifier = "roborio_linux",
+    toolchain_config = ":roborio_toolchain_config",
 )
 
 filegroup(
@@ -185,6 +210,14 @@
 )
 
 filegroup(
+    name = "linaro_linux_ar_files",
+    srcs = [
+        "//tools/cpp/linaro_linux_gcc:ar",
+        "@linaro_linux_gcc_repo//:compiler_pieces",
+    ],
+)
+
+filegroup(
     name = "linaro_linux_compiler_files",
     srcs = [
         ":clang_6p0_compiler_files",
@@ -208,15 +241,15 @@
     name = "cc-compiler-armhf-debian",
     all_files = ":linaro-gcc-files",
     compiler_files = ":linaro_linux_compiler_files",
-    cpu = "armhf",
     dwp_files = ":empty",
-    dynamic_runtime_libs = [":empty"],
     linker_files = ":linaro_linux_linker_files",
+    ar_files = "linaro_linux_ar_files",
+    as_files = "linaro_linux_compiler_files",
     objcopy_files = "//tools/cpp/linaro_linux_gcc:objcopy",
-    static_runtime_libs = [":empty"],
     strip_files = ":linaro_linux_strip_files",
     supports_param_files = 1,
     toolchain_identifier = "clang_linux_armhf",
+    toolchain_config = ":armhf-debian_toolchain_config",
 )
 
 filegroup(
@@ -233,6 +266,7 @@
         "//tools/cpp/gcc_arm_none_eabi:as",
         "//tools/cpp/gcc_arm_none_eabi:gcc",
         "//tools/cpp/gcc_arm_none_eabi:ld",
+        "@gcc_arm_none_eabi//:compiler_pieces",
     ],
 )
 
@@ -247,41 +281,37 @@
     ],
 )
 
+filegroup(
+    name = "gcc_arm_none_eabi_ar_files",
+    srcs = [
+        "//tools/cpp/gcc_arm_none_eabi:ar",
+        "@gcc_arm_none_eabi//:compiler_pieces",
+    ],
+)
+
 cc_toolchain(
     name = "cc-compiler-cortex-m4f",
     all_files = ":gcc_arm_none_eabi_none_files",
     compiler_files = ":gcc_arm_none_eabi_compiler_files",
-    cpu = "cortex-m4f",
     dwp_files = ":empty",
-    dynamic_runtime_libs = [":empty"],
     linker_files = ":gcc_arm_none_eabi_linker_files",
+    ar_files = ":gcc_arm_none_eabi_ar_files",
     objcopy_files = "//tools/cpp/gcc_arm_none_eabi:objcopy",
-    static_runtime_libs = [":empty"],
     strip_files = "//tools/cpp/gcc_arm_none_eabi:strip",
     supports_param_files = 1,
     toolchain_identifier = "cortex-m4f",
+    toolchain_config = ":cortex-m4f_toolchain_config",
 )
 
 cc_toolchain(
     name = "cc-compiler-cortex-m4f-k22",
     all_files = ":gcc_arm_none_eabi_none_files",
     compiler_files = ":gcc_arm_none_eabi_compiler_files",
-    cpu = "cortex-m4f-k22",
     dwp_files = ":empty",
-    dynamic_runtime_libs = [":empty"],
     linker_files = ":gcc_arm_none_eabi_linker_files",
     objcopy_files = ":empty",
-    static_runtime_libs = [":empty"],
     strip_files = ":empty",
     supports_param_files = 1,
     toolchain_identifier = "cortex-m4f-k22",
-)
-
-py_binary(
-    name = "gen_crosstool",
-    srcs = ["gen_crosstool.py"],
-    main = "gen_crosstool.py",
-    deps = [
-        "//third_party/bazel:crosstool_config_proto_py",
-    ],
+    toolchain_config = ":cortex-m4f-k22_toolchain_config",
 )
diff --git a/tools/cpp/CROSSTOOL b/tools/cpp/CROSSTOOL
deleted file mode 100644
index c050873..0000000
--- a/tools/cpp/CROSSTOOL
+++ /dev/null
@@ -1,1362 +0,0 @@
-# GENERATED FILE. DO NOT EDIT
-# Generated by tools/cpp/gen_crosstool.py
-major_version: "local"
-minor_version: ""
-default_target_cpu: "same_as_host"
-default_toolchain {
-  cpu: "roborio"
-  toolchain_identifier: "roborio_linux"
-}
-default_toolchain {
-  cpu: "k8"
-  toolchain_identifier: "k8_linux"
-}
-default_toolchain {
-  cpu: "armeabi-v7a"
-  toolchain_identifier: "stub_armeabi-v7a"
-}
-default_toolchain {
-  cpu: "armhf-debian"
-  toolchain_identifier: "clang_linux_armhf"
-}
-default_toolchain {
-  cpu: "cortex-m4f"
-  toolchain_identifier: "cortex-m4f"
-}
-default_toolchain {
-  cpu: "cortex-m4f-k22"
-  toolchain_identifier: "cortex-m4f-k22"
-}
-toolchain {
-  toolchain_identifier: "stub_armeabi-v7a"
-  host_system_name: "armeabi-v7a"
-  target_system_name: "armeabi-v7a"
-  target_cpu: "armeabi-v7a"
-  target_libc: "armeabi-v7a"
-  compiler: "compiler"
-  abi_version: "armeabi-v7a"
-  abi_libc_version: "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"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: false
-  needsPic: true
-  builtin_sysroot: ""
-  supports_normalizing_ar: false
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-}
-toolchain {
-  toolchain_identifier: "k8_linux"
-  host_system_name: "local"
-  target_system_name: "k8"
-  target_cpu: "k8"
-  target_libc: "local"
-  compiler: "clang"
-  abi_version: "local"
-  abi_libc_version: "local"
-  tool_path {
-    name: "ar"
-    path: "clang_6p0/x86_64-linux-gnu-ar"
-  }
-  tool_path {
-    name: "compat-ld"
-    path: "clang_6p0/x86_64-linux-gnu-ld"
-  }
-  tool_path {
-    name: "cpp"
-    path: "clang_6p0/x86_64-linux-gnu-cpp"
-  }
-  tool_path {
-    name: "dwp"
-    path: "clang_6p0/x86_64-linux-gnu-dwp"
-  }
-  tool_path {
-    name: "gcc"
-    path: "clang_6p0/x86_64-linux-gnu-clang-6.0"
-  }
-  tool_path {
-    name: "gcov"
-    path: "clang_6p0/x86_64-linux-gnu-gcov"
-  }
-  tool_path {
-    name: "ld"
-    path: "clang_6p0/x86_64-linux-gnu-ld"
-  }
-  tool_path {
-    name: "nm"
-    path: "clang_6p0/x86_64-linux-gnu-nm"
-  }
-  tool_path {
-    name: "objcopy"
-    path: "clang_6p0/x86_64-linux-gnu-objcopy"
-  }
-  tool_path {
-    name: "objdump"
-    path: "clang_6p0/x86_64-linux-gnu-objdump"
-  }
-  tool_path {
-    name: "strip"
-    path: "clang_6p0/x86_64-linux-gnu-strip"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: false
-  needsPic: true
-  compiler_flag: "--sysroot=external/amd64_debian_sysroot"
-  compiler_flag: "-nostdinc"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/c++/7"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu/c++/7"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/c++/8/backward"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/8/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/clang_6p0_repo/usr/lib/llvm-6.0/lib/clang/6.0.0/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include"
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D_FILE_OFFSET_BITS=64"
-  compiler_flag: "-DAOS_ARCHITECTURE_arm_frc"
-  compiler_flag: "-U_FORTIFY_SOURCE"
-  compiler_flag: "-D_FORTIFY_SOURCE=1"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-fPIE"
-  compiler_flag: "-fcolor-diagnostics"
-  compiler_flag: "-fmessage-length=80"
-  compiler_flag: "-fmacro-backtrace-limit=0"
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wstrict-aliasing"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wcast-align"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-  compiler_flag: "-fno-omit-frame-pointer"
-  compiler_flag: "-pipe"
-  compiler_flag: "-ggdb3"
-  linker_flag: "-nodefaultlibs"
-  linker_flag: "--sysroot=external/amd64_debian_sysroot"
-  linker_flag: "-lstdc++"
-  linker_flag: "-lc"
-  linker_flag: "-lgcc"
-  linker_flag: "-lgcc_s"
-  linker_flag: "-Bexternal/clang_6p0_repo/usr/bin/"
-  linker_flag: "-Ltools/cpp/clang_6p0/clang_more_libs"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/7/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/lib/x86_64-linux-gnu/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/lib/"
-  linker_flag: "-no-canonical-prefixes"
-  linker_flag: "-fuse-ld=gold"
-  linker_flag: "-Wl,-z,relro,-z,now"
-  linker_flag: "-lm"
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  linker_flag: "-Wl,--warn-execstack"
-  linker_flag: "-Wl,--detect-odr-violations"
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  compilation_mode_flags {
-    mode: OPT
-    compiler_flag: "-O2"
-    compiler_flag: "-DNDEBUG"
-    compiler_flag: "-ffunction-sections"
-    compiler_flag: "-fdata-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  linking_mode_flags {
-    mode: DYNAMIC
-  }
-  cxx_builtin_include_directory: "%package(@clang_6p0_repo//usr)%/lib/llvm-6.0/lib/clang/6.0.0/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include-fixed"
-  builtin_sysroot: ""
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  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\""
-  unfiltered_cxx_flag: "-Wno-varargs"
-  unfiltered_cxx_flag: "-Wno-null-pointer-arithmetic"
-  unfiltered_cxx_flag: "-Wno-mismatched-new-delete"
-  supports_normalizing_ar: false
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-  feature {
-    name: "opt"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "dbg"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "fastbuild"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-      }
-    }
-  }
-  feature {
-    name: "pie_for_linking"
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-    enabled: true
-  }
-}
-toolchain {
-  toolchain_identifier: "roborio_linux"
-  host_system_name: "roborio"
-  target_system_name: "roborio"
-  target_cpu: "roborio"
-  target_libc: "roborio"
-  compiler: "gcc"
-  abi_version: "roborio"
-  abi_libc_version: "roborio"
-  tool_path {
-    name: "ar"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ar"
-  }
-  tool_path {
-    name: "as"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-as"
-  }
-  tool_path {
-    name: "compat-ld"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld"
-  }
-  tool_path {
-    name: "cpp"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-cpp"
-  }
-  tool_path {
-    name: "dwp"
-    path: "/bin/false"
-  }
-  tool_path {
-    name: "gcc"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcc"
-  }
-  tool_path {
-    name: "gcov"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9"
-  }
-  tool_path {
-    name: "ld"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld"
-  }
-  tool_path {
-    name: "nm"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-nm"
-  }
-  tool_path {
-    name: "objcopy"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy"
-  }
-  tool_path {
-    name: "objdump"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objdump"
-  }
-  tool_path {
-    name: "strip"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-strip"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: false
-  needsPic: true
-  linker_flag: "-lstdc++"
-  linker_flag: "-Ltools/cpp/arm-frc-linux-gnueabi/libs"
-  linker_flag: "-no-canonical-prefixes"
-  linker_flag: "-Wl,-z,relro,-z,now"
-  linker_flag: "-lm"
-  linker_flag: "-pass-exit-codes"
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  linking_mode_flags {
-    mode: DYNAMIC
-  }
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward)%"
-  builtin_sysroot: ""
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  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\""
-  supports_normalizing_ar: false
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-  feature {
-    name: "compile_flags1"
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      action: "lto-backend"
-      action: "clif-match"
-      flag_group {
-        flag: "--sysroot=external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi"
-        flag: "-nostdinc"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed"
-      }
-    }
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      flag_group {
-        flag: "-fno-canonical-system-headers"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      flag_group {
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward"
-      }
-    }
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      action: "lto-backend"
-      action: "clif-match"
-      flag_group {
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include"
-        flag: "-mfpu=neon"
-        flag: "-D__STDC_FORMAT_MACROS"
-        flag: "-D__STDC_CONSTANT_MACROS"
-        flag: "-D__STDC_LIMIT_MACROS"
-        flag: "-D_FILE_OFFSET_BITS=64"
-        flag: "-DAOS_ARCHITECTURE_arm_frc"
-        flag: "-U_FORTIFY_SOURCE"
-        flag: "-fstack-protector"
-        flag: "-fPIE"
-        flag: "-fdiagnostics-color=always"
-        flag: "-Wall"
-        flag: "-Wextra"
-        flag: "-Wpointer-arith"
-        flag: "-Wstrict-aliasing"
-        flag: "-Wcast-qual"
-        flag: "-Wwrite-strings"
-        flag: "-Wtype-limits"
-        flag: "-Wsign-compare"
-        flag: "-Wformat=2"
-        flag: "-Werror"
-        flag: "-Wunused-local-typedefs"
-        flag: "-Wno-psabi"
-        flag: "-fno-omit-frame-pointer"
-        flag: "-D__has_feature(x)=0"
-        flag: "-pipe"
-        flag: "-ggdb3"
-      }
-    }
-    enabled: true
-  }
-  feature {
-    name: "opt"
-    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-parsing"
-      action: "linkstamp-compile"
-      flag_group {
-        flag: "-O2"
-        flag: "-DNDEBUG"
-        flag: "-D_FORTIFY_SOURCE=1"
-        flag: "-ffunction-sections"
-        flag: "-fdata-sections"
-      }
-    }
-    flag_set {
-      action: "c++-link-executable"
-      action: "c++-link-nodeps-dynamic-library"
-      action: "c++-link-dynamic-library"
-      flag_group {
-        flag: "-Wl,--gc-sections"
-      }
-    }
-    implies: "opt_post"
-  }
-  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-parsing"
-      action: "clif-match"
-      flag_group {
-        flag: "-MD"
-        flag: "-MF"
-        flag: "%{dependency_file}"
-      }
-      expand_if_all_available: "dependency_file"
-    }
-  }
-  feature {
-    name: "random_seed"
-    flag_set {
-      action: "c++-compile"
-      action: "c++-module-codegen"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-frandom-seed=%{output_file}"
-        expand_if_all_available: "output_file"
-      }
-    }
-  }
-  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"
-      flag_group {
-        flag: "-fPIC"
-      }
-      expand_if_all_available: "pic"
-    }
-  }
-  feature {
-    name: "preprocessor_defines"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "linkstamp-compile"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "clif-match"
-      flag_group {
-        flag: "-D%{preprocessor_defines}"
-        iterate_over: "preprocessor_defines"
-      }
-    }
-  }
-  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 {
-        flag: "-iquote"
-        flag: "%{quote_include_paths}"
-        iterate_over: "quote_include_paths"
-      }
-      flag_group {
-        flag: "-I%{include_paths}"
-        iterate_over: "include_paths"
-      }
-      flag_group {
-        flag: "-isystem"
-        flag: "%{system_include_paths}"
-        iterate_over: "system_include_paths"
-      }
-    }
-  }
-  feature {
-    name: "opt_post"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-  feature {
-    name: "dbg"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-  }
-  feature {
-    name: "fastbuild"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-        flag: "-fno-sized-deallocation"
-      }
-    }
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c++-link"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      action: "c-compile"
-      flag_group {
-        flag: "-pthread"
-      }
-    }
-    enabled: true
-  }
-  feature {
-    name: "pie_for_linking"
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-    enabled: true
-  }
-}
-toolchain {
-  toolchain_identifier: "clang_linux_armhf"
-  host_system_name: "linux"
-  target_system_name: "arm_a15"
-  target_cpu: "armhf-debian"
-  target_libc: "glibc_2.19"
-  compiler: "clang"
-  abi_version: "clang_6.0"
-  abi_libc_version: "glibc_2.19"
-  tool_path {
-    name: "ar"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-ar"
-  }
-  tool_path {
-    name: "compat-ld"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-ld"
-  }
-  tool_path {
-    name: "cpp"
-    path: "linaro_linux_gcc/clang_bin/clang"
-  }
-  tool_path {
-    name: "dwp"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-dwp"
-  }
-  tool_path {
-    name: "gcc"
-    path: "linaro_linux_gcc/clang_bin/clang"
-  }
-  tool_path {
-    name: "gcov"
-    path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9"
-  }
-  tool_path {
-    name: "ld"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-ld"
-  }
-  tool_path {
-    name: "nm"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-nm"
-  }
-  tool_path {
-    name: "objcopy"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-objcopy"
-  }
-  tool_path {
-    name: "objdump"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-objdump"
-  }
-  tool_path {
-    name: "strip"
-    path: "linaro_linux_gcc/arm-linux-gnueabihf-strip"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: true
-  needsPic: true
-  compiler_flag: "-target"
-  compiler_flag: "armv7a-arm-linux-gnueabif"
-  compiler_flag: "--sysroot=external/armhf_debian_rootfs"
-  compiler_flag: "-mfloat-abi=hard"
-  compiler_flag: "-mfpu=vfpv3-d16"
-  compiler_flag: "-nostdinc"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/include/c++/7.4.1/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/include/c++/7.4.1"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/armhf_debian_rootfs/usr/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/armhf_debian_rootfs/usr/include/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/org_frc971/third_party"
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D_FILE_OFFSET_BITS=64"
-  compiler_flag: "-DAOS_ARCHITECTURE_armhf"
-  compiler_flag: "-U_FORTIFY_SOURCE"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-fPIE"
-  compiler_flag: "-fdiagnostics-color=always"
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wstrict-aliasing"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wcast-align"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-  compiler_flag: "-Wunused-local-typedefs"
-  compiler_flag: "-fno-omit-frame-pointer"
-  compiler_flag: "-pipe"
-  compiler_flag: "-ggdb3"
-  linker_flag: "-target"
-  linker_flag: "armv7a-arm-linux-gnueabif"
-  linker_flag: "--sysroot=external/armhf_debian_rootfs"
-  linker_flag: "-lstdc++"
-  linker_flag: "-Ltools/cpp/linaro_linux_gcc/clang_more_libs"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib/gcc/arm-linux-gnueabihf/8"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/lib/arm-linux-gnueabihf"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib/arm-linux-gnueabihf"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/lib"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib"
-  linker_flag: "-Lexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1"
-  linker_flag: "-Bexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1"
-  linker_flag: "-Bexternal/linaro_linux_gcc_repo/arm-linux-gnueabihf/bin"
-  linker_flag: "-Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3"
-  linker_flag: "-no-canonical-prefixes"
-  linker_flag: "-Wl,-z,relro,-z,now"
-  linker_flag: "-lm"
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  compilation_mode_flags {
-    mode: OPT
-    compiler_flag: "-O2"
-    compiler_flag: "-DNDEBUG"
-    compiler_flag: "-D_FORTIFY_SOURCE=1"
-    compiler_flag: "-ffunction-sections"
-    compiler_flag: "-fdata-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  linking_mode_flags {
-    mode: DYNAMIC
-  }
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//include)%"
-  cxx_builtin_include_directory: "%package(@armhf_debian_rootfs//usr/include)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//include)%/c++/7.4.1"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//arm-linux-gnueabihf/include)%/c++/7.4.1"
-  builtin_sysroot: ""
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  unfiltered_cxx_flag: "-Wno-builtin-macro-redefined"
-  unfiltered_cxx_flag: "-Wno-mismatched-new-delete"
-  unfiltered_cxx_flag: "-Wno-null-pointer-arithmetic"
-  unfiltered_cxx_flag: "-Wno-varargs"
-  unfiltered_cxx_flag: "-D__DATE__=\"redacted\""
-  unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\""
-  unfiltered_cxx_flag: "-D__TIME__=\"redacted\""
-  supports_normalizing_ar: true
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-  feature {
-    name: "opt"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "dbg"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "fastbuild"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-      }
-    }
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c++-link"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      action: "c-compile"
-      flag_group {
-        flag: "-pthread"
-      }
-    }
-  }
-  feature {
-    name: "pie_for_linking"
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-    enabled: true
-  }
-}
-toolchain {
-  toolchain_identifier: "cortex-m4f"
-  host_system_name: "local"
-  target_system_name: "cortex-m4f"
-  target_cpu: "cortex-m4f"
-  target_libc: "cortex-m4f"
-  compiler: "gcc"
-  abi_version: "cortex-m4f"
-  abi_libc_version: "cortex-m4f"
-  tool_path {
-    name: "ar"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ar"
-  }
-  tool_path {
-    name: "compat-ld"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ld"
-  }
-  tool_path {
-    name: "cpp"
-    path: "gcc_arm_none_eabi/arm-none-eabi-cpp"
-  }
-  tool_path {
-    name: "dwp"
-    path: "gcc_arm_none_eabi/arm-none-eabi-dwp"
-  }
-  tool_path {
-    name: "gcc"
-    path: "gcc_arm_none_eabi/arm-none-eabi-gcc"
-  }
-  tool_path {
-    name: "gcov"
-    path: "gcc_arm_none_eabi/arm-none-eabi-gcov"
-  }
-  tool_path {
-    name: "ld"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ld"
-  }
-  tool_path {
-    name: "nm"
-    path: "gcc_arm_none_eabi/arm-none-eabi-nm"
-  }
-  tool_path {
-    name: "objcopy"
-    path: "gcc_arm_none_eabi/arm-none-eabi-objcopy"
-  }
-  tool_path {
-    name: "objdump"
-    path: "gcc_arm_none_eabi/arm-none-eabi-objdump"
-  }
-  tool_path {
-    name: "strip"
-    path: "gcc_arm_none_eabi/arm-none-eabi-strip"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: false
-  needsPic: false
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D__MK64FX512__"
-  compiler_flag: "-DF_CPU=120000000"
-  compiler_flag: "-Wl,--gc-sections"
-  compiler_flag: "-D__have_long32"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-mcpu=cortex-m4"
-  compiler_flag: "-mfpu=fpv4-sp-d16"
-  compiler_flag: "-mthumb"
-  compiler_flag: "-mfloat-abi=hard"
-  compiler_flag: "-fno-strict-aliasing"
-  compiler_flag: "-fmessage-length=80"
-  compiler_flag: "-fmax-errors=20"
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-  compiler_flag: "-Wstrict-aliasing=2"
-  compiler_flag: "-Wno-misleading-indentation"
-  compiler_flag: "-Wno-int-in-bool-context"
-  compiler_flag: "-Wdouble-promotion"
-  compiler_flag: "-pipe"
-  compiler_flag: "-g"
-  compiler_flag: "-fno-common"
-  compiler_flag: "-ffreestanding"
-  compiler_flag: "-fbuiltin"
-  linker_flag: "-no-canonical-prefixes"
-  linker_flag: "-mcpu=cortex-m4"
-  linker_flag: "-mfpu=fpv4-sp-d16"
-  linker_flag: "-mthumb"
-  linker_flag: "-mfloat-abi=hard"
-  linker_flag: "-fno-strict-aliasing"
-  linker_flag: "--specs=nano.specs"
-  linker_flag: "-lgcc"
-  linker_flag: "-lstdc++_nano"
-  linker_flag: "-lm"
-  linker_flag: "-lc_nano"
-  linker_flag: "-Tmotors/core/kinetis_512_256.ld"
-  linker_flag: "-Tmotors/core/kinetis_sections.ld"
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  compilation_mode_flags {
-    mode: OPT
-    compiler_flag: "-O2"
-    compiler_flag: "-finline-functions"
-    compiler_flag: "-ffast-math"
-    compiler_flag: "-funroll-loops"
-    compiler_flag: "-DNDEBUG"
-    compiler_flag: "-ffunction-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  linking_mode_flags {
-    mode: FULLY_STATIC
-  }
-  cxx_builtin_include_directory: "/usr/lib/gcc/arm-none-eabi/4.8/include"
-  cxx_builtin_include_directory: "/usr/lib/gcc/arm-none-eabi/4.8/include-fixed"
-  cxx_builtin_include_directory: "/usr/lib/arm-none-eabi/include"
-  cxx_builtin_include_directory: "/usr/include/newlib"
-  builtin_sysroot: ""
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  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\""
-  supports_normalizing_ar: false
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-  feature {
-    name: "dbg"
-    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: "-fno-omit-frame-pointer"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "opt"
-    implies: "all_modes"
-  }
-  feature {
-    name: "fastbuild"
-    implies: "all_modes"
-  }
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "--std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "--std=gnu++1z"
-        flag: "-fno-exceptions"
-        flag: "-fno-rtti"
-      }
-    }
-  }
-  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 {
-        flag: "-iquote"
-        flag: "%{quote_include_paths}"
-        iterate_over: "quote_include_paths"
-      }
-      flag_group {
-        flag: "-I%{include_paths}"
-        iterate_over: "include_paths"
-      }
-      flag_group {
-        flag: "-I"
-        flag: "%{system_include_paths}"
-        iterate_over: "system_include_paths"
-      }
-    }
-  }
-}
-toolchain {
-  toolchain_identifier: "cortex-m4f-k22"
-  host_system_name: "local"
-  target_system_name: "cortex-m4f-k22"
-  target_cpu: "cortex-m4f-k22"
-  target_libc: "cortex-m4f-k22"
-  compiler: "gcc"
-  abi_version: "cortex-m4f-k22"
-  abi_libc_version: "cortex-m4f-k22"
-  tool_path {
-    name: "ar"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ar"
-  }
-  tool_path {
-    name: "compat-ld"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ld"
-  }
-  tool_path {
-    name: "cpp"
-    path: "gcc_arm_none_eabi/arm-none-eabi-cpp"
-  }
-  tool_path {
-    name: "dwp"
-    path: "gcc_arm_none_eabi/arm-none-eabi-dwp"
-  }
-  tool_path {
-    name: "gcc"
-    path: "gcc_arm_none_eabi/arm-none-eabi-gcc"
-  }
-  tool_path {
-    name: "gcov"
-    path: "gcc_arm_none_eabi/arm-none-eabi-gcov"
-  }
-  tool_path {
-    name: "ld"
-    path: "gcc_arm_none_eabi/arm-none-eabi-ld"
-  }
-  tool_path {
-    name: "nm"
-    path: "gcc_arm_none_eabi/arm-none-eabi-nm"
-  }
-  tool_path {
-    name: "objcopy"
-    path: "gcc_arm_none_eabi/arm-none-eabi-objcopy"
-  }
-  tool_path {
-    name: "objdump"
-    path: "gcc_arm_none_eabi/arm-none-eabi-objdump"
-  }
-  tool_path {
-    name: "strip"
-    path: "gcc_arm_none_eabi/arm-none-eabi-strip"
-  }
-  supports_gold_linker: false
-  supports_thin_archives: false
-  needsPic: false
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D__MK22FX512__"
-  compiler_flag: "-DF_CPU=120000000"
-  compiler_flag: "-Wl,--gc-sections"
-  compiler_flag: "-D__have_long32"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-mcpu=cortex-m4"
-  compiler_flag: "-mfpu=fpv4-sp-d16"
-  compiler_flag: "-mthumb"
-  compiler_flag: "-mfloat-abi=hard"
-  compiler_flag: "-fno-strict-aliasing"
-  compiler_flag: "-fmessage-length=80"
-  compiler_flag: "-fmax-errors=20"
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-  compiler_flag: "-Wstrict-aliasing=2"
-  compiler_flag: "-Wno-misleading-indentation"
-  compiler_flag: "-Wno-int-in-bool-context"
-  compiler_flag: "-Wdouble-promotion"
-  compiler_flag: "-pipe"
-  compiler_flag: "-g"
-  compiler_flag: "-fno-common"
-  compiler_flag: "-ffreestanding"
-  compiler_flag: "-fbuiltin"
-  linker_flag: "-no-canonical-prefixes"
-  linker_flag: "-mcpu=cortex-m4"
-  linker_flag: "-mfpu=fpv4-sp-d16"
-  linker_flag: "-mthumb"
-  linker_flag: "-mfloat-abi=hard"
-  linker_flag: "-fno-strict-aliasing"
-  linker_flag: "--specs=nano.specs"
-  linker_flag: "-lgcc"
-  linker_flag: "-lstdc++_nano"
-  linker_flag: "-lm"
-  linker_flag: "-lc_nano"
-  linker_flag: "-Tmotors/core/kinetis_512_128.ld"
-  linker_flag: "-Tmotors/core/kinetis_sections.ld"
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  compilation_mode_flags {
-    mode: OPT
-    compiler_flag: "-O2"
-    compiler_flag: "-finline-functions"
-    compiler_flag: "-ffast-math"
-    compiler_flag: "-funroll-loops"
-    compiler_flag: "-DNDEBUG"
-    compiler_flag: "-ffunction-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  linking_mode_flags {
-    mode: FULLY_STATIC
-  }
-  cxx_builtin_include_directory: "/usr/lib/gcc/arm-none-eabi/4.8/include"
-  cxx_builtin_include_directory: "/usr/lib/gcc/arm-none-eabi/4.8/include-fixed"
-  cxx_builtin_include_directory: "/usr/lib/arm-none-eabi/include"
-  cxx_builtin_include_directory: "/usr/include/newlib"
-  builtin_sysroot: ""
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  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\""
-  supports_normalizing_ar: false
-  supports_start_end_lib: false
-  supports_interface_shared_objects: false
-  supports_incremental_linker: false
-  supports_fission: false
-  feature {
-    name: "dbg"
-    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: "-fno-omit-frame-pointer"
-      }
-    }
-    implies: "all_modes"
-  }
-  feature {
-    name: "opt"
-    implies: "all_modes"
-  }
-  feature {
-    name: "fastbuild"
-    implies: "all_modes"
-  }
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "--std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "--std=gnu++1z"
-        flag: "-fno-exceptions"
-        flag: "-fno-rtti"
-      }
-    }
-  }
-  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 {
-        flag: "-iquote"
-        flag: "%{quote_include_paths}"
-        iterate_over: "quote_include_paths"
-      }
-      flag_group {
-        flag: "-I%{include_paths}"
-        iterate_over: "include_paths"
-      }
-      flag_group {
-        flag: "-I"
-        flag: "%{system_include_paths}"
-        iterate_over: "system_include_paths"
-      }
-    }
-  }
-}
diff --git a/tools/cpp/gen_crosstool.py b/tools/cpp/gen_crosstool.py
deleted file mode 100644
index ec70e11..0000000
--- a/tools/cpp/gen_crosstool.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/python3
-
-# Usage: gen_crosstool <base> <cortex_m4f> <output>
-# Example: bazel run //tools/cpp:gen_crosstool $(readlink -f tools/cpp/static_crosstool.pb) $(readlink -f tools/cpp/cortex_m4f_crosstool.pb) $(readlink -f tools/cpp/CROSSTOOL)
-
-import sys
-
-from third_party.bazel.protos import crosstool_config_pb2
-from google.protobuf import text_format
-from google.protobuf.descriptor import FieldDescriptor
-
-def process_string(string, substitutions):
-  for a, b in substitutions.items():
-    string = string.replace(a, b)
-  return string
-
-def rename_message_contents(proto, substitutions):
-  for descriptor, value in proto.ListFields():
-    if descriptor.type == FieldDescriptor.TYPE_STRING:
-      if descriptor.label == FieldDescriptor.LABEL_REPEATED:
-        new_value = []
-        for string in value:
-          new_value.append(process_string(string, substitutions))
-        value[:] = new_value
-      else:
-        setattr(proto, descriptor.name, process_string(value, substitutions))
-    if descriptor.type == FieldDescriptor.TYPE_MESSAGE:
-      if descriptor.label == FieldDescriptor.LABEL_REPEATED:
-        for sub_proto in value:
-          rename_message_contents(sub_proto, substitutions)
-      else:
-        rename_message_contents(value, substitutions)
-
-def add_m4f_toolchain(new_toolchain, m4f_proto, substitutions):
-  new_toolchain.CopyFrom(m4f_proto.toolchain[0])
-  rename_message_contents(new_toolchain, substitutions)
-
-def main(args):
-  crosstool_proto = crosstool_config_pb2.CrosstoolRelease()
-  with open(args[0], 'r') as f:
-    text_format.Merge(f.read(), crosstool_proto)
-
-  m4f_proto = crosstool_config_pb2.CrosstoolRelease()
-  with open(args[1], 'r') as f:
-    text_format.Merge(f.read(), m4f_proto)
-  add_m4f_toolchain(crosstool_proto.toolchain.add(), m4f_proto, {
-      '%NAME%': 'cortex-m4f',
-      '%CPU%': '__MK64FX512__',
-      '%F_CPU%': '120000000',
-      '%LINKER_SCRIPT%': 'motors/core/kinetis_512_256.ld',
-      })
-  # TODO(Brian): The parts we actually use have 1M of FLASH. Do we want to take
-  # advantage, or maintain compatibility with alternative parts that use some
-  # of it for EEPROM/FlexMem/etc?
-  add_m4f_toolchain(crosstool_proto.toolchain.add(), m4f_proto, {
-      '%NAME%': 'cortex-m4f-k22',
-      '%CPU%': '__MK22FX512__',
-      '%F_CPU%': '120000000',
-      '%LINKER_SCRIPT%': 'motors/core/kinetis_512_128.ld',
-      })
-
-  with open(args[2], 'w') as f:
-    f.write('# GENERATED FILE. DO NOT EDIT\n')
-    f.write('# Generated by tools/cpp/gen_crosstool.py\n')
-    f.write(text_format.MessageToString(crosstool_proto))
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/tools/cpp/static_crosstool.pb b/tools/cpp/static_crosstool.pb
deleted file mode 100644
index dc650d9..0000000
--- a/tools/cpp/static_crosstool.pb
+++ /dev/null
@@ -1,997 +0,0 @@
-major_version: "local"
-minor_version: ""
-default_target_cpu: "same_as_host"
-
-default_toolchain {
-  cpu: "roborio"
-  toolchain_identifier: "roborio_linux"
-}
-
-default_toolchain {
-  cpu: "k8"
-  toolchain_identifier: "k8_linux"
-}
-
-default_toolchain {
-  cpu: "armeabi-v7a"
-  toolchain_identifier: "stub_armeabi-v7a"
-}
-
-default_toolchain {
-  cpu: "armhf-debian"
-  toolchain_identifier: "clang_linux_armhf"
-}
-
-default_toolchain {
-  cpu: "cortex-m4f"
-  toolchain_identifier: "cortex-m4f"
-}
-
-default_toolchain {
-  cpu: "cortex-m4f-k22"
-  toolchain_identifier: "cortex-m4f-k22"
-}
-
-toolchain {
-  toolchain_identifier: "stub_armeabi-v7a"
-  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
-  supports_thin_archives: false
-  target_libc: "armeabi-v7a"
-  target_cpu: "armeabi-v7a"
-  target_system_name: "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" }
-}
-
-toolchain {
-  abi_version: "local"
-  abi_libc_version: "local"
-  builtin_sysroot: ""
-  compiler: "clang"
-  host_system_name: "local"
-  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
-  supports_thin_archives: false
-  target_libc: "local"
-  target_cpu: "k8"
-  target_system_name: "k8"
-  toolchain_identifier: "k8_linux"
-
-  # These paths are relative to //tools/cpp.
-  tool_path { name: "ar" path: "clang_6p0/x86_64-linux-gnu-ar" }
-  tool_path { name: "compat-ld" path: "clang_6p0/x86_64-linux-gnu-ld" }
-  tool_path { name: "cpp" path: "clang_6p0/x86_64-linux-gnu-cpp" }
-  tool_path { name: "dwp" path: "clang_6p0/x86_64-linux-gnu-dwp" }
-  tool_path { name: "gcc" path: "clang_6p0/x86_64-linux-gnu-clang-6.0" }
-  tool_path { name: "gcov" path: "clang_6p0/x86_64-linux-gnu-gcov" }
-  # C(++) compiles invoke the compiler (as that is the one knowing where
-  # to find libraries), but we provide LD so other rules can invoke the linker.
-  tool_path { name: "ld" path: "clang_6p0/x86_64-linux-gnu-ld" }
-  tool_path { name: "nm" path: "clang_6p0/x86_64-linux-gnu-nm" }
-  tool_path { name: "objcopy" path: "clang_6p0/x86_64-linux-gnu-objcopy" }
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  tool_path { name: "objdump" path: "clang_6p0/x86_64-linux-gnu-objdump" }
-  tool_path { name: "strip" path: "clang_6p0/x86_64-linux-gnu-strip" }
-  linking_mode_flags { mode: DYNAMIC }
-
-  compiler_flag: "--sysroot=external/amd64_debian_sysroot"
-  compiler_flag: "-nostdinc"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/c++/7"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu/c++/7"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/c++/8/backward"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/8/include"
-  # We don't have anything in /usr/local/include, so don't include it here where
-  # would normally go on the default search path.
-  compiler_flag: "-isystem"
-  compiler_flag: "external/clang_6p0_repo/usr/lib/llvm-6.0/lib/clang/6.0.0/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/amd64_debian_sysroot/usr/include"
-
-  cxx_builtin_include_directory: "%package(@clang_6p0_repo//usr)%/lib/llvm-6.0/lib/clang/6.0.0/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include"
-  cxx_builtin_include_directory: "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include-fixed"
-
-  linker_flag: "-nodefaultlibs"
-  linker_flag: "--sysroot=external/amd64_debian_sysroot"
-  linker_flag: "-lstdc++"
-  linker_flag: "-lc"
-  linker_flag: "-lgcc"
-  linker_flag: "-lgcc_s"
-  linker_flag: "-Bexternal/clang_6p0_repo/usr/bin/"
-  linker_flag: "-Ltools/cpp/clang_6p0/clang_more_libs"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/7/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/usr/lib/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/lib/x86_64-linux-gnu/"
-  linker_flag: "-Lexternal/amd64_debian_sysroot/lib/"
-
-  feature {
-    name: "opt"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "dbg"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-  }
-
-  feature {
-    name: "fastbuild"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-      }
-    }
-  }
-
-  # Anticipated future default.
-  # This makes GCC and Clang do what we want when called through symlinks.
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  linker_flag: "-no-canonical-prefixes"
-
-  # Things that the code wants defined.
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D_FILE_OFFSET_BITS=64"
-  # TODO(Brian): Rename this or something.
-  compiler_flag: "-DAOS_ARCHITECTURE_arm_frc"
-
-  linker_flag: "-fuse-ld=gold"
-
-  # Make C++ compilation deterministic. Use linkstamping instead of these
-  # compiler symbols.
-  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\""
-
-  # C++17 libraries that tend to cause issues in some libraries that we include.
-  unfiltered_cxx_flag: "-Wno-varargs"
-  unfiltered_cxx_flag: "-Wno-null-pointer-arithmetic"
-  # The mismatched-new-delete seems to be a bit overly strict currently
-  # and errors on:
-  # char *p = new char;
-  # delete p;
-  # p = new char[100];
-  # delete[] p;
-  unfiltered_cxx_flag: "-Wno-mismatched-new-delete"
-
-  # Security hardening on by default.
-  # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases.
-  # We need to undef it before redefining it as some distributions now have
-  # it enabled by default.
-  compiler_flag: "-U_FORTIFY_SOURCE"
-  compiler_flag: "-D_FORTIFY_SOURCE=1"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-fPIE"
-  linker_flag: "-Wl,-z,relro,-z,now"
-
-  # Pretty much everything needs this, including parts of the glibc STL...
-  linker_flag: "-lm"
-
-  # Enable coloring even if there's no attached terminal. Bazel removes the
-  # escape sequences if --nocolor is specified.
-  compiler_flag: "-fcolor-diagnostics"
-  compiler_flag: "-fmessage-length=80"
-  compiler_flag: "-fmacro-backtrace-limit=0"
-
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wstrict-aliasing"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wcast-align"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-
-  # Keep stack frames for debugging, even in opt mode.
-  compiler_flag: "-fno-omit-frame-pointer"
-
-  # Don't use temp files while compiling.
-  compiler_flag: "-pipe"
-
-  # Stamp the binary with a unique identifier.
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  linker_flag: "-Wl,--warn-execstack"
-  linker_flag: "-Wl,--detect-odr-violations"
-
-  # Enable debug symbols.
-  compiler_flag: "-ggdb3"
-
-  compilation_mode_flags {
-    mode: OPT
-
-    compiler_flag: "-O2"
-
-    # Disable assertions
-    compiler_flag: "-DNDEBUG"
-
-    # Removal of unused code and data at link time (can this increase binary size in some cases?).
-    compiler_flag: "-ffunction-sections"
-    compiler_flag: "-fdata-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  feature {
-    name: "pie_for_linking"
-    enabled: true
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-  }
-}
-
-toolchain {
-  toolchain_identifier: "roborio_linux"
-  host_system_name: "roborio"
-  target_system_name: "roborio"
-  target_cpu: "roborio"
-  target_libc: "roborio"
-  compiler: "gcc"
-  abi_version: "roborio"
-  abi_libc_version: "roborio"
-
-  builtin_sysroot: ""
-  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
-  supports_thin_archives: false
-
-  tool_path { name: "ar" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ar" }
-  tool_path { name: "as" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-as" }
-  tool_path { name: "compat-ld" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld" }
-  tool_path { name: "cpp" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-cpp" }
-  tool_path { name: "dwp" path: "/bin/false" }
-  tool_path { name: "gcc" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcc" }
-  tool_path { name: "gcov" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9" }
-  # C(++) compiles invoke the compiler (as that is the one knowing where
-  # to find libraries), but we provide LD so other rules can invoke the linker.
-  tool_path { name: "ld" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld" }
-  tool_path { name: "nm" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-nm" }
-  tool_path { name: "objcopy" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy" }
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  tool_path { name: "objdump" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objdump" }
-  tool_path { name: "strip" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-strip" }
-  linking_mode_flags { mode: DYNAMIC }
-
-  feature {
-    name: "compile_flags1"
-    enabled: true
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      action: "lto-backend"
-      action: "clif-match"
-      flag_group {
-        flag: "--sysroot=external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi"
-        flag: "-nostdinc"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed"
-      }
-    }
-
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      flag_group {
-        flag: "-fno-canonical-system-headers"
-      }
-    }
-
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      flag_group {
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi"
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward"
-      }
-    }
-
-    flag_set {
-      action: "assemble"
-      action: "preprocess-assemble"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "c++-module-codegen"
-      action: "lto-backend"
-      action: "clif-match"
-      flag_group {
-        flag: "-isystem"
-        flag: "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include"
-
-        flag: "-mfpu=neon"
-
-        # Things that the code wants defined.
-        flag: "-D__STDC_FORMAT_MACROS"
-        flag: "-D__STDC_CONSTANT_MACROS"
-        flag: "-D__STDC_LIMIT_MACROS"
-        flag: "-D_FILE_OFFSET_BITS=64"
-
-        # TODO(Brian): Rename this or something.
-        flag: "-DAOS_ARCHITECTURE_arm_frc"
-
-        # Security hardening on by default.
-        # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases.
-        # We need to undef it before redefining it as some distributions now have
-        # it enabled by default.
-        flag: "-U_FORTIFY_SOURCE"
-        flag: "-fstack-protector"
-        flag: "-fPIE"
-
-        # Enable coloring even if there's no attached terminal. Bazel removes the
-        # escape sequences if --nocolor is specified.
-        flag: "-fdiagnostics-color=always"
-
-        flag: "-Wall"
-        flag: "-Wextra"
-        flag: "-Wpointer-arith"
-        flag: "-Wstrict-aliasing"
-        flag: "-Wcast-qual"
-        flag: "-Wwrite-strings"
-        flag: "-Wtype-limits"
-        flag: "-Wsign-compare"
-        flag: "-Wformat=2"
-        flag: "-Werror"
-        flag: "-Wunused-local-typedefs"
-        # We don't use libraries compiled with the broken version.
-        flag: "-Wno-psabi"
-
-        # Keep stack frames for debugging, even in opt mode.
-        flag: "-fno-omit-frame-pointer"
-
-        flag: "-D__has_feature(x)=0"
-
-        # Don't use temp files while compiling.
-        flag: "-pipe"
-
-        # Enable debug symbols.
-        flag: "-ggdb3"
-      }
-    }
-  }
-
-  feature {
-    name: "opt"
-    implies: "opt_post"
-    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-parsing"
-      action: "linkstamp-compile"
-      flag_group {
-        flag: "-O2"
-        flag: "-DNDEBUG"
-        flag: "-D_FORTIFY_SOURCE=1"
-        flag: "-ffunction-sections"
-        flag: "-fdata-sections"
-      }
-    }
-    flag_set {
-      action: "c++-link-executable"
-      action: "c++-link-nodeps-dynamic-library"
-      action: "c++-link-dynamic-library"
-      flag_group {
-        flag: "-Wl,--gc-sections"
-      }
-    }
-  }
-
-  # TODO(bazel-team): In theory, the path here ought to exactly match the path
-  # used by gcc. That works because bazel currently doesn't track files at
-  # absolute locations and has no remote execution, yet. However, this will need
-  # to be fixed, maybe with auto-detection?
-
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi)%"
-  cxx_builtin_include_directory: "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward)%"
-
-  linker_flag: "-lstdc++"
-  linker_flag: "-Ltools/cpp/arm-frc-linux-gnueabi/libs"
-
-  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-parsing"
-      action: "clif-match"
-      expand_if_all_available: "dependency_file"
-      flag_group {
-        flag: "-MD"
-        flag: "-MF"
-        flag: "%{dependency_file}"
-      }
-    }
-  }
-
-  feature {
-    name: "random_seed"
-    flag_set {
-      # TODO(austin): Should these also have -frandom-seed set?  Upstream
-      # doesn't.
-      # action: "linkstamp-compile"
-      # action: "c-compile"
-      action: "c++-compile"
-      action: "c++-module-codegen"
-      action: "c++-module-compile"
-      flag_group {
-        expand_if_all_available: "output_file"
-        flag: "-frandom-seed=%{output_file}"
-      }
-    }
-  }
-
-  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"
-      }
-    }
-  }
-
-  feature {
-    name: "preprocessor_defines"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "linkstamp-compile"
-      action: "c-compile"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-module-compile"
-      action: "clif-match"
-      flag_group {
-        iterate_over: "preprocessor_defines"
-        flag: "-D%{preprocessor_defines}"
-      }
-    }
-  }
-
-  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 {
-        flag: "-iquote"
-        flag: "%{quote_include_paths}"
-        iterate_over: "quote_include_paths"
-      }
-      flag_group {
-        flag: "-I%{include_paths}"
-        iterate_over: "include_paths"
-      }
-      flag_group {
-        flag: "-isystem"
-        flag: "%{system_include_paths}"
-        iterate_over: "system_include_paths"
-      }
-    }
-  }
-
-  feature {
-    name: "opt_post"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "dbg"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-  }
-
-  feature {
-    name: "fastbuild"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "all_modes"
-    enabled: true
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-        flag: "-fno-sized-deallocation"
-      }
-    }
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c++-link"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      action: "c-compile"
-      flag_group {
-        # We always want to compile with -pthread semantics.
-        flag: "-pthread"
-      }
-    }
-  }
-
-  # Anticipated future default.
-  # This makes GCC and Clang do what we want when called through symlinks.
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  linker_flag: "-no-canonical-prefixes"
-
-  # Make C++ compilation deterministic. Use linkstamping instead of these
-  # compiler symbols.
-  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\""
-
-  linker_flag: "-Wl,-z,relro,-z,now"
-
-  # Pretty much everything needs this, including parts of the glibc STL...
-  linker_flag: "-lm"
-
-  # Have GCC return the exit code from ld.
-  linker_flag: "-pass-exit-codes"
-
-  # Stamp the binary with a unique identifier.
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  #linker_flag: "-Wl,--warn-execstack"
-  #linker_flag: "-Wl,--detect-odr-violations"
-
-  feature {
-    name: "pie_for_linking"
-    enabled: true
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-  }
-}
-
-toolchain {
-  abi_version: "clang_6.0"
-  abi_libc_version: "glibc_2.19"
-  builtin_sysroot: ""
-  compiler: "clang"
-  host_system_name: "linux"
-  needsPic: true
-  supports_gold_linker: false
-  supports_incremental_linker: false
-  supports_fission: false
-  supports_interface_shared_objects: false
-  supports_normalizing_ar: true
-  supports_start_end_lib: false
-  supports_thin_archives: true
-  target_libc: "glibc_2.19"
-  target_cpu: "armhf-debian"
-  target_system_name: "arm_a15"
-  toolchain_identifier: "clang_linux_armhf"
-
-  tool_path { name: "ar" path: "linaro_linux_gcc/arm-linux-gnueabihf-ar" }
-  tool_path { name: "compat-ld" path: "linaro_linux_gcc/arm-linux-gnueabihf-ld" }
-  tool_path { name: "cpp" path: "linaro_linux_gcc/clang_bin/clang" }
-  tool_path { name: "dwp" path: "linaro_linux_gcc/arm-linux-gnueabihf-dwp" }
-  tool_path { name: "gcc" path: "linaro_linux_gcc/clang_bin/clang" }
-  tool_path { name: "gcov" path: "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9" }
-  # C(++) compiles invoke the compiler (as that is the one knowing where
-  # to find libraries), but we provide LD so other rules can invoke the linker.
-  tool_path { name: "ld" path: "linaro_linux_gcc/arm-linux-gnueabihf-ld" }
-  tool_path { name: "nm" path: "linaro_linux_gcc/arm-linux-gnueabihf-nm" }
-  tool_path { name: "objcopy" path: "linaro_linux_gcc/arm-linux-gnueabihf-objcopy" }
-  objcopy_embed_flag: "-I"
-  objcopy_embed_flag: "binary"
-  tool_path { name: "objdump" path: "linaro_linux_gcc/arm-linux-gnueabihf-objdump" }
-  tool_path { name: "strip" path: "linaro_linux_gcc/arm-linux-gnueabihf-strip" }
-  linking_mode_flags { mode: DYNAMIC }
-
-  compiler_flag: "-target"
-  compiler_flag: "armv7a-arm-linux-gnueabif"
-  compiler_flag: "--sysroot=external/armhf_debian_rootfs"
-  compiler_flag: "-mfloat-abi=hard"
-  compiler_flag: "-mfpu=vfpv3-d16"
-
-  compiler_flag: "-nostdinc"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/include/c++/7.4.1/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/linaro_linux_gcc_repo/include/c++/7.4.1"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/armhf_debian_rootfs/usr/include"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/armhf_debian_rootfs/usr/include/arm-linux-gnueabihf"
-  compiler_flag: "-isystem"
-  compiler_flag: "external/org_frc971/third_party"
-
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//include)%"
-  cxx_builtin_include_directory: "%package(@armhf_debian_rootfs//usr/include)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//include)%/c++/7.4.1"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed)%"
-  cxx_builtin_include_directory: "%package(@linaro_linux_gcc_repo//arm-linux-gnueabihf/include)%/c++/7.4.1"
-
-  linker_flag: "-target"
-  linker_flag: "armv7a-arm-linux-gnueabif"
-  linker_flag: "--sysroot=external/armhf_debian_rootfs"
-  linker_flag: "-lstdc++"
-  linker_flag: "-Ltools/cpp/linaro_linux_gcc/clang_more_libs"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib/gcc/arm-linux-gnueabihf/8"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/lib/arm-linux-gnueabihf"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib/arm-linux-gnueabihf"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/lib"
-  linker_flag: "-Lexternal/armhf_debian_rootfs/usr/lib"
-  linker_flag: "-Lexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1"
-  linker_flag: "-Bexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1"
-  linker_flag: "-Bexternal/linaro_linux_gcc_repo/arm-linux-gnueabihf/bin"
-  linker_flag: "-Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3"
-
-  feature {
-    name: "opt"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "dbg"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=1"
-      }
-      flag_group {
-        flag: "-fno-omit-frame-pointer"
-      }
-    }
-  }
-
-  feature {
-    name: "fastbuild"
-    implies: "all_modes"
-    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: "-DAOS_DEBUG=0"
-      }
-    }
-  }
-
-  feature {
-    name: "all_modes"
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c-compile"
-      flag_group {
-        flag: "-std=gnu99"
-      }
-    }
-    flag_set {
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      flag_group {
-        flag: "-std=gnu++1z"
-      }
-    }
-    flag_set {
-      action: "preprocess-assemble"
-      action: "assemble"
-      action: "c++-link"
-      action: "c++-compile"
-      action: "c++-header-parsing"
-      action: "c++-header-preprocessing"
-      action: "c++-module-compile"
-      action: "c-compile"
-      flag_group {
-        # We always want to compile with -pthread semantics.
-        flag: "-pthread"
-      }
-    }
-  }
-
-  # Anticipated future default.
-  # This makes GCC and Clang do what we want when called through symlinks.
-  unfiltered_cxx_flag: "-no-canonical-prefixes"
-  linker_flag: "-no-canonical-prefixes"
-
-  # Things that the code wants defined.
-  compiler_flag: "-D__STDC_FORMAT_MACROS"
-  compiler_flag: "-D__STDC_CONSTANT_MACROS"
-  compiler_flag: "-D__STDC_LIMIT_MACROS"
-  compiler_flag: "-D_FILE_OFFSET_BITS=64"
-  # TODO(Brian): Rename this or something.
-  compiler_flag: "-DAOS_ARCHITECTURE_armhf"
-
-  # Make C++ compilation deterministic. Use linkstamping instead of these
-  # compiler symbols.
-  unfiltered_cxx_flag: "-Wno-builtin-macro-redefined"
-  unfiltered_cxx_flag: "-Wno-mismatched-new-delete"
-  unfiltered_cxx_flag: "-Wno-null-pointer-arithmetic"
-  unfiltered_cxx_flag: "-Wno-varargs"
-  unfiltered_cxx_flag: "-D__DATE__=\"redacted\""
-  unfiltered_cxx_flag: "-D__TIMESTAMP__=\"redacted\""
-  unfiltered_cxx_flag: "-D__TIME__=\"redacted\""
-
-  # Security hardening on by default.
-  # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases.
-  # We need to undef it before redefining it as some distributions now have
-  # it enabled by default.
-  compiler_flag: "-U_FORTIFY_SOURCE"
-  compiler_flag: "-fstack-protector"
-  compiler_flag: "-fPIE"
-  linker_flag: "-Wl,-z,relro,-z,now"
-
-  # Pretty much everything needs this, including parts of the glibc STL...
-  linker_flag: "-lm"
-
-  # Enable coloring even if there's no attached terminal. Bazel removes the
-  # escape sequences if --nocolor is specified.
-  compiler_flag: "-fdiagnostics-color=always"
-
-  compiler_flag: "-Wall"
-  compiler_flag: "-Wextra"
-  compiler_flag: "-Wpointer-arith"
-  compiler_flag: "-Wstrict-aliasing"
-  compiler_flag: "-Wcast-qual"
-  compiler_flag: "-Wcast-align"
-  compiler_flag: "-Wwrite-strings"
-  compiler_flag: "-Wtype-limits"
-  compiler_flag: "-Wsign-compare"
-  compiler_flag: "-Wformat=2"
-  compiler_flag: "-Werror"
-  compiler_flag: "-Wunused-local-typedefs"
-
-  # Keep stack frames for debugging, even in opt mode.
-  compiler_flag: "-fno-omit-frame-pointer"
-
-  # Don't use temp files while compiling.
-  compiler_flag: "-pipe"
-
-  # Stamp the binary with a unique identifier.
-  linker_flag: "-Wl,--build-id=md5"
-  linker_flag: "-Wl,--hash-style=gnu"
-  #linker_flag: "-Wl,--warn-execstack"
-  #linker_flag: "-Wl,--detect-odr-violations"
-
-  # Enable debug symbols.
-  compiler_flag: "-ggdb3"
-
-  compilation_mode_flags {
-    mode: OPT
-
-    compiler_flag: "-O2"
-
-    # Disable assertions
-    compiler_flag: "-DNDEBUG"
-    compiler_flag: "-D_FORTIFY_SOURCE=1"
-
-    # Removal of unused code and data at link time (can this increase binary size in some cases?).
-    compiler_flag: "-ffunction-sections"
-    compiler_flag: "-fdata-sections"
-    linker_flag: "-Wl,--gc-sections"
-  }
-  feature {
-    name: "pie_for_linking"
-    enabled: true
-    flag_set {
-      action: "c++-link-executable"
-      flag_group {
-        flag: "-pie"
-      }
-    }
-  }
-}
diff --git a/tools/cpp/toolchain_config.bzl b/tools/cpp/toolchain_config.bzl
new file mode 100644
index 0000000..8804cd2
--- /dev/null
+++ b/tools/cpp/toolchain_config.bzl
@@ -0,0 +1,1869 @@
+load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
+    "action_config",
+    "artifact_name_pattern",
+    "env_entry",
+    "env_set",
+    "feature",
+    "feature_set",
+    "flag_group",
+    "flag_set",
+    "make_variable",
+    "tool",
+    "tool_path",
+    "variable_with_value",
+    "with_feature_set",
+)
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
+
+def _impl(ctx):
+    if (ctx.attr.cpu == "armhf-debian"):
+        toolchain_identifier = "clang_linux_armhf"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        toolchain_identifier = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        toolchain_identifier = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "k8"):
+        toolchain_identifier = "k8_linux"
+    elif (ctx.attr.cpu == "roborio"):
+        toolchain_identifier = "roborio_linux"
+    elif (ctx.attr.cpu == "armeabi-v7a"):
+        toolchain_identifier = "stub_armeabi-v7a"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        host_system_name = "armeabi-v7a"
+    elif (ctx.attr.cpu == "armhf-debian"):
+        host_system_name = "linux"
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"
+        or ctx.attr.cpu == "k8"):
+        host_system_name = "local"
+    elif (ctx.attr.cpu == "roborio"):
+        host_system_name = "roborio"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armhf-debian"):
+        target_system_name = "arm_a15"
+    elif (ctx.attr.cpu == "armeabi-v7a"):
+        target_system_name = "armeabi-v7a"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        target_system_name = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        target_system_name = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "k8"):
+        target_system_name = "k8"
+    elif (ctx.attr.cpu == "roborio"):
+        target_system_name = "roborio"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        target_cpu = "armeabi-v7a"
+    elif (ctx.attr.cpu == "armhf-debian"):
+        target_cpu = "armhf-debian"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        target_cpu = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        target_cpu = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "k8"):
+        target_cpu = "k8"
+    elif (ctx.attr.cpu == "roborio"):
+        target_cpu = "roborio"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        target_libc = "armeabi-v7a"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        target_libc = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        target_libc = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "armhf-debian"):
+        target_libc = "glibc_2.19"
+    elif (ctx.attr.cpu == "k8"):
+        target_libc = "local"
+    elif (ctx.attr.cpu == "roborio"):
+        target_libc = "roborio"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "k8"):
+        compiler = "clang"
+    elif (ctx.attr.cpu == "armeabi-v7a"):
+        compiler = "compiler"
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"
+        or ctx.attr.cpu == "roborio"):
+        compiler = "gcc"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        abi_version = "armeabi-v7a"
+    elif (ctx.attr.cpu == "armhf-debian"):
+        abi_version = "clang_6.0"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        abi_version = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        abi_version = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "k8"):
+        abi_version = "local"
+    elif (ctx.attr.cpu == "roborio"):
+        abi_version = "roborio"
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        abi_libc_version = "armeabi-v7a"
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        abi_libc_version = "cortex-m4f"
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        abi_libc_version = "cortex-m4f-k22"
+    elif (ctx.attr.cpu == "armhf-debian"):
+        abi_libc_version = "glibc_2.19"
+    elif (ctx.attr.cpu == "k8"):
+        abi_libc_version = "local"
+    elif (ctx.attr.cpu == "roborio"):
+        abi_libc_version = "roborio"
+    else:
+        fail("Unreachable")
+
+    cc_target_os = None
+
+    builtin_sysroot = None
+
+    all_compile_actions = [
+        ACTION_NAMES.c_compile,
+        ACTION_NAMES.cpp_compile,
+        ACTION_NAMES.linkstamp_compile,
+        ACTION_NAMES.assemble,
+        ACTION_NAMES.preprocess_assemble,
+        ACTION_NAMES.cpp_header_parsing,
+        ACTION_NAMES.cpp_module_compile,
+        ACTION_NAMES.cpp_module_codegen,
+        ACTION_NAMES.clif_match,
+        ACTION_NAMES.lto_backend,
+    ]
+
+    all_cpp_compile_actions = [
+        ACTION_NAMES.cpp_compile,
+        ACTION_NAMES.linkstamp_compile,
+        ACTION_NAMES.cpp_header_parsing,
+        ACTION_NAMES.cpp_module_compile,
+        ACTION_NAMES.cpp_module_codegen,
+        ACTION_NAMES.clif_match,
+    ]
+
+    preprocessor_compile_actions = [
+        ACTION_NAMES.c_compile,
+        ACTION_NAMES.cpp_compile,
+        ACTION_NAMES.linkstamp_compile,
+        ACTION_NAMES.preprocess_assemble,
+        ACTION_NAMES.cpp_header_parsing,
+        ACTION_NAMES.cpp_module_compile,
+        ACTION_NAMES.clif_match,
+    ]
+
+    codegen_compile_actions = [
+        ACTION_NAMES.c_compile,
+        ACTION_NAMES.cpp_compile,
+        ACTION_NAMES.linkstamp_compile,
+        ACTION_NAMES.assemble,
+        ACTION_NAMES.preprocess_assemble,
+        ACTION_NAMES.cpp_module_codegen,
+        ACTION_NAMES.lto_backend,
+    ]
+
+    all_link_actions = [
+        ACTION_NAMES.cpp_link_executable,
+        ACTION_NAMES.cpp_link_dynamic_library,
+        ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+    ]
+
+    if (ctx.attr.cpu == "roborio"):
+        objcopy_embed_data_action = action_config(
+            action_name = "objcopy_embed_data",
+            enabled = True,
+            tools = [
+                tool(
+                    path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"):
+        objcopy_embed_data_action = action_config(
+            action_name = "objcopy_embed_data",
+            enabled = True,
+            tools = [
+                tool(path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy"),
+            ],
+        )
+    elif (ctx.attr.cpu == "k8"):
+        objcopy_embed_data_action = action_config(
+            action_name = "objcopy_embed_data",
+            enabled = True,
+            tools = [tool(path = "clang_6p0/x86_64-linux-gnu-objcopy")],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        objcopy_embed_data_action = action_config(
+            action_name = "objcopy_embed_data",
+            enabled = True,
+            tools = [tool(path = "gcc_arm_none_eabi/arm-none-eabi-objcopy")],
+        )
+    else:
+        objcopy_embed_data_action = None
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        action_configs = []
+    elif (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"
+        or ctx.attr.cpu == "k8"
+        or ctx.attr.cpu == "roborio"):
+        action_configs = [objcopy_embed_data_action]
+    else:
+        fail("Unreachable")
+
+    opt_post_feature = feature(
+        name = "opt_post",
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    "c++-header-preprocessing",
+                    ACTION_NAMES.cpp_module_compile,
+                ],
+                flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
+            ),
+        ],
+    )
+
+    supports_pic_feature = feature(name = "supports_pic", enabled = True)
+
+    if (ctx.attr.cpu == "k8"):
+        default_compile_flags_feature = feature(
+            name = "default_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "--sysroot=external/amd64_debian_sysroot",
+                                "-nostdinc",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/include/c++/7",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu/c++/7",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/include/c++/8/backward",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/8/include",
+                                "-isystem",
+                                "external/clang_6p0_repo/usr/lib/llvm-6.0/lib/clang/6.0.0/include",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu",
+                                "-isystem",
+                                "external/amd64_debian_sysroot/usr/include",
+                                "-D__STDC_FORMAT_MACROS",
+                                "-D__STDC_CONSTANT_MACROS",
+                                "-D__STDC_LIMIT_MACROS",
+                                "-D_FILE_OFFSET_BITS=64",
+                                "-DAOS_ARCHITECTURE_arm_frc",
+                                "-U_FORTIFY_SOURCE",
+                                "-D_FORTIFY_SOURCE=1",
+                                "-fstack-protector",
+                                "-fPIE",
+                                "-fcolor-diagnostics",
+                                "-fmessage-length=80",
+                                "-fmacro-backtrace-limit=0",
+                                "-Wall",
+                                "-Wextra",
+                                "-Wpointer-arith",
+                                "-Wstrict-aliasing",
+                                "-Wcast-qual",
+                                "-Wcast-align",
+                                "-Wwrite-strings",
+                                "-Wtype-limits",
+                                "-Wsign-compare",
+                                "-Wformat=2",
+                                "-Werror",
+                                "-fno-omit-frame-pointer",
+                                "-pipe",
+                                "-ggdb3",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-O2",
+                                "-DNDEBUG",
+                                "-ffunction-sections",
+                                "-fdata-sections",
+                            ],
+                        ),
+                    ],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        default_compile_flags_feature = feature(
+            name = "default_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-D__STDC_FORMAT_MACROS",
+                                "-D__STDC_CONSTANT_MACROS",
+                                "-D__STDC_LIMIT_MACROS",
+                                "-D__MK22FX512__",
+                                "-DF_CPU=120000000",
+                                "-Wl,--gc-sections",
+                                "-D__have_long32",
+                                "-fstack-protector",
+                                "-mcpu=cortex-m4",
+                                "-mfpu=fpv4-sp-d16",
+                                "-mthumb",
+                                "-mfloat-abi=hard",
+                                "-fno-strict-aliasing",
+                                "-fmessage-length=80",
+                                "-fmax-errors=20",
+                                "-Wall",
+                                "-Wextra",
+                                "-Wpointer-arith",
+                                "-Wcast-qual",
+                                "-Wwrite-strings",
+                                "-Wtype-limits",
+                                "-Wsign-compare",
+                                "-Wformat=2",
+                                "-Werror",
+                                "-Wstrict-aliasing=2",
+                                "-Wno-misleading-indentation",
+                                "-Wno-int-in-bool-context",
+                                "-Wdouble-promotion",
+                                "-pipe",
+                                "-g",
+                                "-fno-common",
+                                "-ffreestanding",
+                                "-fbuiltin",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-O2",
+                                "-finline-functions",
+                                "-ffast-math",
+                                "-funroll-loops",
+                                "-DNDEBUG",
+                                "-ffunction-sections",
+                            ],
+                        ),
+                    ],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        default_compile_flags_feature = feature(
+            name = "default_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-D__STDC_FORMAT_MACROS",
+                                "-D__STDC_CONSTANT_MACROS",
+                                "-D__STDC_LIMIT_MACROS",
+                                "-D__MK64FX512__",
+                                "-DF_CPU=120000000",
+                                "-Wl,--gc-sections",
+                                "-D__have_long32",
+                                "-fstack-protector",
+                                "-mcpu=cortex-m4",
+                                "-mfpu=fpv4-sp-d16",
+                                "-mthumb",
+                                "-mfloat-abi=hard",
+                                "-fno-strict-aliasing",
+                                "-fmessage-length=80",
+                                "-fmax-errors=20",
+                                "-Wall",
+                                "-Wextra",
+                                "-Wpointer-arith",
+                                "-Wcast-qual",
+                                "-Wwrite-strings",
+                                "-Wtype-limits",
+                                "-Wsign-compare",
+                                "-Wformat=2",
+                                "-Werror",
+                                "-Wstrict-aliasing=2",
+                                "-Wno-misleading-indentation",
+                                "-Wno-int-in-bool-context",
+                                "-Wdouble-promotion",
+                                "-pipe",
+                                "-g",
+                                "-fno-common",
+                                "-ffreestanding",
+                                "-fbuiltin",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-O2",
+                                "-finline-functions",
+                                "-ffast-math",
+                                "-funroll-loops",
+                                "-DNDEBUG",
+                                "-ffunction-sections",
+                            ],
+                        ),
+                    ],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"):
+        default_compile_flags_feature = feature(
+            name = "default_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-target",
+                                "armv7a-arm-linux-gnueabif",
+                                "--sysroot=external/armhf_debian_rootfs",
+                                "-mfloat-abi=hard",
+                                "-mfpu=vfpv3-d16",
+                                "-nostdinc",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1/arm-linux-gnueabihf",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/include/c++/7.4.1/arm-linux-gnueabihf",
+                                "-isystem",
+                                "external/linaro_linux_gcc_repo/include/c++/7.4.1",
+                                "-isystem",
+                                "external/armhf_debian_rootfs/usr/include",
+                                "-isystem",
+                                "external/armhf_debian_rootfs/usr/include/arm-linux-gnueabihf",
+                                "-isystem",
+                                "external/org_frc971/third_party",
+                                "-D__STDC_FORMAT_MACROS",
+                                "-D__STDC_CONSTANT_MACROS",
+                                "-D__STDC_LIMIT_MACROS",
+                                "-D_FILE_OFFSET_BITS=64",
+                                "-DAOS_ARCHITECTURE_armhf",
+                                "-U_FORTIFY_SOURCE",
+                                "-fstack-protector",
+                                "-fPIE",
+                                "-fdiagnostics-color=always",
+                                "-Wall",
+                                "-Wextra",
+                                "-Wpointer-arith",
+                                "-Wstrict-aliasing",
+                                "-Wcast-qual",
+                                "-Wcast-align",
+                                "-Wwrite-strings",
+                                "-Wtype-limits",
+                                "-Wsign-compare",
+                                "-Wformat=2",
+                                "-Werror",
+                                "-Wunused-local-typedefs",
+                                "-fno-omit-frame-pointer",
+                                "-pipe",
+                                "-ggdb3",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-O2",
+                                "-DNDEBUG",
+                                "-D_FORTIFY_SOURCE=1",
+                                "-ffunction-sections",
+                                "-fdata-sections",
+                            ],
+                        ),
+                    ],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    else:
+        default_compile_flags_feature = None
+
+    if (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "k8"):
+        dbg_feature = feature(
+            name = "dbg",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(flags = ["-DAOS_DEBUG=1"]),
+                        flag_group(flags = ["-fno-omit-frame-pointer"]),
+                    ],
+                ),
+            ],
+            implies = ["all_modes"],
+        )
+    elif (ctx.attr.cpu == "roborio"):
+        dbg_feature = feature(
+            name = "dbg",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(flags = ["-DAOS_DEBUG=1"]),
+                        flag_group(flags = ["-fno-omit-frame-pointer"]),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        dbg_feature = feature(
+            name = "dbg",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-fno-omit-frame-pointer"])],
+                ),
+            ],
+            implies = ["all_modes"],
+        )
+    else:
+        dbg_feature = None
+
+    if (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "k8"):
+        fastbuild_feature = feature(
+            name = "fastbuild",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
+                ),
+            ],
+            implies = ["all_modes"],
+        )
+    elif (ctx.attr.cpu == "roborio"):
+        fastbuild_feature = feature(
+            name = "fastbuild",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        fastbuild_feature = feature(name = "fastbuild", implies = ["all_modes"])
+    else:
+        fastbuild_feature = None
+
+    pie_for_linking_feature = feature(
+        name = "pie_for_linking",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [ACTION_NAMES.cpp_link_executable],
+                flag_groups = [flag_group(flags = ["-pie"])],
+            ),
+        ],
+    )
+
+    if (ctx.attr.cpu == "roborio"):
+        opt_feature = feature(
+            name = "opt",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.objc_compile,
+                        ACTION_NAMES.objcpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.linkstamp_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-O2",
+                                "-DNDEBUG",
+                                "-D_FORTIFY_SOURCE=1",
+                                "-ffunction-sections",
+                                "-fdata-sections",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.cpp_link_executable,
+                        ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+                        ACTION_NAMES.cpp_link_dynamic_library,
+                    ],
+                    flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+                ),
+            ],
+            implies = ["opt_post"],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "k8"):
+        opt_feature = feature(
+            name = "opt",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
+                ),
+            ],
+            implies = ["all_modes"],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        opt_feature = feature(name = "opt", implies = ["all_modes"])
+    else:
+        opt_feature = None
+
+    pic_feature = feature(
+        name = "pic",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.linkstamp_compile,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.cpp_module_compile,
+                ],
+                flag_groups = [
+                    flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
+                ],
+            ),
+        ],
+    )
+
+    if (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        include_paths_feature = feature(
+            name = "include_paths",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = ["-iquote", "%{quote_include_paths}"],
+                            iterate_over = "quote_include_paths",
+                        ),
+                        flag_group(
+                            flags = ["-I%{include_paths}"],
+                            iterate_over = "include_paths",
+                        ),
+                        flag_group(
+                            flags = ["-I", "%{system_include_paths}"],
+                            iterate_over = "system_include_paths",
+                        ),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "roborio"):
+        include_paths_feature = feature(
+            name = "include_paths",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = ["-iquote", "%{quote_include_paths}"],
+                            iterate_over = "quote_include_paths",
+                        ),
+                        flag_group(
+                            flags = ["-I%{include_paths}"],
+                            iterate_over = "include_paths",
+                        ),
+                        flag_group(
+                            flags = ["-isystem", "%{system_include_paths}"],
+                            iterate_over = "system_include_paths",
+                        ),
+                    ],
+                ),
+            ],
+        )
+    else:
+        include_paths_feature = None
+
+    random_seed_feature = feature(
+        name = "random_seed",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.cpp_module_compile,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = ["-frandom-seed=%{output_file}"],
+                        expand_if_available = "output_file",
+                    ),
+                ],
+            ),
+        ],
+    )
+
+    if (ctx.attr.cpu == "roborio"):
+        default_link_flags_feature = feature(
+            name = "default_link_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-lstdc++",
+                                "-Ltools/cpp/arm-frc-linux-gnueabi/libs",
+                                "-no-canonical-prefixes",
+                                "-Wl,-z,relro,-z,now",
+                                "-lm",
+                                "-pass-exit-codes",
+                                "-Wl,--build-id=md5",
+                                "-Wl,--hash-style=gnu",
+                            ],
+                        ),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f-k22"):
+        default_link_flags_feature = feature(
+            name = "default_link_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-no-canonical-prefixes",
+                                "-mcpu=cortex-m4",
+                                "-mfpu=fpv4-sp-d16",
+                                "-mthumb",
+                                "-mfloat-abi=hard",
+                                "-fno-strict-aliasing",
+                                "--specs=nano.specs",
+                                "-lgcc",
+                                "-lstdc++_nano",
+                                "-lm",
+                                "-lc_nano",
+                                "-Tmotors/core/kinetis_512_128.ld",
+                                "-Tmotors/core/kinetis_sections.ld",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"):
+        default_link_flags_feature = feature(
+            name = "default_link_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-no-canonical-prefixes",
+                                "-mcpu=cortex-m4",
+                                "-mfpu=fpv4-sp-d16",
+                                "-mthumb",
+                                "-mfloat-abi=hard",
+                                "-fno-strict-aliasing",
+                                "--specs=nano.specs",
+                                "-lgcc",
+                                "-lstdc++_nano",
+                                "-lm",
+                                "-lc_nano",
+                                "-Tmotors/core/kinetis_512_256.ld",
+                                "-Tmotors/core/kinetis_sections.ld",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "k8"):
+        default_link_flags_feature = feature(
+            name = "default_link_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-nodefaultlibs",
+                                "--sysroot=external/amd64_debian_sysroot",
+                                "-lstdc++",
+                                "-lc",
+                                "-lgcc",
+                                "-lgcc_s",
+                                "-Bexternal/clang_6p0_repo/usr/bin/",
+                                "-Ltools/cpp/clang_6p0/clang_more_libs",
+                                "-Lexternal/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/7/",
+                                "-Lexternal/amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/",
+                                "-Lexternal/amd64_debian_sysroot/usr/lib/",
+                                "-Lexternal/amd64_debian_sysroot/lib/x86_64-linux-gnu/",
+                                "-Lexternal/amd64_debian_sysroot/lib/",
+                                "-no-canonical-prefixes",
+                                "-fuse-ld=gold",
+                                "-Wl,-z,relro,-z,now",
+                                "-lm",
+                                "-Wl,--build-id=md5",
+                                "-Wl,--hash-style=gnu",
+                                "-Wl,--warn-execstack",
+                                "-Wl,--detect-odr-violations",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"):
+        default_link_flags_feature = feature(
+            name = "default_link_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-target",
+                                "armv7a-arm-linux-gnueabif",
+                                "--sysroot=external/armhf_debian_rootfs",
+                                "-lstdc++",
+                                "-Ltools/cpp/linaro_linux_gcc/clang_more_libs",
+                                "-Lexternal/armhf_debian_rootfs/usr/lib/gcc/arm-linux-gnueabihf/8",
+                                "-Lexternal/armhf_debian_rootfs/lib/arm-linux-gnueabihf",
+                                "-Lexternal/armhf_debian_rootfs/usr/lib/arm-linux-gnueabihf",
+                                "-Lexternal/armhf_debian_rootfs/lib",
+                                "-Lexternal/armhf_debian_rootfs/usr/lib",
+                                "-Lexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
+                                "-Bexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
+                                "-Bexternal/linaro_linux_gcc_repo/arm-linux-gnueabihf/bin",
+                                "-Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3",
+                                "-no-canonical-prefixes",
+                                "-Wl,-z,relro,-z,now",
+                                "-lm",
+                                "-Wl,--build-id=md5",
+                                "-Wl,--hash-style=gnu",
+                            ],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = all_link_actions,
+                    flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+                    with_features = [with_feature_set(features = ["opt"])],
+                ),
+            ],
+        )
+    else:
+        default_link_flags_feature = None
+
+    if (ctx.attr.cpu == "roborio"):
+        all_modes_feature = feature(
+            name = "all_modes",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-std=gnu99"])],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = ["-std=gnu++1z", "-fno-sized-deallocation"],
+                        ),
+                    ],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        "c++-link",
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-pthread"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        all_modes_feature = feature(
+            name = "all_modes",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["--std=gnu99"])],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = ["--std=gnu++1z", "-fno-exceptions", "-fno-rtti"],
+                        ),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"):
+        all_modes_feature = feature(
+            name = "all_modes",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-std=gnu99"])],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        "c++-link",
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-pthread"])],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "k8"):
+        all_modes_feature = feature(
+            name = "all_modes",
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.c_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-std=gnu99"])],
+                ),
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        "c++-header-preprocessing",
+                        ACTION_NAMES.cpp_module_compile,
+                    ],
+                    flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
+                ),
+            ],
+        )
+    else:
+        all_modes_feature = None
+
+    supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
+
+    if (ctx.attr.cpu == "k8"):
+        unfiltered_compile_flags_feature = feature(
+            name = "unfiltered_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-no-canonical-prefixes",
+                                "-Wno-builtin-macro-redefined",
+                                "-D__DATE__=\"redacted\"",
+                                "-D__TIMESTAMP__=\"redacted\"",
+                                "-D__TIME__=\"redacted\"",
+                                "-Wno-varargs",
+                                "-Wno-null-pointer-arithmetic",
+                                "-Wno-mismatched-new-delete",
+                            ],
+                        ),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"
+        or ctx.attr.cpu == "roborio"):
+        unfiltered_compile_flags_feature = feature(
+            name = "unfiltered_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-no-canonical-prefixes",
+                                "-Wno-builtin-macro-redefined",
+                                "-D__DATE__=\"redacted\"",
+                                "-D__TIMESTAMP__=\"redacted\"",
+                                "-D__TIME__=\"redacted\"",
+                            ],
+                        ),
+                    ],
+                ),
+            ],
+        )
+    elif (ctx.attr.cpu == "armhf-debian"):
+        unfiltered_compile_flags_feature = feature(
+            name = "unfiltered_compile_flags",
+            enabled = True,
+            flag_sets = [
+                flag_set(
+                    actions = [
+                        ACTION_NAMES.assemble,
+                        ACTION_NAMES.preprocess_assemble,
+                        ACTION_NAMES.linkstamp_compile,
+                        ACTION_NAMES.c_compile,
+                        ACTION_NAMES.cpp_compile,
+                        ACTION_NAMES.cpp_header_parsing,
+                        ACTION_NAMES.cpp_module_compile,
+                        ACTION_NAMES.cpp_module_codegen,
+                        ACTION_NAMES.lto_backend,
+                        ACTION_NAMES.clif_match,
+                    ],
+                    flag_groups = [
+                        flag_group(
+                            flags = [
+                                "-no-canonical-prefixes",
+                                "-Wno-builtin-macro-redefined",
+                                "-Wno-mismatched-new-delete",
+                                "-Wno-null-pointer-arithmetic",
+                                "-Wno-varargs",
+                                "-D__DATE__=\"redacted\"",
+                                "-D__TIMESTAMP__=\"redacted\"",
+                                "-D__TIME__=\"redacted\"",
+                            ],
+                        ),
+                    ],
+                ),
+            ],
+        )
+    else:
+        unfiltered_compile_flags_feature = None
+
+    dependency_file_feature = feature(
+        name = "dependency_file",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.objc_compile,
+                    ACTION_NAMES.objcpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.clif_match,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = ["-MD", "-MF", "%{dependency_file}"],
+                        expand_if_available = "dependency_file",
+                    ),
+                ],
+            ),
+        ],
+    )
+
+    objcopy_embed_flags_feature = feature(
+        name = "objcopy_embed_flags",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = ["objcopy_embed_data"],
+                flag_groups = [flag_group(flags = ["-I", "binary"])],
+            ),
+        ],
+    )
+
+    user_compile_flags_feature = feature(
+        name = "user_compile_flags",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.linkstamp_compile,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.lto_backend,
+                    ACTION_NAMES.clif_match,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = ["%{user_compile_flags}"],
+                        iterate_over = "user_compile_flags",
+                        expand_if_available = "user_compile_flags",
+                    ),
+                ],
+            ),
+        ],
+    )
+
+    sysroot_feature = feature(
+        name = "sysroot",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.linkstamp_compile,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.lto_backend,
+                    ACTION_NAMES.clif_match,
+                    ACTION_NAMES.cpp_link_executable,
+                    ACTION_NAMES.cpp_link_dynamic_library,
+                    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = ["--sysroot=%{sysroot}"],
+                        expand_if_available = "sysroot",
+                    ),
+                ],
+            ),
+        ],
+    )
+
+    compile_flags1_feature = feature(
+        name = "compile_flags1",
+        enabled = True,
+        flag_sets = [
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.lto_backend,
+                    ACTION_NAMES.clif_match,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = [
+                            "--sysroot=external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi",
+                            "-nostdinc",
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include",
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed",
+                        ],
+                    ),
+                ],
+            ),
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    "c++-header-preprocessing",
+                ],
+                flag_groups = [flag_group(flags = ["-fno-canonical-system-headers"])],
+            ),
+            flag_set(
+                actions = [
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = [
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0",
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi",
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward",
+                        ],
+                    ),
+                ],
+            ),
+            flag_set(
+                actions = [
+                    ACTION_NAMES.assemble,
+                    ACTION_NAMES.preprocess_assemble,
+                    ACTION_NAMES.c_compile,
+                    ACTION_NAMES.cpp_compile,
+                    ACTION_NAMES.cpp_header_parsing,
+                    ACTION_NAMES.cpp_module_compile,
+                    ACTION_NAMES.cpp_module_codegen,
+                    ACTION_NAMES.lto_backend,
+                    ACTION_NAMES.clif_match,
+                ],
+                flag_groups = [
+                    flag_group(
+                        flags = [
+                            "-isystem",
+                            "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include",
+                            "-mfpu=neon",
+                            "-D__STDC_FORMAT_MACROS",
+                            "-D__STDC_CONSTANT_MACROS",
+                            "-D__STDC_LIMIT_MACROS",
+                            "-D_FILE_OFFSET_BITS=64",
+                            "-DAOS_ARCHITECTURE_arm_frc",
+                            "-U_FORTIFY_SOURCE",
+                            "-fstack-protector",
+                            "-fPIE",
+                            "-fdiagnostics-color=always",
+                            "-Wall",
+                            "-Wextra",
+                            "-Wpointer-arith",
+                            "-Wstrict-aliasing",
+                            "-Wcast-qual",
+                            "-Wwrite-strings",
+                            "-Wtype-limits",
+                            "-Wsign-compare",
+                            "-Wformat=2",
+                            "-Werror",
+                            "-Wunused-local-typedefs",
+                            "-Wno-psabi",
+                            "-fno-omit-frame-pointer",
+                            "-D__has_feature(x)=0",
+                            "-pipe",
+                            "-ggdb3",
+                        ],
+                    ),
+                ],
+            ),
+        ],
+    )
+
+    if (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        features = [
+                default_compile_flags_feature,
+                default_link_flags_feature,
+                dbg_feature,
+                opt_feature,
+                fastbuild_feature,
+                all_modes_feature,
+                include_paths_feature,
+                objcopy_embed_flags_feature,
+                user_compile_flags_feature,
+                sysroot_feature,
+                unfiltered_compile_flags_feature,
+            ]
+    elif (ctx.attr.cpu == "armhf-debian"
+        or ctx.attr.cpu == "k8"):
+        features = [
+                default_compile_flags_feature,
+                default_link_flags_feature,
+                opt_feature,
+                dbg_feature,
+                fastbuild_feature,
+                all_modes_feature,
+                pie_for_linking_feature,
+                supports_dynamic_linker_feature,
+                supports_pic_feature,
+                objcopy_embed_flags_feature,
+                user_compile_flags_feature,
+                sysroot_feature,
+                unfiltered_compile_flags_feature,
+            ]
+    elif (ctx.attr.cpu == "roborio"):
+        features = [
+                default_link_flags_feature,
+                compile_flags1_feature,
+                opt_feature,
+                dependency_file_feature,
+                random_seed_feature,
+                pic_feature,
+                include_paths_feature,
+                opt_post_feature,
+                dbg_feature,
+                fastbuild_feature,
+                all_modes_feature,
+                pie_for_linking_feature,
+                supports_dynamic_linker_feature,
+                supports_pic_feature,
+                objcopy_embed_flags_feature,
+                user_compile_flags_feature,
+                sysroot_feature,
+                unfiltered_compile_flags_feature,
+            ]
+    elif (ctx.attr.cpu == "armeabi-v7a"):
+        features = [supports_pic_feature]
+    else:
+        fail("Unreachable")
+
+    if (ctx.attr.cpu == "armeabi-v7a"):
+        cxx_builtin_include_directories = []
+    elif (ctx.attr.cpu == "roborio"):
+        cxx_builtin_include_directories = [
+                "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include)%",
+                "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed)%",
+                "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi)%",
+                "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward)%",
+            ]
+    elif (ctx.attr.cpu == "k8"):
+        cxx_builtin_include_directories = [
+                "%package(@clang_6p0_repo//usr)%/lib/llvm-6.0/lib/clang/6.0.0/include",
+                "%package(@amd64_debian_sysroot//usr)%/include",
+                "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include",
+                "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include-fixed",
+            ]
+    elif (ctx.attr.cpu == "armhf-debian"):
+        cxx_builtin_include_directories = [
+                "%package(@linaro_linux_gcc_repo//include)%",
+                "%package(@armhf_debian_rootfs//usr/include)%",
+                "%package(@linaro_linux_gcc_repo//include)%/c++/7.4.1",
+                "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include)%",
+                "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed)%",
+                "%package(@linaro_linux_gcc_repo//arm-linux-gnueabihf/include)%/c++/7.4.1",
+            ]
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        cxx_builtin_include_directories = [
+                "/usr/lib/gcc/arm-none-eabi/4.8/include",
+                "/usr/lib/gcc/arm-none-eabi/4.8/include-fixed",
+                "/usr/lib/arm-none-eabi/include",
+                "/usr/include/newlib",
+            ]
+    else:
+        fail("Unreachable")
+
+    artifact_name_patterns = []
+
+    make_variables = []
+
+    if (ctx.attr.cpu == "roborio"):
+        tool_paths = [
+            tool_path(
+                name = "ar",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ar",
+            ),
+            tool_path(
+                name = "as",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-as",
+            ),
+            tool_path(
+                name = "compat-ld",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
+            ),
+            tool_path(
+                name = "cpp",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-cpp",
+            ),
+            tool_path(name = "dwp", path = "/bin/false"),
+            tool_path(
+                name = "gcc",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcc",
+            ),
+            tool_path(
+                name = "gcov",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
+            ),
+            tool_path(
+                name = "ld",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
+            ),
+            tool_path(
+                name = "nm",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-nm",
+            ),
+            tool_path(
+                name = "objcopy",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
+            ),
+            tool_path(
+                name = "objdump",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objdump",
+            ),
+            tool_path(
+                name = "strip",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-strip",
+            ),
+        ]
+    elif (ctx.attr.cpu == "k8"):
+        tool_paths = [
+            tool_path(
+                name = "ar",
+                path = "clang_6p0/x86_64-linux-gnu-ar",
+            ),
+            tool_path(
+                name = "compat-ld",
+                path = "clang_6p0/x86_64-linux-gnu-ld",
+            ),
+            tool_path(
+                name = "cpp",
+                path = "clang_6p0/x86_64-linux-gnu-cpp",
+            ),
+            tool_path(
+                name = "dwp",
+                path = "clang_6p0/x86_64-linux-gnu-dwp",
+            ),
+            tool_path(
+                name = "gcc",
+                path = "clang_6p0/x86_64-linux-gnu-clang-6.0",
+            ),
+            tool_path(
+                name = "gcov",
+                path = "clang_6p0/x86_64-linux-gnu-gcov",
+            ),
+            tool_path(
+                name = "ld",
+                path = "clang_6p0/x86_64-linux-gnu-ld",
+            ),
+            tool_path(
+                name = "nm",
+                path = "clang_6p0/x86_64-linux-gnu-nm",
+            ),
+            tool_path(
+                name = "objcopy",
+                path = "clang_6p0/x86_64-linux-gnu-objcopy",
+            ),
+            tool_path(
+                name = "objdump",
+                path = "clang_6p0/x86_64-linux-gnu-objdump",
+            ),
+            tool_path(
+                name = "strip",
+                path = "clang_6p0/x86_64-linux-gnu-strip",
+            ),
+        ]
+    elif (ctx.attr.cpu == "cortex-m4f"
+        or ctx.attr.cpu == "cortex-m4f-k22"):
+        tool_paths = [
+            tool_path(
+                name = "ar",
+                path = "gcc_arm_none_eabi/arm-none-eabi-ar",
+            ),
+            tool_path(
+                name = "compat-ld",
+                path = "gcc_arm_none_eabi/arm-none-eabi-ld",
+            ),
+            tool_path(
+                name = "cpp",
+                path = "gcc_arm_none_eabi/arm-none-eabi-cpp",
+            ),
+            tool_path(
+                name = "dwp",
+                path = "gcc_arm_none_eabi/arm-none-eabi-dwp",
+            ),
+            tool_path(
+                name = "gcc",
+                path = "gcc_arm_none_eabi/arm-none-eabi-gcc",
+            ),
+            tool_path(
+                name = "gcov",
+                path = "gcc_arm_none_eabi/arm-none-eabi-gcov",
+            ),
+            tool_path(
+                name = "ld",
+                path = "gcc_arm_none_eabi/arm-none-eabi-ld",
+            ),
+            tool_path(
+                name = "nm",
+                path = "gcc_arm_none_eabi/arm-none-eabi-nm",
+            ),
+            tool_path(
+                name = "objcopy",
+                path = "gcc_arm_none_eabi/arm-none-eabi-objcopy",
+            ),
+            tool_path(
+                name = "objdump",
+                path = "gcc_arm_none_eabi/arm-none-eabi-objdump",
+            ),
+            tool_path(
+                name = "strip",
+                path = "gcc_arm_none_eabi/arm-none-eabi-strip",
+            ),
+        ]
+    elif (ctx.attr.cpu == "armhf-debian"):
+        tool_paths = [
+            tool_path(
+                name = "ar",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-ar",
+            ),
+            tool_path(
+                name = "compat-ld",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
+            ),
+            tool_path(
+                name = "cpp",
+                path = "linaro_linux_gcc/clang_bin/clang",
+            ),
+            tool_path(
+                name = "dwp",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-dwp",
+            ),
+            tool_path(
+                name = "gcc",
+                path = "linaro_linux_gcc/clang_bin/clang",
+            ),
+            tool_path(
+                name = "gcov",
+                path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
+            ),
+            tool_path(
+                name = "ld",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
+            ),
+            tool_path(
+                name = "nm",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-nm",
+            ),
+            tool_path(
+                name = "objcopy",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy",
+            ),
+            tool_path(
+                name = "objdump",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-objdump",
+            ),
+            tool_path(
+                name = "strip",
+                path = "linaro_linux_gcc/arm-linux-gnueabihf-strip",
+            ),
+        ]
+    elif (ctx.attr.cpu == "armeabi-v7a"):
+        tool_paths = [
+            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"),
+        ]
+    else:
+        fail("Unreachable")
+
+
+    out = ctx.actions.declare_file(ctx.label.name)
+    ctx.actions.write(out, "Fake executable")
+    return [
+        cc_common.create_cc_toolchain_config_info(
+            ctx = ctx,
+            features = features,
+            action_configs = action_configs,
+            artifact_name_patterns = artifact_name_patterns,
+            cxx_builtin_include_directories = cxx_builtin_include_directories,
+            toolchain_identifier = toolchain_identifier,
+            host_system_name = host_system_name,
+            target_system_name = target_system_name,
+            target_cpu = target_cpu,
+            target_libc = target_libc,
+            compiler = compiler,
+            abi_version = abi_version,
+            abi_libc_version = abi_libc_version,
+            tool_paths = tool_paths,
+            make_variables = make_variables,
+            builtin_sysroot = builtin_sysroot,
+            cc_target_os = cc_target_os
+        ),
+        DefaultInfo(
+            executable = out,
+        ),
+    ]
+cc_toolchain_config =  rule(
+    implementation = _impl,
+    attrs = {
+        "cpu": attr.string(mandatory=True, values=["armeabi-v7a", "armhf-debian", "cortex-m4f", "cortex-m4f-k22", "k8", "roborio"]),
+    },
+    provides = [CcToolchainConfigInfo],
+    executable = True,
+)
diff --git a/tsconfig.json b/tsconfig.json
index bfbeb32..ed8f3dc 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,7 @@
 {
   "compilerOptions": {
     "experimentalDecorators": true,
-    "strict": true,
+    "strict": false,
     "noImplicitAny": false,
     "target": "es6",
     "lib": ["es6", "dom", "dom.iterable"]
diff --git a/y2018/control_loops/python/BUILD b/y2018/control_loops/python/BUILD
index ba34d86..7cea41b 100644
--- a/y2018/control_loops/python/BUILD
+++ b/y2018/control_loops/python/BUILD
@@ -169,7 +169,7 @@
         "graph_edit.py",
         "graph_generate.py",
     ],
-    default_python_version = "PY3",
+    python_version = "PY3",
     legacy_create_init = False,
     restricted_to = ["//tools:k8"],
     srcs_version = "PY3",
@@ -187,7 +187,7 @@
         "graph_codegen.py",
         "graph_generate.py",
     ],
-    default_python_version = "PY2",
+    python_version = "PY2",
     legacy_create_init = False,
     srcs_version = "PY2",
     deps = [
diff --git a/y2019/vision/server/BUILD b/y2019/vision/server/BUILD
index a7126e4..3d63e09 100644
--- a/y2019/vision/server/BUILD
+++ b/y2019/vision/server/BUILD
@@ -1,7 +1,7 @@
 load("//aos/seasocks:gen_embedded.bzl", "gen_embedded")
 load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library")
 load("//frc971/downloader:downloader.bzl", "aos_downloader_dir")
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle")
 
 ts_library(
diff --git a/y2019/vision/server/www/BUILD b/y2019/vision/server/www/BUILD
index 428dd41..7631d5e 100644
--- a/y2019/vision/server/www/BUILD
+++ b/y2019/vision/server/www/BUILD
@@ -1,4 +1,4 @@
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle")
 
 package(default_visibility = ["//visibility:public"])
@@ -32,7 +32,8 @@
 
 rollup_bundle(
     name = "visualizer_bundle",
-    entry_point = "y2019/vision/server/www/main",
+    enable_code_splitting = False,
+    entry_point = "main.ts",
     deps = [
         ":visualizer",
     ],
diff --git a/y2020/BUILD b/y2020/BUILD
index f54ec84..4643ae8 100644
--- a/y2020/BUILD
+++ b/y2020/BUILD
@@ -240,8 +240,8 @@
     data = [
         ":config",
         "//aos/network:web_proxy_main",
-        "//y2020/www:camera_main_bundle",
-        "//y2020/www:field_main_bundle",
+        "//y2020/www:camera_main_bundle.min.js",
+        "//y2020/www:field_main_bundle.min.js",
         "//y2020/www:files",
     ],
 )
diff --git a/y2020/vision/sift/BUILD b/y2020/vision/sift/BUILD
index a7827b6..158aa94 100644
--- a/y2020/vision/sift/BUILD
+++ b/y2020/vision/sift/BUILD
@@ -30,7 +30,7 @@
         "//tools/cpp:toolchain",
         "@amd64_debian_sysroot//:sysroot_files",
     ],
-    default_python_version = "PY3",
+    python_version = "PY3",
     main = "fast_gaussian_runner.py",
     restricted_to = [
         "//tools:k8",
@@ -234,7 +234,7 @@
 py_binary(
     name = "demo_sift_training",
     srcs = ["demo_sift_training.py"],
-    default_python_version = "PY3",
+    python_version = "PY3",
     srcs_version = "PY2AND3",
     deps = [
         ":sift_fbs_python",
diff --git a/y2020/vision/tools/python_code/BUILD b/y2020/vision/tools/python_code/BUILD
index 53464ac..9b4eb08 100644
--- a/y2020/vision/tools/python_code/BUILD
+++ b/y2020/vision/tools/python_code/BUILD
@@ -15,7 +15,7 @@
     data = glob(["calib_files/*.json"]) + glob([
         "test_images/*.png",
     ]),
-    default_python_version = "PY3",
+    python_version = "PY3",
     srcs_version = "PY2AND3",
     deps = [
         "//external:python-glog",
@@ -63,7 +63,7 @@
     data = glob(["calib_files/*.json"]) + glob([
         "test_images/*.png",
     ]),
-    default_python_version = "PY3",
+    python_version = "PY3",
     main = "load_sift_training.py",
     srcs_version = "PY2AND3",
     deps = [
diff --git a/y2020/www/BUILD b/y2020/www/BUILD
index bc9c016..60fb704 100644
--- a/y2020/www/BUILD
+++ b/y2020/www/BUILD
@@ -1,4 +1,4 @@
-load("@build_bazel_rules_typescript//:defs.bzl", "ts_library")
+load("@npm_bazel_typescript//:defs.bzl", "ts_library")
 load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle")
 load("//frc971/downloader:downloader.bzl", "aos_downloader_dir")
 
@@ -32,12 +32,14 @@
         "//aos/network/www:proxy",
         "//frc971/control_loops/drivetrain:drivetrain_status_ts_fbs",
         "//y2020/vision/sift:sift_ts_fbs",
+        "@com_github_google_flatbuffers//ts:flatbuffers_ts",
     ],
 )
 
 rollup_bundle(
     name = "camera_main_bundle",
-    entry_point = "y2020/www/camera_main",
+    enable_code_splitting = False,
+    entry_point = "camera_main.ts",
     visibility = ["//y2020:__subpackages__"],
     deps = [
         "camera_main",
@@ -46,7 +48,8 @@
 
 rollup_bundle(
     name = "field_main_bundle",
-    entry_point = "y2020/www/field_main",
+    enable_code_splitting = False,
+    entry_point = "field_main.ts",
     visibility = ["//y2020:__subpackages__"],
     deps = [
         "field_main",
diff --git a/yarn.lock b/yarn.lock
index 2a9ba96..821a804 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,183 +2,152 @@
 # yarn lockfile v1
 
 
-"@bazel/bazel-darwin_x64@0.19.1":
-  version "0.19.1"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.19.1.tgz#58d779c8938bd1c136cab55e2f6473121f83741b"
+"@bazel/bazel-darwin_x64@0.29.0":
+  version "0.29.0"
+  resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.29.0.tgz#d2ebcb95bc66031b0545dd8b0e597b3aa5b9024b"
+  integrity sha512-q6snNakVA3wzv3VIuFlsw3/xcB/ygsAMhkigsuZXv1yHmwnuBOI4UJ2r2+Ttc4HPHflS0aWuI/raHDq81vBYKw==
 
-"@bazel/bazel-linux_x64@0.19.1":
-  version "0.19.1"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.19.1.tgz#aef363e0932d29d1bb48980da139d74bfb4b1ffb"
+"@bazel/bazel-linux_x64@0.29.0":
+  version "0.29.0"
+  resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.29.0.tgz#95250ad8463425bec81a95736056f432c186cb9d"
+  integrity sha512-QxWdtlsFKMi3SJ++osjA8QQbWOlGZXU0/TtUTiswsRwWdOEwZhOa2c1ljIQY5QBgzc3CCh2clRnkjWQj0/V/Dw==
 
-"@bazel/bazel-win32_x64@0.19.1":
-  version "0.19.1"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.19.1.tgz#273c43b0febc11675614c402ec82ae44b519f9ee"
+"@bazel/bazel-win32_x64@0.29.0":
+  version "0.29.0"
+  resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.29.0.tgz#62af30d4ccf0a31e656a6ac9337e928d29a4598d"
+  integrity sha512-r0DhNarJrzzcXrvRbey43hGVO4J2QBAS43VrgjrxVw+1kyjKkIOQIh3wKr/OKx2jKOX0y3hCrLpL/aivHqub4g==
 
-"@bazel/bazel@^0.19.1":
-  version "0.19.1"
-  resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.19.1.tgz#22ce225b5172a4ad2a94496be66b14b7c7facca2"
-  optionalDependencies:
-    "@bazel/bazel-darwin_x64" "0.19.1"
-    "@bazel/bazel-linux_x64" "0.19.1"
-    "@bazel/bazel-win32_x64" "0.19.1"
-
-"@bazel/typescript@0.21.0":
-  version "0.21.0"
-  resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.21.0.tgz#41c304f77a42c6a016280d0f4c20e0749c3f4b2a"
+"@bazel/bazel@^0.29.0":
+  version "0.29.0"
+  resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-0.29.0.tgz#bf4ecf47d6e67e8df8d342d24c146bd732d78640"
+  integrity sha512-OBxPv+V73PtADVG4qsGJ7Zj0wJrJorRbHgYE8qsRBNKls6e6rf0jkjSIQvAvP1Dyt7x4MGyhIzzK/5IsPeQZIA==
   dependencies:
-    protobufjs "5.0.3"
+    "@bazel/hide-bazel-files" latest
+  optionalDependencies:
+    "@bazel/bazel-darwin_x64" "0.29.0"
+    "@bazel/bazel-linux_x64" "0.29.0"
+    "@bazel/bazel-win32_x64" "0.29.0"
+
+"@bazel/hide-bazel-files@latest":
+  version "0.37.0"
+  resolved "https://registry.yarnpkg.com/@bazel/hide-bazel-files/-/hide-bazel-files-0.37.0.tgz#3c30a3f64f0b976c8c0e8dd236b0f26db0f6f860"
+  integrity sha512-aVReQa7UxWjBNTsZTAmFKHujTaDxlMUEq2BgvP7mYp1nnZjsCI30SjzPkTn77Ghw4/lK8lhht7AdfWPQp271pQ==
+
+"@bazel/ibazel@^0.10.3":
+  version "0.10.3"
+  resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.10.3.tgz#2e2b8a1d3e885946eac41db2b1aa6801fb319887"
+  integrity sha512-v1nXbMTHVlMM4z4uWp6XiRoHAyUlYggF1SOboLLWRp0+D22kWixqArWqnozLw2mOtnxr97BdLjluWiho6A8Hjg==
+
+"@bazel/typescript@^0.37.0":
+  version "0.37.0"
+  resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.37.0.tgz#9213d963cf132db614a9780b87815cda256a3e14"
+  integrity sha512-4Pz5x87ihPjKQxo/XMfFXJeGHiNEOdaIqLOqzuIXbwczJvMxPKMwnXzikr9XkjHrHs26zZo4iMtXALqW2j7C5w==
+  dependencies:
+    protobufjs "6.8.8"
+    semver "5.6.0"
     source-map-support "0.5.9"
     tsutils "2.27.2"
 
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+  integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
+
+"@protobufjs/base64@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+  integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
+
+"@protobufjs/codegen@^2.0.4":
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+  integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
+
+"@protobufjs/eventemitter@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+  integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
+
+"@protobufjs/fetch@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+  integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
+  dependencies:
+    "@protobufjs/aspromise" "^1.1.1"
+    "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+  integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
+
+"@protobufjs/inquire@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+  integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
+
+"@protobufjs/path@^1.1.2":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+  integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
+
+"@protobufjs/pool@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+  integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
+
+"@protobufjs/utf8@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+  integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
+
 "@types/flatbuffers@latest":
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/@types/flatbuffers/-/flatbuffers-1.10.0.tgz#aa74e30ffdc86445f2f060e1808fc9d56b5603ba"
   integrity sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==
 
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+"@types/long@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
+  integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==
 
-ascli@~1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
-  dependencies:
-    colour "~0.7.1"
-    optjs "~3.2.2"
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
+"@types/node@^10.1.0":
+  version "10.14.18"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce"
+  integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ==
 
 buffer-from@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
 
-bytebuffer@~5:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
+long@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+  integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
+protobufjs@6.8.8:
+  version "6.8.8"
+  resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c"
+  integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==
   dependencies:
-    long "~3"
+    "@protobufjs/aspromise" "^1.1.2"
+    "@protobufjs/base64" "^1.1.2"
+    "@protobufjs/codegen" "^2.0.4"
+    "@protobufjs/eventemitter" "^1.1.0"
+    "@protobufjs/fetch" "^1.1.0"
+    "@protobufjs/float" "^1.0.2"
+    "@protobufjs/inquire" "^1.1.0"
+    "@protobufjs/path" "^1.1.2"
+    "@protobufjs/pool" "^1.1.0"
+    "@protobufjs/utf8" "^1.1.0"
+    "@types/long" "^4.0.0"
+    "@types/node" "^10.1.0"
+    long "^4.0.0"
 
-camelcase@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-
-cliui@^3.0.3:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wrap-ansi "^2.0.0"
-
-code-point-at@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-colour@~0.7.1:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-decamelize@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-glob@^7.0.5:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-invert-kv@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-is-fullwidth-code-point@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
-  dependencies:
-    number-is-nan "^1.0.0"
-
-lcid@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
-  dependencies:
-    invert-kv "^1.0.0"
-
-long@~3:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
-
-minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  dependencies:
-    brace-expansion "^1.1.7"
-
-number-is-nan@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-once@^1.3.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  dependencies:
-    wrappy "1"
-
-optjs@~3.2.2:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
-
-os-locale@^1.4.0:
-  version "1.4.0"
-  resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
-  dependencies:
-    lcid "^1.0.0"
-
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-protobufjs@5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17"
-  dependencies:
-    ascli "~1"
-    bytebuffer "~5"
-    glob "^7.0.5"
-    yargs "^3.10.0"
+semver@5.6.0:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+  integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
 
 source-map-support@0.5.9:
   version "0.5.9"
@@ -191,20 +160,6 @@
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 
-string-width@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
-  dependencies:
-    code-point-at "^1.0.0"
-    is-fullwidth-code-point "^1.0.0"
-    strip-ansi "^3.0.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
-  version "3.0.1"
-  resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  dependencies:
-    ansi-regex "^2.0.0"
-
 tslib@^1.8.1:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
@@ -218,34 +173,3 @@
 typescript@^3.1.6:
   version "3.1.6"
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68"
-
-window-size@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
-
-wrap-ansi@^2.0.0:
-  version "2.1.0"
-  resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-y18n@^3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yargs@^3.10.0:
-  version "3.32.0"
-  resolved "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
-  dependencies:
-    camelcase "^2.0.1"
-    cliui "^3.0.3"
-    decamelize "^1.1.1"
-    os-locale "^1.4.0"
-    string-width "^1.0.1"
-    window-size "^0.1.4"
-    y18n "^3.2.0"