Finish auto-converting most of the gyp files.

I've also started writing down which ones need manual work.

Change-Id: I442782e1e3352e0de32b612f1bd2c167f231495a
diff --git a/aos/common/BUILD b/aos/common/BUILD
index 32b0f3b..55f1a03 100644
--- a/aos/common/BUILD
+++ b/aos/common/BUILD
@@ -1,36 +1,41 @@
-"""
-aos_queue(
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
   name = 'test_queue',
   srcs = [
     'test_queue.q',
   ],
 )
-"""
 
 cc_library(
   name = 'queue_testutils',
   srcs = [
     'queue_testutils.cc',
   ],
+  hdrs = [
+    'queue_testutils.h',
+  ],
   deps = [
+    '//aos/common/logging',
     ':once',
-    ':mutex',
-    '//aos/build:logging',
     '//aos/linux_code/ipc_lib:shared_mem',
+    ':mutex',
   ],
 )
 
 cc_library(
   name = 'time',
-  hdrs = [
-    'time.h',
-  ],
   srcs = [
     'time.cc',
   ],
+  hdrs = [
+    'time.h',
+  ],
   deps = [
+    '//aos/common/logging:logging_interface',
     ':mutex',
-    '//aos/build:logging_interface',
   ],
 )
 
@@ -39,4 +44,219 @@
   srcs = [
     'queue_types.cc',
   ],
+  hdrs = [
+    'queue_types.h',
+  ],
+  deps = [
+    '//aos/common/logging:logging_interface',
+    '//aos/linux_code/ipc_lib:shared_mem',
+    '//aos/linux_code/ipc_lib:core_lib',
+    ':mutex',
+    ':time',
+  ],
+)
+
+cc_test(
+  name = 'queue_types_test',
+  srcs = [
+    'queue_types_test.cc',
+  ],
+  deps = [
+    ':queue_types',
+    '//third_party/gtest',
+    ':test_queue',
+    '//aos/common/logging',
+    ':queue_testutils',
+  ],
+)
+
+cc_library(
+  name = 'queues',
+  srcs = [
+    'queue.cc',
+  ],
+  hdrs = [
+    'queue.h',
+  ],
+  deps = [
+    '//aos/linux_code/ipc_lib:queue',
+    ':time',
+  ],
+)
+
+cc_library(
+  name = 'scoped_fd',
+  deps = [
+    '//aos/common/logging',
+  ],
+)
+
+cc_test(
+  name = 'queue_test',
+  srcs = [
+    'queue_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':queue_testutils',
+    ':test_queue',
+    '//aos/common/util:thread',
+    ':die',
+  ],
+)
+
+cc_test(
+  name = 'type_traits_test',
+  srcs = [
+    'type_traits_test.cpp',
+  ],
+  deps = [
+    '//third_party/gtest',
+  ],
+)
+
+cc_library(
+  name = 'gtest_prod',
+  deps = [
+    '//third_party/gtest_prod',
+  ],
+)
+
+cc_library(
+  name = 'once',
+  deps = [
+    '//third_party/gtest_prod',
+  ],
+)
+
+cc_test(
+  name = 'once_test',
+  srcs = [
+    'once_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':once',
+  ],
+)
+
+cc_test(
+  name = 'time_test',
+  srcs = [
+    'time_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':time',
+    '//aos/common/logging',
+    '//aos/common/util:death_test_log_implementation',
+  ],
+)
+
+cc_library(
+  name = 'die',
+  srcs = [
+    'die.cc',
+  ],
+  hdrs = [
+    'die.h',
+  ],
+  deps = [
+    '//aos/common/libc:aos_strerror',
+  ],
+)
+
+cc_test(
+  name = 'queue_testutils_test',
+  srcs = [
+    'queue_testutils_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':queue_testutils',
+    '//aos/common/logging',
+  ],
+)
+
+cc_test(
+  name = 'mutex_test',
+  srcs = [
+    'mutex_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':mutex',
+    ':die',
+    '//aos/common/logging',
+    '//aos/common/util:death_test_log_implementation',
+    '//aos/common/util:thread',
+    '//aos/common:time',
+    ':queue_testutils',
+  ],
+)
+
+cc_test(
+  name = 'event_test',
+  srcs = [
+    'event_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':event',
+    ':queue_testutils',
+    ':time',
+  ],
+)
+
+cc_test(
+  name = 'condition_test',
+  srcs = [
+    'condition_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':condition',
+    '//aos/common/util:thread',
+    ':time',
+    ':mutex',
+    '//aos/common/logging',
+    ':queue_testutils',
+    '//aos/linux_code/ipc_lib:core_lib',
+    '//aos/linux_code/ipc_lib:aos_sync',
+    ':die',
+    '//aos/common/util:thread',
+  ],
+)
+
+cc_test(
+  name = 'die_test',
+  srcs = [
+    'die_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':die',
+  ],
+)
+
+cc_library(
+  name = 'stl_mutex',
+  deps = [
+    '//aos/linux_code/ipc_lib:aos_sync',
+    '//aos/common/logging',
+  ],
+)
+
+cc_test(
+  name = 'stl_mutex_test',
+  srcs = [
+    'stl_mutex_test.cc',
+  ],
+  deps = [
+    ':stl_mutex',
+    '//third_party/gtest',
+    ':queue_testutils',
+    '//aos/common/util:thread',
+    ':die',
+  ],
 )
diff --git a/aos/common/actions/BUILD b/aos/common/actions/BUILD
new file mode 100644
index 0000000..22db816
--- /dev/null
+++ b/aos/common/actions/BUILD
@@ -0,0 +1,59 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_library(
+  name = 'action_lib',
+  srcs = [
+    'actions.cc',
+    'actor.cc',
+  ],
+  hdrs = [
+    'actions.h',
+    'actor.h',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/common:queues',
+    '//aos/common/logging:queue_logging',
+    '//aos/common:time',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:phased_loop',
+  ],
+)
+
+queue_library(
+  name = 'action_queue',
+  srcs = [
+    'actions.q',
+  ],
+)
+
+queue_library(
+  name = 'test_action_queue',
+  srcs = [
+    'test_action.q',
+  ],
+  deps = [
+    ':action_queue',
+  ],
+)
+
+cc_test(
+  name = 'action_test',
+  srcs = [
+    'action_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':action_lib',
+    ':test_action_queue',
+    '//aos/common:queue_testutils',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+    '//aos/common:queues',
+    '//aos/common:time',
+    ':action_queue',
+    '//aos/linux_code/ipc_lib:event',
+  ],
+)
diff --git a/aos/common/common.gyp b/aos/common/common.gyp
index 461200e..17df955 100644
--- a/aos/common/common.gyp
+++ b/aos/common/common.gyp
@@ -4,7 +4,7 @@
       'target_name': 'test_queue',
       'type': 'static_library',
       'sources': [
-        '<(AOS)/common/test_queue.q',
+        'test_queue.q',
       ],
       'variables': {
         'header_path': 'aos/common',
diff --git a/aos/common/controls/BUILD b/aos/common/controls/BUILD
new file mode 100644
index 0000000..c021714
--- /dev/null
+++ b/aos/common/controls/BUILD
@@ -0,0 +1,65 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_library(
+  name = 'replay_control_loop',
+  deps = [
+    '//aos/common:queues',
+    ':control_loop',
+    '//aos/linux_code/logging:log_replay',
+    '//aos/common/logging:queue_logging',
+    '//aos/common:time',
+  ],
+)
+
+cc_library(
+  name = 'control_loop_test',
+  srcs = [
+    'control_loop_test.cc',
+  ],
+  hdrs = [
+    'control_loop_test.h',
+  ],
+  deps = [
+    '//aos/common:time',
+    '//aos/common/messages:robot_state',
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+  ],
+)
+
+cc_library(
+  name = 'polytope',
+  deps = [
+    '//third_party/eigen',
+    '//third_party/libcdd',
+  ],
+)
+
+queue_library(
+  name = 'control_loop_queues',
+  srcs = [
+    'control_loops.q',
+  ],
+)
+
+cc_library(
+  name = 'control_loop',
+  srcs = [
+    'control_loop.cc',
+  ],
+  hdrs = [
+    'control_loop.h',
+  ],
+  deps = [
+    '//aos/common/messages:robot_state',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common:time',
+    ':control_loop_queues',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/util:log_interval',
+    '//aos/common:queues',
+  ],
+)
diff --git a/aos/common/controls/controls.gyp b/aos/common/controls/controls.gyp
index 4e0bc79..8af66be 100644
--- a/aos/common/controls/controls.gyp
+++ b/aos/common/controls/controls.gyp
@@ -57,7 +57,7 @@
     {
       'target_name': 'control_loop_queues',
       'type': 'static_library',
-      'sources': [ '<(AOS)/common/controls/control_loops.q' ],
+      'sources': [ 'control_loops.q' ],
       'variables': {
         'header_path': 'aos/common/controls',
       },
diff --git a/aos/common/input/BUILD b/aos/common/input/BUILD
new file mode 100644
index 0000000..2539f55
--- /dev/null
+++ b/aos/common/input/BUILD
@@ -0,0 +1,14 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'driver_station_data',
+  srcs = [
+    'driver_station_data.cc',
+  ],
+  hdrs = [
+    'driver_station_data.h',
+  ],
+  deps = [
+    '//aos/common/messages:robot_state',
+  ],
+)
diff --git a/aos/common/libc/BUILD b/aos/common/libc/BUILD
index fb27f3a..ad88f9d 100644
--- a/aos/common/libc/BUILD
+++ b/aos/common/libc/BUILD
@@ -5,6 +5,9 @@
   srcs = [
     'aos_strsignal.cc',
   ],
+  hdrs = [
+    'aos_strsignal.h',
+  ],
   deps = [
     '//aos/common/logging:logging_interface',
   ],
@@ -18,7 +21,7 @@
   deps = [
     ':aos_strsignal',
     '//third_party/gtest',
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
   ],
 )
 
