Merge pull request #125472 from veprbl/pr/clang_12_darwin_fix

llvmPackages_12.compiler-rt: fix build on darwin

Changed files
+73
pkgs
development
compilers
+71
pkgs/development/compilers/llvm/12/compiler-rt/darwin-targetconditionals.patch
···
···
+
diff --git a/lib/sanitizer_common/sanitizer_mac.cpp b/lib/sanitizer_common/sanitizer_mac.cpp
+
--- a/lib/sanitizer_common/sanitizer_mac.cpp
+
+++ b/lib/sanitizer_common/sanitizer_mac.cpp
+
@@ -613,9 +613,15 @@ HandleSignalMode GetHandleSignalMode(int signum) {
+
// Offset example:
+
// XNU 17 -- macOS 10.13 -- iOS 11 -- tvOS 11 -- watchOS 4
+
constexpr u16 GetOSMajorKernelOffset() {
+
- if (TARGET_OS_OSX) return 4;
+
- if (TARGET_OS_IOS || TARGET_OS_TV) return 6;
+
- if (TARGET_OS_WATCH) return 13;
+
+#if TARGET_OS_OSX
+
+ return 4;
+
+#endif
+
+#if TARGET_OS_IOS || TARGET_OS_TV
+
+ return 6;
+
+#endif
+
+#if TARGET_OS_WATCH
+
+ return 13;
+
+#endif
+
}
+
+
using VersStr = char[64];
+
@@ -627,13 +633,13 @@ static uptr ApproximateOSVersionViaKernelVersion(VersStr vers) {
+
u16 os_major = kernel_major - offset;
+
+
const char *format = "%d.0";
+
- if (TARGET_OS_OSX) {
+
- if (os_major >= 16) { // macOS 11+
+
- os_major -= 5;
+
- } else { // macOS 10.15 and below
+
- format = "10.%d";
+
- }
+
+#if TARGET_OS_OSX
+
+ if (os_major >= 16) { // macOS 11+
+
+ os_major -= 5;
+
+ } else { // macOS 10.15 and below
+
+ format = "10.%d";
+
}
+
+#endif
+
return internal_snprintf(vers, sizeof(VersStr), format, os_major);
+
}
+
+
@@ -681,15 +687,14 @@ void ParseVersion(const char *vers, u16 *major, u16 *minor) {
+
// Aligned versions example:
+
// macOS 10.15 -- iOS 13 -- tvOS 13 -- watchOS 6
+
static void MapToMacos(u16 *major, u16 *minor) {
+
- if (TARGET_OS_OSX)
+
- return;
+
-
+
- if (TARGET_OS_IOS || TARGET_OS_TV)
+
+#if !TARGET_OS_OSX
+
+#if TARGET_OS_IOS || TARGET_OS_TV
+
*major += 2;
+
- else if (TARGET_OS_WATCH)
+
+#elif TARGET_OS_WATCH
+
*major += 9;
+
- else
+
+#else
+
UNREACHABLE("unsupported platform");
+
+#endif
+
+
if (*major >= 16) { // macOS 11+
+
*major -= 5;
+
@@ -697,6 +702,7 @@ static void MapToMacos(u16 *major, u16 *minor) {
+
*minor = *major;
+
*major = 10;
+
}
+
+#endif
+
}
+
+
static MacosVersion GetMacosAlignedVersionInternal() {
+2
pkgs/development/compilers/llvm/12/compiler-rt/default.nix
···
# extra `/`.
./normalize-var.patch
]# ++ lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch
++ lib.optional stdenv.hostPlatform.isAarch32 ./armv7l.patch;
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks
···
# extra `/`.
./normalize-var.patch
]# ++ lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch
+
# Prevent a compilation error on darwin
+
++ lib.optional stdenv.hostPlatform.isDarwin ./darwin-targetconditionals.patch
++ lib.optional stdenv.hostPlatform.isAarch32 ./armv7l.patch;
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks