Move wpilib_interface

I'm tired of typing the useless folder.

y2017's still doesn't compile, but it didn't before anyways.

Change-Id: I2c454c5a0efae743274e5c3f759a1ab712c70847
diff --git a/NO_BUILD_AMD64 b/NO_BUILD_AMD64
index f4faeab..6baa7c3 100644
--- a/NO_BUILD_AMD64
+++ b/NO_BUILD_AMD64
@@ -4,23 +4,23 @@
 -//third_party/allwpilib_2017/...
 -//third_party/ntcore_2017/...
 -//frc971/wpilib/...
--//y2012/wpilib/...
+-//y2012:wpilib_interface
 -//y2012:download
--//y2014/wpilib/...
+-//y2014:wpilib_interface
 -//y2014:download
--//y2014_bot3/wpilib/...
+-//y2014_bot3:wpilib_interface
 -//y2014_bot3:download_stripped
--//y2015/wpilib/...
+-//y2015:wpilib_interface
 -//y2015:download
--//y2015_bot3/wpilib/...
+-//y2015_bot3:wpilib_interface
 -//y2015_bot3:download
--//y2016/wpilib/...
+-//y2016:wpilib_interface
 -//y2016:download
 -//y2016:download_stripped
--//y2016_bot3/wpilib/...
+-//y2016_bot3:wpilib_interface
 -//y2016_bot3:download
 -//y2016_bot3:download_stripped
 -//y2016_bot3/...
--//y2016_bot4/wpilib/...
+-//y2016_bot4:wpilib_interface
 -//y2016_bot4:download
 -//y2016_bot4:download_stripped
diff --git a/y2012/BUILD b/y2012/BUILD
index bbdab0a..5dac709 100644
--- a/y2012/BUILD
+++ b/y2012/BUILD
@@ -23,12 +23,46 @@
   name = 'download',
   start_srcs = [
     ':joystick_reader',
+    ':wpilib_interface',
     '//y2012/control_loops/drivetrain',
     '//y2012/control_loops/accessories',
-    '//y2012/wpilib:wpilib_interface',
     '//aos:prime_start_binaries',
   ],
   srcs = [
     '//aos:prime_binaries',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:log_interval',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/common:stl_mutex',
+    '//aos/common:time',
+    '//aos/linux_code:init',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:dma',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//third_party:wpilib',
+    '//y2012/control_loops/accessories:accessories_queue',
+  ],
+)
diff --git a/y2012/wpilib/BUILD b/y2012/wpilib/BUILD
deleted file mode 100644
index b2e6934..0000000
--- a/y2012/wpilib/BUILD
+++ /dev/null
@@ -1,35 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common/controls:control_loop',
-    '//aos/common/logging',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:log_interval',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/common:stl_mutex',
-    '//aos/common:time',
-    '//aos/linux_code:init',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:dma',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//third_party:wpilib',
-    '//y2012/control_loops/accessories:accessories_queue',
-  ],
-)
diff --git a/y2012/wpilib/wpilib_interface.cc b/y2012/wpilib_interface.cc
similarity index 100%
rename from y2012/wpilib/wpilib_interface.cc
rename to y2012/wpilib_interface.cc
diff --git a/y2014/BUILD b/y2014/BUILD
index 2938aa6..07b9169 100644
--- a/y2014/BUILD
+++ b/y2014/BUILD
@@ -47,13 +47,13 @@
   start_srcs = [
     ':hot_goal_reader',
     ':joystick_reader',
+    ':wpilib_interface',
     '//y2014/control_loops/drivetrain:drivetrain',
     '//y2014/control_loops/claw:claw',
     '//y2014/control_loops/shooter:shooter',
     '//y2014/autonomous:auto',
     '//y2014/actors:binaries',
     '//aos:prime_start_binaries',
-    '//y2014/wpilib:wpilib_interface',
   ],
   srcs = [
     '//aos:prime_binaries',
@@ -73,3 +73,41 @@
     '//y2014/queues:hot_goal',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    ':constants',
+    '//aos/linux_code:init',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//third_party:wpilib',
+    '//y2014/queues:auto_mode',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//y2014/control_loops/shooter:shooter_queue',
+    '//y2014/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:dma',
+  ],
+)
diff --git a/y2014/wpilib/BUILD b/y2014/wpilib/BUILD
deleted file mode 100644
index 048f26c..0000000
--- a/y2014/wpilib/BUILD
+++ /dev/null
@@ -1,39 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/linux_code:init',
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//third_party:wpilib',
-    '//y2014:constants',
-    '//y2014/queues:auto_mode',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//y2014/control_loops/shooter:shooter_queue',
-    '//y2014/control_loops/claw:claw_queue',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:dma',
-  ],
-)
diff --git a/y2014/wpilib/wpilib_interface.cc b/y2014/wpilib_interface.cc
similarity index 100%
rename from y2014/wpilib/wpilib_interface.cc
rename to y2014/wpilib_interface.cc
diff --git a/y2014_bot3/BUILD b/y2014_bot3/BUILD
index 1c07423..389e197 100644
--- a/y2014_bot3/BUILD
+++ b/y2014_bot3/BUILD
@@ -24,14 +24,48 @@
   name = 'download_stripped',
   start_srcs = [
     ':joystick_reader.stripped',
+    ':wpilib_interface.stripped',
     '//aos:prime_start_binaries_stripped',
     '//y2014_bot3/autonomous:auto.stripped',
     '//y2014_bot3/control_loops/drivetrain:drivetrain.stripped',
     '//y2014_bot3/control_loops/rollers:rollers.stripped',
-    '//y2014_bot3/wpilib:wpilib_interface.stripped',
 
   ],
   srcs = [
     '//aos:prime_binaries_stripped',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:dma',
+    '//y2014_bot3/autonomous:auto_queue',
+    '//y2014_bot3/control_loops/rollers:rollers_lib',
+    '//y2014_bot3/control_loops/drivetrain:drivetrain_base',
+  ],
+)
diff --git a/y2014_bot3/wpilib/BUILD b/y2014_bot3/wpilib/BUILD
deleted file mode 100644
index d6562c2..0000000
--- a/y2014_bot3/wpilib/BUILD
+++ /dev/null
@@ -1,35 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/linux_code:init',
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//third_party:wpilib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:dma',
-    '//y2014_bot3/autonomous:auto_queue',
-    '//y2014_bot3/control_loops/rollers:rollers_lib',
-    '//y2014_bot3/control_loops/drivetrain:drivetrain_base',
-  ],
-)
diff --git a/y2014_bot3/wpilib/wpilib_interface.cc b/y2014_bot3/wpilib_interface.cc
similarity index 100%
rename from y2014_bot3/wpilib/wpilib_interface.cc
rename to y2014_bot3/wpilib_interface.cc
diff --git a/y2015/BUILD b/y2015/BUILD
index 748fde6..da0db7e 100644
--- a/y2015/BUILD
+++ b/y2015/BUILD
@@ -62,11 +62,50 @@
     '//y2015/control_loops/claw:claw',
     '//y2015/autonomous:auto',
     ':joystick_reader',
