From c236b41e451a4b25767ff16fcd025b05a4a8e0c4 Mon Sep 17 00:00:00 2001 From: Siva Chandra Reddy Date: Thu, 17 Mar 2022 20:34:22 +0000 Subject: [PATCH] [libc][NFC] Add the platform independent file target only if mutex is available. 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 | 5 +++- libc/src/__support/File/CMakeLists.txt | 8 ++++++- libc/src/__support/threads/CMakeLists.txt | 22 +++++++++++------ .../__support/threads/linux/CMakeLists.txt | 3 ++- libc/src/__support/threads/linux/mutex.h | 2 +- libc/src/__support/threads/mutex.h | 12 ---------- libc/src/__support/threads/mutex_common.h | 24 +++++++++++++++++++ libc/src/stdlib/CMakeLists.txt | 2 +- libc/src/threads/CMakeLists.txt | 8 +++---- libc/src/threads/linux/CMakeLists.txt | 4 ++-- 10 files changed, 60 insertions(+), 30 deletions(-) create mode 100644 libc/src/__support/threads/mutex_common.h diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt index 64837795196bda..8ac10d26ffca79 100644 --- a/libc/src/__support/CMakeLists.txt +++ b/libc/src/__support/CMakeLists.txt @@ -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) diff --git a/libc/src/__support/File/CMakeLists.txt b/libc/src/__support/File/CMakeLists.txt index 12403242a847f4..e80eaa27a9109d 100644 --- a/libc/src/__support/File/CMakeLists.txt +++ b/libc/src/__support/File/CMakeLists.txt @@ -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 ) diff --git a/libc/src/__support/threads/CMakeLists.txt b/libc/src/__support/threads/CMakeLists.txt index a2792c3475dd17..6ded0da525a40e 100644 --- a/libc/src/__support/threads/CMakeLists.txt +++ b/libc/src/__support/threads/CMakeLists.txt @@ -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() diff --git a/libc/src/__support/threads/linux/CMakeLists.txt b/libc/src/__support/threads/linux/CMakeLists.txt index 53a150a05d2d7c..5dd154d53e897e 100644 --- a/libc/src/__support/threads/linux/CMakeLists.txt +++ b/libc/src/__support/threads/linux/CMakeLists.txt @@ -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 ) diff --git a/libc/src/__support/threads/linux/mutex.h b/libc/src/__support/threads/linux/mutex.h index e4e06e99b5eb2e..5926fd96e45f19 100644 --- a/libc/src/__support/threads/linux/mutex.h +++ b/libc/src/__support/threads/linux/mutex.h @@ -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 #include diff --git a/libc/src/__support/threads/mutex.h b/libc/src/__support/threads/mutex.h index f585dcd1c32fab..1015333b677a9e 100644 --- a/libc/src/__support/threads/mutex.h +++ b/libc/src/__support/threads/mutex.h @@ -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 index 00000000000000..2fde20a3fe828f --- /dev/null +++ b/libc/src/__support/threads/mutex_common.h @@ -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 diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt index e1bf45f5a3bb50..77a407347542b0 100644 --- a/libc/src/stdlib/CMakeLists.txt +++ b/libc/src/stdlib/CMakeLists.txt @@ -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( diff --git a/libc/src/threads/CMakeLists.txt b/libc/src/threads/CMakeLists.txt index 2a4f04debce559..a02fc161ecc5cf 100644 --- a/libc/src/threads/CMakeLists.txt +++ b/libc/src/threads/CMakeLists.txt @@ -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( diff --git a/libc/src/threads/linux/CMakeLists.txt b/libc/src/threads/linux/CMakeLists.txt index 5ca715b3c6a553..6706c422934bc0 100644 --- a/libc/src/threads/linux/CMakeLists.txt +++ b/libc/src/threads/linux/CMakeLists.txt @@ -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(