Convert bot3 to Bazel too

Change-Id: I330e334977ea0ba6c2b9febf1647d5d9b5cd2d4f
diff --git a/bot3/BUILD b/bot3/BUILD
new file mode 100644
index 0000000..d0f7782
--- /dev/null
+++ b/bot3/BUILD
@@ -0,0 +1,22 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_binary(
+  name = 'joystick_reader_bot3',
+  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',
+    '//bot3/control_loops/elevator:elevator_lib',
+    '//bot3/control_loops/drivetrain:drivetrain_queue',
+    '//bot3/control_loops/elevator:elevator_queue',
+    '//bot3/control_loops/intake:intake_queue',
+    '//bot3/autonomous:auto_queue',
+  ],
+)
diff --git a/bot3/actors/BUILD b/bot3/actors/BUILD
new file mode 100644
index 0000000..271773d
--- /dev/null
+++ b/bot3/actors/BUILD
@@ -0,0 +1,55 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+filegroup(
+  name = 'binaries',
+  srcs = [
+    ':drivetrain_action_bot3',
+  ],
+)
+
+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',
+    '//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',
+    '//bot3/control_loops/drivetrain:drivetrain_queue',
+    '//bot3/control_loops/drivetrain:drivetrain_lib',
+  ],
+)
+
+cc_binary(
+  name = 'drivetrain_action_bot3',
+  srcs = [
+    'drivetrain_actor_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common/actions:action_lib',
+    ':drivetrain_action_queue',
+    ':drivetrain_action_lib',
+  ],
+)
diff --git a/bot3/autonomous/BUILD b/bot3/autonomous/BUILD
new file mode 100644
index 0000000..48b725e
--- /dev/null
+++ b/bot3/autonomous/BUILD
@@ -0,0 +1,46 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'auto_queue',
+  srcs = [
+    'auto.q',
+  ],
+)
+
+cc_library(
+  name = 'auto_lib',
+  srcs = [
+    'auto.cc',
+  ],
+  hdrs = [
+    'auto.h',
+  ],
+  deps = [
+    ':auto_queue',
+    '//aos/common/controls:control_loop',
+    '//bot3/control_loops/drivetrain:drivetrain_queue',
+    '//bot3/control_loops/drivetrain:drivetrain_lib',
+    '//bot3/actors:drivetrain_action_lib',
+    '//bot3/control_loops/elevator:elevator_queue',
+    '//bot3/control_loops/intake:intake_queue',
+    '//aos/common:time',
+    '//aos/common/util:phased_loop',
+    '//aos/common/util:trapezoid_profile',
+    '//aos/common/logging',
+    '//aos/common/logging:queue_logging',
+  ],
+)
+
+cc_binary(
+  name = 'auto_bot3',
+  srcs = [
+    'auto_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':auto_queue',
+    ':auto_lib',
+  ],
+)
diff --git a/bot3/control_loops/BUILD b/bot3/control_loops/BUILD
new file mode 100644
index 0000000..1dc5c67
--- /dev/null
+++ b/bot3/control_loops/BUILD
@@ -0,0 +1,14 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_library(
+  name = 'position_sensor_sim',
+  srcs = [
+    'position_sensor_sim.cc',
+  ],
+  hdrs = [
+    'position_sensor_sim.h',
+  ],
+  deps = [
+    '//bot3/control_loops/elevator:elevator_queue',
+  ],
+)
diff --git a/bot3/control_loops/control_loops.gyp b/bot3/control_loops/control_loops.gyp
index b63816e..0c49272 100644
--- a/bot3/control_loops/control_loops.gyp
+++ b/bot3/control_loops/control_loops.gyp
@@ -4,9 +4,6 @@
       'target_name': 'position_sensor_sim',
       'type': 'static_library',
       'sources': ['position_sensor_sim.cc'],
-      'variables': {
-        'header_path': 'bot3/control_loops',
-      },
       'dependencies': [
         '<(DEPTH)/bot3/control_loops/elevator/elevator.gyp:elevator_queue',
       ],