+    ':wpilib_interface',
     '//y2015/http_status:http_status',
     '//y2015/actors:binaries',
-    '//y2015/wpilib:wpilib_interface',
   ],
   srcs = [
     '//aos:prime_binaries',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    ':constants',
+    '//aos/linux_code:init',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//y2015/control_loops/claw:claw_queue',
+    '//y2015/autonomous:auto_queue',
+    '//frc971/autonomous:auto_queue',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:dma',
+  ],
+)
diff --git a/y2015/wpilib/BUILD b/y2015/wpilib/BUILD
deleted file mode 100644
index dc3196f..0000000
--- a/y2015/wpilib/BUILD
+++ /dev/null
@@ -1,40 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/linux_code:init',
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//third_party:wpilib',
-    '//y2015:constants',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//y2015/control_loops/fridge:fridge_queue',
-    '//y2015/control_loops/claw:claw_queue',
-    '//y2015/autonomous:auto_queue',
-    '//frc971/autonomous:auto_queue',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:dma',
-  ],
-)
diff --git a/y2015/wpilib/wpilib_interface.cc b/y2015/wpilib_interface.cc
similarity index 100%
rename from y2015/wpilib/wpilib_interface.cc
rename to y2015/wpilib_interface.cc
diff --git a/y2015_bot3/BUILD b/y2015_bot3/BUILD
index 03d50c0..25b60b8 100644
--- a/y2015_bot3/BUILD
+++ b/y2015_bot3/BUILD
@@ -27,12 +27,48 @@
     '//aos:prime_start_binaries',
     '//y2015_bot3/control_loops/intake:intake',
     ':joystick_reader',
+    ':wpilib_interface',
     '//y2015_bot3/control_loops/elevator:elevator',
     '//y2015_bot3/autonomous:auto',
     '//y2015_bot3/actors:binaries',
