Add a catapult MPC solver in C++ which runs fast enough

Change-Id: Ieccddb951dce287fbdd74d75916896e97360c50b
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/y2022/control_loops/superstructure/catapult/BUILD b/y2022/control_loops/superstructure/catapult/BUILD
new file mode 100644
index 0000000..289dfde
--- /dev/null
+++ b/y2022/control_loops/superstructure/catapult/BUILD
@@ -0,0 +1,68 @@
+genrule(
+    name = "genrule_catapult",
+    outs = [
+        "catapult_plant.h",
+        "catapult_plant.cc",
+        "integral_catapult_plant.h",
+        "integral_catapult_plant.cc",
+    ],
+    cmd = "$(location //y2022/control_loops/python:catapult) $(OUTS)",
+    target_compatible_with = ["@platforms//os:linux"],
+    tools = [
+        "//y2022/control_loops/python:catapult",
+    ],
+)
+
+cc_library(
+    name = "catapult_plants",
+    srcs = [
+        "catapult_plant.cc",
+        "integral_catapult_plant.cc",
+    ],
+    hdrs = [
+        "catapult_plant.h",
+        "integral_catapult_plant.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/control_loops:state_feedback_loop",
+    ],
+)
+
+cc_library(
+    name = "catapult",
+    srcs = [
+        "catapult.cc",
+    ],
+    hdrs = [
+        "catapult.h",
+    ],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":catapult_plants",
+        "//aos:realtime",
+        "//third_party/osqp-cpp",
+    ],
+)
+
+cc_test(
+    name = "catapult_test",
+    srcs = [
+        "catapult_test.cc",
+    ],
+    deps = [
+        ":catapult",
+        "//aos/testing:googletest",
+    ],
+)
+
+cc_binary(
+    name = "catapult_main",
+    srcs = [
+        "catapult_main.cc",
+    ],
+    deps = [
+        ":catapult",
+        "//aos:init",
+    ],
+)