Split aprilrobotics into a library

This will allow the mapping class to instantiate a
AprilRoboticsDetector with the log reader event loop.
Also made this code compatible with x86.

Signed-off-by: milind-u <milind.upadhyay@gmail.com>
Change-Id: Ie05bc947710fa1a456fd08db1e1d40ffb9f71119
diff --git a/third_party/apriltag/BUILD b/third_party/apriltag/BUILD
index e4acc96..b11e34f 100644
--- a/third_party/apriltag/BUILD
+++ b/third_party/apriltag/BUILD
@@ -1,3 +1,5 @@
+load("@//tools/build_rules:select.bzl", "compiler_select")
+
 cc_library(
     name = "apriltag",
     srcs = [
@@ -69,18 +71,23 @@
         "tagStandard41h12.h",
         "tagStandard52h13.h",
     ],
-    copts = [
-        "-Wno-unused-parameter",
-        "-Wno-cast-qual",
+    copts = compiler_select({
+        "clang": [
+            "-Wno-cast-align",
+            "-Wno-incompatible-pointer-types-discards-qualifiers",
+        ],
+        "gcc": [
+            "-Wno-discarded-qualifiers",
+            "-Wno-shift-negative-value",
+        ],
+    }) + [
         "-Wno-sign-compare",
+        "-Wno-cast-qual",
+        "-Wno-unused-parameter",
         "-Wno-unused-variable",
-        "-Wno-cast-align",
-        "-Wno-incompatible-pointer-types-discards-qualifiers",
         "-Wno-format-nonliteral",
     ],
     includes = ["."],
-    target_compatible_with = [
-        "@platforms//cpu:arm64",
-    ],
+    target_compatible_with = ["@platforms//os:linux"],
     visibility = ["//visibility:public"],
 )
diff --git a/y2023/vision/BUILD b/y2023/vision/BUILD
index 25ae2b9..55390e4 100644
--- a/y2023/vision/BUILD
+++ b/y2023/vision/BUILD
@@ -98,8 +98,8 @@
     ],
 )
 
-cc_binary(
-    name = "aprilrobotics",
+cc_library(
+    name = "aprilrobotics_lib",
     srcs = [
         "aprilrobotics.cc",
         "aprilrobotics.h",
@@ -119,3 +119,17 @@
         "//third_party/apriltag",
     ],
 )
+
+cc_binary(
+    name = "aprilrobotics",
+    srcs = [
+        "aprilrobotics_main.cc",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//y2023:__subpackages__"],
+    deps = [
+        ":aprilrobotics_lib",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+    ],
+)
diff --git a/y2023/vision/aprilrobotics.cc b/y2023/vision/aprilrobotics.cc
index f8a8e38..3bf0adf 100644
--- a/y2023/vision/aprilrobotics.cc
+++ b/y2023/vision/aprilrobotics.cc
@@ -1,7 +1,5 @@
 #include "y2023/vision/aprilrobotics.h"
 
-DEFINE_string(config, "aos_config.json", "Path to the config file to use.");
-
 DEFINE_bool(
     debug, false,
     "If true, dump a ton of debug and crash on the first valid detection.");
@@ -167,31 +165,5 @@
   return results;
 }
 
-void AprilViewerMain() {
-  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
-      aos::configuration::ReadConfig(FLAGS_config);
-
-  aos::ShmEventLoop event_loop(&config.message());
-
-  AprilRoboticsDetector detector(&event_loop, "/camera");
-
-  detector.SetWorkerpoolAffinities();
-
-  event_loop.SetRuntimeAffinity(aos::MakeCpusetFromCpus({5}));
-
-  struct sched_param param;
-  param.sched_priority = 21;
-  PCHECK(sched_setscheduler(0, SCHED_FIFO, &param) == 0);
-
-  event_loop.Run();
-}
-
 }  // namespace vision
 }  // namespace y2023
-
-int main(int argc, char **argv) {
-  aos::InitGoogle(&argc, &argv);
-  y2023::vision::AprilViewerMain();
-
-  return 0;
-}
diff --git a/y2023/vision/aprilrobotics.h b/y2023/vision/aprilrobotics.h
index f36f3eb..6aafd75 100644
--- a/y2023/vision/aprilrobotics.h
+++ b/y2023/vision/aprilrobotics.h
@@ -3,7 +3,6 @@
 
 #include "aos/events/event_loop.h"
 #include "aos/events/shm_event_loop.h"
-#include "aos/init.h"
 #include "aos/network/team_number.h"
 #include "aos/realtime.h"
 #include "frc971/vision/calibration_generated.h"
diff --git a/y2023/vision/aprilrobotics_main.cc b/y2023/vision/aprilrobotics_main.cc
new file mode 100644
index 0000000..67b853f
--- /dev/null
+++ b/y2023/vision/aprilrobotics_main.cc
@@ -0,0 +1,34 @@
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "y2023/vision/aprilrobotics.h"
+
+DEFINE_string(config, "aos_config.json", "Path to the config file to use.");
+
+namespace y2023::vision {
+void AprilViewerMain() {
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig(FLAGS_config);
+
+  aos::ShmEventLoop event_loop(&config.message());
+
+  AprilRoboticsDetector detector(&event_loop, "/camera");
+
+  detector.SetWorkerpoolAffinities();
+
+  event_loop.SetRuntimeAffinity(aos::MakeCpusetFromCpus({5}));
+
+  struct sched_param param;
+  param.sched_priority = 21;
+  PCHECK(sched_setscheduler(0, SCHED_FIFO, &param) == 0);
+
+  event_loop.Run();
+}
+
+}  // namespace y2023::vision
+
+int main(int argc, char **argv) {
+  aos::InitGoogle(&argc, &argv);
+  y2023::vision::AprilViewerMain();
+
+  return 0;
+}