diff --git a/bot3/control_loops/drivetrain/BUILD b/bot3/control_loops/drivetrain/BUILD
new file mode 100644
index 0000000..6fd8faa
--- /dev/null
+++ b/bot3/control_loops/drivetrain/BUILD
@@ -0,0 +1,96 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+cc_binary(
+  name = 'replay_drivetrain_bot3',
+  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',
+    'drivetrain_dog_motor_plant.cc',
+    'polydrivetrain_dog_motor_plant.cc',
+  ],
+  hdrs = [
+    'drivetrain.h',
+    'polydrivetrain_cim_plant.h',
+    'drivetrain_dog_motor_plant.h',
+    'polydrivetrain_dog_motor_plant.h',
+  ],
+  deps = [
+    ':drivetrain_queue',
+    '//aos/common/controls:control_loop',
+    '//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_binary(
+  name = 'drivetrain_lib_test_bot3',
+  srcs = [
+    'drivetrain_lib_test.cc',
+  ],
+  deps = [
+    '//third_party/googletest',
+    ':drivetrain_queue',
+    ':drivetrain_lib',
+    '//aos/common/controls:control_loop_test',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/queues:gyro',
+    '//aos/common:queues',
+    '//aos/common/network:team_number',
+  ],
+)
+
+cc_binary(
+  name = 'drivetrain_bot3',
+  srcs = [
+    'drivetrain_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':drivetrain_lib',
+    ':drivetrain_queue',
+  ],
+)
diff --git a/bot3/control_loops/elevator/BUILD b/bot3/control_loops/elevator/BUILD
new file mode 100644
index 0000000..c3cb1ac
--- /dev/null
+++ b/bot3/control_loops/elevator/BUILD
@@ -0,0 +1,63 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'elevator_queue',
+  srcs = [
+    'elevator.q',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+    '//frc971/control_loops:queues',
+  ],
+)
+
+cc_library(
+  name = 'elevator_lib',
+  srcs = [
+    'elevator.cc',
+    'elevator_motor_plant.cc',
+    'integral_elevator_motor_plant.cc',
+  ],
+  hdrs = [
+    'elevator.h',
+    'elevator_motor_plant.h',
+    'integral_elevator_motor_plant.h',
+  ],
+  deps = [
+    ':elevator_queue',
+    '//aos/common/logging',
+    '//aos/common/controls:control_loop_queues',
+    '//aos/common/controls:control_loop',
+    '//aos/common/util:trapezoid_profile',
+    '//frc971/control_loops:state_feedback_loop',
+    '//frc971/control_loops/voltage_cap:voltage_cap',
+  ],
+)
+
+cc_test(
+  name = 'elevator_lib_test',
+  srcs = [
+    'elevator_lib_test.cc',
+  ],
+  deps = [
+    '//third_party/googletest',
+    ':elevator_lib',
+    '//bot3/control_loops:position_sensor_sim',
+    '//frc971/control_loops:state_feedback_loop',
+    '//aos/common/controls:control_loop_test',
+    '//aos/common:time',
+  ],
+)
+
+cc_binary(
+  name = 'elevator',
+  srcs = [
+    'elevator_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':elevator_lib',
+  ],
+)
diff --git a/bot3/control_loops/elevator/elevator_lib_test.cc b/bot3/control_loops/elevator/elevator_lib_test.cc
index 66b7845..76a2c54 100644
--- a/bot3/control_loops/elevator/elevator_lib_test.cc
+++ b/bot3/control_loops/elevator/elevator_lib_test.cc
@@ -593,6 +593,7 @@
     RunIteration(true);
     EXPECT_NEAR(0.0, plant_.GetVoltage(), voltage_range);
   }
+}
 
 }  // namespace testing
 }  // namespace control_loops
