Buildified the world again.

bzl files were pretty off.

Change-Id: Ief87d7c0a08c6706c8c6c573afef95a6d51968e7
diff --git a/aos/BUILD b/aos/BUILD
index cbe31c6..cf58f4a 100644
--- a/aos/BUILD
+++ b/aos/BUILD
@@ -461,16 +461,16 @@
         "testdata/backwards.json",
         "testdata/config1.json",
         "testdata/config1_bad.json",
+        "testdata/config1_multinode.json",
         "testdata/config2.json",
+        "testdata/config2_multinode.json",
         "testdata/config3.json",
         "testdata/expected.json",
+        "testdata/expected_multinode.json",
         "testdata/invalid_destination_node.json",
         "testdata/invalid_nodes.json",
         "testdata/invalid_source_node.json",
         "testdata/self_forward.json",
-        "testdata/expected_multinode.json",
-        "testdata/config1_multinode.json",
-        "testdata/config2_multinode.json",
         "//aos/events:pingpong_config.json",
         "//aos/events:pong.bfbs",
     ],
diff --git a/aos/logging/BUILD b/aos/logging/BUILD
index 1aaa2db..4931696 100644
--- a/aos/logging/BUILD
+++ b/aos/logging/BUILD
@@ -143,10 +143,10 @@
         ":sizes",
         "//aos:die",
         "//aos:macros",
-        "@com_google_absl//absl/base",
         "//aos/ipc_lib:queue",
         "//aos/mutex",
         "//aos/time",
         "//aos/type_traits",
+        "@com_google_absl//absl/base",
     ],
 )
diff --git a/aos/seasocks/gen_embedded.bzl b/aos/seasocks/gen_embedded.bzl
index 34d4bd8..93cdc39 100644
--- a/aos/seasocks/gen_embedded.bzl
+++ b/aos/seasocks/gen_embedded.bzl
@@ -1,16 +1,16 @@
 def _gen_embedded_impl(ctx):
-  ctx.action(
-    inputs = ctx.files.srcs,
-    outputs = [ ctx.outputs.source ],
-    executable = ctx.executable._gen_embedded,
-    arguments = [ ctx.outputs.source.path ] + [f.path for f in ctx.files.srcs],
-    progress_message = 'Generating %s' % ctx.outputs.source.short_path,
-    mnemonic = 'GenEmbedded',
-  )
+    ctx.action(
+        inputs = ctx.files.srcs,
+        outputs = [ctx.outputs.source],
+        executable = ctx.executable._gen_embedded,
+        arguments = [ctx.outputs.source.path] + [f.path for f in ctx.files.srcs],
+        progress_message = "Generating %s" % ctx.outputs.source.short_path,
+        mnemonic = "GenEmbedded",
+    )
 
