Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions base/comps/llvm/0001-Clang-Add-azurelinux-to-fallback-triples.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
From 59fc631cea3757e47f8cb202f388c228ce070994 Mon Sep 17 00:00:00 2001
From: Tobias Brick <tobiasb@microsoft.com>
Date: Fri, 29 May 2026 19:08:42 +0000
Subject: [PATCH] [Clang] Add azurelinux to fallback triples

---
clang/lib/Driver/ToolChains/Gnu.cpp | 6 +++--
.../Driver/Inputs/azurelinux_tree/lib/.keep | 0
.../aarch64-azurelinux-linux/11/crtbegin.o | 0
.../gcc/aarch64-azurelinux-linux/11/crtend.o | 0
.../gcc/x86_64-azurelinux-linux/11/crtbegin.o | 0
.../gcc/x86_64-azurelinux-linux/11/crtend.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crt1.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crti.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crtn.o | 0
clang/test/Driver/linux-ld.c | 22 +++++++++++++++++++
10 files changed, 26 insertions(+), 2 deletions(-)
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/lib/.keep
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o

diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index 131dd725c728..6c1e67bd0fff 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2337,7 +2337,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
// lists should shrink over time. Please don't add more elements to *Triples.
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
static const char *const AArch64Triples[] = {
- "aarch64-none-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux"};
+ "aarch64-none-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux",
+ "aarch64-azurelinux-linux"};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not thrilled by this...as the comment just a few lines above says, "Please don't add more elements to *Triples". But digging into how to avoid this ourselves probably isn't appropriate or worth the time (trying to get upstream to fix the need for this hardcoded list is the right way to avoid this).

So this looks ok to me.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, though options are limited. I do think that the Fedora change https://src.fedoraproject.org/rpms/llvm/c/879a14ed99a04dbfca4e3c3c57abb33b61e1a3dc?branch=rawhide will mostly obviate the need for this as it will install the config files that have these triples with clang-libs rather than clang. But this fallback is probably good to have anyway.

FWIW, I've also submitted a PR to LLVM: llvm/llvm-project#200894, but not traction thus far (and as the you suggest, based on the comment, I wouldn't be surprised if they reject it).

static const char *const AArch64beLibDirs[] = {"/lib"};
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu"};

@@ -2365,7 +2366,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
"x86_64-pc-linux-gnu", "x86_64-redhat-linux6E",
"x86_64-redhat-linux", "x86_64-suse-linux",
"x86_64-manbo-linux-gnu", "x86_64-slackware-linux",
- "x86_64-unknown-linux", "x86_64-amazon-linux"};
+ "x86_64-unknown-linux", "x86_64-amazon-linux",
+ "x86_64-azurelinux-linux"};
static const char *const X32Triples[] = {"x86_64-linux-gnux32",
"x86_64-pc-linux-gnux32"};
static const char *const X32LibDirs[] = {"/libx32", "/lib"};
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/lib/.keep b/clang/test/Driver/Inputs/azurelinux_tree/lib/.keep
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c
index 8de1988d606c..787b22f26628 100644
--- a/clang/test/Driver/linux-ld.c
+++ b/clang/test/Driver/linux-ld.c
@@ -1789,6 +1789,28 @@
// CHECK-LD-AMI: "-lc"
// CHECK-LD-AMI: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed"

+
+// Check that Azure Linux GCC is found via fallback triple detection (x86_64).
+// The sysroot has GCC installed under x86_64-azurelinux-linux, but we target
+// the generic x86_64-unknown-linux-gnu to exercise the fallback triple list.
+// RUN: %clang -### %s -no-pie 2>&1 \
+// RUN: --target=x86_64-unknown-linux-gnu -rtlib=libgcc --unwindlib=platform \
+// RUN: --sysroot=%S/Inputs/azurelinux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-LD-AZURELINUX %s
+// CHECK-LD-AZURELINUX: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-LD-AZURELINUX: "{{.*}}/usr/lib/gcc/x86_64-azurelinux-linux/11{{/|\\\\}}crtbegin.o"
+// CHECK-LD-AZURELINUX: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-azurelinux-linux/11"
+// CHECK-LD-AZURELINUX: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-azurelinux-linux/11/../../../../lib64"
+
+// Check that Azure Linux GCC is found via fallback triple detection (aarch64).
+// RUN: %clang -### %s -no-pie 2>&1 \
+// RUN: --target=aarch64-unknown-linux-gnu -rtlib=libgcc --unwindlib=platform \
+// RUN: --sysroot=%S/Inputs/azurelinux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-LD-AZURELINUX-AARCH64 %s
+// CHECK-LD-AZURELINUX-AARCH64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-LD-AZURELINUX-AARCH64: "{{.*}}/usr/lib/gcc/aarch64-azurelinux-linux/11{{/|\\\\}}crtbegin.o"
+// CHECK-LD-AZURELINUX-AARCH64: "-L[[SYSROOT]]/usr/lib/gcc/aarch64-azurelinux-linux/11"
+// CHECK-LD-AZURELINUX-AARCH64: "-L[[SYSROOT]]/usr/lib/gcc/aarch64-azurelinux-linux/11/../../../../lib64"
// Check whether the OpenEmbedded ARM libs are added correctly.
// RUN: %clang -### %s -no-pie 2>&1 \
// RUN: --target=arm-oe-linux-gnueabi -rtlib=libgcc --unwindlib=platform \
--
2.52.0