@@ -27,6 +30,9 @@
   srcs = [
     'dirname.cc',
   ],
+  hdrs = [
+    'dirname.h',
+  ],
 )
 
 cc_test(
@@ -35,6 +41,7 @@
     'dirname_test.cc',
   ],
   deps = [
+    ':dirname',
     '//third_party/gtest',
   ],
 )
@@ -44,6 +51,9 @@
   srcs = [
     'aos_strerror.cc',
   ],
+  hdrs = [
+    'aos_strerror.h',
+  ],
 )
 
 cc_test(
diff --git a/aos/common/logging/BUILD b/aos/common/logging/BUILD
index 181bcd5..db7f365 100644
--- a/aos/common/logging/BUILD
+++ b/aos/common/logging/BUILD
@@ -1,27 +1,43 @@
 package(default_visibility = ['//visibility:public'])
 
-cc_library(
-  name = 'logging_interface',
+cc_test(
+  name = 'logging_impl_test',
   srcs = [
-    'logging_interface.cc',
+    'logging_impl_test.cc',
   ],
   deps = [
-    '//aos/linux_code/logging:linux_interface',
-    '//aos/common:die',
-    '//aos/common/libc:aos_strerror',
+    '//third_party/gtest',
+    '//aos/common/logging',
   ],
 )
 
 cc_library(
-  name = 'logging',
+  name = 'queue_logging',
   srcs = [
-    'logging_impl.cc',
+    'queue_logging.cc',
+  ],
+  hdrs = [
+    'queue_logging.h',
   ],
   deps = [
-    '//aos/linux_code/logging:linux_logging',
-    '//aos/common:time',
-    '//aos/common:once',
-    ':logging_interface',
+    '//aos/common/logging',
+    '//aos/common:die',
     '//aos/common:queue_types',
   ],
 )
+
+cc_library(
+  name = 'matrix_logging',
+  srcs = [
+    'matrix_logging.cc',
+  ],
+  hdrs = [
+    'matrix_logging.h',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/common:die',
+    '//aos/common:queue_types',
+    '//third_party/eigen',
+  ],
+)
diff --git a/aos/common/messages/BUILD b/aos/common/messages/BUILD
new file mode 100644
index 0000000..dc125dd
--- /dev/null
+++ b/aos/common/messages/BUILD
@@ -0,0 +1,10 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'robot_state',
+  srcs = [
+    'robot_state.q',
+  ],
+)
diff --git a/aos/common/network/BUILD b/aos/common/network/BUILD
new file mode 100644
index 0000000..a452e8f
--- /dev/null
+++ b/aos/common/network/BUILD
@@ -0,0 +1,37 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'team_number',
+  srcs = [
+    'team_number.cc',
+  ],
+  hdrs = [
+    'team_number.h',
+  ],
+  deps = [
+    '//aos/linux_code:configuration',
+    '//aos/common:once',
+    '//aos/common/logging',
+    '//aos/common/util:string_to_num',
+  ],
+)
+
+cc_library(
+  name = 'socket',
+  srcs = [
+    'receive_socket.cc',
+    'send_socket.cc',
+    'socket.cc',
+  ],
+  hdrs = [
+    'receive_socket.h',
+    'send_socket.h',
+    'socket.h',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/common:time',
+    '//aos/common/util:inet_addr',
+    '//aos/linux_code:configuration',
+  ],
+)
diff --git a/aos/common/util/BUILD b/aos/common/util/BUILD
new file mode 100644
index 0000000..2409e00
--- /dev/null
+++ b/aos/common/util/BUILD
@@ -0,0 +1,148 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'run_command',
+  srcs = [
+    'run_command.cc',
+  ],
+  hdrs = [
+    'run_command.h',
+  ],
+  deps = [
+    '//aos/common/logging:logging_interface',
+  ],
+)
+
+cc_test(
+  name = 'run_command_test',
+  srcs = [
+    'run_command_test.cc',
+  ],
+  deps = [
+    ':run_command',
+    '//third_party/gtest',
+    '//aos/common/logging',
+    ':thread',
+  ],
+)
+
+cc_library(
+  name = 'death_test_log_implementation',
+  deps = [
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'inet_addr',
+  srcs = [
+    'inet_addr.cc',
+  ],
+  hdrs = [
+    'inet_addr.h',
+  ],
+)
+
+cc_library(
+  name = 'phased_loop',
+  srcs = [
+    'phased_loop.cc',
+  ],
+  hdrs = [
+    'phased_loop.h',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/common:time',
+  ],
+)
+
+cc_library(
+  name = 'log_interval',
+  deps = [
+    '//aos/common:time',
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'string_to_num',
+)
+
+cc_test(
+  name = 'string_to_num_test',
+  srcs = [
+    'string_to_num_test.cc',
+  ],
+  deps = [
+    ':string_to_num',
+    '//third_party/gtest',
+  ],
+)
+
+cc_library(
+  name = 'thread',
+  srcs = [
+    'thread.cc',
+  ],
+  hdrs = [
+    'thread.h',
+  ],
+)
+
+cc_library(
+  name = 'trapezoid_profile',
+  srcs = [
+    'trapezoid_profile.cc',
+  ],
+  hdrs = [
+    'trapezoid_profile.h',
+  ],
+  deps = [
+    '//third_party/eigen',
+    '//aos/common:time',
+    '//aos/common/logging',
+  ],
+)
+
+cc_test(
+  name = 'trapezoid_profile_test',
+  srcs = [
+    'trapezoid_profile_test.cc',
+  ],
+  deps = [
+    ':trapezoid_profile',
+    '//third_party/gtest',
+  ],
+)
+
+cc_library(
+  name = 'wrapping_counter',
+  srcs = [
+    'wrapping_counter.cc',
+  ],
+  hdrs = [
+    'wrapping_counter.h',
+  ],
+)
+
+cc_test(
+  name = 'wrapping_counter_test',
+  srcs = [
+    'wrapping_counter_test.cc',
+  ],
+  deps = [
+    ':wrapping_counter',
+    '//third_party/gtest',
+  ],
+)
+
+cc_test(
+  name = 'options_test',
+  srcs = [
+    'options_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+  ],
+)
diff --git a/aos/linux_code/BUILD b/aos/linux_code/BUILD
index 7305bc7..63c970c 100644
--- a/aos/linux_code/BUILD
+++ b/aos/linux_code/BUILD
@@ -6,7 +6,7 @@
     'dump_rtprio.cc',
   ],
   deps = [
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
     '//aos/common:time',
   ],
 )
@@ -14,7 +14,10 @@
 cc_library(
   name = 'complex_thread_local',
   srcs = [
-    'complex_thread_local.cc'
+    'complex_thread_local.cc',
+  ],
+  hdrs = [
+    'complex_thread_local.h',
   ],
   deps = [
     '//aos/common:once',
@@ -31,7 +34,7 @@
     ':complex_thread_local',
     '//third_party/gtest',
     '//aos/common/util:thread',
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
   ],
 )
 
@@ -40,21 +43,27 @@
   srcs = [
     'init.cc',
   ],
+  hdrs = [
+    'init.h',
+  ],
   deps = [
     '//aos/linux_code/ipc_lib:shared_mem',
     '//aos/common:die',
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
   ],
 )
 
 cc_library(
   name = 'configuration',
-  src = [
+  srcs = [
     'configuration.cc',
   ],
+  hdrs = [
+    'configuration.h',
+  ],
   deps = [
     '//aos/common:once',
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
   ],
 )
 
diff --git a/aos/linux_code/ipc_lib/BUILD b/aos/linux_code/ipc_lib/BUILD
new file mode 100644
index 0000000..c511968
--- /dev/null
+++ b/aos/linux_code/ipc_lib/BUILD
@@ -0,0 +1,105 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'aos_sync',
+  srcs = [
+    'aos_sync.cc',
+  ],
+  hdrs = [
+    'aos_sync.h',
+  ],
+  deps = [
+    '//aos/common/logging:logging_interface',
+    '//aos/common:once',
+  ],
+)
+
+cc_library(
+  name = 'core_lib',
+  srcs = [
+    'core_lib.c',
+  ],
+  hdrs = [
+    'core_lib.h',
+  ],
+  deps = [
+    ':aos_sync',
+    ':shared_mem',
+  ],
+)
+
+cc_library(
+  name = 'shared_mem',
+  srcs = [
+    'shared_mem.c',
+  ],
+  hdrs = [
+    'shared_mem.h',
+  ],
+  deps = [
+    ':aos_sync',
+    '//aos/common/logging:logging_interface',
+  ],
+)
+
+cc_library(
+  name = 'queue',
+  srcs = [
+    'queue.cc',
+  ],
+  hdrs = [
+    'queue.h',
+  ],
+  deps = [
+    '//aos/linux_code/ipc_lib:condition',
+    '//aos/linux_code/ipc_lib:mutex',
+    ':core_lib',
+    '//aos/common/logging:logging_interface',
+  ],
+)
+
+cc_test(
+  name = 'raw_queue_test',
+  srcs = [
+    'raw_queue_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':queue',
+    '//aos/common/logging',
+    ':core_lib',
+    '//aos/common:queue_testutils',
+    '//aos/common:time',
+    '//aos/common:die',
+    '//aos/common/util:thread',
+    '//aos/common/util:death_test_log_implementation',
+  ],
+)
+
+cc_test(
+  name = 'ipc_stress_test',
+  srcs = [
+    'ipc_stress_test.cc',
+  ],
+  tags = [
+    'manual',
+  ],
+  deps = [
+    '//third_party/gtest',
+    '//aos/common:time',
+    '//aos/common:queue_testutils',
+    '//aos/linux_code/ipc_lib:mutex',
+    ':core_lib',
+    '//aos/common:die',
+    '//aos/common/libc:dirname',
+    '//aos/common/libc:aos_strsignal',
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'scoped_message_ptr',
+  deps = [
+    ':queue',
+  ],
+)
diff --git a/aos/linux_code/logging/BUILD b/aos/linux_code/logging/BUILD
index fbd153f..a35cd0e 100644
--- a/aos/linux_code/logging/BUILD
+++ b/aos/linux_code/logging/BUILD
@@ -1,60 +1,72 @@
 package(default_visibility = ['//visibility:public'])
 
 cc_library(
-  name = 'linux_interface',
+  name = 'log_replay',
   srcs = [
-    'linux_interface.cc',
+    'log_replay.cc',
+  ],
+  hdrs = [
+    'log_replay.h',
   ],
   deps = [
-    '//aos/linux_code:complex_thread_local',
-    '//aos/common:die',
-    '//aos/common/libc:aos_strerror',
-  ],
-)
-
-cc_library(
-  name = 'linux_logging',
-  srcs = [
-    'linux_logging.cc',
-  ],
-  deps = [
+    ':binary_log_file',
+    '//aos/common:queues',
+    '//aos/common/logging',
     '//aos/linux_code/ipc_lib:queue',
+  ],
+)
+
+cc_binary(
+  name = 'binary_log_writer',
+  srcs = [
+    'binary_log_writer.cc',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/linux_code:init',
+    '//aos/linux_code:configuration',
+    '//aos/common:die',
+    ':binary_log_file',
+    '//aos/common:queue_types',
+  ],
+)
+
+cc_binary(
+  name = 'log_streamer',
+  srcs = [
+    'log_streamer.cc',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/linux_code:init',
     '//aos/common:time',
+    '//aos/linux_code/ipc_lib:queue',
   ],
 )
 
-cc_test(
-  name = 'logging_impl_test',
+cc_binary(
+  name = 'log_displayer',
   srcs = [
-    'logging_impl_test.cc',
+    'log_displayer.cc',
   ],
   deps = [
-    '//third_party/gtest',
-    '//aos/common/logging:logging',
+    '//aos/common/logging',
+    '//aos/linux_code:init',
+    ':binary_log_file',
+    '//aos/common:queue_types',
+    '//aos/linux_code:configuration',
   ],
 )
 
 cc_library(
-  name = 'queue_logging',
+  name = 'binary_log_file',
   srcs = [
-    'queue_logging.cc',
+    'binary_log_file.cc',
+  ],
+  hdrs = [
+    'binary_log_file.h',
   ],
   deps = [
-    '//aos/common/logging:logging',
-    '//aos/common:die',
-    '//aos/common:queue_types',
-  ],
-)
-
-cc_library(
-  name = 'matrix_logging',
-  srcs = [
-    'matrix_logging.cc',
-  ],
-  deps = [
-    '//aos/common/logging:logging',
-    '//aos/common:die',
-    '//aos/common:queue_types',
-    '//third_party/eigen',
+    '//aos/common/logging',
   ],
 )
diff --git a/aos/linux_code/output/BUILD b/aos/linux_code/output/BUILD
new file mode 100644
index 0000000..bcd63bd
--- /dev/null
+++ b/aos/linux_code/output/BUILD
@@ -0,0 +1,22 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'http_server',
+  srcs = [
+    'HTTPServer.cpp',
+    'evhttp_ctemplate_emitter.cc',
+    'ctemplate_cache.cc',
+  ],
+  hdrs = [
+    'HTTPServer.h',
+    'evhttp_ctemplate_emitter.h',
+    'ctemplate_cache.h',
+  ],
+  deps = [
+    '//third_party/libevent',
+    '//third_party/ctemplate',
+    '//aos/common:once',
+    '//aos/common:scoped_fd',
+    '//aos/common/logging',
+  ],
+)
diff --git a/aos/linux_code/starter/BUILD b/aos/linux_code/starter/BUILD
new file mode 100644
index 0000000..2e5a80c
--- /dev/null
+++ b/aos/linux_code/starter/BUILD
@@ -0,0 +1,17 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_binary(
+  name = 'starter_exe',
+  srcs = [
+    'starter.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//third_party/libevent',
+    '//aos/common/logging',
+    '//aos/common:once',
+    '//aos/common:time',
+    '//aos/common/libc:aos_strsignal',
+    '//aos/common/util:run_command',
+  ],
+)
diff --git a/aos/prime/input/BUILD b/aos/prime/input/BUILD
new file mode 100644
index 0000000..30cb053
--- /dev/null
+++ b/aos/prime/input/BUILD
@@ -0,0 +1,18 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'joystick_input',
+  srcs = [
+    'joystick_input.cc',
+  ],
+  hdrs = [
+    'joystick_input.h',
+  ],
+  deps = [
+    '//aos/common/input:driver_station_data',
+    '//aos/common/messages:robot_state',
+    '//aos/common/network:socket',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+  ],
+)
diff --git a/doc/TODO.bazel b/doc/TODO.bazel
new file mode 100644
index 0000000..379792a
--- /dev/null
+++ b/doc/TODO.bazel
@@ -0,0 +1,15 @@
+//y2014/prime:All needs to conditionally have //y2014/wpilib:wpilib_interface.
+//y2014/prime:All needs to copy start_list.txt.
+  y2015 too
+
+//y2015:http_status needs to be finished.
+
+//aos/common:queue_types needs to be finished.
+
+Actually write //aos:prime_binaries.
+  Contents come from aos/build/aos_all.gyp.
+
+//aos/linux_code/starter needs to copy starter.sh.
+
+//aos/common:{condition,mutex,event} need their actual targets moved to
+  //aos/linux_code/ipc_lib where they belong and everything expects them.
diff --git a/doc/gyp_to_bazel.py b/doc/gyp_to_bazel.py
index b3da95b..85f7835 100755
--- a/doc/gyp_to_bazel.py
+++ b/doc/gyp_to_bazel.py
@@ -15,6 +15,7 @@
 import os
 import yaml
 import collections
