<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>