-  return struct(
-    files = depset([ ctx.outputs.source ]),
-  )
+    return struct(
+        files = depset([ctx.outputs.source]),
+    )
 
 _do_gen_embedded = rule(
     attrs = {
@@ -42,19 +42,19 @@
 """
 
 def gen_embedded(name, srcs, visibility = None):
-  _do_gen_embedded(
-    name = name + '__do_gen',
-    visibility = ['//visibility:private'],
-    srcs = srcs,
-  )
-  native.cc_library(
-    name = name,
-    visibility = visibility,
-    linkstatic = True,
-    srcs = [
-      ':%s__do_gen' % name,
-    ],
-    deps = [
-      '@//third_party/seasocks',
-    ],
-  )
+    _do_gen_embedded(
+        name = name + "__do_gen",
+        visibility = ["//visibility:private"],
+        srcs = srcs,
+    )
+    native.cc_library(
+        name = name,
+        visibility = visibility,
+        linkstatic = True,
+        srcs = [
+            ":%s__do_gen" % name,
+        ],
+        deps = [
+            "@//third_party/seasocks",
+        ],
+    )
diff --git a/aos/vision/download/downloader.bzl b/aos/vision/download/downloader.bzl
index 7100ab7..34a1ec7 100644
--- a/aos/vision/download/downloader.bzl
+++ b/aos/vision/download/downloader.bzl
@@ -1,31 +1,33 @@
 def _aos_vision_downloader_impl(ctx):
-  all_files = ctx.files.srcs
-  ctx.file_action(
-    output = ctx.outputs.executable,
-    executable = True,
-    content = '\n'.join([
-      '#!/bin/bash',
-      'set -e',
-      'cd "${BASH_SOURCE[0]}.runfiles/%s"' % ctx.workspace_name,
-    ] + [
-      'exec %s %s -- %s "$@"' % (ctx.executable._downloader.short_path,
-                                 ' '.join([src.short_path for src in all_files]),
-                                 ctx.attr.default_target),
-    ]),
-  )
+    all_files = ctx.files.srcs
+    ctx.file_action(
+        output = ctx.outputs.executable,
+        executable = True,
+        content = "\n".join([
+            "#!/bin/bash",
+            "set -e",
+            'cd "${BASH_SOURCE[0]}.runfiles/%s"' % ctx.workspace_name,
+        ] + [
+            'exec %s %s -- %s "$@"' % (
+                ctx.executable._downloader.short_path,
+                " ".join([src.short_path for src in all_files]),
+                ctx.attr.default_target,
+            ),
+        ]),
+    )
 
-  to_download = all_files
+    to_download = all_files
 
-  return struct(
-    runfiles = ctx.runfiles(
-      files = to_download + ctx.files._downloader,
-      collect_data = True,
-      collect_default = True,
-    ),
-    files = set([ctx.outputs.executable]),
-  )
+    return struct(
+        runfiles = ctx.runfiles(
+            files = to_download + ctx.files._downloader,
+            collect_data = True,
+            collect_default = True,
+        ),
+        files = set([ctx.outputs.executable]),
+    )
 
-'''Creates a binary which downloads code to a robot camera processing unit.
+"""Creates a binary which downloads code to a robot camera processing unit.
 
 Running this with `bazel run` will actually download everything.
 
@@ -33,22 +35,22 @@
   srcs: The files to download. They currently all get shoved into one folder.
   default_target: The default host to download to. If not specified, defaults to
                   root@10.9.71.179.
-'''
+"""
 aos_vision_downloader = rule(
-  implementation = _aos_vision_downloader_impl,
-  attrs = {
-    '_downloader': attr.label(
-      executable = True,
-      cfg = 'host',
-      default = Label('//aos/vision/download:downloader'),
-    ),
-    'srcs': attr.label_list(
-      mandatory = True,
-      allow_files = True,
-    ),
-    'default_target': attr.string(
-      default = 'root@10.9.71.179',
-    ),
-  },
-  executable = True,
+    implementation = _aos_vision_downloader_impl,
+    attrs = {
+        "_downloader": attr.label(
+            executable = True,
+            cfg = "host",
+            default = Label("//aos/vision/download:downloader"),
+        ),
+        "srcs": attr.label_list(
+            mandatory = True,
+            allow_files = True,
+        ),
+        "default_target": attr.string(
+            default = "root@10.9.71.179",
+        ),
+    },
+    executable = True,
 )
diff --git a/debian/clang.bzl b/debian/clang.bzl
index 6bb9fcf..f170f29 100644
--- a/debian/clang.bzl
+++ b/debian/clang.bzl
@@ -1,135 +1,68 @@
 files = {
-  "binutils-common_2.30-21ubuntu1~18.04.2_amd64.deb" :
-      "613cd8e74f59ea6a4153fe14f7e1e1579edfbf78f5b5dc9396cb3b3c87ab2697",
-  "binutils-x86-64-linux-gnu_2.30-21ubuntu1~18.04.2_amd64.deb" :
-      "66a3add010618a166e418eb14f21b0cc7b9c1b94fa70bc7c62bcbaf103c274c2",
-  "binutils_2.30-21ubuntu1~18.04.2_amd64.deb" :
-      "9f801fccd63d728fc438d0d9aa7dedf9335087307b1f29d5d4f8e08161ff6b7f",
-  "clang-6.0_6.0-1ubuntu2_amd64.deb" :
-      "a8ca3b38fd3b5ae54793ddcefa7c5023970ba0ae6d9dcfaef8c2cabaa7ae5914",
-  "clang-format-6.0_6.0-1ubuntu2_amd64.deb" :
-      "45837be701a0245a6fc7239d084d3a4cee20f9a2d8f5e5e9210c63fa062c7910",
-  "cpp-7_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "38d513408c134b0f0c10236b52d30ef09d5e4c0e092de52de51fa86c57988bc2",
-  "cpp_7.4.0-1ubuntu2.3_amd64.deb" :
-      "6587837e97571bf64e5b673d0f0923b52e3f4e601e15df3907f9a246dd3eaae4",
-  "gcc-7-base_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "8c4e1cf8e5fbe0b8b71119f39b298c35584b204c106d0982db5b7ce9006bfcc5",
-  "gcc-7_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "ac18fe3f92e34d6744e85d50ccdd21389a6a1f92fdf28be56cb9d93fdab8a6e7",
-  "gcc-8-base_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "89415e0e9d940c81e33959f366f1bad1a94cfecacb538eb897be0e6038781a94",
-  "gcc_7.4.0-1ubuntu2.3_amd64.deb" :
-      "7ef491f26b4c15b45c0221f106f1d44a17e168b5ec951a378ec46c9211d67de9",
-  "gfortran-7_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "bcb2da51c180dd4bbe98882ba679f48ec0acf93c87cce159b43c3a9bae5ddaad",
-  "gfortran_7.4.0-1ubuntu2.3_amd64.deb" :
-      "376fc704de5358e61c933f94cd45dd4f39cd044af8ffce04e8cb9acbe9f5fc17",
-  "lib32gcc1_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "1174aec225edfdd73891041631ea5bb42fee17fc260a01395bf59d1393225a55",
-  "libasan4_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "46b713b5f9331bf13db9b360b55274d9abce829bc35f9fac424d96e968858251",
-  "libatomic1_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "1d454264e0509b9715aca09b4398f609f6014da177d4559894a6ae4a01cd338e",
-  "libbinutils_2.30-21ubuntu1~18.04.2_amd64.deb" :
-      "e525a0143b4c3ed75acfe2845aa0525fbebf2215f063fb5d8bfb5b1ed548e2ef",
-  "libc-dev-bin_2.27-3ubuntu1_amd64.deb" :
-      "69ea1317b37cbd467eb7d216f5d23aa8831d926908e9e12477aa28bdc1d5e62b",
-  "libc6-dev_2.27-3ubuntu1_amd64.deb" :
-      "e426c70a940a7d0c5c95823a5fd01f26bd8bcb08d109df2f8c96c439da8dc440",
-  "libc6-i386_2.27-3ubuntu1_amd64.deb" :
-      "d21b6a22a58d6e784a2fd4c2d662b6448ce65907d9603307be7a0bcccd0357bd",
-  "libc6_2.27-3ubuntu1_amd64.deb" :
-      "1e1eb86fd646aa68f7144ec692b837b6b352d215880c6a2d0c92c19d36938427",
-  "libcc1-0_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "37f307ecdc7c798870acc5f2494f4630ee09b837bcf5559e6994ccf4b33e851a",
-  "libcilkrts5_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "fe9b2a0cf364bbe086fbb6e9d36ea05cc9ef1407b3e28f4d939d1f8dd810e396",
-  "libclang-common-6.0-dev_6.0-1ubuntu2_amd64.deb" :
-      "bcf3358a1619735ca3b1a344c8f2267381c113c73b41fe440444972d4e2f516d",
-  "libclang1-6.0_6.0-1ubuntu2_amd64.deb" :
-      "a8e927609413995ae9ac19d0c98a558a5f06d729f9d8c603f7403f9bc53f7e76",
-  "libdb5.3_5.3.28-13.1ubuntu1.1_amd64.deb" :
-      "abb7f569252604af9b123cd6c73195cbd54d7b7664479a85fd5fd12fe8ba3b5d",
-  "libedit2_3.1-20170329-1_amd64.deb" :
-      "414cc28beac456b78140b0a07558034c4a2987212b347401dbb6e1d375f11d32",
-  "libexpat1_2.2.5-3ubuntu0.2_amd64.deb" :
-      "d700a358e8139b5f31c96a3caef452d62388c05f7cf4d6e4f448a06c2c2da122",
-  "libffi6_3.2.1-8_amd64.deb" :
-      "fa26945b0aadfc72ec623c68be9cc59235a7fe42e2388f7015fd131f4fb06dc9",
-  "libgc1c2_7.4.2-8ubuntu1_amd64.deb" :
-      "42c5817659a73581666c93412b3cd2f19960958cd5d5cceb14931f1f5b9611cc",
-  "libgcc-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "60e5ada69177a403f141a19e806bf89a7de79156cd954e36b96f714707e4ef06",
-  "libgcc1_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "1c0a4bf462fa00270158399becf17a2636c03aece77825d9bfff6158cc856295",
-  "libgfortran-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "5c9f8bdde83937b6562d3581b3df74cd8c472e10518bc7741a4f97c2200db077",
-  "libgfortran4_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "c800a1b30c8de9871c0baa019b074076a902a150679ccf31bb3f6c8d9080e862",
-  "libgmp10_6.1.2+dfsg-2_amd64.deb" :
-      "5b4ea4fdbc5cf9b2eb9ce7b05de58a36b507982d9fa8c84765d41279e4645be1",
-  "libgomp1_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "359b9f701e4ef0396ac3eac1dcfbe5f0fda93c7dd8f9af93c48afeb693ae2886",
-  "libisl19_0.19-1_amd64.deb" :
-      "07a0827aba14140b1833ca19ced3f939b2d075646094926d43678a0d19cc942f",
-  "libitm1_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "01108e615b99e752411d1a208730a0e64b0bcd1002e243bd1bc2d5cb0fe1aaed",
-  "libjsoncpp1_1.7.4-3_amd64.deb" :
-      "c0467781913f8a59e60b63efcbf334f17058128076c1b265803d98e9e93815cd",
-  "libllvm6.0_6.0-1ubuntu2_amd64.deb" :
-      "62608aa70d922c8502d72d3f11a5c9d66f4bb680695cf9c7d6ff9acf9632a8a5",
-  "liblsan0_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "6d9ad502fdd0cd23e66f2b3c41475eab797cc06e762ae87e2a7c1ff5f7e45779",
-  "libmpc3_1.1.0-1_amd64.deb" :
-      "3c3c45aa50ce1ff753107766c6fea35a82c52ad11afcab0abfd0cd0c76730f87",
-  "libmpfr6_4.0.1-1_amd64.deb" :
-      "701990426b88d7af39237d6128078d8a4788c72d42e1b9a1b058a871e16ab7fb",
-  "libmpx2_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "7ec3f3b4d3e935bf2c4df78e8505bea077eb1028d6adfe0e6e89bb97d0580790",
-  "libncursesw5_6.1-1ubuntu1.18.04_amd64.deb" :
-      "d1a7a32fe88181d6f5adf7c52cb981359aa35b01bdbbf7218ddc240a4fdabd87",
-  "libobjc-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "51f788e2c5ddf642213bf6000dfb98c9cdc8559fae37eba216fe3d8ffe84c9cb",
-  "libobjc4_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "45a93ad75d9faa4e76502df1d78779896147d817795f45eaac59baaffafbfa36",
-  "libpython-stdlib_2.7.15~rc1-1_amd64.deb" :
-      "2443d968497fb5850a7d2de82f81fcba7b3e61aecc34e61ecacc6f9f80954a6b",
-  "libpython2.7-minimal_2.7.15-4ubuntu4~18.04.2_amd64.deb" :
-      "b1cc0e956f18ee45de0afaa047f3f14a056cd40dad6a10290159562aee0f2783",
-  "libpython2.7-stdlib_2.7.15-4ubuntu4~18.04.2_amd64.deb" :
-      "83c3df1e43a18e73e9c492a79f7f0ea5a3a168bd81c7774d8d1413812bb3577f",
-  "libquadmath0_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "bb62897b975669c6010c3a9b28bced16abf89caa5d9f3dc60a2232e56579cedb",
-  "libreadline7_7.0-3_amd64.deb" :
-      "8706403267e95615f1b70db31ff16709361982728b308466346e01c20a743dd5",
-  "libsqlite3-0_3.22.0-1ubuntu0.1_amd64.deb" :
-      "199fbe096ee359eaf16e7e23871a1aa508bf055df0010c7c4321398f9484a220",
-  "libssl1.1_1.1.1-1ubuntu2.1~18.04.4_amd64.deb" :
-      "92887a27422e5bbc33f91e529f0cc071ee1bece0220ba94fe311e8f9280b2607",
-  "libstdc++-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "5d1a1ce1bf23a0a7a61f4f5d32172505a37f62063994ed91940757e2c92b5a68",
-  "libstdc++6_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "9a84a882fa60f5f3f1fa0fee344d19ca7544cfe2472307095dc841c3ab0f8907",
-  "libtinfo5_6.1-1ubuntu1.18.04_amd64.deb" :
-      "bb4d4d80720149692ea0d5bca1a5dac57737afe447810ce69dd4a95107121da5",
-  "libtsan0_8.3.0-6ubuntu1~18.04.1_amd64.deb" :
-      "dfa5248fc7ea63f992c6b599a85105271583ec5c8f297f79e3c3ecd24a0e64da",
-  "libubsan0_7.4.0-1ubuntu1~18.04.1_amd64.deb" :
-      "a355512c0c6ce266e5ac978e0c3fba697678f2f977efc312dbccd5b0dbc862e8",
-  "linux-libc-dev_4.15.0-66.75_amd64.deb" :
-      "8e8e3cb778c40e25a3a107a2ffc595527616e3be8487588a5de0ae5c14777d38",
-  "mime-support_3.60ubuntu1_all.deb" :
-      "98e05aa03538c5f182ed14cbb59cfe64b30592d77e602abd2442a9f1c72532b3",
-  "python-minimal_2.7.15~rc1-1_amd64.deb" :
-      "960ba1bf3601f763f2d9b26773ce91840facb16f141197ef462a98a5e86bbd07",
-  "python2.7-minimal_2.7.15-4ubuntu4~18.04.2_amd64.deb" :
-      "027817d061f1597c6132dd707b07287bd7dec200296f692db52e8f16008d60b5",
-  "python2.7_2.7.15-4ubuntu4~18.04.2_amd64.deb" :
-      "4ffd42068182cc06fafce537b5bc5a1d7f21c705692968350655a4db43c88473",
-  "python_2.7.15~rc1-1_amd64.deb" :
-      "9be87952c519f94d24129911e03a24035ce47358cb528492f4a53b2e31efc6d4",
-  "readline-common_7.0-3_all.deb" :
-      "84cb3642c82114496d2fc17011db13655bd661cf4641098c03c168ddde367908",
+    "binutils-common_2.30-21ubuntu1~18.04.2_amd64.deb": "613cd8e74f59ea6a4153fe14f7e1e1579edfbf78f5b5dc9396cb3b3c87ab2697",
+    "binutils-x86-64-linux-gnu_2.30-21ubuntu1~18.04.2_amd64.deb": "66a3add010618a166e418eb14f21b0cc7b9c1b94fa70bc7c62bcbaf103c274c2",
+    "binutils_2.30-21ubuntu1~18.04.2_amd64.deb": "9f801fccd63d728fc438d0d9aa7dedf9335087307b1f29d5d4f8e08161ff6b7f",
+    "clang-6.0_6.0-1ubuntu2_amd64.deb": "a8ca3b38fd3b5ae54793ddcefa7c5023970ba0ae6d9dcfaef8c2cabaa7ae5914",
+    "clang-format-6.0_6.0-1ubuntu2_amd64.deb": "45837be701a0245a6fc7239d084d3a4cee20f9a2d8f5e5e9210c63fa062c7910",
+    "cpp-7_7.4.0-1ubuntu1~18.04.1_amd64.deb": "38d513408c134b0f0c10236b52d30ef09d5e4c0e092de52de51fa86c57988bc2",
+    "cpp_7.4.0-1ubuntu2.3_amd64.deb": "6587837e97571bf64e5b673d0f0923b52e3f4e601e15df3907f9a246dd3eaae4",
+    "gcc-7-base_7.4.0-1ubuntu1~18.04.1_amd64.deb": "8c4e1cf8e5fbe0b8b71119f39b298c35584b204c106d0982db5b7ce9006bfcc5",
+    "gcc-7_7.4.0-1ubuntu1~18.04.1_amd64.deb": "ac18fe3f92e34d6744e85d50ccdd21389a6a1f92fdf28be56cb9d93fdab8a6e7",
+    "gcc-8-base_8.3.0-6ubuntu1~18.04.1_amd64.deb": "89415e0e9d940c81e33959f366f1bad1a94cfecacb538eb897be0e6038781a94",
+    "gcc_7.4.0-1ubuntu2.3_amd64.deb": "7ef491f26b4c15b45c0221f106f1d44a17e168b5ec951a378ec46c9211d67de9",
+    "gfortran-7_7.4.0-1ubuntu1~18.04.1_amd64.deb": "bcb2da51c180dd4bbe98882ba679f48ec0acf93c87cce159b43c3a9bae5ddaad",
+    "gfortran_7.4.0-1ubuntu2.3_amd64.deb": "376fc704de5358e61c933f94cd45dd4f39cd044af8ffce04e8cb9acbe9f5fc17",
+    "lib32gcc1_8.3.0-6ubuntu1~18.04.1_amd64.deb": "1174aec225edfdd73891041631ea5bb42fee17fc260a01395bf59d1393225a55",
+    "libasan4_7.4.0-1ubuntu1~18.04.1_amd64.deb": "46b713b5f9331bf13db9b360b55274d9abce829bc35f9fac424d96e968858251",
+    "libatomic1_8.3.0-6ubuntu1~18.04.1_amd64.deb": "1d454264e0509b9715aca09b4398f609f6014da177d4559894a6ae4a01cd338e",
+    "libbinutils_2.30-21ubuntu1~18.04.2_amd64.deb": "e525a0143b4c3ed75acfe2845aa0525fbebf2215f063fb5d8bfb5b1ed548e2ef",
+    "libc-dev-bin_2.27-3ubuntu1_amd64.deb": "69ea1317b37cbd467eb7d216f5d23aa8831d926908e9e12477aa28bdc1d5e62b",
+    "libc6-dev_2.27-3ubuntu1_amd64.deb": "e426c70a940a7d0c5c95823a5fd01f26bd8bcb08d109df2f8c96c439da8dc440",
+    "libc6-i386_2.27-3ubuntu1_amd64.deb": "d21b6a22a58d6e784a2fd4c2d662b6448ce65907d9603307be7a0bcccd0357bd",
+    "libc6_2.27-3ubuntu1_amd64.deb": "1e1eb86fd646aa68f7144ec692b837b6b352d215880c6a2d0c92c19d36938427",
+    "libcc1-0_8.3.0-6ubuntu1~18.04.1_amd64.deb": "37f307ecdc7c798870acc5f2494f4630ee09b837bcf5559e6994ccf4b33e851a",
+    "libcilkrts5_7.4.0-1ubuntu1~18.04.1_amd64.deb": "fe9b2a0cf364bbe086fbb6e9d36ea05cc9ef1407b3e28f4d939d1f8dd810e396",
+    "libclang-common-6.0-dev_6.0-1ubuntu2_amd64.deb": "bcf3358a1619735ca3b1a344c8f2267381c113c73b41fe440444972d4e2f516d",
+    "libclang1-6.0_6.0-1ubuntu2_amd64.deb": "a8e927609413995ae9ac19d0c98a558a5f06d729f9d8c603f7403f9bc53f7e76",
+    "libdb5.3_5.3.28-13.1ubuntu1.1_amd64.deb": "abb7f569252604af9b123cd6c73195cbd54d7b7664479a85fd5fd12fe8ba3b5d",
+    "libedit2_3.1-20170329-1_amd64.deb": "414cc28beac456b78140b0a07558034c4a2987212b347401dbb6e1d375f11d32",
+    "libexpat1_2.2.5-3ubuntu0.2_amd64.deb": "d700a358e8139b5f31c96a3caef452d62388c05f7cf4d6e4f448a06c2c2da122",
+    "libffi6_3.2.1-8_amd64.deb": "fa26945b0aadfc72ec623c68be9cc59235a7fe42e2388f7015fd131f4fb06dc9",
+    "libgc1c2_7.4.2-8ubuntu1_amd64.deb": "42c5817659a73581666c93412b3cd2f19960958cd5d5cceb14931f1f5b9611cc",
+    "libgcc-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb": "60e5ada69177a403f141a19e806bf89a7de79156cd954e36b96f714707e4ef06",
+    "libgcc1_8.3.0-6ubuntu1~18.04.1_amd64.deb": "1c0a4bf462fa00270158399becf17a2636c03aece77825d9bfff6158cc856295",
+    "libgfortran-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb": "5c9f8bdde83937b6562d3581b3df74cd8c472e10518bc7741a4f97c2200db077",
+    "libgfortran4_7.4.0-1ubuntu1~18.04.1_amd64.deb": "c800a1b30c8de9871c0baa019b074076a902a150679ccf31bb3f6c8d9080e862",
+    "libgmp10_6.1.2+dfsg-2_amd64.deb": "5b4ea4fdbc5cf9b2eb9ce7b05de58a36b507982d9fa8c84765d41279e4645be1",
+    "libgomp1_8.3.0-6ubuntu1~18.04.1_amd64.deb": "359b9f701e4ef0396ac3eac1dcfbe5f0fda93c7dd8f9af93c48afeb693ae2886",
+    "libisl19_0.19-1_amd64.deb": "07a0827aba14140b1833ca19ced3f939b2d075646094926d43678a0d19cc942f",
+    "libitm1_8.3.0-6ubuntu1~18.04.1_amd64.deb": "01108e615b99e752411d1a208730a0e64b0bcd1002e243bd1bc2d5cb0fe1aaed",
+    "libjsoncpp1_1.7.4-3_amd64.deb": "c0467781913f8a59e60b63efcbf334f17058128076c1b265803d98e9e93815cd",
+    "libllvm6.0_6.0-1ubuntu2_amd64.deb": "62608aa70d922c8502d72d3f11a5c9d66f4bb680695cf9c7d6ff9acf9632a8a5",
+    "liblsan0_8.3.0-6ubuntu1~18.04.1_amd64.deb": "6d9ad502fdd0cd23e66f2b3c41475eab797cc06e762ae87e2a7c1ff5f7e45779",
+    "libmpc3_1.1.0-1_amd64.deb": "3c3c45aa50ce1ff753107766c6fea35a82c52ad11afcab0abfd0cd0c76730f87",
+    "libmpfr6_4.0.1-1_amd64.deb": "701990426b88d7af39237d6128078d8a4788c72d42e1b9a1b058a871e16ab7fb",
+    "libmpx2_8.3.0-6ubuntu1~18.04.1_amd64.deb": "7ec3f3b4d3e935bf2c4df78e8505bea077eb1028d6adfe0e6e89bb97d0580790",
+    "libncursesw5_6.1-1ubuntu1.18.04_amd64.deb": "d1a7a32fe88181d6f5adf7c52cb981359aa35b01bdbbf7218ddc240a4fdabd87",
+    "libobjc-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb": "51f788e2c5ddf642213bf6000dfb98c9cdc8559fae37eba216fe3d8ffe84c9cb",
+    "libobjc4_8.3.0-6ubuntu1~18.04.1_amd64.deb": "45a93ad75d9faa4e76502df1d78779896147d817795f45eaac59baaffafbfa36",
+    "libpython-stdlib_2.7.15~rc1-1_amd64.deb": "2443d968497fb5850a7d2de82f81fcba7b3e61aecc34e61ecacc6f9f80954a6b",
+    "libpython2.7-minimal_2.7.15-4ubuntu4~18.04.2_amd64.deb": "b1cc0e956f18ee45de0afaa047f3f14a056cd40dad6a10290159562aee0f2783",
+    "libpython2.7-stdlib_2.7.15-4ubuntu4~18.04.2_amd64.deb": "83c3df1e43a18e73e9c492a79f7f0ea5a3a168bd81c7774d8d1413812bb3577f",
+    "libquadmath0_8.3.0-6ubuntu1~18.04.1_amd64.deb": "bb62897b975669c6010c3a9b28bced16abf89caa5d9f3dc60a2232e56579cedb",
+    "libreadline7_7.0-3_amd64.deb": "8706403267e95615f1b70db31ff16709361982728b308466346e01c20a743dd5",
+    "libsqlite3-0_3.22.0-1ubuntu0.1_amd64.deb": "199fbe096ee359eaf16e7e23871a1aa508bf055df0010c7c4321398f9484a220",
+    "libssl1.1_1.1.1-1ubuntu2.1~18.04.4_amd64.deb": "92887a27422e5bbc33f91e529f0cc071ee1bece0220ba94fe311e8f9280b2607",
+    "libstdc++-7-dev_7.4.0-1ubuntu1~18.04.1_amd64.deb": "5d1a1ce1bf23a0a7a61f4f5d32172505a37f62063994ed91940757e2c92b5a68",
+    "libstdc++6_8.3.0-6ubuntu1~18.04.1_amd64.deb": "9a84a882fa60f5f3f1fa0fee344d19ca7544cfe2472307095dc841c3ab0f8907",
+    "libtinfo5_6.1-1ubuntu1.18.04_amd64.deb": "bb4d4d80720149692ea0d5bca1a5dac57737afe447810ce69dd4a95107121da5",
+    "libtsan0_8.3.0-6ubuntu1~18.04.1_amd64.deb": "dfa5248fc7ea63f992c6b599a85105271583ec5c8f297f79e3c3ecd24a0e64da",
+    "libubsan0_7.4.0-1ubuntu1~18.04.1_amd64.deb": "a355512c0c6ce266e5ac978e0c3fba697678f2f977efc312dbccd5b0dbc862e8",
+    "linux-libc-dev_4.15.0-66.75_amd64.deb": "8e8e3cb778c40e25a3a107a2ffc595527616e3be8487588a5de0ae5c14777d38",
+    "mime-support_3.60ubuntu1_all.deb": "98e05aa03538c5f182ed14cbb59cfe64b30592d77e602abd2442a9f1c72532b3",
+    "python-minimal_2.7.15~rc1-1_amd64.deb": "960ba1bf3601f763f2d9b26773ce91840facb16f141197ef462a98a5e86bbd07",
+    "python2.7-minimal_2.7.15-4ubuntu4~18.04.2_amd64.deb": "027817d061f1597c6132dd707b07287bd7dec200296f692db52e8f16008d60b5",
+    "python2.7_2.7.15-4ubuntu4~18.04.2_amd64.deb": "4ffd42068182cc06fafce537b5bc5a1d7f21c705692968350655a4db43c88473",
+    "python_2.7.15~rc1-1_amd64.deb": "9be87952c519f94d24129911e03a24035ce47358cb528492f4a53b2e31efc6d4",
+    "readline-common_7.0-3_all.deb": "84cb3642c82114496d2fc17011db13655bd661cf4641098c03c168ddde367908",
 }
-
diff --git a/debian/packages.bzl b/debian/packages.bzl
index 59f993e..8054d1d 100644
--- a/debian/packages.bzl
+++ b/debian/packages.bzl
@@ -24,80 +24,80 @@
 
 # TODO(phil): Deal with armhf packages. Right now only works for amd64.
 
-def download_packages(name, packages, excludes=[], force_includes=[]):
-  """Downloads a set of packages as well as their dependencies.
+def download_packages(name, packages, excludes = [], force_includes = []):
+    """Downloads a set of packages as well as their dependencies.
 
-  You can also specify excludes in case some of the dependencies are meta
-  packages.
+    You can also specify excludes in case some of the dependencies are meta
+    packages.
 
-  Use "bazel run" on these targets to download the packages and generate the
-  list to use in a .bzl file. Once you have the packages on
-  http://www.frc971.org/Build-Dependencies/ you can add them to a to
-  combine_packages rule.
-  """
-  package_list = " ".join(packages)
-  excludes_list = " ".join(["--exclude=%s" % e for e in excludes])
-  force_includes = " ".join(["--force-include=%s" % i for i in force_includes])
-  native.genrule(
-    name = name,
-    outs = ["%s_output.txt" % name],
-    tags = [
-      "local",
-      "manual",
-    ],
-    tools = [
-      "//debian:download_packages",
-    ],
-    # TODO(phil): Deal with stderr a bit better. It spews more stuff out than I
-    # would like it to.
-    cmd = "$(location //debian:download_packages) %s %s %s | tee $@ >&2" \
-        % (force_includes, excludes_list, package_list),
-  )
+    Use "bazel run" on these targets to download the packages and generate the
+    list to use in a .bzl file. Once you have the packages on
+    http://www.frc971.org/Build-Dependencies/ you can add them to a to
+    combine_packages rule.
+    """
+    package_list = " ".join(packages)
+    excludes_list = " ".join(["--exclude=%s" % e for e in excludes])
+    force_includes = " ".join(["--force-include=%s" % i for i in force_includes])
+    native.genrule(
+        name = name,
+        outs = ["%s_output.txt" % name],
+        tags = [
+            "local",
+            "manual",
+        ],
+        tools = [
+            "//debian:download_packages",
+        ],
+        # TODO(phil): Deal with stderr a bit better. It spews more stuff out than I
+        # would like it to.
+        cmd = "$(location //debian:download_packages) %s %s %s | tee $@ >&2" %
+              (force_includes, excludes_list, package_list),
+    )
 
 def _convert_deb_to_target(deb):
-  """Converts a debian package filename to a valid bazel target name."""
-  target = deb.split('_')[0]
-  target = target.replace('-', '_')
-  target = target.replace('.', '_')
-  target = target.replace(':', '_')
-  target = target.replace('+', 'x')
-  return "deb_%s_repo" % target
+    """Converts a debian package filename to a valid bazel target name."""
+    target = deb.split("_")[0]
+    target = target.replace("-", "_")
+    target = target.replace(".", "_")
+    target = target.replace(":", "_")
+    target = target.replace("+", "x")
+    return "deb_%s_repo" % target
 
-def generate_repositories_for_debs(files, base_url = 'http://www.frc971.org/Build-Dependencies'):
-  """A WORKSPACE helper to add all the deb packages in the dictionary as a repo.
+def generate_repositories_for_debs(files, base_url = "http://www.frc971.org/Build-Dependencies"):
+    """A WORKSPACE helper to add all the deb packages in the dictionary as a repo.
 
-  The files dictionary must be one generated with the "download_packages"
-  helper above.
-  """
-  for f in files.keys():
-    name = _convert_deb_to_target(f)
-    if name not in native.existing_rules():
-      http_file(
-          name = name,
-          urls = [base_url + '/' + f],
-          sha256 = files[f],
-          downloaded_file_path = f,
-      )
+    The files dictionary must be one generated with the "download_packages"
+    helper above.
+    """
+    for f in files.keys():
+        name = _convert_deb_to_target(f)
+        if name not in native.existing_rules():
+            http_file(
+                name = name,
+                urls = [base_url + "/" + f],
+                sha256 = files[f],
+                downloaded_file_path = f,
+            )
 
 def generate_deb_tarball(name, files):
-  """Takes all debs in the dictionary and generates one tarball from them.
+    """Takes all debs in the dictionary and generates one tarball from them.
 
-  This can then be uploaded and used as another WORKSPACE entry.
-  """
-  deps = []
-  for f in files.keys():
-    dep = _convert_deb_to_target(f)
-    deps.append(dep)
-    if ('generate_%s_tarball' % dep) not in native.existing_rules():
-      native.genrule(
-          name = 'generate_%s_tarball' % dep,
-          srcs = ['@%s//file' % dep],
-          outs = ['extracted_%s.tar' % dep],
-          cmd = 'dpkg-deb --fsys-tarfile $(SRCS) > $@',
-      )
+    This can then be uploaded and used as another WORKSPACE entry.
+    """
+    deps = []
+    for f in files.keys():
+        dep = _convert_deb_to_target(f)
+        deps.append(dep)
+        if ("generate_%s_tarball" % dep) not in native.existing_rules():
+            native.genrule(
+                name = "generate_%s_tarball" % dep,
+                srcs = ["@%s//file" % dep],
+                outs = ["extracted_%s.tar" % dep],
+                cmd = "dpkg-deb --fsys-tarfile $(SRCS) > $@",
+            )
 
-  pkg_tar(
-      name = name,
-      extension = 'tar.gz',
-      deps = ['extracted_%s.tar' % dep for dep in deps],
-  )
+    pkg_tar(
+        name = name,
+        extension = "tar.gz",
+        deps = ["extracted_%s.tar" % dep for dep in deps],
+    )
diff --git a/frc971/analysis/BUILD b/frc971/analysis/BUILD
index ad5552b..b45031f 100644
--- a/frc971/analysis/BUILD
+++ b/frc971/analysis/BUILD
@@ -3,10 +3,10 @@
 py_binary(
     name = "plot_action",
     srcs = [
-        "plotter.py",
-        "plot_action.py",
-        "logreader.py",
         "logentry.py",
+        "logreader.py",
+        "plot_action.py",
+        "plotter.py",
     ],
     legacy_create_init = False,
     restricted_to = ["//tools:k8"],
diff --git a/frc971/config/BUILD b/frc971/config/BUILD
index 07394d4..0f4f7ba 100644
--- a/frc971/config/BUILD
+++ b/frc971/config/BUILD
@@ -1,14 +1,14 @@
 filegroup(
-  name = 'rio_robotCommand',
-  srcs = [ 'robotCommand' ],
+    name = "rio_robotCommand",
+    srcs = ["robotCommand"],
 )
 
 sh_binary(
-  name = 'setup_roborio',
-  srcs = [ 'setup_roborio.sh' ],
-  visibility = [ '//visibility:public' ],
-  data = [
-    ':rio_robotCommand',
-    '@arm_frc_linux_gnueabi_repo//:compiler_pieces',
-  ],
+    name = "setup_roborio",
+    srcs = ["setup_roborio.sh"],
+    data = [
+        ":rio_robotCommand",
+        "@arm_frc_linux_gnueabi_repo//:compiler_pieces",
+    ],
+    visibility = ["//visibility:public"],
 )
diff --git a/frc971/control_loops/voltage_cap/BUILD b/frc971/control_loops/voltage_cap/BUILD
index 8c2df46..2aa1dea 100644
--- a/frc971/control_loops/voltage_cap/BUILD
+++ b/frc971/control_loops/voltage_cap/BUILD
@@ -1,23 +1,23 @@
-package(default_visibility = ['//visibility:public'])
+package(default_visibility = ["//visibility:public"])
 
 cc_library(
-  name = 'voltage_cap',
-  srcs = [
-    'voltage_cap.cc',
-  ],
-  hdrs = [
-    'voltage_cap.h',
-  ],
+    name = "voltage_cap",
+    srcs = [
+        "voltage_cap.cc",
+    ],
+    hdrs = [
+        "voltage_cap.h",
+    ],
 )
 
 cc_test(
-  name = 'voltage_cap_test',
-  srcs = [
-    'voltage_cap_test.cc',
-  ],
-  deps = [
-    ':voltage_cap',
-    '//aos/testing:googletest',
-    '//aos/testing:test_shm',
-  ],
+    name = "voltage_cap_test",
+    srcs = [
+        "voltage_cap_test.cc",
+    ],
+    deps = [
+        ":voltage_cap",
+        "//aos/testing:googletest",
+        "//aos/testing:test_shm",
+    ],
 )
diff --git a/frc971/shooter_interpolation/BUILD b/frc971/shooter_interpolation/BUILD
index 3509040..cce93e1 100644
--- a/frc971/shooter_interpolation/BUILD
+++ b/frc971/shooter_interpolation/BUILD
@@ -1,21 +1,21 @@
 cc_library(
-  name = 'interpolation',
-  hdrs = [
-    'interpolation.h',
-  ],
-  srcs = [
-    'interpolation.cc',
-  ],
-  visibility = ['//visibility:public'],
+    name = "interpolation",
+    srcs = [
+        "interpolation.cc",
+    ],
+    hdrs = [
+        "interpolation.h",
+    ],
+    visibility = ["//visibility:public"],
 )
 
 cc_test(
-  name = 'interpolation_test',
-  srcs = [
-    'interpolation_test.cc',
-  ],
-  deps = [
-   ':interpolation',
-   '//aos/testing:googletest',
-  ]
+    name = "interpolation_test",
+    srcs = [
+        "interpolation_test.cc",
+    ],
+    deps = [
+        ":interpolation",
+        "//aos/testing:googletest",
+    ],
 )
diff --git a/motors/macros.bzl b/motors/macros.bzl
index 3b1d379..4f3cf17 100644
--- a/motors/macros.bzl
+++ b/motors/macros.bzl
@@ -1,10 +1,10 @@
-def hex_from_elf(name, restricted_to=None):
-  native.genrule(
-    name = name,
-    srcs = [ '%s.elf' % name ],
-    outs = [ '%s.hex' % name ],
-    cmd = '$(OBJCOPY) -O ihex $< $@',
-    executable = True,
-    output_to_bindir = True,
-    restricted_to = restricted_to,
-  )
+def hex_from_elf(name, restricted_to = None):
+    native.genrule(
+        name = name,
+        srcs = ["%s.elf" % name],
+        outs = ["%s.hex" % name],
+        cmd = "$(OBJCOPY) -O ihex $< $@",
+        executable = True,
+        output_to_bindir = True,
+        restricted_to = restricted_to,
+    )
diff --git a/tools/build_rules/empty_main.bzl b/tools/build_rules/empty_main.bzl
index dbe9120..3305e1a 100644
--- a/tools/build_rules/empty_main.bzl
+++ b/tools/build_rules/empty_main.bzl
@@ -1,6 +1,7 @@
-'''Returns a select which is either srcs or an empty main function.'''
+"""Returns a select which is either srcs or an empty main function."""
+
 def empty_main_if_asan(srcs):
-  return select({
-    '//tools:has_asan': [ '//tools/cpp:empty_main' ],
-    '//conditions:default': srcs,
-  })
+    return select({
+        "//tools:has_asan": ["//tools/cpp:empty_main"],
+        "//conditions:default": srcs,
+    })
diff --git a/tools/build_rules/fortran.bzl b/tools/build_rules/fortran.bzl
index cbd4447..22882ac 100644
--- a/tools/build_rules/fortran.bzl
+++ b/tools/build_rules/fortran.bzl
@@ -1,51 +1,60 @@
 load("@//tools/build_rules:select.bzl", "compiler_select")
 
 def _single_fortran_object_impl(ctx):
-  toolchain_cflags = (ctx.fragments.cpp.compiler_options([]) +
-      ctx.fragments.cpp.c_options +
-      ctx.fragments.cpp.unfiltered_compiler_options([]) +
-      ['-fPIC', '-Wno-maybe-uninitialized', '-Wno-unused-dummy-argument',
-       '-Wno-conversion', '-Wno-unused-variable', '-Wno-character-truncation'])
+    toolchain_cflags = (ctx.fragments.cpp.compiler_options([]) +
+                        ctx.fragments.cpp.c_options +
+                        ctx.fragments.cpp.unfiltered_compiler_options([]) +
+                        [
+                            "-fPIC",
+                            "-Wno-maybe-uninitialized",
+                            "-Wno-unused-dummy-argument",
+                            "-Wno-conversion",
+                            "-Wno-unused-variable",
+                            "-Wno-character-truncation",
+                        ])
 
-  cmd = toolchain_cflags + ['-c', ctx.file.src.path, '-o', ctx.outputs.pic_o.path]
-  filtered_cmd = []
-  # Strip out the C/C++/Clang specific flags.
-  exclude_flags = ['-fcolor-diagnostics',
-                   '-Wswitch-enum',
-                   '-Wpointer-arith',
-                   '-Wcast-qual',
-                   '-Wwrite-strings',
-                   '-Wsign-compare',
-                   '-Wformat=2',
-                   '-Werror',
-                   '-Wextra',
-                   '-Wno-builtin-macro-redefined',
-                   '-Wunused-local-typedefs',
-                   '-D__has_feature(x)=0',
-                   '-fmacro-backtrace-limit=0']
+    cmd = toolchain_cflags + ["-c", ctx.file.src.path, "-o", ctx.outputs.pic_o.path]
+    filtered_cmd = []
 
-  for flag in cmd:
-    if flag not in exclude_flags and not (flag.startswith('-fsanitize') or
-                                          flag.startswith('-fno-sanitize')):
-      filtered_cmd.append(flag)
+    # Strip out the C/C++/Clang specific flags.
+    exclude_flags = [
+        "-fcolor-diagnostics",
+        "-Wswitch-enum",
+        "-Wpointer-arith",
+        "-Wcast-qual",
+        "-Wwrite-strings",
+        "-Wsign-compare",
+        "-Wformat=2",
+        "-Werror",
+        "-Wextra",
+        "-Wno-builtin-macro-redefined",
+        "-Wunused-local-typedefs",
+        "-D__has_feature(x)=0",
+        "-fmacro-backtrace-limit=0",
+    ]
 
-  ctx.action(
-    inputs = [ctx.file.src] + ctx.files._cc_toolchain,
-    outputs = [ctx.outputs.pic_o],
-    mnemonic = "Fortran",
-    executable = ctx.fragments.cpp.compiler_executable,
-    arguments = filtered_cmd,
-    progress_message = 'Building %s' % ctx.outputs.pic_o.short_path,
-  )
+    for flag in cmd:
+        if flag not in exclude_flags and not (flag.startswith("-fsanitize") or
+                                              flag.startswith("-fno-sanitize")):
+            filtered_cmd.append(flag)
+
+    ctx.action(
+        inputs = [ctx.file.src] + ctx.files._cc_toolchain,
+        outputs = [ctx.outputs.pic_o],
+        mnemonic = "Fortran",
+        executable = ctx.fragments.cpp.compiler_executable,
+        arguments = filtered_cmd,
+        progress_message = "Building %s" % ctx.outputs.pic_o.short_path,
+    )
 
 def _define_fortran_output(src):
-  if not src.name.endswith('.f'):
-    fail('Fortran files must end in \'.f\'', 'src')
+    if not src.name.endswith(".f"):
+        fail("Fortran files must end in '.f'", "src")
 
-  fortran_file_base = src.name[:-2]
-  return {
-    'pic_o': fortran_file_base + '.pic.o',
-  }
+    fortran_file_base = src.name[:-2]
+    return {
+        "pic_o": fortran_file_base + ".pic.o",
+    }
 
 _single_fortran_object = rule(
     attrs = {
@@ -68,33 +77,33 @@
 )
 
 def fortran_library(name, srcs, deps = [], visibility = None):
-  """Builds a shared library from a set of fortran files.
+    """Builds a shared library from a set of fortran files.
 
-  Args:
-    srcs: list of fortran files ending in .f
-    deps: cc_library or fortran_library dependencies.
-  """
-  pic_o_files = []
-  for src in srcs:
-    pic_o_file = src[:-2] + '.pic.o'
-    _single_fortran_object(
-      name = name + '_' + pic_o_file,
-      src = src,
-      visibility = ['//visibility:private'],
-      restricted_to = ['@//tools:k8'],
+    Args:
+      srcs: list of fortran files ending in .f
+      deps: cc_library or fortran_library dependencies.
+    """
+    pic_o_files = []
+    for src in srcs:
+        pic_o_file = src[:-2] + ".pic.o"
+        _single_fortran_object(
+            name = name + "_" + pic_o_file,
+            src = src,
+            visibility = ["//visibility:private"],
+            restricted_to = ["@//tools:k8"],
+        )
+        pic_o_files.append(pic_o_file)
+
+    native.cc_library(
+        name = name,
+        deps = deps,
+        srcs = pic_o_files,
+        linkopts = [
+            "-lgfortran",
+        ],
+        visibility = visibility,
+        restricted_to = ["@//tools:k8"],
     )
-    pic_o_files.append(pic_o_file)
-
-  native.cc_library(
-    name = name,
-    deps = deps,
-    srcs = pic_o_files,
-    linkopts = [
-      '-lgfortran',
-    ],
-    visibility = visibility,
-    restricted_to = ['@//tools:k8'],
-  )
 
 f2c_copts = compiler_select({
     "clang": [
@@ -121,40 +130,40 @@
 This is useful when building externally-f2ced files."""
 
 def f2c_library(name, srcs, copts = [], **kwargs):
-  '''Converts Fortran code to C and then compiles it.
+    """Converts Fortran code to C and then compiles it.
 
-  Attrs:
-    srcs: .f source files
-    **kwargs: passed to native.cc_library
-  '''
-  c_srcs = [f[:-2] + '.c' for f in srcs]
+    Attrs:
+      srcs: .f source files
+      **kwargs: passed to native.cc_library
+    """
+    c_srcs = [f[:-2] + ".c" for f in srcs]
 
-  out_dir = c_srcs[0].split('/')[:-1]
-  for c_src in c_srcs:
-    if c_src.split('/')[:-1] != out_dir:
-      # Need to figure out how to make multiple f2c calls or something to
-      # support this, and we haven't had a use case yet.
-      fail('Multiple output directories not supported', 'srcs')
+    out_dir = c_srcs[0].split("/")[:-1]
+    for c_src in c_srcs:
+        if c_src.split("/")[:-1] != out_dir:
+            # Need to figure out how to make multiple f2c calls or something to
+            # support this, and we haven't had a use case yet.
+            fail("Multiple output directories not supported", "srcs")
 
-  native.genrule(
-    name = '_%s_f2c' % name,
-    visibility = ['//visibility:private'],
-    srcs = srcs,
-    outs = c_srcs,
-    tools = [
-      '@f2c',
-      '@//tools/build_rules:quiet_success',
-    ],
-    cmd = ' '.join([
-      '$(location @//tools/build_rules:quiet_success)',
-      '$(location @f2c)',
-      '-d$(@D)/%s' % ('/'.join(out_dir),),
-      '$(SRCS)',
-    ]),
-  )
-  native.cc_library(
-    name = name,
-    srcs = c_srcs,
-    copts = f2c_copts + copts,
-    **kwargs
-  )
+    native.genrule(
+        name = "_%s_f2c" % name,
+        visibility = ["//visibility:private"],
+        srcs = srcs,
+        outs = c_srcs,
+        tools = [
+            "@f2c",
+            "@//tools/build_rules:quiet_success",
+        ],
+        cmd = " ".join([
+            "$(location @//tools/build_rules:quiet_success)",
+            "$(location @f2c)",
+            "-d$(@D)/%s" % ("/".join(out_dir),),
+            "$(SRCS)",
+        ]),
+    )
+    native.cc_library(
+        name = name,
+        srcs = c_srcs,
+        copts = f2c_copts + copts,
+        **kwargs
+    )
diff --git a/tools/build_rules/gtk_dependent.bzl b/tools/build_rules/gtk_dependent.bzl
index 0a21a9a..819ef83 100644
--- a/tools/build_rules/gtk_dependent.bzl
+++ b/tools/build_rules/gtk_dependent.bzl
@@ -1,9 +1,9 @@
 disable_gtk_binaries = True
 
 def gtk_dependent_cc_library(**kwargs):
-  if not disable_gtk_binaries:
-    native.cc_library(**kwargs)
+    if not disable_gtk_binaries:
+        native.cc_library(**kwargs)
 
 def gtk_dependent_cc_binary(**kwargs):
-  if not disable_gtk_binaries:
-    native.cc_binary(**kwargs)
+    if not disable_gtk_binaries:
+        native.cc_binary(**kwargs)
diff --git a/tools/build_rules/label.bzl b/tools/build_rules/label.bzl
index ff02327..1382e1a 100644
--- a/tools/build_rules/label.bzl
+++ b/tools/build_rules/label.bzl
@@ -2,4 +2,4 @@
 # Starlark provides them itself
 
 def expand_label(label):
-  return '%s' % label if ':' in label else '%s:%s' % (label, label.split('/')[-1])
+    return "%s" % label if ":" in label else "%s:%s" % (label, label.split("/")[-1])
diff --git a/tools/build_rules/select.bzl b/tools/build_rules/select.bzl
index 45ba612..3483360 100644
--- a/tools/build_rules/select.bzl
+++ b/tools/build_rules/select.bzl
@@ -28,32 +28,32 @@
 """
 
 def cpu_select(values):
-  if 'arm' in values:
-    new_values = {}
-    for cpu in values:
-      if cpu != 'arm':
-        new_values[cpu] = values[cpu]
-    new_values['armhf'] = values['arm']
-    new_values['roborio'] = values['arm']
-    new_values['cortex-m'] = values['arm']
-    values = new_values
-  for cpu in all_cpus:
-    if cpu not in values:
-      if 'else' in values:
-        values[cpu] = values['else']
-      else:
-        fail('Need to handle %s CPUs!' % cpu, 'values')
-  for key in values:
-    if key not in all_cpus and key != 'else':
-      fail('Not sure what a %s CPU is!' % key, 'values')
-  return select({
-    '@//tools:cpu_k8': values['amd64'],
-    '@//tools:cpu_roborio': values['roborio'],
-    '@//tools:cpu_armhf': values['armhf'],
-    '@//tools:cpu_cortex_m4f': values['cortex-m'],
-    '@//tools:cpu_cortex_m4f_k22': values['cortex-m'],
-    '@//tools:cpu_web': None,
-  })
+    if "arm" in values:
+        new_values = {}
+        for cpu in values:
+            if cpu != "arm":
+                new_values[cpu] = values[cpu]
+        new_values["armhf"] = values["arm"]
+        new_values["roborio"] = values["arm"]
+        new_values["cortex-m"] = values["arm"]
+        values = new_values
+    for cpu in all_cpus:
+        if cpu not in values:
+            if "else" in values:
+                values[cpu] = values["else"]
+            else:
+                fail("Need to handle %s CPUs!" % cpu, "values")
+    for key in values:
+        if key not in all_cpus and key != "else":
+            fail("Not sure what a %s CPU is!" % key, "values")
+    return select({
+        "@//tools:cpu_k8": values["amd64"],
+        "@//tools:cpu_roborio": values["roborio"],
+        "@//tools:cpu_armhf": values["armhf"],
+        "@//tools:cpu_cortex_m4f": values["cortex-m"],
+        "@//tools:cpu_cortex_m4f_k22": values["cortex-m"],
+        "@//tools:cpu_web": None,
+    })
 
 """A select wrapper for address space sizes.
 
@@ -63,18 +63,18 @@
 """
 
 def address_size_select(values):
-  if '32' not in values:
-    fail('Need to handle 32 bit addresses!', 'values')
-  if '64' not in values:
-    fail('Need to handle 64 bit addresses!', 'values')
-  return select({
-    '@//tools:cpu_k8': values['64'],
-    '@//tools:cpu_roborio': values['32'],
-    '@//tools:cpu_armhf': values['32'],
-    '@//tools:cpu_cortex_m4f': values['32'],
-    '@//tools:cpu_cortex_m4f_k22': values['32'],
-    '@//tools:cpu_web': None,
-  })
+    if "32" not in values:
+        fail("Need to handle 32 bit addresses!", "values")
+    if "64" not in values:
+        fail("Need to handle 64 bit addresses!", "values")
+    return select({
+        "@//tools:cpu_k8": values["64"],
+        "@//tools:cpu_roborio": values["32"],
+        "@//tools:cpu_armhf": values["32"],
+        "@//tools:cpu_cortex_m4f": values["32"],
+        "@//tools:cpu_cortex_m4f_k22": values["32"],
+        "@//tools:cpu_web": None,
+    })
 
 """A select wrapper for compilers.
 
@@ -85,12 +85,12 @@
 """
 
 def compiler_select(values):
-  if 'gcc' not in values:
-    fail('Need to handle gcc!', 'values')
-  if 'clang' not in values:
-    fail('Need to handle clang!', 'values')
-  return select({
-    '@//tools:compiler_gcc': values['gcc'],
-    '@//tools:compiler_clang': values['clang'],
-    '@//tools:compiler_emscripten': None,
-  })
+    if "gcc" not in values:
+        fail("Need to handle gcc!", "values")
+    if "clang" not in values:
+        fail("Need to handle clang!", "values")
+    return select({
+        "@//tools:compiler_gcc": values["gcc"],
+        "@//tools:compiler_clang": values["clang"],
+        "@//tools:compiler_emscripten": None,
+    })
diff --git a/tools/cpp/emscripten/defs.bzl b/tools/cpp/emscripten/defs.bzl
index e7a1c3a..e63d67e 100644
--- a/tools/cpp/emscripten/defs.bzl
+++ b/tools/cpp/emscripten/defs.bzl
@@ -9,43 +9,42 @@
     ]
     if html_shell:
         ctx.actions.expand_template(
-            output=html_out,
-            template=html_shell,
-            substitutions={
-                "{{{ SCRIPT }}}":
-                "<script async type=\"text/javascript\" src=\"" + basename +
-                ".js\"></script>",
-            })
+            output = html_out,
+            template = html_shell,
+            substitutions = {
+                "{{{ SCRIPT }}}": "<script async type=\"text/javascript\" src=\"" + basename +
+                                  ".js\"></script>",
+            },
+        )
     else:
         tar_outs.append(html_out)
 
     ctx.actions.run_shell(
-        outputs=tar_outs,
-        inputs=[tarfile],
-        command="tar xf " + tarfile.path + " -C \"" + html_out.dirname + "\"")
+        outputs = tar_outs,
+        inputs = [tarfile],
+        command = "tar xf " + tarfile.path + " -C \"" + html_out.dirname + "\"",
+    )
 
-    return [DefaultInfo(files=depset(tar_outs + [html_out]))]
-
+    return [DefaultInfo(files = depset(tar_outs + [html_out]))]
 
 emcc_expand_files = rule(
-    attrs={
+    attrs = {
         "html_shell": attr.label(
-            mandatory=False,
-            allow_single_file=True,
+            mandatory = False,
+            allow_single_file = True,
         ),
         "tarfile": attr.label(
-            mandatory=True,
-            allow_single_file=True,
+            mandatory = True,
+            allow_single_file = True,
         ),
     },
-    doc="""
+    doc = """
     Handles the intermediate processing to extra files from a tarball
     for emcc_binary. See emcc_binary for more detail.""",
-    implementation=_emcc_expand_files_impl,
+    implementation = _emcc_expand_files_impl,
 )
 
-
-def emcc_binary(name, srcs=[], linkopts=[], html_shell=None, **kwargs):
+def emcc_binary(name, srcs = [], linkopts = [], html_shell = None, **kwargs):
     """Produces a deployable set of WebAssembly files.
 
     Depending on the settings, the exact format of the output varies.
@@ -92,14 +91,15 @@
     if html_shell:
         tarfile = basename + ".js.tar"
     native.cc_binary(
-        name=tarfile,
-        srcs=srcs,
-        linkopts=linkopts,
-        restricted_to=["//tools:web"],
-        **kwargs)
+        name = tarfile,
+        srcs = srcs,
+        linkopts = linkopts,
+        restricted_to = ["//tools:web"],
+        **kwargs
+    )
     emcc_expand_files(
-        name=basename,
-        html_shell=html_shell,
-        tarfile=tarfile,
-        restricted_to=["//tools:web"],
+        name = basename,
+        html_shell = html_shell,
+        tarfile = tarfile,
+        restricted_to = ["//tools:web"],
     )