+import re
 
 '''Converts a Gyp filename to its Bazel equivalent.
 
@@ -60,8 +61,24 @@
   if target[0] == ':':
     return target
 
+  # These thin wrappers won't be copied.
   if target == '<(AOS)/build/aos.gyp:logging':
     return '//aos/common/logging'
+  if target == '<(AOS)/build/aos.gyp:logging_interface':
+    return '//aos/common/logging:logging_interface'
+
+  # These are getting moved to the right place manually.
+  if target == '<(AOS)/common/common.gyp:condition':
+    return '//aos/linux_code/ipc_lib:condition'
+  if target == '<(AOS)/common/common.gyp:mutex':
+    return '//aos/linux_code/ipc_lib:mutex'
+  if target == '<(AOS)/common/common.gyp:event':
+    return '//aos/linux_code/ipc_lib:event'
+
+  # By building ..., we can mostly ignore these.
+  if (target == '<(AOS)/build/aos_all.gyp:Prime' or
+      target == '../../frc971/frc971.gyp:All'):
+    return '//aos:prime_binaries'
 
   split = target.split(':')
   if len(split) != 2:
@@ -95,6 +112,9 @@
   def add_dep(self, bazel_dep):
     self.__deps.append(bazel_dep)
 
+  def _type(self):
+    return self.__type
+
   '''Returns a collections.OrderedDict with all of the attributes on the
   Bazel rule this represents.
 