-    '//y2015_bot3/wpilib:wpilib_interface',
   ],
   srcs = [
     '//aos:prime_binaries',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:log_interval',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/common:stl_mutex',
+    '//aos/common:time',
+    '//aos/linux_code:init',
+    '//frc971/control_loops/drivetrain:drivetrain_lib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:dma',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//third_party:wpilib',
+    '//y2015_bot3/autonomous:auto_queue',
+    '//y2015_bot3/control_loops/drivetrain:drivetrain_base',
+    '//y2015_bot3/control_loops/elevator:elevator_lib',
+    '//y2015_bot3/control_loops/intake:intake_lib',
+  ],
+)
diff --git a/y2015_bot3/wpilib/BUILD b/y2015_bot3/wpilib/BUILD
deleted file mode 100644
index dbf03b7..0000000
--- a/y2015_bot3/wpilib/BUILD
+++ /dev/null
@@ -1,37 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common/controls:control_loop',
-    '//aos/common/logging',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:log_interval',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/common:stl_mutex',
-    '//aos/common:time',
-    '//aos/linux_code:init',
-    '//frc971/control_loops/drivetrain:drivetrain_lib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:dma',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//third_party:wpilib',
-    '//y2015_bot3/autonomous:auto_queue',
-    '//y2015_bot3/control_loops/drivetrain:drivetrain_base',
-    '//y2015_bot3/control_loops/elevator:elevator_lib',
-    '//y2015_bot3/control_loops/intake:intake_lib',
-  ],
-)
diff --git a/y2015_bot3/wpilib/wpilib_interface.cc b/y2015_bot3/wpilib_interface.cc
similarity index 100%
rename from y2015_bot3/wpilib/wpilib_interface.cc
rename to y2015_bot3/wpilib_interface.cc
diff --git a/y2016/BUILD b/y2016/BUILD
index 4a2e768..a168496 100644
--- a/y2016/BUILD
+++ b/y2016/BUILD
@@ -52,6 +52,7 @@
   name = 'download',
   start_srcs = [
     ':joystick_reader',
+    ':wpilib_interface',
     '//aos:prime_start_binaries',
     '//y2016/control_loops/drivetrain:drivetrain',
     '//y2016/control_loops/superstructure:superstructure',
@@ -60,7 +61,6 @@
     '//y2016/actors:autonomous_action',
     '//y2016/actors:superstructure_action',
     '//y2016/actors:vision_align_action',
-    '//y2016/wpilib:wpilib_interface',
     '//y2016/vision:target_receiver',
   ],
   srcs = [
@@ -75,6 +75,7 @@
   name = 'download_stripped',
   start_srcs = [
     ':joystick_reader.stripped',
+    ':wpilib_interface.stripped',
     '//aos:prime_start_binaries_stripped',
     '//y2016/control_loops/drivetrain:drivetrain.stripped',
     '//y2016/control_loops/superstructure:superstructure.stripped',
@@ -83,7 +84,6 @@
     '//y2016/actors:autonomous_action.stripped',
     '//y2016/actors:superstructure_action.stripped',
     '//y2016/actors:vision_align_action.stripped',
-    '//y2016/wpilib:wpilib_interface.stripped',
     '//y2016/vision:target_receiver.stripped',
   ],
   srcs = [
@@ -93,3 +93,45 @@
     '//y2016/dashboard:www_files',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    ':constants',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//aos/common:math',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/linux_code:init',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:ADIS16448',
+    '//frc971/wpilib:dma',
+    '//y2016/control_loops/drivetrain:polydrivetrain_plants',
+    '//y2016/control_loops/shooter:shooter_queue',
+    '//y2016/control_loops/superstructure:superstructure_queue',
+    '//y2016/queues:ball_detector',
+    '//y2016/actors:autonomous_action_queue',
+  ],
+)
diff --git a/y2016/wpilib/BUILD b/y2016/wpilib/BUILD
deleted file mode 100644
index a0c0930..0000000
--- a/y2016/wpilib/BUILD
+++ /dev/null
@@ -1,43 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//aos/common:math',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/linux_code:init',
-    '//third_party:wpilib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:ADIS16448',
-    '//frc971/wpilib:dma',
-    '//y2016:constants',
-    '//y2016/control_loops/drivetrain:polydrivetrain_plants',
-    '//y2016/control_loops/shooter:shooter_queue',
-    '//y2016/control_loops/superstructure:superstructure_queue',
-    '//y2016/queues:ball_detector',
-    '//y2016/actors:autonomous_action_queue',
-  ],
-)
diff --git a/y2016/wpilib/wpilib_interface.cc b/y2016/wpilib_interface.cc
similarity index 100%
rename from y2016/wpilib/wpilib_interface.cc
rename to y2016/wpilib_interface.cc
diff --git a/y2016_bot3/BUILD b/y2016_bot3/BUILD
index 1d89c1a..bbfef34 100644
--- a/y2016_bot3/BUILD
+++ b/y2016_bot3/BUILD
@@ -26,11 +26,11 @@
   name = 'download',
   start_srcs = [
     ':joystick_reader',
+    ':wpilib_interface',
     '//aos:prime_start_binaries',
     '//y2016_bot3/control_loops/drivetrain:drivetrain',
     '//y2016_bot3/control_loops/intake:intake',
     '//y2016_bot3/actors:autonomous_action',
-    '//y2016_bot3/wpilib:wpilib_interface',
   ],
   srcs = [
     '//aos:prime_binaries',
@@ -41,13 +41,55 @@
   name = 'download_stripped',
   start_srcs = [
     ':joystick_reader.stripped',
+    ':wpilib_interface.stripped',
     '//aos:prime_start_binaries_stripped',
     '//y2016_bot3/control_loops/drivetrain:drivetrain.stripped',
     '//y2016_bot3/control_loops/intake:intake.stripped',
     '//y2016_bot3/actors:autonomous_action.stripped',
-    '//y2016_bot3/wpilib:wpilib_interface.stripped',
   ],
   srcs = [
     '//aos:prime_binaries_stripped',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//aos/common:math',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/linux_code:init',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:ADIS16448',
+    '//frc971/wpilib:dma',
+    '//y2016_bot3/control_loops/drivetrain:polydrivetrain_plants',
+    '//y2016_bot3/control_loops/intake:intake_queue',
+    '//y2016_bot3/queues:ball_detector',
+    '//y2016_bot3/actors:autonomous_action_queue',
+    '//y2016_bot3/control_loops/intake:intake_lib',
+    '//y2016_bot3/control_loops/drivetrain:drivetrain_base',
+  ],
+)
diff --git a/y2016_bot3/wpilib/BUILD b/y2016_bot3/wpilib/BUILD
deleted file mode 100644
index 5fab1a4..0000000
--- a/y2016_bot3/wpilib/BUILD
+++ /dev/null
@@ -1,43 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//aos/common:math',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/linux_code:init',
-    '//third_party:wpilib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:ADIS16448',
-    '//frc971/wpilib:dma',
-    '//y2016_bot3/control_loops/drivetrain:polydrivetrain_plants',
-    '//y2016_bot3/control_loops/intake:intake_queue',
-    '//y2016_bot3/queues:ball_detector',
-    '//y2016_bot3/actors:autonomous_action_queue',
-    '//y2016_bot3/control_loops/intake:intake_lib',
-    '//y2016_bot3/control_loops/drivetrain:drivetrain_base',
-  ],
-)
diff --git a/y2016_bot3/wpilib/wpilib_interface.cc b/y2016_bot3/wpilib_interface.cc
similarity index 100%
rename from y2016_bot3/wpilib/wpilib_interface.cc
rename to y2016_bot3/wpilib_interface.cc
diff --git a/y2016_bot4/BUILD b/y2016_bot4/BUILD
index c003d4a..deb763a 100644
--- a/y2016_bot4/BUILD
+++ b/y2016_bot4/BUILD
@@ -23,9 +23,9 @@
   name = 'download',
   start_srcs = [
     ':joystick_reader',
+    ':wpilib_interface',
     '//aos:prime_start_binaries',
     '//y2016_bot4/control_loops/drivetrain:drivetrain',
-    '//y2016_bot4/wpilib:wpilib_interface',
   ],
   srcs = [
     '//aos:prime_binaries',
@@ -36,12 +36,50 @@
   name = 'download_stripped',
   start_srcs = [
     ':joystick_reader.stripped',
+    ':wpilib_interface.stripped',
     '//aos:prime_start_binaries_stripped',
     '//y2016_bot4/control_loops/drivetrain:drivetrain.stripped',
-    '//y2016_bot4/wpilib:wpilib_interface.stripped',
   ],
   srcs = [
     '//aos:prime_binaries_stripped',
   ],
   default_target = 'roboRIO-6971-frc.local',
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//aos/common:math',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/linux_code:init',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:ADIS16448',
+    '//frc971/wpilib:dma',
+    '//y2016_bot4/control_loops/drivetrain:polydrivetrain_plants',
+    '//y2016_bot4/control_loops/drivetrain:drivetrain_base',
+  ],
+)
diff --git a/y2016_bot4/wpilib/BUILD b/y2016_bot4/wpilib/BUILD
deleted file mode 100644
index 8ecfd89..0000000
--- a/y2016_bot4/wpilib/BUILD
+++ /dev/null
@@ -1,39 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//aos/common:math',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/linux_code:init',
-    '//third_party:wpilib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:ADIS16448',
-    '//frc971/wpilib:dma',
-    '//y2016_bot4/control_loops/drivetrain:polydrivetrain_plants',
-    '//y2016_bot4/control_loops/drivetrain:drivetrain_base',
-  ],
-)
diff --git a/y2016_bot4/wpilib/wpilib_interface.cc b/y2016_bot4/wpilib_interface.cc
similarity index 100%
rename from y2016_bot4/wpilib/wpilib_interface.cc
rename to y2016_bot4/wpilib_interface.cc
diff --git a/y2017/BUILD b/y2017/BUILD
index 8bb771c..beaa043 100644
--- a/y2017/BUILD
+++ b/y2017/BUILD
@@ -16,3 +16,43 @@
     '//y2017/control_loops/drivetrain:polydrivetrain_plants',
   ],
 )
