Skip to content
Open
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"};
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"]
110 changes: 110 additions & 0 deletions base/comps/llvm20/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"};
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