pw_sync_threadx: Add pw::sync::SpinLock backend

Adds initial ThreadX support through a SpinLock backend for
pw_sync. Note that this first backend does not support ThreadX
with SMP enabled, taking a shortcut to detect SpinLock recursion
instead.

Change-Id: I6cb4d1edfe78bc97fc632cfb353589e53f87f2c7
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/25803
Commit-Queue: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
diff --git a/pw_sync_threadx/BUILD b/pw_sync_threadx/BUILD
new file mode 100644
index 0000000..54dff01
--- /dev/null
+++ b/pw_sync_threadx/BUILD
@@ -0,0 +1,49 @@
+# Copyright 2020 The Pigweed Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+load(
+    "//pw_build:pigweed.bzl",
+    "pw_cc_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])  # Apache License 2.0
+
+pw_cc_library(
+    name = "spin_lock_headers",
+    hdrs = [
+        "public/pw_sync_threadx/spin_lock_inline.h",
+        "public/pw_sync_threadx/spin_lock_native.h",
+        "public_overrides/pw_sync_backend/spin_lock_inline.h",
+        "public_overrides/pw_sync_backend/spin_lock_native.h",
+    ],
+    includes = [
+        "public",
+        "public_overrides",
+    ],
+    # TODO: This should depend on ThreadX but our third parties currently
+    # do not have Bazel support.
+)
+
+pw_cc_library(
+    name = "spin_lock",
+    srcs = [
+        "spin_lock.cc",
+    ],
+    deps = [
+        ":spin_lock_headers",
+        "//pw_sync:spin_lock_facade",
+    ],
+)