[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
Thu Jan 26 09:40:54 PST 2017


Yes, things are happy again, thanks!

Our bots currently use the macOS 10.10 SDK.

On Thu, Jan 26, 2017 at 6:56 AM, Asiri Rathnayake <
asiri.rathnayake at gmail.com> wrote:

> 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/abc8ce54/attachment-0001.html>


More information about the cfe-commits mailing list