pw_sync: adds VirtualBasicLockable interface

Adds a virtual lock interface in case the lock selection cannot
be templated.

Change-Id: I79f3f28c28572e970ddf4002477e0ea2c6ee02ab
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/58202
Pigweed-Auto-Submit: Ewout van Bekkum <ewout@google.com>
Commit-Queue: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
diff --git a/pw_sync/BUILD.bazel b/pw_sync/BUILD.bazel
index c8cbe1c..d395863 100644
--- a/pw_sync/BUILD.bazel
+++ b/pw_sync/BUILD.bazel
@@ -115,10 +115,23 @@
     ],
     includes = ["public"],
     deps = [
+        ":virtual_basic_lockable",
         "//pw_assert",
     ],
 )
 
+pw_cc_library(
+    name = "virtual_basic_lockable",
+    hdrs = [
+        "public/pw_sync/virtual_basic_lockable.h",
+    ],
+    includes = ["public"],
+    deps = [
+        ":lock_annotations",
+        "//pw_polyfill",
+    ],
+)
+
 pw_cc_facade(
     name = "mutex_facade",
     hdrs = [
@@ -127,6 +140,7 @@
     includes = ["public"],
     deps = [
         ":lock_annotations",
+        ":virtual_basic_lockable",
         "//pw_preprocessor",
     ],
 )
@@ -163,6 +177,7 @@
     deps = [
         ":lock_annotations",
         ":mutex_facade",
+        ":virtual_basic_lockable",
         "//pw_chrono:system_clock",
         "//pw_preprocessor",
     ],
@@ -176,6 +191,7 @@
     deps = [
         ":mutex",
         ":timed_mutex_facade",
+        ":virtual_basic_lockable",
         "@pigweed_config//:pw_sync_timed_mutex_backend",
     ],
 )
@@ -200,6 +216,7 @@
     includes = ["public"],
     deps = [
         ":lock_annotations",
+        ":virtual_basic_lockable",
         "//pw_preprocessor",
     ],
 )
@@ -350,6 +367,7 @@
     ],
     deps = [
         ":borrow",
+        ":virtual_basic_lockable",
         "//pw_assert",
         "//pw_unit_test",
     ],