@@ -144,17 +164,30 @@
     super(CcBuildTarget, self).__init__(type, name)
 
     self.__srcs = []
+    self.__hdrs = []
     self.__deps = []
+    self.__tags = []
 
   def add_src(self, src):
     self.__srcs.append(src)
 
+  def add_hdr(self, hdr):
+    self.__hdrs.append(hdr)
+
   def add_dep(self, dep):
     self.__deps.append(dep)
 
+  def add_tag(self, tag):
+    if self._type() != 'cc_test':
+      raise RuntimeError(
+        'Trying to add tag %s to non-test type %s' % (tag, self._type()))
+    self.__tags.append(tag)
+
   def attrs(self):
     r = super(CcBuildTarget, self).attrs();
     r['srcs'] = self.__srcs
+    r['hdrs'] = self.__hdrs
+    r['tags'] = self.__tags
     r['deps'] = self.__deps
     return r
 
@@ -179,18 +212,29 @@
     super(QueueTarget, self).__init__('queue_library', name)
 
     self.__srcs = []
+    self.__deps = []
 
   def add_src(self, src):
     self.__srcs.append(src)
 
+  def add_dep(self, dep):
+    self.__deps.append(dep)
+
   def loads(self):
-    return set((('aos/build/queues', 'queue_library'),))
+    return set((('/aos/build/queues', 'queue_library'),))
 
   def attrs(self):
     r = super(QueueTarget, self).attrs();
     r['srcs'] = self.__srcs
+    r['deps'] = self.__deps
     return r
 
+def _warn_attr(keys_to_handle, name, gyp_file_name, attr):
+  if attr in keys_to_handle:
+    print('Target %s in %s has %s' % (name, gyp_file_name, attr),
+          file=sys.stderr)
+    keys_to_handle.remove(attr)
+
 def main(argv):
   for d in argv:
     build_targets = []
@@ -208,32 +252,96 @@
       targets = gyp['targets']
       for gyp_target in targets:
         target = None
+        keys_to_handle = set(gyp_target.keys())
+        if 'export_dependent_settings' in gyp_target:
+          keys_to_handle.remove('export_dependent_settings')
         name = gyp_target['target_name']
+        keys_to_handle.remove('target_name')
+        _warn_attr(keys_to_handle, name, gyp_file_name, 'actions')
+        _warn_attr(keys_to_handle, name, gyp_file_name, 'conditions')
+        _warn_attr(keys_to_handle, name, gyp_file_name, 'copies')
+        _warn_attr(keys_to_handle, name, gyp_file_name, 'hard_dependency')
+        _warn_attr(keys_to_handle, name, gyp_file_name,
+                   'direct_dependent_settings')
+
+        # These are getting moved to the right place manually.
+        if gyp_file_name == 'aos/common/common.gyp':
+          if name == 'condition' or name == 'mutex' or name == 'event':
+            continue
+        # By building ..., this becomes irrelevant.
+        if gyp_file_name == 'frc971/frc971.gyp':
+          if name == 'All':
+            continue
+
+        if 'variables' in gyp_target:
+          if 'no_rsync' in gyp_target['variables']:
+            del gyp_target['variables']['no_rsync']
+
         type = gyp_target['type']
+        keys_to_handle.remove('type')
         if (type in ['static_library', 'executable'] and
             not 'includes' in gyp_target):
           cc_type = {
               'static_library': 'cc_library',
               'executable': 'cc_binary',
             }[type]
+          if re.match('.*_test$', name) and cc_type == 'cc_binary':
+            cc_type = 'cc_test'
           target = CcBuildTarget(cc_type, name)
 
-          for dep in gyp_target['dependencies']:
-            target.add_dep(gyp_target_to_bazel(gyp_file_name, dep))
-          for src in gyp_target['sources']:
-            target.add_src(src)
+          if 'dependencies' in gyp_target:
+            for dep in gyp_target['dependencies']:
+              target.add_dep(gyp_target_to_bazel(gyp_file_name, dep))
+            keys_to_handle.remove('dependencies')
+          if 'sources' in gyp_target:
+            for src in gyp_target['sources']:
+              # In //aos/common:queue_types, this will get dealt with manually
+              # along with the actions.
+              if src == '<(print_field_cc)':
+                continue
+
+              if '/' in src:
+                raise RuntimeError(
+                  'Bad folder for %s in target %s in %s' % (src, name,
+                                                            gyp_file_name))
+
+              target.add_src(src)
+
+              # This is sort of a heuristic: if there's a header file matching
+              # the source file, add it as an hdr. This is going to require some
+              # manual cleanup, but it'll be close.
+              src_filename = os.path.join(os.path.dirname(gyp_file_name), src)
+              if not os.path.exists(src_filename):
+                raise RuntimeError(
+                  'Can not find source %s in target %s' % (src_filename,
+                                                           name))
+              header = src_filename.rsplit('.', 2)[0] + '.h'
+              if os.path.exists(header):
+                target.add_hdr(src.rsplit('.', 2)[0] + '.h')
+            keys_to_handle.remove('sources')
+          if 'variables' in gyp_target:
+            vars = gyp_target['variables']
+            if 'is_special_test' in vars:
+              if vars['is_special_test'] != 1:
+                raise RuntimeError(
+                  'Unexpected is_special_test value in target %s' % name)
+              target.add_tag('manual')
+              del vars['is_special_test']
         elif type == 'none':
           target = FilegroupTarget(name)
           for dep in gyp_target['dependencies']:
             target.add_src(gyp_target_to_bazel(gyp_file_name, dep))
+          keys_to_handle.remove('dependencies')
         elif 'includes' in gyp_target:
           includes = gyp_target['includes']
+          keys_to_handle.remove('includes')
           if len(includes) != 1:
             raise RuntimeError(
               'Not sure how to handle multiple includes in %s' % gyp_target)
           include = gyp_file_to_bazel(gyp_file_name, includes[0])
           if include == '//aos/build/queues.gypi':
             vars = gyp_target['variables']
+            keys_to_handle.remove('variables')
             if 'header_path' not in vars:
               raise RuntimeError(
                 'No header_path for target %s in %s' % (name, gyp_file_name))
@@ -253,6 +361,11 @@
                                                                 name,
                                                                 gyp_file_name))
               target.add_src(src)
