<div dir="ltr">This breaks all our mac builds with:<div><br></div><div><div>/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'</div><div>mach_port_t __libcpp_thread_get_port();</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 3, 2017 at 7:59 AM, Asiri Rathnayake via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: asiri<br>
Date: Tue Jan 3 06:59:50 2017<br>
New Revision: 290889<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=290889&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=290889&view=rev</a><br>
Log:<br>
[libcxx] Add build/test support for the externally threaded libc++abi variant<br>
<br>
Differential revision: <a href="https://reviews.llvm.org/D27576" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D27576</a><br>
<br>
Reviewers: EricWF<br>
<br>
Modified:<br>
libcxx/trunk/CMakeLists.txt<br>
libcxx/trunk/include/__<wbr>threading_support<br>
libcxx/trunk/test/CMakeLists.<wbr>txt<br>
libcxx/trunk/test/libcxx/test/<wbr>config.py<br>
libcxx/trunk/test/<a href="http://lit.site.cfg.in" rel="noreferrer" target="_blank">lit.site.<wbr>cfg.in</a><br>
<br>
Modified: libcxx/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=290889&r1=290888&r2=290889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/<wbr>CMakeLists.txt?rev=290889&r1=<wbr>290888&r2=290889&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/CMakeLists.txt (original)<br>
+++ libcxx/trunk/CMakeLists.txt Tue Jan 3 06:59:50 2017<br>
@@ -221,14 +221,21 @@ if(LIBCXX_ENABLE_THREADS AND NOT LIBCXX_<br>
" when LIBCXX_ENABLE_THREADS is also set to OFF.")<br>
endif()<br>
<br>
-if(LIBCXX_HAS_PTHREAD_API AND NOT LIBCXX_ENABLE_THREADS)<br>
- message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to ON"<br>
- " when LIBCXX_ENABLE_THREADS is also set to ON.")<br>
+if(NOT LIBCXX_ENABLE_THREADS)<br>
+ if(LIBCXX_HAS_PTHREAD_API)<br>
+ message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to ON"<br>
+ " when LIBCXX_ENABLE_THREADS is also set to ON.")<br>
+ endif()<br>
+ if(LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API)<br>
+ message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API can only be set to ON"<br>
+ " when LIBCXX_ENABLE_THREADS is also set to ON.")<br>
+ endif()<br>
endif()<br>
<br>
-if(LIBCXX_HAS_EXTERNAL_<wbr>THREAD_API AND NOT LIBCXX_ENABLE_THREADS)<br>
- message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API can only be set to ON"<br>
- " when LIBCXX_ENABLE_THREADS is also set to ON.")<br>
+if(LIBCXX_HAS_PTHREAD_API AND LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API)<br>
+ message(FATAL_ERROR "The options LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API"<br>
+ "and LIBCXX_HAS_PTHREAD_API cannot be both"<br>
+ "set to ON at the same time.")<br>
endif()<br>
<br>
# Ensure LLVM_USE_SANITIZER is not specified when LIBCXX_GENERATE_COVERAGE<br>
<br>
Modified: libcxx/trunk/include/__<wbr>threading_support<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__threading_support?rev=290889&r1=290888&r2=290889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/include/_<wbr>_threading_support?rev=290889&<wbr>r1=290888&r2=290889&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/include/__<wbr>threading_support (original)<br>
+++ libcxx/trunk/include/__<wbr>threading_support Tue Jan 3 06:59:50 2017<br>
@@ -67,7 +67,11 @@ typedef pthread_mutex_t __libcpp_mutex_t<br>
typedef pthread_cond_t __libcpp_condvar_t;<br>
#define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER<br>
<br>
-// THread ID<br>
+// Execute once<br>
+typedef pthread_once_t __libcpp_exec_once_flag;<br>
+#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT<br>
+<br>
+// Thread id<br>
typedef pthread_t __libcpp_thread_id;<br>
<br>
// Thread<br>
@@ -110,7 +114,17 @@ int __libcpp_condvar_timedwait(__<wbr>libcpp_<br>
_LIBCPP_THREAD_ABI_VISIBILITY<br>
int __libcpp_condvar_destroy(__<wbr>libcpp_condvar_t* __cv);<br>
<br>
-// Thread ID<br>
+// Execute once<br>
+_LIBCPP_THREAD_ABI_VISIBILITY<br>
+int __libcpp_execute_once(__<wbr>libcpp_exec_once_flag *flag,<br>
+ void (*init_routine)(void));<br>
+<br>
+// Thread id<br>
+#if defined(__APPLE__) && !defined(__arm__)<br>
+_LIBCPP_THREAD_ABI_VISIBILITY<br>
+mach_port_t __libcpp_thread_get_port();<br>
+#endif<br>
+<br>
_LIBCPP_THREAD_ABI_VISIBILITY<br>
bool __libcpp_thread_id_equal(__<wbr>libcpp_thread_id t1, __libcpp_thread_id t2);<br>
<br>
@@ -145,7 +159,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY<br>
void *__libcpp_tls_get(__libcpp_<wbr>tls_key __key);<br>
<br>
_LIBCPP_THREAD_ABI_VISIBILITY<br>
-void __libcpp_tls_set(__libcpp_tls_<wbr>key __key, void *__p);<br>
+int __libcpp_tls_set(__libcpp_tls_<wbr>key __key, void *__p);<br>
<br>
#if defined(_LIBCPP_HAS_THREAD_<wbr>API_PTHREAD) || \<br>
defined(_LIBCPP_BUILDING_<wbr>THREAD_API_EXTERNAL_PTHREAD)<br>
@@ -221,6 +235,19 @@ int __libcpp_condvar_destroy(__<wbr>libcpp_co<br>
return pthread_cond_destroy(__cv);<br>
}<br>
<br>
+// Execute once<br>
+int __libcpp_execute_once(__<wbr>libcpp_exec_once_flag *flag,<br>
+ void (*init_routine)(void)) {<br>
+ return pthread_once(flag, init_routine);<br>
+}<br>
+<br>
+// Thread id<br>
+#if defined(__APPLE__) && !defined(__arm__)<br>
+mach_port_t __libcpp_thread_get_port() {<br>
+ return pthread_mach_thread_np(<wbr>pthread_self());<br>
+}<br>
+#endif<br>
+<br>
// Returns non-zero if the thread ids are equal, otherwise 0<br>
bool __libcpp_thread_id_equal(__<wbr>libcpp_thread_id t1, __libcpp_thread_id t2)<br>
{<br>
@@ -276,9 +303,9 @@ void *__libcpp_tls_get(__libcpp_<wbr>tls_key<br>
return pthread_getspecific(__key);<br>
}<br>
<br>
-void __libcpp_tls_set(__libcpp_tls_<wbr>key __key, void *__p)<br>
+int __libcpp_tls_set(__libcpp_tls_<wbr>key __key, void *__p)<br>
{<br>
- pthread_setspecific(__key, __p);<br>
+ return pthread_setspecific(__key, __p);<br>
}<br>
<br>
#endif // _LIBCPP_HAS_THREAD_API_PTHREAD<br>
<br>
Modified: libcxx/trunk/test/CMakeLists.<wbr>txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/CMakeLists.txt?rev=290889&r1=290888&r2=290889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/test/<wbr>CMakeLists.txt?rev=290889&r1=<wbr>290888&r2=290889&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/test/CMakeLists.<wbr>txt (original)<br>
+++ libcxx/trunk/test/CMakeLists.<wbr>txt Tue Jan 3 06:59:50 2017<br>
@@ -55,18 +55,20 @@ configure_file(<br>
${CMAKE_CURRENT_BINARY_DIR}/<wbr>lit.site.cfg<br>
@ONLY)<br>
<br>
+set(LIBCXX_TEST_DEPS "")<br>
+<br>
if (LIBCXX_ENABLE_EXPERIMENTAL_<wbr>LIBRARY)<br>
- set(experimental_dep cxx_experimental)<br>
+ set(LIBCXX_TEST_DEPS cxx_experimental)<br>
endif()<br>
<br>
if (LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API)<br>
- set(external_threads_dep cxx_external_threads)<br>
+ list(APPEND LIBCXX_TEST_DEPS cxx_external_threads)<br>
endif()<br>
<br>
add_lit_testsuite(check-cxx<br>
"Running libcxx tests"<br>
${CMAKE_CURRENT_BINARY_DIR}<br>
- DEPENDS cxx ${experimental_dep} ${external_threads_dep})<br>
+ DEPENDS cxx ${LIBCXX_TEST_DEPS})<br>
<br>
add_custom_target(check-libcxx DEPENDS check-cxx)<br>
<br>
<br>
Modified: libcxx/trunk/test/libcxx/test/<wbr>config.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=290889&r1=290888&r2=290889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/test/<wbr>libcxx/test/config.py?rev=<wbr>290889&r1=290888&r2=290889&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/test/libcxx/test/<wbr>config.py (original)<br>
+++ libcxx/trunk/test/libcxx/test/<wbr>config.py Tue Jan 3 06:59:50 2017<br>
@@ -579,10 +579,6 @@ class Configuration(object):<br>
self.cxx.link_flags += [abs_path]<br>
else:<br>
self.cxx.link_flags += ['-lc++']<br>
- # This needs to come after -lc++ as we want its unresolved thread-api symbols<br>
- # to be picked up from this one.<br>
- if self.get_lit_bool('libcxx_<wbr>external_thread_api', default=False):<br>
- self.cxx.link_flags += ['-lc++external_threads']<br>
<br>
def configure_link_flags_abi_<wbr>library(self):<br>
cxx_abi = self.get_lit_conf('cxx_abi', 'libcxxabi')<br>
@@ -611,6 +607,8 @@ class Configuration(object):<br>
'C++ ABI setting %s unsupported for tests' % cxx_abi)<br>
<br>
def configure_extra_library_flags(<wbr>self):<br>
+ if self.get_lit_bool('cxx_ext_<wbr>threads', default=False):<br>
+ self.cxx.link_flags += ['-lc++external_threads']<br>
self.target_info.add_cxx_link_<wbr>flags(self.cxx.link_flags)<br>
<br>
def configure_color_diagnostics(<wbr>self):<br>
<br>
Modified: libcxx/trunk/test/<a href="http://lit.site.cfg.in" rel="noreferrer" target="_blank">lit.site.<wbr>cfg.in</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.site.cfg.in?rev=290889&r1=290888&r2=290889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libcxx/trunk/test/lit.<wbr>site.cfg.in?rev=290889&r1=<wbr>290888&r2=290889&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- libcxx/trunk/test/<a href="http://lit.site.cfg.in" rel="noreferrer" target="_blank">lit.site.<wbr>cfg.in</a> (original)<br>
+++ libcxx/trunk/test/<a href="http://lit.site.cfg.in" rel="noreferrer" target="_blank">lit.site.<wbr>cfg.in</a> Tue Jan 3 06:59:50 2017<br>
@@ -28,7 +28,7 @@ config.has_libatomic = "@LIBC<br>
config.use_libatomic = "@LIBCXX_HAVE_CXX_ATOMICS_<wbr>WITH_LIB@"<br>
<br>
config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@"<br>
-config.libcxx_external_<wbr>thread_api = "@LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API@"<br>
+config.cxx_ext_threads = "@LIBCXX_HAS_EXTERNAL_THREAD_<wbr>API@"<br>
<br>
# Let the main config do the real work.<br>
config.loaded_site_config = True<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>