<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/5949e6264728ac7f74625c9eaf5b41d2852d07e6">https://github.com/macports/macports-ports/commit/5949e6264728ac7f74625c9eaf5b41d2852d07e6</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 5949e6264728ac7f74625c9eaf5b41d2852d07e6
</span>Author: kencu <ken.cunningham.webuse@gmail.com>
AuthorDate: Thu Dec 13 10:10:16 2018 -0800

<span style='display:block; white-space:pre;color:#404040;'>    clang-5.0: support emulated-tls on systems prior to 10.7
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    1) tell clang that TLS is supported on all systems
</span><span style='display:block; white-space:pre;color:#404040;'>    2) tell clang to pass -femulated-tls by default on systems older than 10.7
</span><span style='display:block; white-space:pre;color:#404040;'>    3) tell llvm to use cxa_thread_atexit instead of tlv_atexit on systems older than 10.7
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    add support for C11 __thread and c++11 thread_local to < 10.7
</span>---
 lang/llvm-5.0/Portfile                             | 13 ++++-
 .../9000-patch-clang-support-emulated-tls.diff     | 57 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-5.0/Portfile b/lang/llvm-5.0/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 17a222a..1aa039b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/llvm-5.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-5.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -598,6 +598,17 @@ if {${subport} eq "llvm-${llvm_version}"} {
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant emulated_tls description { enable c11/c++11 thread support on older systems using emulated-tls } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # allow clang to use emulated-tls to support thread_local on systems prior to 10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # emulated TLS works when linking against macports-libstdc++ or against
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # libc++ / libc++abi with cxa_thread_atexit and emutls.c objects included
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            9000-patch-clang-support-emulated-tls.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default_variants-append +emulated_tls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     variant libstdcxx description {-stdlib=macports-libstdc++ searches for MacPorts libstdc++} {
 
         patchfiles-append 9001-macports-libstdcxx.diff
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -652,7 +663,7 @@ if {${subport} eq "llvm-${llvm_version}"} {
</span>                 ${worksrcpath}/tools/clang/lib/Frontend/InitHeaderSearch.cpp
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    default_variants +libstdcxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    default_variants-append +libstdcxx
</span> 
     post-patch {
         reinplace "s|@@PREFIX@@|${prefix}|" \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-5.0/files/9000-patch-clang-support-emulated-tls.diff b/lang/llvm-5.0/files/9000-patch-clang-support-emulated-tls.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..98e23db
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-5.0/files/9000-patch-clang-support-emulated-tls.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,57 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<kencu@macports.org> Ken Cunningham
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Patches to enable emulated-tls for older darwin systems in clang.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+1) tell clang that TLS is supported on all systems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2) tell clang to pass -femulated-tls by default on systems older than 10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+3) tell llvm to use cxa_thread_atexit instead of tlv_atexit on systems older than 10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+requires linking against a std c++ lib that supports TLS and contains cxa_thread_atexit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(libgcc newer than 4.8, or libc++abi with cxa_thread_atexit added).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+requires emutls.c objects available at link time to supply supporting routines for emulated-tls.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+emutls is available in libgcc, and should be available in libc++abi for supporting emulated-tls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ideally : llvm should call cxa_thread_atexit rather than tlv_atexit based on 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          the -femulated-tls flag rather than based on the system version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+these patches were originally formatted against clang-5.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+they can be applied to all clang builds, and will only affect systems 10.4 to 10.6 at present
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Basic/Targets.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/Basic/Targets.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -264,7 +264,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     this->TLSSupported = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (Triple.isMacOSX())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      this->TLSSupported = !Triple.isMacOSXVersionLT(10, 7);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      this->TLSSupported = !Triple.isMacOSXVersionLT(10, 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (Triple.isiOS()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       // 64-bit iOS supported it from 8 onwards, 32-bit from 9 onwards.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if (Triple.getArch() == llvm::Triple::x86_64 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Driver/ToolChains/Clang.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/Driver/ToolChains/Clang.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3209,9 +3209,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // Emulated TLS is enabled by default on Android and OpenBSD, and can be enabled
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // manually with -femulated-tls.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // manually with -femulated-tls. Also default on Darwin < 10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   bool EmulatedTLSDefault = Triple.isAndroid() || Triple.isOSOpenBSD() ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                            Triple.isWindowsCygwinEnvironment();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     Triple.isMacOSXVersionLT(10, 7) || Triple.isWindowsCygwinEnvironment();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (Args.hasFlag(options::OPT_femulated_tls, options::OPT_fno_emulated_tls,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    EmulatedTLSDefault))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     CmdArgs.push_back("-femulated-tls");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2163,7 +2163,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char *Name = "__cxa_atexit";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (TLS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const llvm::Triple &T = CGF.getTarget().getTriple();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    Name = T.isOSDarwin() ?  "_tlv_atexit" : "__cxa_thread_atexit";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Darwin 10.7+ has _tlv_atexit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Name = (T.isOSDarwin() && !T.isMacOSXVersionLT(10, 7)) ?  "_tlv_atexit" : "__cxa_thread_atexit";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // We're assuming that the destructor function is something we can
</span></pre><pre style='margin:0'>

</pre>