+
+cc_binary(
+  name = 'wpilib_interface',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    ':constants',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//aos/common:math',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:log_interval',
+    '//aos/common:time',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/messages:robot_state',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:wrapping_counter',
+    '//aos/linux_code:init',
+    '//third_party:wpilib',
+    '//frc971/control_loops/drivetrain:drivetrain_queue',
+    '//frc971/control_loops:queues',
+    '//frc971/wpilib:joystick_sender',
+    '//frc971/wpilib:loop_output_handler',
+    '//frc971/wpilib:buffered_pcm',
+    '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:dma_edge_counting',
+    '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
+    '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_interface',
+    '//frc971/wpilib:pdp_fetcher',
+    '//frc971/wpilib:ADIS16448',
+    '//frc971/wpilib:dma',
+    '//y2017/control_loops/drivetrain:polydrivetrain_plants',
+    '//y2017/control_loops/superstructure:superstructure_queue',
+    '//y2017/actors:autonomous_action_queue',
+  ],
+)
diff --git a/y2017/wpilib/BUILD b/y2017/wpilib/BUILD
deleted file mode 100644
index 3353ccb..0000000
--- a/y2017/wpilib/BUILD
+++ /dev/null
@@ -1,41 +0,0 @@
-package(default_visibility = ['//visibility:public'])
-
-cc_binary(
-  name = 'wpilib_interface',
-  srcs = [
-    'wpilib_interface.cc',
-  ],
-  deps = [
-    '//aos/common:stl_mutex',
-    '//aos/common/logging',
-    '//aos/common:math',
-    '//aos/common/controls:control_loop',
-    '//aos/common/util:log_interval',
-    '//aos/common:time',
-    '//aos/common/logging:queue_logging',
-    '//aos/common/messages:robot_state',
-    '//aos/common/util:phased_loop',
-    '//aos/common/util:wrapping_counter',
-    '//aos/linux_code:init',
-    '//third_party:wpilib',
-    '//frc971/control_loops/drivetrain:drivetrain_queue',
-    '//frc971/control_loops:queues',
-    '//frc971/wpilib:joystick_sender',
-    '//frc971/wpilib:loop_output_handler',
-    '//frc971/wpilib:buffered_pcm',
-    '//frc971/wpilib:gyro_sender',
-    '//frc971/wpilib:dma_edge_counting',
-    '//frc971/wpilib:interrupt_edge_counting',
-    '//frc971/wpilib:wpilib_robot_base',
-    '//frc971/wpilib:encoder_and_potentiometer',
-    '//frc971/wpilib:logging_queue',
-    '//frc971/wpilib:wpilib_interface',
-    '//frc971/wpilib:pdp_fetcher',
-    '//frc971/wpilib:ADIS16448',
-    '//frc971/wpilib:dma',
-    '//y2017:constants',
-    '//y2017/control_loops/drivetrain:polydrivetrain_plants',
-    '//y2017/control_loops/superstructure:superstructure_queue',
-    '//y2017/actors:autonomous_action_queue',
-  ],
-)
diff --git a/y2017/wpilib/wpilib_interface.cc b/y2017/wpilib_interface.cc
similarity index 100%
rename from y2017/wpilib/wpilib_interface.cc
rename to y2017/wpilib_interface.cc