[libc][NFC] Add the platform independent file target only if mutex is available.
authorSiva Chandra Reddy <sivachandra@google.com>
Thu, 17 Mar 2022 20:34:22 +0000 (20:34 +0000)
committerSiva Chandra Reddy <sivachandra@google.com>
Fri, 18 Mar 2022 03:34:38 +0000 (03:34 +0000)
The platform independent file implementation is not an entrypoint so it
cannot be excluded via the entrypoints.txt file. Hence, we need a
special treatment to exclude it from the build.

Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D121947

libc/src/__support/CMakeLists.txt
libc/src/__support/File/CMakeLists.txt
libc/src/__support/threads/CMakeLists.txt
libc/src/__support/threads/linux/CMakeLists.txt
libc/src/__support/threads/linux/mutex.h
libc/src/__support/threads/mutex.h
libc/src/__support/threads/mutex_common.h [new file with mode: 0644]
libc/src/stdlib/CMakeLists.txt
libc/src/threads/CMakeLists.txt
libc/src/threads/linux/CMakeLists.txt

index 6483779..8ac10d2 100644 (file)
@@ -54,7 +54,10 @@ add_header_library(
     integer_operations.h
 )
 
+# Thread support is used by other support libraries. So, we add the "threads"
+# before other directories.
+add_subdirectory(threads)
+
 add_subdirectory(File)
 add_subdirectory(FPUtil)
 add_subdirectory(OSUtil)
-add_subdirectory(threads)
index 1240324..e80eaa2 100644 (file)
@@ -1,3 +1,9 @@
+if(NOT (TARGET libc.src.__support.threads.mutex))
+  # Not all platforms have a mutex implementation. If mutex is unvailable,
+  # we just skip everything about files.
+  return()
+endif()
+
 add_object_library(
   file
   SRCS
@@ -5,7 +11,7 @@ add_object_library(
   HDRS
     file.h
   DEPENDS
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
     libc.include.errno
     libc.src.errno.errno
 )
index a2792c3..6ded0da 100644 (file)
@@ -1,11 +1,19 @@
+add_header_library(
+  mutex_common
+  HDRS
+    mutex_common.h
+)
+
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
   add_subdirectory(${LIBC_TARGET_OS})
 endif()
 
-add_header_library(
-  thread
-  HDRS
-    mutex.h
-  DEPENDS
-    .${LIBC_TARGET_OS}.thread
-)
+if(TARGET libc.src.__support.threads.${LIBC_TARGET_OS}.mutex)
+  add_header_library(
+    mutex
+    HDRS
+      mutex.h
+    DEPENDS
+      .${LIBC_TARGET_OS}.mutex
+  )
+endif()
index 53a150a..5dd154d 100644 (file)
@@ -1,9 +1,10 @@
 add_header_library(
-  thread
+  mutex
   HDRS
     mutex.h
   DEPENDS
     libc.include.sys_syscall
     libc.src.__support.CPP.atomic
     libc.src.__support.OSUtil.osutil
+    libc.src.__support.threads.mutex_common
 )
index e4e06e9..5926fd9 100644 (file)
@@ -11,7 +11,7 @@
 
 #include "src/__support/CPP/atomic.h"
 #include "src/__support/OSUtil/syscall.h" // For syscall functions.
-#include "src/__support/threads/mutex.h"
+#include "src/__support/threads/mutex_common.h"
 
 #include <linux/futex.h>
 #include <stdint.h>
index f585dcd..1015333 100644 (file)
@@ -9,18 +9,6 @@
 #ifndef LLVM_LIBC_SRC_SUPPORT_THREAD_MUTEX_H
 #define LLVM_LIBC_SRC_SUPPORT_THREAD_MUTEX_H
 
-namespace __llvm_libc {
-
-enum class MutexError : int {
-  NONE,
-  BUSY,
-  TIMEOUT,
-  UNLOCK_WITHOUT_LOCK,
-  BAD_LOCK_STATE,
-};
-
-} // namespace __llvm_libc
-
 // Platform independent code will include this header file which pulls
 // the platfrom specific specializations using platform macros.
 //
diff --git a/libc/src/__support/threads/mutex_common.h b/libc/src/__support/threads/mutex_common.h
new file mode 100644 (file)
index 0000000..2fde20a
--- /dev/null
@@ -0,0 +1,24 @@
+//===--- Common definitions useful for mutex implementations ----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_SUPPORT_THREAD_MUTEX_COMMON_H
+#define LLVM_LIBC_SRC_SUPPORT_THREAD_MUTEX_COMMON_H
+
+namespace __llvm_libc {
+
+enum class MutexError : int {
+  NONE,
+  BUSY,
+  TIMEOUT,
+  UNLOCK_WITHOUT_LOCK,
+  BAD_LOCK_STATE,
+};
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_SUPPORT_THREAD_MUTEX_COMMON_H
index e1bf45f..77a4073 100644 (file)
@@ -280,7 +280,7 @@ add_entrypoint_object(
     20 # For constinit of the atexit callback list.
   DEPENDS
     libc.src.__support.CPP.blockstore
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
index 2a4f04d..a02fc16 100644 (file)
@@ -31,7 +31,7 @@ add_entrypoint_object(
     mtx_init.h
   DEPENDS
     libc.include.threads
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
@@ -42,7 +42,7 @@ add_entrypoint_object(
     mtx_destroy.h
   DEPENDS
     libc.include.threads
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
@@ -53,7 +53,7 @@ add_entrypoint_object(
     mtx_lock.h
   DEPENDS
     libc.include.threads
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
@@ -64,7 +64,7 @@ add_entrypoint_object(
     mtx_unlock.h
   DEPENDS
     libc.include.threads
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
index 5ca715b..6706c42 100644 (file)
@@ -34,7 +34,7 @@ add_header_library(
     libc.include.threads
     libc.src.__support.CPP.atomic
     libc.src.__support.OSUtil.osutil
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(
@@ -105,7 +105,7 @@ add_entrypoint_object(
   DEPENDS
     .threads_utils
     libc.include.threads
-    libc.src.__support.threads.thread
+    libc.src.__support.threads.mutex
 )
 
 add_entrypoint_object(