[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
Wed Jan 25 11:34:23 PST 2017


Sure!
https://build.chromium.org/p/chromium.fyi/builders/ClangToTMacASan/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/ClangToTMacASan/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_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/642dcde8/attachment-0001.html>


More information about the cfe-commits mailing list