<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/ad42a53bfbab50827b5a7b26705252ce3f9af933">https://github.com/macports/macports-ports/commit/ad42a53bfbab50827b5a7b26705252ce3f9af933</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new ad42a53  clang-6.0: add support for emulated-tls
</span>ad42a53 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit ad42a53bfbab50827b5a7b26705252ce3f9af933
</span>Author: Ken Cunningham <kencu@macports.org>
AuthorDate: Wed Jan 2 09:18:01 2019 -0500

<span style='display:block; white-space:pre;color:#404040;'>    clang-6.0: add support for emulated-tls
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    emulated-tls is supported by both libc++
</span><span style='display:block; white-space:pre;color:#404040;'>    and by macports-libstdc++
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    also add variant to default to -stdlib=libc++ if the users' macports.conf
</span><span style='display:block; white-space:pre;color:#404040;'>    is configured that way, and if no other -stdlib is set
</span><span style='display:block; white-space:pre;color:#404040;'>    on the build line (matches behaviour of newer systems)
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    similar to recent changes for clang-5.0
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    [ci skip]
</span>---
 lang/llvm-6.0/Portfile                             | 26 ++++++++-
 .../9000-patch-clang-6.0-support-emulated-tls.diff | 66 ++++++++++++++++++++++
 ...ns-Darwin-default-to-libcxx-on-all-systems.diff | 15 +++++
 3 files changed, 105 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-6.0/Portfile b/lang/llvm-6.0/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7236589..b064a4d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/llvm-6.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-6.0/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -12,7 +12,7 @@ set llvm_version_no_dot 60
</span> set clang_executable_version 6.0
 set lldb_executable_version 6.0.1
 name                    llvm-${llvm_version}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-subport                 clang-${llvm_version} { revision 1 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport                 clang-${llvm_version} { revision 2 }
</span> subport                 lldb-${llvm_version} {}
 set suffix              mp-${llvm_version}
 set sub_prefix          ${prefix}/libexec/llvm-${llvm_version}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -584,6 +584,28 @@ 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-6.0-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><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant defaultlibcxx description {default to -stdlib=libc++ on all systems}  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #patch clang to always default to -stdlib=libc++ if not otherwise specified
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append 9003-patch-clang-6.0-Toolchains-Darwin-default-to-libcxx-on-all-systems.diff
</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;'>+    # on systems older than darwin 13, if macports.conf is configured to stdlib=libc++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # then make that the default if not otherwise specified exactly matches the behaviour of newer systems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${cxx_stdlib} eq "libc++" && ${os.major} < 13 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default_variants-append +defaultlibcxx
</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;'>@@ -638,7 +660,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-6.0/files/9000-patch-clang-6.0-support-emulated-tls.diff b/lang/llvm-6.0/files/9000-patch-clang-6.0-support-emulated-tls.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..f6b9c36
</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-6.0/files/9000-patch-clang-6.0-support-emulated-tls.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,66 @@
</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-6.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;'>+note that because the patch to ItaniumCXXABI.cpp is dependent on the system version rather than
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the -femultated-tls flag, it is not presently possible to force newer systems to use the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+emulated-tls code path
</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;'>+diff --git a/tools/clang/lib/Basic/Targets/OSTargets.h b/tools/clang/lib/Basic/Targets/OSTargets.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5af63615..54c7ca66 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Basic/Targets/OSTargets.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/Basic/Targets/OSTargets.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,7 +93,7 @@ public:
</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;'>+diff --git a/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp b/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a3c2766d..d73801df 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp
</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;'>+@@ -2186,7 +2186,8 @@ static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tools/clang/lib/Driver/ToolChains/Clang.cpp b/tools/clang/lib/Driver/ToolChains/Clang.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7ee19085..7b357026 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Driver/ToolChains/Clang.cpp
</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;'>+@@ -3859,9 +3859,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
</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;color:#808080;'>diff --git a/lang/llvm-6.0/files/9003-patch-clang-6.0-Toolchains-Darwin-default-to-libcxx-on-all-systems.diff b/lang/llvm-6.0/files/9003-patch-clang-6.0-Toolchains-Darwin-default-to-libcxx-on-all-systems.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..54ae87b
</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-6.0/files/9003-patch-clang-6.0-Toolchains-Darwin-default-to-libcxx-on-all-systems.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tools/clang/lib/Driver/ToolChains/Darwin.cpp b/tools/clang/lib/Driver/ToolChains/Darwin.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 40944be0..34799210 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Driver/ToolChains/Darwin.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/Driver/ToolChains/Darwin.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -679,8 +679,8 @@ types::ID MachO::LookupTypeForExtension(StringRef Ext) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool MachO::HasNativeLLVMSupport() const { return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ToolChain::CXXStdlibType Darwin::GetDefaultCXXStdlibType() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // Default to use libc++ on OS X 10.9+ and iOS 7+.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if ((isTargetMacOS() && !isMacosxVersionLT(10, 9)) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Default to use libc++ on OS X 10.4+ and iOS 7+.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if ((isTargetMacOS() && !isMacosxVersionLT(10, 4)) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        (isTargetIOSBased() && !isIPhoneOSVersionLT(7, 0)) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        isTargetWatchOSBased())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return ToolChain::CST_Libcxx;
</span></pre><pre style='margin:0'>

</pre>