(including cfe-commits) On Wed, Jan 25, 2017 at 5:51 PM, Asiri Rathnayake < asiri.rathnay...@gmail.com> wrote:
> Hi Nico, > > On Wed, Jan 25, 2017 at 5:32 PM, Nico Weber via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Is it intentional that this change affects non-LIBCXX_HAS_EXTERNAL_THREAD_API >> builds at all?# >> > > Nope. But I'm not sure how this got broken on Mac. > > IIRC, <pthread.h> defines mach_port_t type on Mac, which gets included > when _LIBCPP_HAS_THREAD_API_PTHREAD is defined (which is what we expect > to be the case on Mac, normally). > > I'll have to build this on a Mac tomorrow. Hopefully that's OK? > > Cheers, > > / Asiri > > > >> >> On Wed, Jan 25, 2017 at 12:31 PM, Nico Weber <tha...@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@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/__t >>>> hreading_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@lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>> >>> >>> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits