-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[Driver] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. #132821
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
de66d3f
to
be03d5c
Compare
@llvm/pr-subscribers-clang Author: Daniel Chen (DanielCChen) ChangesIn the wake of discussion in PR #131200 and internal discussion after, we will add support for The default value of the option is still OFF on AIX. Full diff: https://github.com/llvm/llvm-project/pull/132821.diff 9 Files Affected:
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..f2e8fa306e3a5 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -519,6 +519,9 @@ class ToolChain {
StringRef Component,
FileType Type = ToolChain::FT_Static) const;
+ // Returns Triple without the OSs version.
+ llvm::Triple getTripleWithoutOSVersion() const;
+
// Returns the target specific runtime path if it exists.
std::optional<std::string> getRuntimePath() const;
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 5f75d004eede0..8a922b283daf5 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -779,8 +779,6 @@ std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef Component,
if (Path.empty())
Path = P;
}
- if (getTriple().isOSAIX())
- Path.clear();
// Check the filename for the old layout if the new one does not exist.
CRTBasename =
@@ -846,6 +844,16 @@ ToolChain::getFallbackAndroidTargetPath(StringRef BaseDir) const {
return std::string(P);
}
+llvm::Triple ToolChain::getTripleWithoutOSVersion() const {
+ return (Triple.hasEnvironment()
+ ? llvm::Triple(Triple.getArchName(), Triple.getVendorName(),
+ llvm::Triple::getOSTypeName(Triple.getOS()),
+ llvm::Triple::getEnvironmentTypeName(
+ Triple.getEnvironment()))
+ : llvm::Triple(Triple.getArchName(), Triple.getVendorName(),
+ llvm::Triple::getOSTypeName(Triple.getOS())));
+}
+
std::optional<std::string>
ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
auto getPathForTriple =
@@ -864,14 +872,7 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
if (T.isOSzOS() &&
(!T.getOSVersion().empty() || !T.getEnvironmentVersion().empty())) {
// Build the triple without version information
- const llvm::Triple &TripleWithoutVersion =
- (T.hasEnvironment()
- ? llvm::Triple(
- T.getArchName(), T.getVendorName(),
- llvm::Triple::getOSTypeName(T.getOS()),
- llvm::Triple::getEnvironmentTypeName(T.getEnvironment()))
- : llvm::Triple(T.getArchName(), T.getVendorName(),
- llvm::Triple::getOSTypeName(T.getOS())));
+ const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
if (auto Path = getPathForTriple(TripleWithoutVersion))
return *Path;
}
@@ -909,9 +910,18 @@ std::optional<std::string> ToolChain::getRuntimePath() const {
llvm::sys::path::append(P, "lib");
if (auto Ret = getTargetSubDirPath(P))
return Ret;
- // Darwin and AIX does not use per-target runtime directory.
- if (Triple.isOSDarwin() || Triple.isOSAIX())
+ // Darwin does not use per-target runtime directory.
+ if (Triple.isOSDarwin())
+ return {};
+
+ // For AIX, get the triple without the OS version.
+ if (Triple.isOSAIX()) {
+ const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
+ llvm::sys::path::append(P, TripleWithoutVersion.str());
+ if (getVFS().exists(P))
+ return std::string(P);
return {};
+ }
llvm::sys::path::append(P, Triple.str());
return std::string(P);
}
diff --git a/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc.a b/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc64.a b/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc64.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc-ibm-aix/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc-ibm-aix/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc64-ibm-aix/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc64-ibm-aix/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/aix-ld.c b/clang/test/Driver/aix-ld.c
index 7e0f2bf91e06e..1dae61d91c4e3 100644
--- a/clang/test/Driver/aix-ld.c
+++ b/clang/test/Driver/aix-ld.c
@@ -1070,6 +1070,58 @@
// CHECK-FOPENMP-GOMP: "-lgomp"
// CHECK-FOPENMP: "-lc"
+// Check powerpc-ibm-aix7.1.0.0, 32-bit per_target_runtime_dir.
+// RUN: %clang %s -### 2>&1 \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: --target=powerpc-ibm-aix7.1.0.0 \
+// RUN: --sysroot %S/Inputs/aix_ppc_tree \
+// RUN: --unwindlib=libunwind \
+// RUN: | FileCheck --check-prefix=CHECK-LD32-PER-TARGET %s
+// CHECK-LD32-PER-TARGET-NOT: warning:
+// CHECK-LD32-PER-TARGET: "-cc1" "-triple" "powerpc-ibm-aix7.1.0.0"
+// CHECK-LD32-PER-TARGET: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-LD32-PER-TARGET: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-LD32-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
+// CHECK-LD32-PER-TARGET-NOT: "-bnso"
+// CHECK-LD32-PER-TARGET: "-b32"
+// CHECK-LD32-PER-TARGET: "-bpT:0x10000000" "-bpD:0x20000000"
+// CHECK-LD32-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crt0.o"
+// CHECK-LD32-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crti.o"
+// CHECK-LD32-PER-TARGET-NOT: "-lc++"
+// CHECK-LD32-PER-TARGET-NOT: "-lc++abi"
+// CHECK-LD32-PER-TARGET: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc-ibm-aix{{/|\\\\}}libclang_rt.builtins.a"
+// CHECK-LD32-PER-TARGET-NOT: "--as-needed"
+// CHECK-LD32-PER-TARGET: "-lunwind"
+// CHECK-LD32-PER-TARGET-NOT: "--no-as-needed"
+// CHECK-LD32-PER-TARGET-NOT: "-lm"
+// CHECK-LD32-PER-TARGET: "-lc"
+
+// Check powerpc64-ibm-aix7.1.0.0, 64-bit.
+// RUN: %clang %s -### 2>&1 \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: --target=powerpc64-ibm-aix7.1.0.0 \
+// RUN: --sysroot %S/Inputs/aix_ppc_tree \
+// RUN: --unwindlib=libunwind \
+// RUN: | FileCheck --check-prefix=CHECK-LD64-PER-TARGET %s
+// CHECK-LD64-PER-TARGET-NOT: warning:
+// CHECK-LD64-PER-TARGET: "-cc1" "-triple" "powerpc64-ibm-aix7.1.0.0"
+// CHECK-LD64-PER-TARGET: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-LD64-PER-TARGET: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-LD64-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
+// CHECK-LD64-PER-TARGET-NOT: "-bnso"
+// CHECK-LD64-PER-TARGET: "-b64"
+// CHECK-LD64-PER-TARGET: "-bpT:0x100000000" "-bpD:0x110000000"
+// CHECK-LD64-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crt0_64.o"
+// CHECK-LD64-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crti_64.o"
+// CHECK-LD64-PER-TARGET-NOT: "-lc++"
+// CHECK-LD64-PER-TARGET-NOT: "-lc++abi"
+// CHECK-LD64-PER-TARGET: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64-ibm-aix{{/|\\\\}}libclang_rt.builtins.a"
+// CHECK-LD64-PER-TARGET-NOT: "--as-needed"
+// CHECK-LD64-PER-TARGET: "-lunwind"
+// CHECK-LD64-PER-TARGET-NOT: "--no-as-needed"
+// CHECK-LD64-PER-TARGET-NOT: "-lm"
+// CHECK-LD64-PER-TARGET: "-lc"
+
// Check powerpc-ibm-aix7.1.0.0, 32-bit. -fopenmp=libfoo results an error.
// RUN: not %clang %s 2>&1 -### \
// RUN: --target=powerpc-ibm-aix7.1.0.0 \
diff --git a/clang/test/Driver/aix-print-runtime-dir.c b/clang/test/Driver/aix-print-runtime-dir.c
index 0d68ad6fee005..ffa4d15c21208 100644
--- a/clang/test/Driver/aix-print-runtime-dir.c
+++ b/clang/test/Driver/aix-print-runtime-dir.c
@@ -8,4 +8,14 @@
// RUN: -resource-dir=%S/Inputs/resource_dir \
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s
+// RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\
+// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR32-PER-TARGET %s
+
+// RUN: %clang -print-runtime-dir --target=powerpc64-ibm-aix \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\
+// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR64-PER-TARGET %s
+
// PRINT-RUNTIME-DIR: lib{{/|\\}}aix{{$}}
+// PRINT-RUNTIME-DIR32-PER-TARGET: lib{{/|\\}}powerpc-ibm-aix{{$}}
+// PRINT-RUNTIME-DIR64-PER-TARGET: lib{{/|\\}}powerpc64-ibm-aix{{$}}
diff --git a/clang/test/Driver/aix-rtlib.c b/clang/test/Driver/aix-rtlib.c
index e0466b166bb78..82ab857984af1 100644
--- a/clang/test/Driver/aix-rtlib.c
+++ b/clang/test/Driver/aix-rtlib.c
@@ -5,6 +5,14 @@
// RUN: %clang --target=powerpc64-ibm-aix -print-libgcc-file-name \
// RUN: -resource-dir=%S/Inputs/resource_dir \
// RUN: | FileCheck -check-prefix=CHECK64 %s
+// RUN: %clang --target=powerpc-ibm-aix -print-libgcc-file-name \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: | FileCheck -check-prefix=CHECK32-PER-TARGET %s
+// RUN: %clang --target=powerpc64-ibm-aix -print-libgcc-file-name \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: | FileCheck -check-prefix=CHECK64-PER-TARGET %s
// CHECK32: resource_dir{{/|\\}}lib{{/|\\}}aix{{/|\\}}libclang_rt.builtins-powerpc.a
// CHECK64: resource_dir{{/|\\}}lib{{/|\\}}aix{{/|\\}}libclang_rt.builtins-powerpc64.a
+// CHECK32-PER-TARGET: resource_dir_with_per_target_subdir{{/|\\}}lib{{/|\\}}powerpc-ibm-aix{{/|\\}}libclang_rt.builtins.a
+// CHECK64-PER-TARGET: resource_dir_with_per_target_subdir{{/|\\}}lib{{/|\\}}powerpc64-ibm-aix{{/|\\}}libclang_rt.builtins.a
|
@llvm/pr-subscribers-clang-driver Author: Daniel Chen (DanielCChen) ChangesIn the wake of discussion in PR #131200 and internal discussion after, we will add support for The default value of the option is still OFF on AIX. Full diff: https://github.com/llvm/llvm-project/pull/132821.diff 9 Files Affected:
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..f2e8fa306e3a5 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -519,6 +519,9 @@ class ToolChain {
StringRef Component,
FileType Type = ToolChain::FT_Static) const;
+ // Returns Triple without the OSs version.
+ llvm::Triple getTripleWithoutOSVersion() const;
+
// Returns the target specific runtime path if it exists.
std::optional<std::string> getRuntimePath() const;
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 5f75d004eede0..8a922b283daf5 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -779,8 +779,6 @@ std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef Component,
if (Path.empty())
Path = P;
}
- if (getTriple().isOSAIX())
- Path.clear();
// Check the filename for the old layout if the new one does not exist.
CRTBasename =
@@ -846,6 +844,16 @@ ToolChain::getFallbackAndroidTargetPath(StringRef BaseDir) const {
return std::string(P);
}
+llvm::Triple ToolChain::getTripleWithoutOSVersion() const {
+ return (Triple.hasEnvironment()
+ ? llvm::Triple(Triple.getArchName(), Triple.getVendorName(),
+ llvm::Triple::getOSTypeName(Triple.getOS()),
+ llvm::Triple::getEnvironmentTypeName(
+ Triple.getEnvironment()))
+ : llvm::Triple(Triple.getArchName(), Triple.getVendorName(),
+ llvm::Triple::getOSTypeName(Triple.getOS())));
+}
+
std::optional<std::string>
ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
auto getPathForTriple =
@@ -864,14 +872,7 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
if (T.isOSzOS() &&
(!T.getOSVersion().empty() || !T.getEnvironmentVersion().empty())) {
// Build the triple without version information
- const llvm::Triple &TripleWithoutVersion =
- (T.hasEnvironment()
- ? llvm::Triple(
- T.getArchName(), T.getVendorName(),
- llvm::Triple::getOSTypeName(T.getOS()),
- llvm::Triple::getEnvironmentTypeName(T.getEnvironment()))
- : llvm::Triple(T.getArchName(), T.getVendorName(),
- llvm::Triple::getOSTypeName(T.getOS())));
+ const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
if (auto Path = getPathForTriple(TripleWithoutVersion))
return *Path;
}
@@ -909,9 +910,18 @@ std::optional<std::string> ToolChain::getRuntimePath() const {
llvm::sys::path::append(P, "lib");
if (auto Ret = getTargetSubDirPath(P))
return Ret;
- // Darwin and AIX does not use per-target runtime directory.
- if (Triple.isOSDarwin() || Triple.isOSAIX())
+ // Darwin does not use per-target runtime directory.
+ if (Triple.isOSDarwin())
+ return {};
+
+ // For AIX, get the triple without the OS version.
+ if (Triple.isOSAIX()) {
+ const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
+ llvm::sys::path::append(P, TripleWithoutVersion.str());
+ if (getVFS().exists(P))
+ return std::string(P);
return {};
+ }
llvm::sys::path::append(P, Triple.str());
return std::string(P);
}
diff --git a/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc.a b/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc64.a b/clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc64.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc-ibm-aix/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc-ibm-aix/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc64-ibm-aix/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc64-ibm-aix/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/aix-ld.c b/clang/test/Driver/aix-ld.c
index 7e0f2bf91e06e..1dae61d91c4e3 100644
--- a/clang/test/Driver/aix-ld.c
+++ b/clang/test/Driver/aix-ld.c
@@ -1070,6 +1070,58 @@
// CHECK-FOPENMP-GOMP: "-lgomp"
// CHECK-FOPENMP: "-lc"
+// Check powerpc-ibm-aix7.1.0.0, 32-bit per_target_runtime_dir.
+// RUN: %clang %s -### 2>&1 \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: --target=powerpc-ibm-aix7.1.0.0 \
+// RUN: --sysroot %S/Inputs/aix_ppc_tree \
+// RUN: --unwindlib=libunwind \
+// RUN: | FileCheck --check-prefix=CHECK-LD32-PER-TARGET %s
+// CHECK-LD32-PER-TARGET-NOT: warning:
+// CHECK-LD32-PER-TARGET: "-cc1" "-triple" "powerpc-ibm-aix7.1.0.0"
+// CHECK-LD32-PER-TARGET: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-LD32-PER-TARGET: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-LD32-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
+// CHECK-LD32-PER-TARGET-NOT: "-bnso"
+// CHECK-LD32-PER-TARGET: "-b32"
+// CHECK-LD32-PER-TARGET: "-bpT:0x10000000" "-bpD:0x20000000"
+// CHECK-LD32-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crt0.o"
+// CHECK-LD32-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crti.o"
+// CHECK-LD32-PER-TARGET-NOT: "-lc++"
+// CHECK-LD32-PER-TARGET-NOT: "-lc++abi"
+// CHECK-LD32-PER-TARGET: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc-ibm-aix{{/|\\\\}}libclang_rt.builtins.a"
+// CHECK-LD32-PER-TARGET-NOT: "--as-needed"
+// CHECK-LD32-PER-TARGET: "-lunwind"
+// CHECK-LD32-PER-TARGET-NOT: "--no-as-needed"
+// CHECK-LD32-PER-TARGET-NOT: "-lm"
+// CHECK-LD32-PER-TARGET: "-lc"
+
+// Check powerpc64-ibm-aix7.1.0.0, 64-bit.
+// RUN: %clang %s -### 2>&1 \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: --target=powerpc64-ibm-aix7.1.0.0 \
+// RUN: --sysroot %S/Inputs/aix_ppc_tree \
+// RUN: --unwindlib=libunwind \
+// RUN: | FileCheck --check-prefix=CHECK-LD64-PER-TARGET %s
+// CHECK-LD64-PER-TARGET-NOT: warning:
+// CHECK-LD64-PER-TARGET: "-cc1" "-triple" "powerpc64-ibm-aix7.1.0.0"
+// CHECK-LD64-PER-TARGET: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-LD64-PER-TARGET: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-LD64-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
+// CHECK-LD64-PER-TARGET-NOT: "-bnso"
+// CHECK-LD64-PER-TARGET: "-b64"
+// CHECK-LD64-PER-TARGET: "-bpT:0x100000000" "-bpD:0x110000000"
+// CHECK-LD64-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crt0_64.o"
+// CHECK-LD64-PER-TARGET: "[[SYSROOT]]/usr/lib{{/|\\\\}}crti_64.o"
+// CHECK-LD64-PER-TARGET-NOT: "-lc++"
+// CHECK-LD64-PER-TARGET-NOT: "-lc++abi"
+// CHECK-LD64-PER-TARGET: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}powerpc64-ibm-aix{{/|\\\\}}libclang_rt.builtins.a"
+// CHECK-LD64-PER-TARGET-NOT: "--as-needed"
+// CHECK-LD64-PER-TARGET: "-lunwind"
+// CHECK-LD64-PER-TARGET-NOT: "--no-as-needed"
+// CHECK-LD64-PER-TARGET-NOT: "-lm"
+// CHECK-LD64-PER-TARGET: "-lc"
+
// Check powerpc-ibm-aix7.1.0.0, 32-bit. -fopenmp=libfoo results an error.
// RUN: not %clang %s 2>&1 -### \
// RUN: --target=powerpc-ibm-aix7.1.0.0 \
diff --git a/clang/test/Driver/aix-print-runtime-dir.c b/clang/test/Driver/aix-print-runtime-dir.c
index 0d68ad6fee005..ffa4d15c21208 100644
--- a/clang/test/Driver/aix-print-runtime-dir.c
+++ b/clang/test/Driver/aix-print-runtime-dir.c
@@ -8,4 +8,14 @@
// RUN: -resource-dir=%S/Inputs/resource_dir \
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s
+// RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\
+// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR32-PER-TARGET %s
+
+// RUN: %clang -print-runtime-dir --target=powerpc64-ibm-aix \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\
+// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR64-PER-TARGET %s
+
// PRINT-RUNTIME-DIR: lib{{/|\\}}aix{{$}}
+// PRINT-RUNTIME-DIR32-PER-TARGET: lib{{/|\\}}powerpc-ibm-aix{{$}}
+// PRINT-RUNTIME-DIR64-PER-TARGET: lib{{/|\\}}powerpc64-ibm-aix{{$}}
diff --git a/clang/test/Driver/aix-rtlib.c b/clang/test/Driver/aix-rtlib.c
index e0466b166bb78..82ab857984af1 100644
--- a/clang/test/Driver/aix-rtlib.c
+++ b/clang/test/Driver/aix-rtlib.c
@@ -5,6 +5,14 @@
// RUN: %clang --target=powerpc64-ibm-aix -print-libgcc-file-name \
// RUN: -resource-dir=%S/Inputs/resource_dir \
// RUN: | FileCheck -check-prefix=CHECK64 %s
+// RUN: %clang --target=powerpc-ibm-aix -print-libgcc-file-name \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: | FileCheck -check-prefix=CHECK32-PER-TARGET %s
+// RUN: %clang --target=powerpc64-ibm-aix -print-libgcc-file-name \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: | FileCheck -check-prefix=CHECK64-PER-TARGET %s
// CHECK32: resource_dir{{/|\\}}lib{{/|\\}}aix{{/|\\}}libclang_rt.builtins-powerpc.a
// CHECK64: resource_dir{{/|\\}}lib{{/|\\}}aix{{/|\\}}libclang_rt.builtins-powerpc64.a
+// CHECK32-PER-TARGET: resource_dir_with_per_target_subdir{{/|\\}}lib{{/|\\}}powerpc-ibm-aix{{/|\\}}libclang_rt.builtins.a
+// CHECK64-PER-TARGET: resource_dir_with_per_target_subdir{{/|\\}}lib{{/|\\}}powerpc64-ibm-aix{{/|\\}}libclang_rt.builtins.a
|
be03d5c
to
52f9503
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have comment on the diff but I think it's great that AIX is moving towards the mechanism that we want to use for all targets!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should also impact the set of headers being searched. On per-target runtimes, I think we look for libc++ headers under include/c++/v1/<target>
in addition to include/c++/v1
(since that's where __config_site
ends up)? I'm not super familiar with that configuration since we don't use it yet on Apple platforms, but I think it's worth checking that you're doing the right thing here.
Thanks for the comment! |
@ldionne I have checked that on AIX, clang uses the configuration from the system include as |
Yeah, I don't think we implemented the resource directory based include path logic in the driver for AIX, though we should. I think it makes sense to put that in a separate follow on PR, as that wasn't supported for either setting of |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/59/builds/15082 Here is the relevant piece of the build log for the reference
|
In the wake of discussion in PR #131200 and internal discussion after, we will add support for
LLVM_ENABLE_PER_TARGET_RUNTIME=ON
for AIX instead of disable it. I already reverted the change in PR #131200.The default value of the option is still OFF on AIX.