+            keys_to_handle.remove('sources')
+            if 'dependencies' in gyp_target:
+              for dep in gyp_target['dependencies']:
+                target.add_dep(gyp_target_to_bazel(gyp_file_name, dep))
+              keys_to_handle.remove('dependencies')
           else:
             raise RuntimeError(
               'Unknown include %s for target %s in %s' % (include, name,
@@ -263,8 +376,31 @@
 
         if not target:
           raise
+
+        if (gyp_file_name == 'y2015/http_status/http_status.gyp' and
+            name == 'http_status'):
+          # We'll handle these manually.
+          keys_to_handle.remove('include_dirs')
+        if (gyp_file_name == 'aos/common/common.gyp' and
+            name == 'queue_types'):
+          # These will get handled manually as part of dealing with the
+          # actions.
+          keys_to_handle.remove('variables')
+
+        # If there were variables but they all got deleted, then we don't
+        # actually have any more to handle.
+        if 'variables' in keys_to_handle and not gyp_target['variables']:
+          keys_to_handle.remove('variables')
+        if keys_to_handle:
+          raise RuntimeError(
+            'Unhandled keys for target %s in %s: %s' % (name, gyp_file_name,
+                                                        keys_to_handle))
         build_targets.append(target)
 
+    if not build_targets:
+      print('No output targets for %s' % d, file=sys.stderr)
+      continue
+
     with open(os.path.join(d, 'BUILD'), 'w') as build_file:
       build_file.write(
           'package(default_visibility = [\'//visibility:public\'])\n')
diff --git a/doc/run_gyp_to_bazel.sh b/doc/run_gyp_to_bazel.sh
new file mode 100755
index 0000000..759caeb
--- /dev/null
+++ b/doc/run_gyp_to_bazel.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# This script runs doc/gyp_to_bazel for most of our code base.
+# We're skipping bot3 for now because it's under active development.
+
+set -e
+set -u
+
+run_for_folder() {
+  PYTHONPATH=${HOME}/pyyaml-3.11-prefix/lib/python3.4/site-packages/ find $1 \
+    -type d \
+    -exec bash -c '[[ -r {}/$(basename {}).gyp ]] && doc/gyp_to_bazel.py {}' \;
+  find $1 -type f \( -name '*.gyp' -or -name '*.gypi' \) \
+    -exec bash -c '[[ $(basename $(dirname {})).gyp = $(basename {}) ]] || \
+    echo Need to manually convert {} >&2' \;
+}
+
+run_for_folder aos
+run_for_folder frc971
+run_for_folder y2014
+run_for_folder y2015
+run_for_folder vision
diff --git a/frc971/autonomous/BUILD b/frc971/autonomous/BUILD
new file mode 100644
index 0000000..7f6b3e7
--- /dev/null
+++ b/frc971/autonomous/BUILD
@@ -0,0 +1,10 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'auto_queue',
+  srcs = [
+    'auto.q',
+  ],
+)
diff --git a/frc971/control_loops/BUILD b/frc971/control_loops/BUILD
new file mode 100644
index 0000000..b6e1caf
--- /dev/null
+++ b/frc971/control_loops/BUILD
@@ -0,0 +1,100 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_library(
+  name = 'team_number_test_environment',
+  srcs = [
+    'team_number_test_environment.cc',
+  ],
+  hdrs = [
+    'team_number_test_environment.h',
+  ],
+  deps = [
+    '//aos/common/network:team_number',
+    '//third_party/gtest',
+  ],
+)
+
+cc_test(
+  name = 'state_feedback_loop_test',
+  srcs = [
+    'state_feedback_loop_test.cc',
+  ],
+  deps = [
+    ':state_feedback_loop',
+    '//third_party/gtest',
+  ],
+)
+
+cc_library(
+  name = 'hall_effect_tracker',
+  deps = [
+    ':queues',
+  ],
+)
+
+queue_library(
+  name = 'queues',
+  srcs = [
+    'control_loops.q',
+  ],
+)
+
+cc_test(
+  name = 'position_sensor_sim_test',
+  srcs = [
+    'position_sensor_sim_test.cc',
+  ],
+  deps = [
+    ':queues',
+    ':position_sensor_sim',
+    '//third_party/gtest',
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'position_sensor_sim',
+  srcs = [
+    'position_sensor_sim.cc',
+  ],
+  hdrs = [
+    'position_sensor_sim.h',
+  ],
+  deps = [
+    ':queues',
+    ':gaussian_noise',
+  ],
+)
+
+cc_library(
+  name = 'gaussian_noise',
+  srcs = [
+    'gaussian_noise.cc',
+  ],
+  hdrs = [
+    'gaussian_noise.h',
+  ],
+)
+
+cc_library(
+  name = 'coerce_goal',
+  srcs = [
+    'coerce_goal.cc',
+  ],
+  hdrs = [
+    'coerce_goal.h',
+  ],
+  deps = [
+    '//third_party/eigen',
+    '//aos/common/controls:polytope',
+  ],
+)
+
+cc_library(
+  name = 'state_feedback_loop',
+  deps = [
+    '//third_party/eigen',
+  ],
+)
diff --git a/frc971/control_loops/voltage_cap/BUILD b/frc971/control_loops/voltage_cap/BUILD
new file mode 100644
index 0000000..1b9cc63
--- /dev/null
+++ b/frc971/control_loops/voltage_cap/BUILD
@@ -0,0 +1,23 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  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',
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+  ],
+)
diff --git a/frc971/queues/BUILD b/frc971/queues/BUILD
new file mode 100644
index 0000000..a48cb78
--- /dev/null
+++ b/frc971/queues/BUILD
@@ -0,0 +1,10 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'gyro',
+  srcs = [
+    'gyro.q',
+  ],
+)
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
new file mode 100644
index 0000000..a7e8697
--- /dev/null
+++ b/frc971/wpilib/BUILD
@@ -0,0 +1,150 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'logging_queue',
+  srcs = [
+    'logging.q',
+  ],
+)
+
+cc_library(
+  name = 'encoder_and_potentiometer',
+  srcs = [
+    'encoder_and_potentiometer.cc',
+  ],
+  hdrs = [
+    'encoder_and_potentiometer.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    ':dma_edge_counting',
+    '//aos/linux_code:init',
+    '//aos/common/logging',
+    '//aos/linux_code/ipc_lib:mutex',
+  ],
+)
+
+cc_library(
+  name = 'dma_edge_counting',
+  srcs = [
+    'dma_edge_counting.cc',
+  ],
+  hdrs = [
+    'dma_edge_counting.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    '//aos/common/logging',
+    ':hall_effect',
+  ],
+)
+
+cc_library(
+  name = 'interrupt_edge_counting',
+  srcs = [
+    'interrupt_edge_counting.cc',
+  ],
+  hdrs = [
+    'interrupt_edge_counting.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    '//aos/common/logging',
+    '//aos/common:stl_mutex',
+    '//aos/common:time',
+    '//aos/linux_code:init',
+  ],
+)
+
+cc_library(
+  name = 'buffered_pcm',
+  srcs = [
+    'buffered_solenoid.cc',
+    'buffered_pcm.cc',
+  ],
+  hdrs = [
+    'buffered_solenoid.h',
+    'buffered_pcm.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'gyro_interface',
+  srcs = [
+    'gyro_interface.cc',
+  ],
+  hdrs = [
+    'gyro_interface.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    '//aos/common/logging',
+  ],
+)
+
+cc_library(
+  name = 'gyro_sender',
+  srcs = [
+    'gyro_sender.cc',
+  ],
+  hdrs = [
+    'gyro_sender.h',
+  ],
+  deps = [
+    '//frc971/queues:gyro',
+    ':gyro_interface',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/messages:robot_state',
+    '//aos/linux_code:init',
+    '//aos/common:time',
+  ],
+)
+
+cc_library(
+  name = 'loop_output_handler',
+  srcs = [
+    'loop_output_handler.cc',
+  ],
+  hdrs = [
+    'loop_output_handler.h',
+  ],
+  deps = [
+    '//aos/common:scoped_fd',
+    '//aos/linux_code:init',
+    '//aos/common:time',
+    '//aos/common/util:log_interval',
+    '//aos/common/messages:robot_state',
+  ],
+)
+
+cc_library(
+  name = 'joystick_sender',
+  srcs = [
+    'joystick_sender.cc',
+  ],
+  hdrs = [
+    'joystick_sender.h',
+  ],
+  deps = [
+    '//third_party/WPILib',
+    '//aos/common/messages:robot_state',
+    '//aos/linux_code:init',
+    '//aos/common/network:team_number',
+    '//aos/common/logging:queue_logging',
+  ],
+)
+
+cc_library(
+  name = 'hall_effect',
+  deps = [
+    '//third_party/WPILib',
+  ],
+)
diff --git a/frc971/zeroing/BUILD b/frc971/zeroing/BUILD
new file mode 100644
index 0000000..7209886
--- /dev/null
+++ b/frc971/zeroing/BUILD
@@ -0,0 +1,30 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'zeroing',
+  srcs = [
+    'zeroing.cc',
+  ],
+  hdrs = [
+    'zeroing.h',
+  ],
+  deps = [
+    '//frc971/control_loops:queues',
+  ],
+)
+
+cc_test(
+  name = 'zeroing_test',
+  srcs = [
+    'zeroing_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+    ':zeroing',
+    '//aos/common/util:thread',
+    '//aos/common:die',
+    '//frc971/control_loops:position_sensor_sim',
+    '//frc971/control_loops:queues',
+  ],
+)
diff --git a/vision/BUILD b/vision/BUILD
new file mode 100644
index 0000000..d1f151a
--- /dev/null
+++ b/vision/BUILD
@@ -0,0 +1,41 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_binary(
+  name = 'OpenCVWorkTask',
+  srcs = [
+    'OpenCVWorkTask.cpp',
+    'CameraProcessor.cpp',
+    'JPEGRoutines.cpp',
+  ],
+  hdrs = [
+    'OpenCVWorkTask.h',
+    'CameraProcessor.h',
+    'JPEGRoutines.h',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common:time',
+    '//third_party/libevent',
+    '//third_party/libjpeg',
+    '//third_party/opencv',
+    '//aos/linux_code/camera:buffers',
+    '//frc971/queues:queues',
+  ],
+)
+
+cc_binary(
+  name = 'GoalMaster',
+  srcs = [
+    'GoalMaster.cpp',
+    'SensorProcessor.cpp',
+  ],
+  hdrs = [
+    'SensorProcessor.h',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common:time',
+    '//frc971/queues:queues',
+    '//aos/common/logging',
+  ],
+)
diff --git a/y2014/BUILD b/y2014/BUILD
index 9c65f34..e6c9019 100644
--- a/y2014/BUILD
+++ b/y2014/BUILD
@@ -5,6 +5,9 @@
   srcs = [
     'constants.cc',
   ],