14 changes: 13 additions & 1 deletion base/comps/llvm/llvm.comp.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
[components.llvm]

# Workaround: Disable MLIR until python-nanobind (and its dep robin-map)
# are imported into Azure Linux. MLIR is gated on %{with mlir} in the
# upstream spec and pulls in python3-nanobind-devel which doesn't exist yet.
Expand All @@ -12,3 +11,16 @@ description = "Use the Azure Linux GCC toolchain triple in clang's default confi
type = "spec-search-replace"
regex = '%global cfg_file_content --gcc-triple=%{_target_cpu}-redhat-linux'
replacement = '%global cfg_file_content --gcc-triple=%{_target_cpu}-%{_vendor}-linux'

# Patch the fallback triples to include azurelinux.
# When clang's config files are not present, it will fall back to a set of hardcoded triples, which don't include azurelinux.
[[components.llvm.overlays]]
description = "Patch fallback triples to include azurelinux."
type = "patch-add"
source = "0001-Clang-Add-azurelinux-to-fallback-triples.patch"

[[components.llvm.overlays]]
description = "Manually add above patch, because llvm uses some advanced %autopatch and doesn't pick this up automatically."
type = "spec-append-lines"
section = "%prep"
lines = ["%patch -p1 -P2202"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
From 59fc631cea3757e47f8cb202f388c228ce070994 Mon Sep 17 00:00:00 2001
From: Tobias Brick <tobiasb@microsoft.com>
Date: Fri, 29 May 2026 19:08:42 +0000
Subject: [PATCH] [Clang] Add azurelinux to fallback triples

---
clang/lib/Driver/ToolChains/Gnu.cpp | 6 +++--
.../Driver/Inputs/azurelinux_tree/lib/.keep | 0
.../aarch64-azurelinux-linux/11/crtbegin.o | 0
.../gcc/aarch64-azurelinux-linux/11/crtend.o | 0
.../gcc/x86_64-azurelinux-linux/11/crtbegin.o | 0
.../gcc/x86_64-azurelinux-linux/11/crtend.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crt1.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crti.o | 0
.../Inputs/azurelinux_tree/usr/lib64/crtn.o | 0
clang/test/Driver/linux-ld.c | 22 +++++++++++++++++++
10 files changed, 26 insertions(+), 2 deletions(-)
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/lib/.keep
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o
create mode 100644 clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o

diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index 131dd725c728..6c1e67bd0fff 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2337,7 +2337,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
// lists should shrink over time. Please don't add more elements to *Triples.
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
static const char *const AArch64Triples[] = {
- "aarch64-none-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux"};
+ "aarch64-none-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux",
+ "aarch64-azurelinux-linux"};
static const char *const AArch64beLibDirs[] = {"/lib"};
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu"};

@@ -2365,7 +2366,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
"x86_64-pc-linux-gnu", "x86_64-redhat-linux6E",
"x86_64-redhat-linux", "x86_64-suse-linux",
"x86_64-manbo-linux-gnu", "x86_64-slackware-linux",
- "x86_64-unknown-linux", "x86_64-amazon-linux"};
+ "x86_64-unknown-linux", "x86_64-amazon-linux",
+ "x86_64-azurelinux-linux"};
static const char *const X32Triples[] = {"x86_64-linux-gnux32",
"x86_64-pc-linux-gnux32"};
static const char *const X32LibDirs[] = {"/libx32", "/lib"};
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/lib/.keep b/clang/test/Driver/Inputs/azurelinux_tree/lib/.keep
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtbegin.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/aarch64-azurelinux-linux/11/crtend.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtbegin.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib/gcc/x86_64-azurelinux-linux/11/crtend.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crt1.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crti.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o b/clang/test/Driver/Inputs/azurelinux_tree/usr/lib64/crtn.o
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c
index 8de1988d606c..787b22f26628 100644
--- a/clang/test/Driver/linux-ld.c
+++ b/clang/test/Driver/linux-ld.c
@@ -1789,6 +1789,28 @@
// CHECK-LD-AMI: "-lc"
// CHECK-LD-AMI: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed"

