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"],
     )
