<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/bbf85dd3eaea3dd7927c8314247a1b353ed0345e">https://github.com/macports/macports-ports/commit/bbf85dd3eaea3dd7927c8314247a1b353ed0345e</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 bbf85dd3eae LLVM 15: Revert use of pthread/qos.h on macOS10.9 and older
</span>bbf85dd3eae is described below
<span style='display:block; white-space:pre;color:#808000;'>commit bbf85dd3eaea3dd7927c8314247a1b353ed0345e
</span>Author: Chris Jones <jonesc@macports.org>
AuthorDate: Sat Sep 24 16:51:57 2022 +0100
<span style='display:block; white-space:pre;color:#404040;'> LLVM 15: Revert use of pthread/qos.h on macOS10.9 and older
</span>---
lang/llvm-15/Portfile | 16 ++-
lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch | 136 ++++++++++++++++++++++++
2 files changed, 147 insertions(+), 5 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-15/Portfile b/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index bca3e0ab9cb..e95917b4e36 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -165,6 +165,15 @@ if {${os.platform} eq "darwin" && ${os.major} < 16} {
</span> patchfiles-append 0031-Avoid-Use-Of-Clonefile.patch
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Revert use of pthread/qos.h that is only available on macOS10.10 and newer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://trac.macports.org/ticket/65626#comment:5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Created by reverting the commit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://github.com/llvm/llvm-project/commit/9902a0945d22cd5757b16ebe85fe07059723aa09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # > git revert 9902a0945d22cd5757b16ebe85fe07059723aa09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append 0110-Avoid-Pthread-QOS.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-patch {
reinplace "s|@@PREFIX@@|${prefix}|" \
${patch.dir}/clang/lib/Driver/ToolChains/Clang.cpp \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -284,11 +293,8 @@ if { ${subport} eq "flang-${llvm_version}" } {
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Currently does not build on mac OS10.9 (Darwin 13) and older, due to issues
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# relating to lack of <pthread/qos.h>. For more details, and a possible future fix see
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://trac.macports.org/ticket/65626
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Until then, restrict to 10.10 and newer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${os.platform} eq "darwin" && ${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Restrict to 10.6 and newer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 10} {
</span> depends_build
depends_lib
depends_run
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch b/lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..bc7613e4fc0
</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-15/files/0110-Avoid-Pthread-QOS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,136 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/clang-tools-extra/clangd/index/Background.h b/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 688c09814cd2..29869f38a43e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -72,7 +72,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ explicit Task(std::function<void()> Run) : Run(std::move(Run)) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::function<void()> Run;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- llvm::ThreadPriority ThreadPri = llvm::ThreadPriority::Low;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ llvm::ThreadPriority ThreadPri = llvm::ThreadPriority::Background;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned QueuePri = 0; // Higher-priority tasks will run first.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::string Tag; // Allows priority to be boosted later.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint64_t Key = 0; // If the key matches a previous task, drop this one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9356dd4a2377..19d0d950fa9e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -9229,9 +9229,7 @@ void clang::setThreadBackgroundPriority() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if LLVM_ENABLE_THREADS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // The function name setThreadBackgroundPriority is for historical reasons;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // Low is more appropriate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- llvm::set_thread_priority(llvm::ThreadPriority::Low);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ llvm::set_thread_priority(llvm::ThreadPriority::Background);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</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/llvm/include/llvm/Support/Threading.h b/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1e7e5f7b8f50..b158a57a1a21 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -233,20 +233,16 @@ bool llvm_is_multithreaded();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned get_cpus();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum class ThreadPriority {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// Lower the current thread's priority as much as possible. Can be used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// for long-running tasks that are not time critical; more energy-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// efficient than Low.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Background = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Low = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// Lower the current thread's priority such that it does not affect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// foreground tasks significantly. This is a good default for long-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// running, latency-insensitive tasks to make sure cpu is not hogged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// by this task.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Low = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /// Restore the current thread's priority to default scheduling priority.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Default = 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Default = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// If priority is Background tries to lower current threads priority such
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// that it does not affect foreground tasks significantly. Can be used for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// long-running, latency-insensitive tasks to make sure cpu is not hogged by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// this task.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// If the priority is default tries to restore current threads priority to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// default scheduling priority.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum class SetThreadPriorityResult { FAILURE, SUCCESS };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SetThreadPriorityResult set_thread_priority(ThreadPriority Priority);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 99f64b4f553d..5de1cf071ba9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,7 +18,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/mach_init.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/mach_port.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <pthread/qos.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <pthread.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -261,29 +260,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // SCHED_OTHER the standard round-robin time-sharing policy;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return !pthread_setschedparam(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pthread_self(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // FIXME: consider SCHED_BATCH for Low
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Priority == ThreadPriority::Default ? SCHED_OTHER : SCHED_IDLE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ &priority)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? SetThreadPriorityResult::SUCCESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : SetThreadPriorityResult::FAILURE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(__APPLE__) && defined(PRIO_DARWIN_THREAD) && defined(PRIO_DARWIN_BG)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // Background - Applies to work that isn’t visible to the user and may take significant
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // time to complete. Examples include indexing, backing up, or synchronizing data. This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // class emphasizes energy efficiency.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // Utility - Applies to work that takes anywhere from a few seconds to a few minutes to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // complete. Examples include downloading a document or importing data. This class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // offers a balance between responsiveness, performance, and energy efficiency.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- const auto qosClass = [&](){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- switch (Priority) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- case ThreadPriority::Background: return QOS_CLASS_BACKGROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- case ThreadPriority::Low: return QOS_CLASS_UTILITY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- case ThreadPriority::Default: return QOS_CLASS_DEFAULT;
</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;'>+- return !pthread_set_qos_class_self_np(qosClass, 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // When setting a thread into background state the scheduling priority is set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // to lowest value, disk and network IO are throttled. Network IO will be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // throttled for any sockets the thread opens after going into background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // state. Any previously opened sockets are not affected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // request occurs within a small time window (usually a fraction of a second)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // forced to sleep for a certain interval. This slows down the thread that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // I/O bandwidth.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return !setpriority(PRIO_DARWIN_THREAD, 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? SetThreadPriorityResult::SUCCESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : SetThreadPriorityResult::FAILURE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/llvm/lib/Support/Windows/Threading.inc b/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 11f34817dbbf..78047ab8bbbd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -120,10 +120,8 @@ SetThreadPriorityResult llvm::set_thread_priority(ThreadPriority Priority) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // End background processing mode. The system restores the resource scheduling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // priorities of the thread as they were before the thread entered background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // processing mode.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // FIXME: consider THREAD_PRIORITY_BELOW_NORMAL for Low
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return SetThreadPriority(GetCurrentThread(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Priority != ThreadPriority::Default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Priority == ThreadPriority::Background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? THREAD_MODE_BACKGROUND_BEGIN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : THREAD_MODE_BACKGROUND_END)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? SetThreadPriorityResult::SUCCESS
</span></pre><pre style='margin:0'>
</pre>