[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
Wed Jan 25 10:57:41 PST 2017
@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_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 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/20170125/d95c7687/attachment-0001.html>
More information about the cfe-commits
mailing list