[libcxx] r290889 - [libcxx] Add build/test support for the externally threaded libc++abi variant
Asiri Rathnayake via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 26 03:56:37 PST 2017
Hi Nico,
Hopefully I've sorted this out in r293166/r293167. Please let me know if
things are not back to normal.
(I'll keep an eye on your builder too)
/ Asiri
On Wed, Jan 25, 2017 at 8:42 PM, Asiri Rathnayake <
asiri.rathnayake at gmail.com> wrote:
> Hi Nico,
>
> Thanks for the links. I may have a clue to what is going on.
>
> I think in your Mac environment, <pthread.h> does not provide
> either pthread_mach_thread_np() function or define the type mach_port_t
> (is there a way for you to check this btw? just to make sure).
>
> This was not a problem before (for your builds) because this function was
> only used in libcxxabi sources. In my eagerness to get rid of all pthread
> dependencies in libcxx/libcxxabi, I have lifted this out into
> __threading_support header in libcxx (which is our new threading API for
> both libcxx and libcxxabi).
>
> @Eric: would it be OK to leave this Mac-specific pthread dependency in
> libcxxabi sources as it was? In that way, libcxx builds like Nico's won't
> be affected.
>
> Another option is to try and detect the conditions (on Mac environments)
> where pthread_mach_thread_np/mach_port_t is available, and only define
> the corresponding libcxx thread-api function (__libcpp_thread_get_port)
> when this condition is true. Unfortunately I'm not familiar with Mac enough
> to know this. Any thoughts?
>
> Side note:- Btw, if I'm correct with the above analysis, it won't be
> possible to build libcxxabi in Nico's environment (even before my changes).
> The dependency on pthread_mach_thread_np() was already there
> in __cxa_guard_acquire().
>
> Thanks.
>
> / Asiri
>
>
> On Wed, Jan 25, 2017 at 7:34 PM, Nico Weber <thakis at chromium.org> wrote:
>
>> Sure! https://build.chromium.org/p/chromium.fyi/builders/Cla
>> ngToTMacASan/builds/8565/steps/gclient%20runhooks/logs/stdio has the
>> invocations to build llvm/clang/compiler/rt, and
>> https://build.chromium.org/p/chromium.fyi/builders/Clang
>> ToTMacASan/builds/8565/steps/compile/logs/stdio is the actual build
>> using that setup.
>>
>> On Wed, Jan 25, 2017 at 1:57 PM, Asiri Rathnayake <
>> asiri.rathnayake at gmail.com> wrote:
>>
>>> @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.rathnayake at gmail.com>
>>> wrote:
>>>
>>>> (including cfe-commits)
>>>>
>>>> On Wed, Jan 25, 2017 at 5:51 PM, Asiri Rathnayake <
>>>> asiri.rathnayake at gmail.com> wrote:
>>>>
>>>>> Hi Nico,
>>>>>
>>>>> On Wed, Jan 25, 2017 at 5:32 PM, Nico Weber via cfe-commits <
>>>>> cfe-commits at 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 <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/__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_A
>>>>>>>> PI@"
>>>>>>>>
>>>>>>>> # 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
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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/20170126/723ad4b4/attachment-0001.html>
More information about the cfe-commits
mailing list