+  hdrs = [
+    'constants.h',
+  ],
   deps = [
     '//aos/common/logging',
     '//aos/common:once',
diff --git a/y2014/actors/BUILD b/y2014/actors/BUILD
index 35c8ec9..e060569 100644
--- a/y2014/actors/BUILD
+++ b/y2014/actors/BUILD
@@ -15,6 +15,9 @@
   srcs = [
     'shoot_action.q',
   ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
 )
 
 cc_library(
@@ -22,6 +25,9 @@
   srcs = [
     'shoot_actor.cc',
   ],
+  hdrs = [
+    'shoot_actor.h',
+  ],
   deps = [
     ':shoot_action_queue',
     '//aos/common/actions:action_lib',
@@ -51,6 +57,9 @@
   srcs = [
     'drivetrain_action.q',
   ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
 )
 
 cc_library(
@@ -58,6 +67,9 @@
   srcs = [
     'drivetrain_actor.cc',
   ],
+  hdrs = [
+    'drivetrain_actor.h',
+  ],
   deps = [
     ':drivetrain_action_queue',
     '//y2014:constants',
diff --git a/y2014/autonomous/BUILD b/y2014/autonomous/BUILD
index 0ff5b7e..4a4c842 100644
--- a/y2014/autonomous/BUILD
+++ b/y2014/autonomous/BUILD
@@ -5,6 +5,9 @@
   srcs = [
     'auto.cc',
   ],
+  hdrs = [
+    'auto.h',
+  ],
   deps = [
     '//frc971/autonomous:auto_queue',
     '//aos/common/controls:control_loop',
diff --git a/y2014/control_loops/claw/BUILD b/y2014/control_loops/claw/BUILD
index 8c6bfef..dced51a 100644
--- a/y2014/control_loops/claw/BUILD
+++ b/y2014/control_loops/claw/BUILD
@@ -19,6 +19,10 @@
   srcs = [
     'claw.q',
   ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+    '//frc971/control_loops:queues',
+  ],
 )
 
 cc_library(
@@ -27,6 +31,10 @@
     'claw.cc',
     'claw_motor_plant.cc',
   ],
+  hdrs = [
+    'claw.h',
+    'claw_motor_plant.h',
+  ],
   deps = [
     ':claw_queue',
     '//aos/common/controls:control_loop',
@@ -39,7 +47,7 @@
   ],
 )
 
-cc_binary(
+cc_test(
   name = 'claw_lib_test',
   srcs = [
     'claw_lib_test.cc',
diff --git a/y2014/control_loops/drivetrain/BUILD b/y2014/control_loops/drivetrain/BUILD
index 1c70601..14003b1 100644
--- a/y2014/control_loops/drivetrain/BUILD
+++ b/y2014/control_loops/drivetrain/BUILD
@@ -19,6 +19,9 @@
   srcs = [
     'drivetrain.q',
   ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+  ],
 )
 
 cc_library(
@@ -27,6 +30,10 @@
     'polydrivetrain_dog_motor_plant.cc',
     'drivetrain_dog_motor_plant.cc',
   ],
+  hdrs = [
+    'polydrivetrain_dog_motor_plant.h',
+    'drivetrain_dog_motor_plant.h',
+  ],
   deps = [
     '//frc971/control_loops:state_feedback_loop',
   ],
@@ -38,6 +45,10 @@
     'drivetrain.cc',
     'polydrivetrain_cim_plant.cc',
   ],
+  hdrs = [
+    'drivetrain.h',
+    'polydrivetrain_cim_plant.h',
+  ],
   deps = [
     ':drivetrain_queue',
     '//aos/common/controls:control_loop',
@@ -52,7 +63,7 @@
   ],
 )
 
-cc_binary(
+cc_test(
   name = 'drivetrain_lib_test',
   srcs = [
     'drivetrain_lib_test.cc',
diff --git a/y2014/control_loops/shooter/BUILD b/y2014/control_loops/shooter/BUILD
index dbc9c8f..aba74b9 100644
--- a/y2014/control_loops/shooter/BUILD
+++ b/y2014/control_loops/shooter/BUILD
@@ -19,6 +19,10 @@
   srcs = [
     'shooter.q',
   ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+    '//frc971/control_loops:queues',
+  ],
 )
 
 cc_library(
@@ -28,6 +32,11 @@
     'shooter_motor_plant.cc',
     'unaugmented_shooter_motor_plant.cc',
   ],
+  hdrs = [
+    'shooter.h',
+    'shooter_motor_plant.h',
+    'unaugmented_shooter_motor_plant.h',
+  ],
   deps = [
     ':shooter_queue',
     '//aos/common/controls:control_loop',
@@ -37,7 +46,7 @@
   ],
 )
 
-cc_binary(
+cc_test(
   name = 'shooter_lib_test',
   srcs = [
     'shooter_lib_test.cc',
diff --git a/y2014/prime/BUILD b/y2014/prime/BUILD
index 7a787e9..0b7d88a 100644
--- a/y2014/prime/BUILD
+++ b/y2014/prime/BUILD
@@ -3,7 +3,7 @@
 filegroup(
   name = 'All',
   srcs = [
-    '//frc971:All',
+    '//aos:prime_binaries',
     '//y2014/control_loops/drivetrain:drivetrain',
     '//y2014/control_loops/drivetrain:drivetrain_lib_test',
     '//y2014/control_loops/drivetrain:replay_drivetrain',
diff --git a/y2014/wpilib/BUILD b/y2014/wpilib/BUILD
index a80ab2d..ac2c1cf 100644
--- a/y2014/wpilib/BUILD
+++ b/y2014/wpilib/BUILD
@@ -21,6 +21,7 @@
     '//aos/common/logging:queue_logging',
     '//aos/common/messages:robot_state',
     '//aos/common/util:phased_loop',
+    '//aos/common/messages:robot_state',
     '//frc971/wpilib:hall_effect',
     '//frc971/wpilib:joystick_sender',
     '//frc971/wpilib:loop_output_handler',
diff --git a/y2015/BUILD b/y2015/BUILD
new file mode 100644
index 0000000..1219e63
--- /dev/null
+++ b/y2015/BUILD
@@ -0,0 +1,49 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'constants',
+  srcs = [
+    'constants.cc',
+  ],
+  hdrs = [
+    'constants.h',
+  ],
+  deps = [
+    '//aos/common/logging',
+    '//aos/common:once',
+    '//aos/common/network:team_number',
+    '//frc971/control_loops:state_feedback_loop',
+    '//y2015/control_loops/drivetrain:polydrivetrain_plants',
+  ],
+)
+
+cc_binary(
+  name = 'joystick_reader',
+  srcs = [
+    'joystick_reader.cc',
+  ],
+  deps = [
+    '//aos/prime/input:joystick_input',
+    '//aos/linux_code:init',
+    '//aos/common/logging',
+    '//aos/common:time',
+    '//aos/common/util:log_interval',
+    '//aos/common/actions:action_lib',
+    '//frc971/queues:gyro',
+    '//y2015/control_loops/claw:claw_queue',
+    '//y2015/control_loops/drivetrain:drivetrain_queue',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//y2015:constants',
+    '//frc971/autonomous:auto_queue',
+    '//y2015/actors:stack_action_lib',
+    '//y2015/actors:stack_and_lift_action_lib',
+    '//y2015/actors:stack_and_hold_action_lib',
+    '//y2015/actors:pickup_action_lib',
+    '//y2015/actors:lift_action_lib',
+    '//y2015/actors:held_to_lift_action_lib',
+    '//y2015/actors:can_pickup_action_lib',
+    '//y2015/actors:score_action_lib',
+    '//y2015/actors:horizontal_can_pickup_action_lib',
+    '//y2015/actors:fridge_profile_lib',
+  ],
+)
diff --git a/y2015/actors/BUILD b/y2015/actors/BUILD
new file mode 100644
index 0000000..8500bf0
--- /dev/null
+++ b/y2015/actors/BUILD
@@ -0,0 +1,539 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+filegroup(
+  name = 'binaries',
+  srcs = [
+    ':drivetrain_action',
+    ':score_action',
+    ':score_action_test',
+    ':pickup_action',
+    ':stack_action',
+    ':stack_and_lift_action',
+    ':stack_and_hold_action',
+    ':held_to_lift_action',
+    ':can_pickup_action',
+    ':horizontal_can_pickup_action',
+    ':lift_action',
+    ':stack_action_test',
+  ],
+)
+
+queue_library(
+  name = 'drivetrain_action_queue',
+  srcs = [
+    'drivetrain_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
+)
+
+cc_library(
+  name = 'drivetrain_action_lib',
+  srcs = [
+    'drivetrain_actor.cc',
+  ],
+  hdrs = [
+    'drivetrain_actor.h',
+  ],
+  deps = [
+    ':drivetrain_action_queue',
+    '//y2015:constants',
+    '//aos/common:time',
+    '//aos/common/util:phased_loop',
+    '//aos/common/logging',
+    '//aos/common/actions:action_lib',
+    '//aos/common/logging:queue_logging',
+    '//third_party/eigen',
+    '//aos/common/util:trapezoid_profile',
+    '//y2015/control_loops/drivetrain:drivetrain_queue',
+  ],
+)
+
+cc_binary(
+  name = 'drivetrain_action',
+  srcs = [
+    'drivetrain_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':drivetrain_action_queue',
+    ':drivetrain_action_lib',
+  ],
+)
+
+cc_library(
+  name = 'fridge_profile_lib',
+  srcs = [
+    'fridge_profile_lib.cc',
+  ],
+  hdrs = [
+    'fridge_profile_lib.h',
+  ],
+  deps = [
+    '//aos/common/logging:logging_interface',
+    '//aos/common/actions:action_lib',
+    '//y2015/control_loops/fridge:fridge_queue',
+  ],
+)
+
+queue_library(
+  name = 'score_action_queue',
+  srcs = [
+    'score_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
+)
+
+cc_library(
+  name = 'score_action_lib',
+  srcs = [
+    'score_actor.cc',
+  ],
+  hdrs = [
+    'score_actor.h',
+  ],
+  deps = [
+    ':score_action_queue',
+    '//aos/common/logging',
+    '//aos/common/actions:action_lib',
+    '//aos/common/controls:control_loop',
+    '//y2015:constants',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//third_party/eigen',
+  ],
+)
+
+cc_binary(
+  name = 'score_action',
+  srcs = [
+    'score_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':score_action_queue',
+    ':score_action_lib',
+  ],
+)
+
+cc_test(
+  name = 'score_action_test',
+  srcs = [
+    'score_actor_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+    '//aos/common/logging:queue_logging',
+    '//aos/common:queues',
+    '//aos/common:time',
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//frc971/control_loops:team_number_test_environment',
+    ':score_action_queue',
+    ':score_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'pickup_action_queue',
+  srcs = [
+    'pickup_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
+)
+
+cc_library(
+  name = 'pickup_action_lib',
+  srcs = [
+    'pickup_actor.cc',
+  ],
+  hdrs = [
+    'pickup_actor.h',
+  ],
+  deps = [
+    ':pickup_action_queue',
+    '//aos/common/logging',
+    '//aos/common/actions:action_lib',
+    '//aos/common/controls:control_loop',
+    '//y2015/control_loops/claw:claw_queue',
+  ],
+)
+
+cc_binary(
+  name = 'pickup_action',
+  srcs = [
+    'pickup_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':pickup_action_queue',
+    ':pickup_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'can_pickup_action_queue',
+  srcs = [
+    'can_pickup_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
+)
+
+cc_library(
+  name = 'can_pickup_action_lib',
+  srcs = [
+    'can_pickup_actor.cc',
+  ],
+  hdrs = [
+    'can_pickup_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':can_pickup_action_queue',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_binary(
+  name = 'can_pickup_action',
+  srcs = [
+    'can_pickup_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':can_pickup_action_queue',
+    ':can_pickup_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'horizontal_can_pickup_action_queue',
+  srcs = [
+    'horizontal_can_pickup_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+  ],
+)
+
+cc_library(
+  name = 'horizontal_can_pickup_action_lib',
+  srcs = [
+    'horizontal_can_pickup_actor.cc',
+  ],
+  hdrs = [
+    'horizontal_can_pickup_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':horizontal_can_pickup_action_queue',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_binary(
+  name = 'horizontal_can_pickup_action',
+  srcs = [
+    'horizontal_can_pickup_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':horizontal_can_pickup_action_queue',
+    ':horizontal_can_pickup_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'held_to_lift_action_queue',
+  srcs = [
+    'held_to_lift_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+    ':lift_action_params',
+  ],
+)
+
+cc_library(
+  name = 'held_to_lift_action_lib',
+  srcs = [
+    'held_to_lift_actor.cc',
+  ],
+  hdrs = [
+    'held_to_lift_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':held_to_lift_action_queue',
+    ':lift_action_lib',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_binary(
+  name = 'held_to_lift_action',
+  srcs = [
+    'held_to_lift_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':held_to_lift_action_queue',
+    ':held_to_lift_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'stack_and_hold_action_queue',
+  srcs = [
+    'stack_and_hold_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+    ':stack_action_params',
+  ],
+)
+
+cc_library(
+  name = 'stack_and_hold_action_lib',
+  srcs = [
+    'stack_and_hold_actor.cc',
+  ],
+  hdrs = [
+    'stack_and_hold_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':stack_and_hold_action_queue',
+    ':stack_action_lib',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_binary(
+  name = 'stack_and_hold_action',
+  srcs = [
+    'stack_and_hold_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':stack_and_hold_action_queue',
+    ':stack_and_hold_action_lib',
+  ],
+)
+
+queue_library(
+  name = 'stack_and_lift_action_queue',
+  srcs = [
+    'stack_and_lift_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+    ':stack_action_params',
+    ':lift_action_params',
+  ],
+)
+
+cc_library(
+  name = 'stack_and_lift_action_lib',
+  srcs = [
+    'stack_and_lift_actor.cc',
+  ],
+  hdrs = [
+    'stack_and_lift_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':stack_and_lift_action_queue',
+    ':stack_action_lib',
+    ':lift_action_lib',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_binary(
+  name = 'stack_and_lift_action',
+  srcs = [
+    'stack_and_lift_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':stack_and_lift_action_queue',
+    ':stack_and_lift_action_lib',
+  ],
+)
+
+filegroup(
+  name = 'stack_action_queue',
+  srcs = [
+    ':stack_action_queue_real',
+  ],
+)
+
+queue_library(
+  name = 'stack_action_queue_real',
+  srcs = [
+    'stack_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+    ':stack_action_params',
+  ],
+)
+
+queue_library(
+  name = 'stack_action_params',
+  srcs = [
+    'stack_action_params.q',
+  ],
+)
+
+cc_test(
+  name = 'stack_action_test',
+  srcs = [
+    'stack_actor_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+    '//aos/common/logging:queue_logging',
+    '//aos/common:queues',
+    '//aos/common:time',
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//frc971/control_loops:team_number_test_environment',
+    ':stack_action_queue',
+    ':stack_action_lib',
+  ],
+)
+
+cc_library(
+  name = 'stack_action_lib',
+  srcs = [
+    'stack_actor.cc',
+  ],
+  hdrs = [
+    'stack_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':stack_action_queue',
+    '//aos/common/logging',
+    '//aos/common/util:phased_loop',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+  ],
+)
+
+cc_binary(
+  name = 'stack_action',
+  srcs = [
+    'stack_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':stack_action_queue',
+    ':stack_action_lib',
+  ],
+)
+
+filegroup(
+  name = 'lift_action_queue',
+  srcs = [
+    ':lift_action_queue_real',
+  ],
+)
+
+queue_library(
+  name = 'lift_action_queue_real',
+  srcs = [
+    'lift_action.q',
+  ],
+  deps = [
+    '//aos/common/actions:action_queue',
+    ':lift_action_params',
+  ],
+)
+
+queue_library(
+  name = 'lift_action_params',
+  srcs = [
+    'lift_action_params.q',
+  ],
+)
+
+cc_library(
+  name = 'lift_action_lib',
+  srcs = [
+    'lift_actor.cc',
+  ],
+  hdrs = [
+    'lift_actor.h',
+  ],
+  deps = [
+    ':fridge_profile_lib',
+    ':lift_action_queue',
+    '//aos/common/logging',
+    '//aos/common/actions:action_lib',
+    '//y2015:constants',
+    '//y2015/control_loops/claw:claw_queue',
+  ],
+)
+
+cc_binary(
+  name = 'lift_action',
+  srcs = [
+    'lift_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':lift_action_queue',
+    ':lift_action_lib',
+  ],
+)
diff --git a/y2015/autonomous/BUILD b/y2015/autonomous/BUILD
new file mode 100644
index 0000000..997c54f
--- /dev/null
+++ b/y2015/autonomous/BUILD
@@ -0,0 +1,40 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'auto_lib',
+  srcs = [
+    'auto.cc',
+  ],
+  hdrs = [
+    'auto.h',
+  ],
+  deps = [
+    '//frc971/autonomous:auto_queue',
+    '//aos/common/controls:control_loop',
+    '//y2015/control_loops/drivetrain:drivetrain_queue',
+    '//y2015:constants',
+    '//aos/common:time',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:trapezoid_profile',
+    '//aos/common/logging',
+    '//y2015/actors:drivetrain_action_lib',
+    '//aos/common/logging:queue_logging',
+    '//y2015/control_loops/claw:claw_queue',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//y2015/actors:stack_action_lib',
+    '//y2015/actors:held_to_lift_action_lib',
+    '//y2015/actors:pickup_action_lib',
+  ],
+)
+
+cc_binary(
+  name = 'auto',
+  srcs = [
+    'auto_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//frc971/autonomous:auto_queue',
+    ':auto_lib',
+  ],
+)
diff --git a/y2015/control_loops/claw/BUILD b/y2015/control_loops/claw/BUILD
new file mode 100644
index 0000000..134ef55
--- /dev/null
+++ b/y2015/control_loops/claw/BUILD
@@ -0,0 +1,74 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_binary(
+  name = 'replay_claw',
+  srcs = [
+    'replay_claw.cc',
+  ],
+  deps = [
+    ':claw_queue',
+    '//aos/common/controls:replay_control_loop',
+    '//aos/linux_code:init',
+  ],
+)
+
+queue_library(
+  name = 'claw_queue',
+  srcs = [
+    'claw.q',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+    '//frc971/control_loops:queues',
+  ],
+)
+
+cc_library(
+  name = 'claw_lib',
+  srcs = [
+    'claw.cc',
+    'claw_motor_plant.cc',
+  ],
+  hdrs = [
+    'claw.h',
+    'claw_motor_plant.h',
+  ],
+  deps = [
+    ':claw_queue',
+    '//aos/common/controls:control_loop',
+    '//aos/common:time',
+    '//aos/common/util:trapezoid_profile',
+    '//y2015:constants',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/zeroing:zeroing',
+  ],
+)
+
+cc_test(
+  name = 'claw_lib_test',
+  srcs = [
+    'claw_lib_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':claw_lib',
+    '//frc971/control_loops:state_feedback_loop',
+    '//aos/common/controls:control_loop_test',
+    '//aos/common:time',
+    '//frc971/control_loops:position_sensor_sim',
+    '//frc971/control_loops:team_number_test_environment',
+  ],
+)
+
+cc_binary(
+  name = 'claw',
+  srcs = [
+    'claw_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':claw_lib',
+  ],
+)
diff --git a/y2015/control_loops/drivetrain/BUILD b/y2015/control_loops/drivetrain/BUILD
new file mode 100644
index 0000000..c08e4b0
--- /dev/null
+++ b/y2015/control_loops/drivetrain/BUILD
@@ -0,0 +1,92 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_binary(
+  name = 'replay_drivetrain',
+  srcs = [
+    'replay_drivetrain.cc',
+  ],
+  deps = [
+    ':drivetrain_queue',
+    '//aos/common/controls:replay_control_loop',
+    '//aos/linux_code:init',
+  ],
+)
+
+queue_library(
+  name = 'drivetrain_queue',
+  srcs = [
+    'drivetrain.q',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+  ],
+)
+
+cc_library(
+  name = 'polydrivetrain_plants',
+  srcs = [
+    'polydrivetrain_dog_motor_plant.cc',
+    'drivetrain_dog_motor_plant.cc',
+  ],
+  hdrs = [
+    'polydrivetrain_dog_motor_plant.h',
+    'drivetrain_dog_motor_plant.h',
+  ],
+  deps = [
+    '//frc971/control_loops:state_feedback_loop',
+  ],
+)
+
+cc_library(
+  name = 'drivetrain_lib',
+  srcs = [
+    'drivetrain.cc',
+    'polydrivetrain_cim_plant.cc',
+  ],
+  hdrs = [
+    'drivetrain.h',
+    'polydrivetrain_cim_plant.h',
+  ],
+  deps = [
+    ':drivetrain_queue',
+    '//aos/common/controls:control_loop',
+    '//y2015:constants',
+    '//aos/common/controls:polytope',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/control_loops:coerce_goal',
+    '//frc971/queues:gyro',
+    '//aos/common/util:log_interval',
+    '//aos/common/logging:queue_logging',
+    '//aos/common/logging:matrix_logging',
+  ],
+)
+
+cc_test(
+  name = 'drivetrain_lib_test',
+  srcs = [
+    'drivetrain_lib_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':drivetrain_queue',
+    ':drivetrain_lib',
+    '//aos/common/controls:control_loop_test',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/queues:gyro',
+    '//aos/common:queues',
+  ],
+)
+
+cc_binary(
+  name = 'drivetrain',
+  srcs = [
+    'drivetrain_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':drivetrain_lib',
+    ':drivetrain_queue',
+  ],
+)
diff --git a/y2015/control_loops/fridge/BUILD b/y2015/control_loops/fridge/BUILD
new file mode 100644
index 0000000..1304a82
--- /dev/null
+++ b/y2015/control_loops/fridge/BUILD
@@ -0,0 +1,80 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_binary(
+  name = 'replay_fridge',
+  srcs = [
+    'replay_fridge.cc',
+  ],
+  deps = [
+    ':fridge_queue',
+    '//aos/common/controls:replay_control_loop',
+    '//aos/linux_code:init',
+  ],
+)
+
+queue_library(
+  name = 'fridge_queue',
+  srcs = [
+    'fridge.q',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+    '//frc971/control_loops:queues',
+    '//frc971/zeroing:zeroing',
+  ],
+)
+
+cc_library(
+  name = 'fridge_lib',
+  srcs = [
+    'fridge.cc',
+    'integral_arm_plant.cc',
+    'elevator_motor_plant.cc',
+  ],
+  hdrs = [
+    'fridge.h',
+    'integral_arm_plant.h',
+    'elevator_motor_plant.h',
+  ],
+  deps = [
+    ':fridge_queue',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:trapezoid_profile',
+    '//y2015:constants',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/control_loops/voltage_cap:voltage_cap',
+  ],
+)
+
+cc_test(
+  name = 'fridge_lib_test',
+  srcs = [
+    'fridge_lib_test.cc',
+    'arm_motor_plant.cc',
+  ],
+  hdrs = [
+    'arm_motor_plant.h',
+  ],
+  deps = [
+    '//third_party/gtest',
+    ':fridge_lib',
+    '//frc971/control_loops:state_feedback_loop',
+    '//aos/common/controls:control_loop_test',
+    '//aos/common:time',
+    '//frc971/control_loops:position_sensor_sim',
+    '//frc971/control_loops:team_number_test_environment',
+  ],
+)
+
+cc_binary(
+  name = 'fridge',
+  srcs = [
+    'fridge_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':fridge_lib',
+  ],
+)
diff --git a/y2015/http_status/BUILD b/y2015/http_status/BUILD
new file mode 100644
index 0000000..d71574c
--- /dev/null
+++ b/y2015/http_status/BUILD
@@ -0,0 +1,20 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_binary(
+  name = 'http_status',
+  srcs = [
+    'http_status.cc',
+  ],
+  hdrs = [
+    'http_status.h',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/logging',
+    '//third_party/seasocks',
+    '//y2015/control_loops/claw:claw_queue',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//aos/common/util:phased_loop',
+    '//aos/common:time',
+  ],
+)
diff --git a/y2015/prime/BUILD b/y2015/prime/BUILD
new file mode 100644
index 0000000..78a8280
--- /dev/null
+++ b/y2015/prime/BUILD
@@ -0,0 +1,22 @@
+package(default_visibility = ['//visibility:public'])
+
+filegroup(
+  name = 'All',
+  srcs = [
+    '//aos:prime_binaries',
+    '//y2015/control_loops/drivetrain:drivetrain',
+    '//y2015/control_loops/drivetrain:drivetrain_lib_test',
+    '//y2015/control_loops/drivetrain:replay_drivetrain',
+    '//y2015/control_loops/fridge:fridge',
+    '//y2015/control_loops/fridge:fridge_lib_test',
+    '//y2015/control_loops/fridge:replay_fridge',
+    '//y2015/control_loops/claw:claw',
+    '//y2015/control_loops/claw:claw_lib_test',
+    '//y2015/control_loops/claw:replay_claw',
+    '//y2015/autonomous:auto',
+    '//y2015:joystick_reader',
+    '//y2015/http_status:http_status',
+    '//y2015/util:kinematics_test',
+    '//y2015/actors:binaries',
+  ],
+)
diff --git a/y2015/util/BUILD b/y2015/util/BUILD
new file mode 100644
index 0000000..2a7250f
--- /dev/null
+++ b/y2015/util/BUILD
@@ -0,0 +1,23 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'kinematics',
+  deps = [
+    '//third_party/eigen',
+    '//y2015:constants',
+  ],
+)
+
+cc_test(
+  name = 'kinematics_test',
+  srcs = [
+    'kinematics_test.cc',
+  ],
+  deps = [
+    '//third_party/gtest',
+    '//aos/common:queue_testutils',
+    '//aos/common/logging',
+    '//frc971/control_loops:team_number_test_environment',
+    ':kinematics',
+  ],
+)
diff --git a/y2015/wpilib/BUILD b/y2015/wpilib/BUILD
new file mode 100644
index 0000000..d25c424
--- /dev/null
+++ b/y2015/wpilib/BUILD
@@ -0,0 +1,35 @@
+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',
+    '//y2015/control_loops/drivetrain:drivetrain_queue',
+    '//y2015/control_loops/fridge:fridge_queue',
+    '//y2015/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/messages:robot_state',
+    '//frc971/wpilib:hall_effect',
+    '//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/control_loops:queues',
+    '//frc971/wpilib:logging_queue',
+  ],
+)