[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:31:12 PST 2017


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/
> CMakeLists.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.
> site.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/a7368300/attachment-0001.html>


More information about the cfe-commits mailing list