diff --git a/bot3/control_loops/intake/BUILD b/bot3/control_loops/intake/BUILD
new file mode 100644
index 0000000..fe21b7f
--- /dev/null
+++ b/bot3/control_loops/intake/BUILD
@@ -0,0 +1,53 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/build/queues', 'queue_library')
+
+queue_library(
+  name = 'intake_queue',
+  srcs = [
+    'intake.q',
+  ],
+  deps = [
+    '//aos/common/controls:control_loop_queues',
+  ],
+)
+
+cc_library(
+  name = 'intake_lib',
+  srcs = [
+    'intake.cc',
+  ],
+  hdrs = [
+    'intake.h',
+  ],
+  deps = [
+    ':intake_queue',
+    '//aos/common/controls:control_loop',
+  ],
+)
+
+cc_test(
+  name = 'intake_lib_test',
+  srcs = [
+    'intake_lib_test.cc',
+  ],
+  deps = [
+    '//third_party/googletest',
+    ':intake_lib',
+    '//frc971/control_loops:state_feedback_loop',
+    '//aos/common/controls:control_loop_test',
+    '//aos/common:time',
+    '//frc971/control_loops:team_number_test_environment',
+  ],
+)
+
+cc_binary(
+  name = 'intake',
+  srcs = [
+    'intake_main.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    ':intake_lib',
+  ],
+)
diff --git a/bot3/prime/BUILD b/bot3/prime/BUILD
new file mode 100644
index 0000000..343e748
--- /dev/null
+++ b/bot3/prime/BUILD
@@ -0,0 +1,16 @@
+package(default_visibility = ['//visibility:public'])
+
+load('/aos/prime/downloader/downloader', 'aos_downloader')
+
+aos_downloader(
+  name = 'download',
+  srcs = [
+    '//aos:prime_binaries',
+    '//bot3/control_loops/drivetrain:drivetrain_bot3',
+    '//bot3/control_loops/intake:intake',
+    '//bot3:joystick_reader_bot3',
+    '//bot3/control_loops/elevator:elevator',
+    '//bot3/autonomous:auto_bot3',
+    '//bot3/actors:binaries',
+  ],
+)
diff --git a/bot3/wpilib/BUILD b/bot3/wpilib/BUILD
new file mode 100644
index 0000000..e516ef8
--- /dev/null
+++ b/bot3/wpilib/BUILD
@@ -0,0 +1,32 @@
+package(default_visibility = ['//visibility:public'])
+
+cc_binary(
+  name = 'wpilib_interface_bot3',
+  srcs = [
+    'wpilib_interface.cc',
+  ],
+  deps = [
+    '//aos/linux_code:init',
+    '//aos/common:stl_mutex',
+    '//aos/common/logging',
+    '//aos/externals:wpilib',
+    '//bot3/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',
+    '//frc971/wpilib:hall_effect',
+    '//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',
+    '//bot3/autonomous:auto_queue',
+    '//bot3/control_loops/drivetrain:drivetrain_lib',
+    '//bot3/control_loops/elevator:elevator_lib',
+    '//bot3/control_loops/intake:intake_lib',
+  ],
+)
diff --git a/doc/TODO.bazel b/doc/TODO.bazel
index 0a31b1c..9ffd12b 100644
--- a/doc/TODO.bazel
+++ b/doc/TODO.bazel
@@ -1,4 +1,4 @@
 //y2014/prime:All needs to conditionally have //y2014/wpilib:wpilib_interface.
-  y2015 too
+  y2015 and bot3 too
 
 Need to get tcmalloc hooked in.
diff --git a/doc/run_gyp_to_bazel.sh b/doc/run_gyp_to_bazel.sh
index b4688f1..039ca6e 100755
--- a/doc/run_gyp_to_bazel.sh
+++ b/doc/run_gyp_to_bazel.sh
@@ -15,12 +15,12 @@
     echo Need to manually convert {} >&2' \;
 }
 
-run_for_folder bot3
-
 # Manual work on the other folders has started, so we don't want this script to
 # automatically overwrite that work.
 exit 0
 
+run_for_folder bot3
+
 run_for_folder aos
 run_for_folder frc971
 run_for_folder y2014