+
+// Check that Azure Linux GCC is found via fallback triple detection (x86_64).
+// The sysroot has GCC installed under x86_64-azurelinux-linux, but we target
+// the generic x86_64-unknown-linux-gnu to exercise the fallback triple list.
+// RUN: %clang -### %s -no-pie 2>&1 \
+// RUN: --target=x86_64-unknown-linux-gnu -rtlib=libgcc --unwindlib=platform \
+// RUN: --sysroot=%S/Inputs/azurelinux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-LD-AZURELINUX %s
+// CHECK-LD-AZURELINUX: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-LD-AZURELINUX: "{{.*}}/usr/lib/gcc/x86_64-azurelinux-linux/11{{/|\\\\}}crtbegin.o"
+// CHECK-LD-AZURELINUX: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-azurelinux-linux/11"
+// CHECK-LD-AZURELINUX: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-azurelinux-linux/11/../../../../lib64"
+
+// Check that Azure Linux GCC is found via fallback triple detection (aarch64).
+// RUN: %clang -### %s -no-pie 2>&1 \
+// RUN: --target=aarch64-unknown-linux-gnu -rtlib=libgcc --unwindlib=platform \
+// RUN: --sysroot=%S/Inputs/azurelinux_tree \
+// RUN: | FileCheck --check-prefix=CHECK-LD-AZURELINUX-AARCH64 %s
+// CHECK-LD-AZURELINUX-AARCH64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-LD-AZURELINUX-AARCH64: "{{.*}}/usr/lib/gcc/aarch64-azurelinux-linux/11{{/|\\\\}}crtbegin.o"
+// CHECK-LD-AZURELINUX-AARCH64: "-L[[SYSROOT]]/usr/lib/gcc/aarch64-azurelinux-linux/11"
+// CHECK-LD-AZURELINUX-AARCH64: "-L[[SYSROOT]]/usr/lib/gcc/aarch64-azurelinux-linux/11/../../../../lib64"
// Check whether the OpenEmbedded ARM libs are added correctly.
// RUN: %clang -### %s -no-pie 2>&1 \
// RUN: --target=arm-oe-linux-gnueabi -rtlib=libgcc --unwindlib=platform \
--
2.52.0

13 changes: 13 additions & 0 deletions base/comps/llvm20/llvm20.comp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,16 @@ description = "Use the Azure Linux GCC toolchain triple in clang20's default con
type = "spec-search-replace"
regex = '%global cfg_file_content --gcc-triple=%{_target_cpu}-redhat-linux'
replacement = '%global cfg_file_content --gcc-triple=%{_target_cpu}-%{_vendor}-linux'

# Patch the fallback triples to include azurelinux.
# When clang's config files are not present, it will fall back to a set of hardcoded triples, which don't include azurelinux.
[[components.llvm20.overlays]]
description = "Patch fallback triples to include azurelinux."
type = "patch-add"
source = "0001-Clang-Add-azurelinux-to-fallback-triples.patch"

[[components.llvm20.overlays]]
description = "Manually add above patch, because llvm uses some advanced %autopatch and doesn't pick this up automatically."
type = "spec-append-lines"
section = "%prep"
lines = ["%patch -p1 -P2202"]
2 changes: 1 addition & 1 deletion locks/llvm.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
version = 1
import-commit = '659c0740e5c29098632207467aa89ce0083d5892'
upstream-commit = '659c0740e5c29098632207467aa89ce0083d5892'
input-fingerprint = 'sha256:d2fda4afa67705525af0ca91cbf89bef747aa5f25b5313e8a92eb2a6f515498d'
input-fingerprint = 'sha256:62ef2b00d18f7ee581116ced02f2de22f17f34136afd835ea024e8008fa05c1d'
resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e'
2 changes: 1 addition & 1 deletion locks/llvm20.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
version = 1
import-commit = '2cecf3d98071e54a6bfc29d9656698c89a07a535'
upstream-commit = '2cecf3d98071e54a6bfc29d9656698c89a07a535'
input-fingerprint = 'sha256:273220b2bf27b1985e554a23c3f8e887b6c56a64798220697bdb74bed071be38'
input-fingerprint = 'sha256:006439c7b66139db7ae25f8f3b61a13880b2e1c614848596b9d077d0aa335881'
resolution-input-hash = 'sha256:466421704711c4fd3c71f0b2ed715a0e61d49e3e26f3a2637fee755795849c8e'
Loading
Loading