@Nico: could you let me know your build configuration? (cmake options) I'm surprised this went unnoticed for so long.
Thanks. / Asiri On 25 Jan 2017 5:52 p.m., "Asiri Rathnayake" <asiri.rathnay...@gmail.com> wrote: > (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_A >>>>> PI@" >>>>> +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