[libcxx] r290889 - [libcxx] Add build/test support for the externally threaded libc++abi variant

Nico Weber via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 25 09:32:38 PST 2017


Is it intentional that this change affects
non-LIBCXX_HAS_EXTERNAL_THREAD_API builds at all?

On Wed, Jan 25, 2017 at 12:31 PM, Nico Weber <thakis at chromium.org> wrote:

> This breaks all our mac builds with:
>
> /b/c/b/ClangToTMac__dbg_/src/third_party/llvm-build/
> Release+Asserts/bin/../include/c++/v1/__threading_support:154:1: error:
> unknown type name 'mach_port_t'
> mach_port_t __libcpp_thread_get_port();
>
> On Tue, Jan 3, 2017 at 7:59 AM, Asiri Rathnayake via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: asiri
>> Date: Tue Jan  3 06:59:50 2017
>> New Revision: 290889
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=290889&view=rev
>> Log:
>> [libcxx] Add build/test support for the externally threaded libc++abi
>> variant
>>
>> Differential revision: https://reviews.llvm.org/D27576
>>
>> Reviewers: EricWF
>>
>> Modified:
>>     libcxx/trunk/CMakeLists.txt
>>     libcxx/trunk/include/__threading_support
>>     libcxx/trunk/test/CMakeLists.txt
>>     libcxx/trunk/test/libcxx/test/config.py
>>     libcxx/trunk/test/lit.site.cfg.in
>>
>> Modified: libcxx/trunk/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.
>> txt?rev=290889&r1=290888&r2=290889&view=diff
>> ============================================================
>> ==================
>> --- libcxx/trunk/CMakeLists.txt (original)
>> +++ libcxx/trunk/CMakeLists.txt Tue Jan  3 06:59:50 2017
>> @@ -221,14 +221,21 @@ if(LIBCXX_ENABLE_THREADS AND NOT LIBCXX_
>>                        " when LIBCXX_ENABLE_THREADS is also set to OFF.")
>>  endif()
>>
>> -if(LIBCXX_HAS_PTHREAD_API AND NOT LIBCXX_ENABLE_THREADS)
>> -  message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to ON"
>> -                      " when LIBCXX_ENABLE_THREADS is also set to ON.")
>> +if(NOT LIBCXX_ENABLE_THREADS)
>> +  if(LIBCXX_HAS_PTHREAD_API)
>> +    message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to ON"
>> +                        " when LIBCXX_ENABLE_THREADS is also set to ON.")
>> +  endif()
>> +  if(LIBCXX_HAS_EXTERNAL_THREAD_API)
>> +    message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_API can only be set
>> to ON"
>> +                        " when LIBCXX_ENABLE_THREADS is also set to ON.")
>> +  endif()
>>  endif()
>>
>> -if(LIBCXX_HAS_EXTERNAL_THREAD_API AND NOT LIBCXX_ENABLE_THREADS)
>> -  message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_API can only be set
>> to ON"
>> -                      " when LIBCXX_ENABLE_THREADS is also set to ON.")
>> +if(LIBCXX_HAS_PTHREAD_API AND LIBCXX_HAS_EXTERNAL_THREAD_API)
>> +  message(FATAL_ERROR "The options LIBCXX_HAS_EXTERNAL_THREAD_API"
>> +                      "and LIBCXX_HAS_PTHREAD_API cannot be both"
>> +                      "set to ON at the same time.")
>>  endif()
>>
>>  # Ensure LLVM_USE_SANITIZER is not specified when
>> LIBCXX_GENERATE_COVERAGE
>>
>> Modified: libcxx/trunk/include/__threading_support
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__
>> threading_support?rev=290889&r1=290888&r2=290889&view=diff
>> ============================================================
>> ==================
>> --- libcxx/trunk/include/__threading_support (original)
>> +++ libcxx/trunk/include/__threading_support Tue Jan  3 06:59:50 2017
>> @@ -67,7 +67,11 @@ typedef pthread_mutex_t __libcpp_mutex_t
>>  typedef pthread_cond_t __libcpp_condvar_t;
>>  #define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER
>>
>> -// THread ID
>> +// Execute once
>> +typedef pthread_once_t __libcpp_exec_once_flag;
>> +#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT
>> +
>> +// Thread id
>>  typedef pthread_t __libcpp_thread_id;
>>
>>  // Thread
>> @@ -110,7 +114,17 @@ int __libcpp_condvar_timedwait(__libcpp_
>>  _LIBCPP_THREAD_ABI_VISIBILITY
>>  int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv);
>>
>> -// Thread ID
>> +// Execute once
>> +_LIBCPP_THREAD_ABI_VISIBILITY
>> +int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
>> +                          void (*init_routine)(void));
>> +
>> +// Thread id
>> +#if defined(__APPLE__) && !defined(__arm__)
>> +_LIBCPP_THREAD_ABI_VISIBILITY
>> +mach_port_t __libcpp_thread_get_port();
>> +#endif
>> +
>>  _LIBCPP_THREAD_ABI_VISIBILITY
>>  bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id
>> t2);
>>
>> @@ -145,7 +159,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY
>>  void *__libcpp_tls_get(__libcpp_tls_key __key);
>>
>>  _LIBCPP_THREAD_ABI_VISIBILITY
>> -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p);
>> +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p);
>>
>>  #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \
>>      defined(_LIBCPP_BUILDING_THREAD_API_EXTERNAL_PTHREAD)
>> @@ -221,6 +235,19 @@ int __libcpp_condvar_destroy(__libcpp_co
>>    return pthread_cond_destroy(__cv);
>>  }
>>
>> +// Execute once
>> +int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
>> +                          void (*init_routine)(void)) {
>> +  return pthread_once(flag, init_routine);
>> +}
>> +
>> +// Thread id
>> +#if defined(__APPLE__) && !defined(__arm__)
>> +mach_port_t __libcpp_thread_get_port() {
>> +    return pthread_mach_thread_np(pthread_self());
>> +}
>> +#endif
>> +
>>  // Returns non-zero if the thread ids are equal, otherwise 0
>>  bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id
>> t2)
>>  {
>> @@ -276,9 +303,9 @@ void *__libcpp_tls_get(__libcpp_tls_key
>>    return pthread_getspecific(__key);
>>  }
>>
>> -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
>> +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
>>  {
>> -  pthread_setspecific(__key, __p);
>> +    return pthread_setspecific(__key, __p);
>>  }
>>
>>  #endif // _LIBCPP_HAS_THREAD_API_PTHREAD
>>
>> Modified: libcxx/trunk/test/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/CMakeL
>> ists.txt?rev=290889&r1=290888&r2=290889&view=diff
>> ============================================================
>> ==================
>> --- libcxx/trunk/test/CMakeLists.txt (original)
>> +++ libcxx/trunk/test/CMakeLists.txt Tue Jan  3 06:59:50 2017
>> @@ -55,18 +55,20 @@ configure_file(
>>    ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
>>    @ONLY)
>>
>> +set(LIBCXX_TEST_DEPS "")
>> +
>>  if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
>> -  set(experimental_dep cxx_experimental)
>> +  set(LIBCXX_TEST_DEPS cxx_experimental)
>>  endif()
>>
>>  if (LIBCXX_HAS_EXTERNAL_THREAD_API)
>> -  set(external_threads_dep cxx_external_threads)
>> +  list(APPEND LIBCXX_TEST_DEPS cxx_external_threads)
>>  endif()
>>
>>  add_lit_testsuite(check-cxx
>>    "Running libcxx tests"
>>    ${CMAKE_CURRENT_BINARY_DIR}
>> -  DEPENDS cxx ${experimental_dep} ${external_threads_dep})
>> +  DEPENDS cxx ${LIBCXX_TEST_DEPS})
>>
>>  add_custom_target(check-libcxx DEPENDS check-cxx)
>>
>>
>> Modified: libcxx/trunk/test/libcxx/test/config.py
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx
>> /test/config.py?rev=290889&r1=290888&r2=290889&view=diff
>> ============================================================
>> ==================
>> --- libcxx/trunk/test/libcxx/test/config.py (original)
>> +++ libcxx/trunk/test/libcxx/test/config.py Tue Jan  3 06:59:50 2017
>> @@ -579,10 +579,6 @@ class Configuration(object):
>>                  self.cxx.link_flags += [abs_path]
>>              else:
>>                  self.cxx.link_flags += ['-lc++']
>> -        # This needs to come after -lc++ as we want its unresolved
>> thread-api symbols
>> -        # to be picked up from this one.
>> -        if self.get_lit_bool('libcxx_external_thread_api',
>> default=False):
>> -            self.cxx.link_flags += ['-lc++external_threads']
>>
>>      def configure_link_flags_abi_library(self):
>>          cxx_abi = self.get_lit_conf('cxx_abi', 'libcxxabi')
>> @@ -611,6 +607,8 @@ class Configuration(object):
>>                  'C++ ABI setting %s unsupported for tests' % cxx_abi)
>>
>>      def configure_extra_library_flags(self):
>> +        if self.get_lit_bool('cxx_ext_threads', default=False):
>> +            self.cxx.link_flags += ['-lc++external_threads']
>>          self.target_info.add_cxx_link_flags(self.cxx.link_flags)
>>
>>      def configure_color_diagnostics(self):
>>
>> Modified: libcxx/trunk/test/lit.site.cfg.in
>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.si
>> te.cfg.in?rev=290889&r1=290888&r2=290889&view=diff
>> ============================================================
>> ==================
>> --- libcxx/trunk/test/lit.site.cfg.in (original)
>> +++ libcxx/trunk/test/lit.site.cfg.in Tue Jan  3 06:59:50 2017
>> @@ -28,7 +28,7 @@ config.has_libatomic            = "@LIBC
>>  config.use_libatomic            = "@LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB@"
>>
>>  config.libcxxabi_shared         = "@LIBCXXABI_ENABLE_SHARED@"
>> -config.libcxx_external_thread_api  = "@LIBCXX_HAS_EXTERNAL_THREAD_API@"
>> +config.cxx_ext_threads          = "@LIBCXX_HAS_EXTERNAL_THREAD_API@"
>>
>>  # Let the main config do the real work.
>>  config.loaded_site_config = True
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170125/10ace6de/attachment.html>


More information about the cfe-commits mailing list