[clang] [flang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-18 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@mjklemm This PR caused some regressions of C-interop test cases in our local 
test run. The test cases typically have a Fortran main (compiled with Flang) 
that calls a C function (compiled with clang). The linking is by `flang-new`. 
The error looks like:
```
ld.lld: error: duplicate symbol: main
>>> defined at ./bind_c09i.c
>>>bind_c09i.o:(.The_Code)
>>> defined at Fortran_main.c
>>>Fortran_main.c.o:(.text.main+0x0) in archive ./libFortran_main.a
flang-new: error: linker command failed with exit code 1 (use -v to see 
invocation)
```

https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-18 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

I see. So Fortran and C interoperability of F2003/F2008 is not supported yet in 
Flang? Those ~100ish regression test cases we have were passing before this PR 
though. 
Unfortunately, those test cases are not made public available yet. I think I 
can copy the source code of one test case here, but it needs to be run 
manually. Please let me know if that is desired to help debug the reason of the 
regression.

https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-19 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Thanks for the initial analysis. I will take a closer look of the failure and 
prepare a reproducer and post it here.

https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-19 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

The test cases actually have C main indeed and call to Fortran procedures as 
opposed to what I thought (the other way around). Adding `-fno-fortran-main` 
fixed all of them!
May be I missed it when reading through the comments of this PR, why there is a 
definition of `main()` being generated on the Fortran side when the Fortran 
sources are procedures or modules?


https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-19 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Ok. I see. The Fortran `main` is actually coming out of internal compiler 
generated code rather than user code. 
It seems users who have Fortran-C-interop code will need to toggle the 
`-fno-fortran-main` option ON and OFF depends on who the `main` is.
I think there are some real issues on AIX as Kelvin mentioned on top of what we 
have encountered on Linux. However, these issues are not directly related to 
this PR. 
Thanks to all for the response and explanation!

https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][driver] Remove Fortain_main static library from linking stages (PR #75816)

2023-12-20 Thread Daniel Chen via cfe-commits


@@ -163,6 +163,40 @@ forward compiler options to the frontend driver, 
`flang-new -fc1`.
 You can read more on the design of `clangDriver` in Clang's [Driver Design &
 Internals](https://clang.llvm.org/docs/DriverInternals.html).
 
+## Linker Driver
+When used as a linker, Flang's frontend driver assembles the command line for 
an
+external linker command (e.g., LLVM's `lld`) and invokes it to create the final
+executable by linking static and shared libraries together with all the
+translation units supplied as object files.
+
+By default, the Flang linker driver adds several libraries to the linker
+invocation to make sure that all entrypoints for program start
+(Fortran's program unit) and runtime routines can be resolved by the linker.
+The libraries are:
+
+* `Fortran_main`: Provides the main entry point `main` that then invokes
+  `_QQmain` with the Fortran program unit.  This library has a dependency to
+  the `FortranRuntime` library.
+* `FortranRuntime`: Provides most of the Flang runtime library.
+* `FortranDecimal`: Provides operations for decimal numbers.
+
+The default is that, when using Flang as the linker, one of the Fortran
+translation units provides the program unit and therefore it is assumed that
+Fortran is the main code part (calling into C/C++ routines via `BIND
+(C)` interfaces).  When composing the linker commandline, Flang uses
+`--whole-archive` and `--no-whole-archive` (Windows: `/WHOLEARCHIVE:`,
+Darwin: *not implemented yet*) to make sure that all for `Fortran_main` is
+processed by the linker.  This is done to issue a proper error message when
+multiple definitions of `main` occur.  This happens, for instance, when linking
+a code that has a Fortran program unit with a C/C++ code that also defines a
+`main` function.
+
+If the code is C/C++ based and invokes Fortran routines, either use Clang as 
the
+linker driver (supplying `FortranRuntime` and/or `FortranDecimal` to the linker

DanielCChen wrote:

I think this requirement of using Clang as the linker driver if the `main` is C 
changes the usability for users coming from XLF or gfortran. They now need to 
know what `main` is and do it accordingly. 
I think the fundamental question is why `Fortran_main.c` is inserting a "fake" 
`main` on the Fortran side when there is not user defined `main` in Fortrran 
code.
Is it possible to only creating a `main` when users define one in Fortran code?
Again, this may not be the topic under this PR.

https://github.com/llvm/llvm-project/pull/75816
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)

2023-12-20 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Thanks @banach-space for the pointer!

https://github.com/llvm/llvm-project/pull/73124
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][driver] Remove Fortain_main static library from linking stages (PR #75816)

2023-12-20 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/75816
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[libc] [clang] [lld] [lldb] [clang-tools-extra] [flang] [libcxx] [libcxxabi] [llvm] [flang] Pass Argv0 to getIntriniscDir and getOpenMPHeadersDir (PR #73254)

2023-11-30 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

The changes look good to me. I will wait a day to see if other reviewers have 
any more comments before approving it.

https://github.com/llvm/llvm-project/pull/73254
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[flang] [clang] [flang][driver] Remove Fortain_main static library from linking stages (PR #75816)

2023-12-20 Thread Daniel Chen via cfe-commits


@@ -163,6 +163,40 @@ forward compiler options to the frontend driver, 
`flang-new -fc1`.
 You can read more on the design of `clangDriver` in Clang's [Driver Design &
 Internals](https://clang.llvm.org/docs/DriverInternals.html).
 
+## Linker Driver
+When used as a linker, Flang's frontend driver assembles the command line for 
an
+external linker command (e.g., LLVM's `lld`) and invokes it to create the final
+executable by linking static and shared libraries together with all the
+translation units supplied as object files.
+
+By default, the Flang linker driver adds several libraries to the linker
+invocation to make sure that all entrypoints for program start
+(Fortran's program unit) and runtime routines can be resolved by the linker.
+The libraries are:
+
+* `Fortran_main`: Provides the main entry point `main` that then invokes
+  `_QQmain` with the Fortran program unit.  This library has a dependency to
+  the `FortranRuntime` library.
+* `FortranRuntime`: Provides most of the Flang runtime library.
+* `FortranDecimal`: Provides operations for decimal numbers.
+
+The default is that, when using Flang as the linker, one of the Fortran
+translation units provides the program unit and therefore it is assumed that
+Fortran is the main code part (calling into C/C++ routines via `BIND
+(C)` interfaces).  When composing the linker commandline, Flang uses
+`--whole-archive` and `--no-whole-archive` (Windows: `/WHOLEARCHIVE:`,
+Darwin: *not implemented yet*) to make sure that all for `Fortran_main` is
+processed by the linker.  This is done to issue a proper error message when
+multiple definitions of `main` occur.  This happens, for instance, when linking
+a code that has a Fortran program unit with a C/C++ code that also defines a
+`main` function.
+
+If the code is C/C++ based and invokes Fortran routines, either use Clang as 
the
+linker driver (supplying `FortranRuntime` and/or `FortranDecimal` to the linker

DanielCChen wrote:

As far as this PR is concerned, it is clear to me what users need to do. Thanks 
for making it clear in the documentation.

https://github.com/llvm/llvm-project/pull/75816
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [lld] [flang] Generate main only when a Fortran program statement is present (PR #89938)

2024-04-26 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen approved this pull request.

Thanks for working on this. We have quite some Fortran C-interop test cases are 
affected by the "duplicate main" error. 

https://github.com/llvm/llvm-project/pull/89938
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [mlir] [polly] [NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (PR #111752)

2024-10-13 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

We have downstream code that used `getDeclaration` and not we have changed to 
`getOrInsertDeclaration` for all places.
My understanding from reading the thread is that `getOrInsertDelcaration1 will 
stay and a new `findDeclaration` will be added temporarily and it will 
eventually become the new `getDeclaration` withe the new semantic. Do I miss 
anything there?


https://github.com/llvm/llvm-project/pull/111752
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [mlir] [polly] [NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (PR #111752)

2024-10-11 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> `test_demangle` should definitely **not** be updated when renaming functions.

Could you please explain a bit more since this is new to me? Thanks in advance!

https://github.com/llvm/llvm-project/pull/111752
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [mlir] [polly] [NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (PR #111752)

2024-10-11 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> > > `test_demangle` should definitely **not** be updated when renaming 
> > > functions.
> > 
> > 
> > Could you please explain a bit more since this is new to me? Thanks in 
> > advance!
> 
> The use of LLVM symbols in this file is incidental -- it's just a data set of 
> mangled C++ symbol names. The file should only change if the mangling 
> implementation changes.

OK. I see. Yeah, makes senses now as it reduces maintenance cost. Thanks for 
the explanation. 

https://github.com/llvm/llvm-project/pull/111752
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [mlir] [polly] [NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (PR #111752)

2024-10-11 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

I see. I don't have strong preference although it would be nice to use some 
function that exists.  

https://github.com/llvm/llvm-project/pull/111752
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [mlir] [polly] [NFC] Rename `Intrinsic::getDeclaration` to `getOrInsertDeclaration` (PR #111752)

2024-10-11 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@jurahul 
It seems this PR is missing a test file 
`libcxxabi/test/test_demangle.pass.cpp`. 
It has a line of
```
{"_ZN4llvm9Intrinsic14getDeclarationEPNS_6ModuleENS0_2IDEPPKNS_4TypeEj", 
"llvm::Intrinsic::getDeclaration(llvm::Module*, llvm::Intrinsic::ID, llvm::Type 
const**, unsigned int)"},
```

https://github.com/llvm/llvm-project/pull/111752
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add UNSIGNED (PR #113504)

2024-10-25 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/113504
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add UNSIGNED (PR #113504)

2024-10-24 Thread Daniel Chen via cfe-commits


@@ -178,7 +192,12 @@ static constexpr TypePattern SameType{AnyType, 
KindCode::same};
 // universal extension feature.
 static constexpr TypePattern OperandReal{RealType, KindCode::operand};
 static constexpr TypePattern OperandInt{IntType, KindCode::operand};
+static constexpr TypePattern OperandUnsigned{UnsignedType, KindCode::operand};
+static constexpr TypePattern OperandIntOrUnsigned{

DanielCChen wrote:

Same error here as well
```
llvm-project/flang/lib/Evaluate/intrinsics.cpp:196:30: error: unused variable 
'OperandIntOrUnsigned' [-Werror,-Wunused-const-variable]
static constexpr TypePattern OperandIntOrUnsigned{
 ^
```

https://github.com/llvm/llvm-project/pull/113504
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add UNSIGNED (PR #113504)

2024-10-24 Thread Daniel Chen via cfe-commits


@@ -135,8 +141,12 @@ static constexpr TypePattern SubscriptInt{IntType, 
KindCode::subscript};
 
 // Match any kind of some intrinsic or derived types
 static constexpr TypePattern AnyInt{IntType, KindCode::any};
+static constexpr TypePattern AnyUnsigned{UnsignedType, KindCode::any};

DanielCChen wrote:

I got a error from `-Wunused-const-variable`
```
llvm-project/flang/lib/Evaluate/intrinsics.cpp:144:30: error: unused variable 
'AnyUnsigned' [-Werror,-Wunused-const-variable]
static constexpr TypePattern AnyUnsigned{UnsignedType, KindCode::any};
```

https://github.com/llvm/llvm-project/pull/113504
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Support -mabi=vec-extabi and -mabi=vec-default on AIX (PR #113215)

2024-10-28 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen approved this pull request.

LGTM.

https://github.com/llvm/llvm-project/pull/113215
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add UNSIGNED (PR #113504)

2024-10-24 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Seems a place that needs to add UNSIGNED type case
```
llvm-project/flang/lib/Semantics/resolve-names.cpp:7597:16: error: enumeration 
value 'Unsigned' not handled in switch [-Werror,-Wswitch]
  switch (type.category()) {
  ~^~
llvm-project/flang/lib/Semantics/resolve-names.cpp:7621:1: error: non-void 
function does not return a value in all control paths [-Werror,-Wreturn-type]
}
```


https://github.com/llvm/llvm-project/pull/113504
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Revert "[AIX] Fix AIX BuildBot failure as AIX linker doesn't support version script." (PR #117444)

2024-11-23 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen approved this pull request.

LGTM. 
Thanks for reverting it.

https://github.com/llvm/llvm-project/pull/117444
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AIX] Fix AIX BuildBot failure as AIX linker doesn't support version script. (PR #117342)

2024-11-22 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen closed 
https://github.com/llvm/llvm-project/pull/117342
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AIX] Fix AIX BuildBot failure as AIX linker doesn't support version script. (PR #117342)

2024-11-22 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen created 
https://github.com/llvm/llvm-project/pull/117342

AIX BuildBot failed due to https://github.com/llvm/llvm-project/pull/116556 as 
AIX linker does not support version script. 
This PR is to fix the failure

This PR is on behalf of gniko...@ca.ibm.com

>From cd1e05490ffc3dd7746d18703683e7c79b46c412 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 22 Nov 2024 11:13:24 -0500
Subject: [PATCH] [AIX] Fix AIX BuildBot failure as AIX doesn't support version
 script.

---
 clang/tools/clang-shlib/CMakeLists.txt | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/clang/tools/clang-shlib/CMakeLists.txt 
b/clang/tools/clang-shlib/CMakeLists.txt
index 31484ec49c7739..2d97347ea7f828 100644
--- a/clang/tools/clang-shlib/CMakeLists.txt
+++ b/clang/tools/clang-shlib/CMakeLists.txt
@@ -48,11 +48,13 @@ add_clang_library(clang-cpp
   ${_OBJECTS}
   LINK_LIBS
   ${_DEPS})
+# AIX linker does not support version script
+if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
+  configure_file(simple_version_script.map.in simple_version_script.map)
 
-configure_file(simple_version_script.map.in simple_version_script.map)
-
-if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
-  target_link_options(clang-cpp PRIVATE 
LINKER:--version-script,${CMAKE_CURRENT_BINARY_DIR}/simple_version_script.map)
+  if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+target_link_options(clang-cpp PRIVATE 
LINKER:--version-script,${CMAKE_CURRENT_BINARY_DIR}/simple_version_script.map)
+  endif()
 endif()
 
 # Optimize function calls for default visibility definitions to avoid PLT and

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/4] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/4] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@Meinersbur and all other reviewers,

In the attempt to make building the path of flant-rt more general as well as 
customizable in response to the review comment, I made the following change in 
this latest commit (sorry about a couple of more commits that fixed some typos).

1. Moved `addFortranRuntimeLibraryPath` and `addFortranRuntimeLibs` to 
`ToolChain.h` and made them `virtual` so that they can be overridden if 
customization is needed. The current implementation of those two procedures is 
moved to `ToolChain.cpp` as the base implementation to default to.
2. Both AIX and PPCLinux now override `addFortranRuntimeLibs`. Those are the 
two system I have access to, but the code could be used by others if suitable.
3. I re-used `compilerRT` code as much as possible. Now, 
`addFortranRuntimeLibs` calls `getCompilerRTArgString` => `getCompilerRT` => 
`buildCompilerRTBasename` to get the path to flang-rt. As shown in 
`PPCLinux.cpp`, `static` is the default. If not found, it will search and build 
for `shared`. To differentiate `flang-rt` from `clang-rt`, a boolean flag 
`IsFortran` is passed to the chain of functions.

Please let me know if this approach is acceptable. 


https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/5] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/5] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/6] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/6] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/7] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/7] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 9d3e16f3e7c5adf4b5e0c1c6ba861d9e0ffea23b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/7] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From 0cc486e4dda5aec6a3330758767709bedc69c186 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/7] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-21 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

The intention is to make this PR for flang-rt only. As discussed with 
@daltenty, I remove the NFC-change of adding an overriding `getCompilerRT` in 
`AIX.cpp` as it actually breaches into clang space.

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-22 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-22 Thread Daniel Chen via cfe-commits


@@ -223,6 +223,13 @@ endif()
 # This can be used to detect whether we're in the runtimes build.
 set(LLVM_RUNTIMES_BUILD ON)
 
+if (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND UNIX AND ${CMAKE_SYSTEM_NAME} 
MATCHES "AIX")
+  # Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF as AIX doesn't support it
+  message(WARNING
+  "LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON is not supported on AIX. 
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR is set to OFF.")
+  set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL "" FORCE)
+endif()

DanielCChen wrote:

We consider it as recoverable mis-config. Because the driver and the cmake are 
consistent regarding where to search and output the library, users shouldn't be 
surprised as the compile/linking/execution should be all working. The only 
thing that may surprise users is that if they search for the library and find 
out it is not in the `lib/${triple}` path when they have the option ON. For 
that, we have the warning message in the build.log to explain why.

My first attempt actually followed what APPLE does: check `if 
(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)` at a few places to neglect 
the option. I later adopted @arichardson suggestion to put the check at one 
central place.

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-22 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

I will revert this commit first. 

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-21 Thread Daniel Chen via cfe-commits


@@ -223,6 +223,13 @@ endif()
 # This can be used to detect whether we're in the runtimes build.
 set(LLVM_RUNTIMES_BUILD ON)
 
+if (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND UNIX AND ${CMAKE_SYSTEM_NAME} 
MATCHES "AIX")
+  # Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF as AIX doesn't support it
+  message(WARNING
+  "LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON is not supported on AIX. 
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR is set to OFF.")
+  set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL "" FORCE)
+endif()

DanielCChen wrote:

We could make it work as there is not technically impossibility, but our 
decision is not to support two runtime paths on AIX.
@daltenty Could you please comment on if we can issue  `FATAL_ERROR` instead of 
force setting it to `OFF` on AIX?

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #132821)

2025-03-25 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/132821

>From be03d5cf608498b11dd274ee6294a0c4e83d4c5e Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Mon, 24 Mar 2025 15:45:33 -0400
Subject: [PATCH] [Driver] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 clang/include/clang/Driver/ToolChain.h|  3 ++
 clang/lib/Driver/ToolChain.cpp| 34 +++-
 .../lib/aix/libclang_rt.builtins-powerpc.a|  0
 .../lib/aix/libclang_rt.builtins-powerpc64.a  |  0
 .../powerpc-ibm-aix/libclang_rt.builtins.a|  0
 .../powerpc64-ibm-aix/libclang_rt.builtins.a  |  0
 clang/test/Driver/aix-ld.c| 52 +++
 clang/test/Driver/aix-print-runtime-dir.c | 10 
 clang/test/Driver/aix-rtlib.c |  8 +++
 9 files changed, 95 insertions(+), 12 deletions(-)
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir/lib/aix/libclang_rt.builtins-powerpc64.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc-ibm-aix/libclang_rt.builtins.a
 create mode 100644 
clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/powerpc64-ibm-aix/libclang_rt.builtins.a

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 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
 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 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 0..e69de29bb2d1d
diff --git 
a/clang/

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-18 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From c394e25b3af722d76338bf7ab02d87de2a23074b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 01/11] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From e2363ddb6df42e1c40153fb3263c179279c397cd Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 02/11] [flang-rt] Re-implement driver code of how flang-rt
 path is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArg

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-18 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Add linker options to support statical linking to shared flang-rt on AIX. (PR #131822)

2025-03-18 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen created 
https://github.com/llvm/llvm-project/pull/131822

This is to support statical linking to shared `flang-rt` on AIX.
Users should be able to do `flang -static t.f`. The `a.out` generated should 
not have dependencies on the shared libraries. 

>From 491e6d0cdfb3095baf37d72e9fc61e53426cd472 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Tue, 18 Mar 2025 11:09:41 -0400
Subject: [PATCH] [Driver] Add linker options to support statical linking to
 shared flang-rt on AIX.

---
 clang/lib/Driver/ToolChains/AIX.cpp | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 001f3a5178943..7ed26c42c80ce 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -127,8 +127,15 @@ void aix::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   }
 
   // Force static linking when "-static" is present.
-  if (Args.hasArg(options::OPT_static))
+  if (Args.hasArg(options::OPT_static)) {
 CmdArgs.push_back("-bnso");
+// The folllowing linker options are needed to statically link to the
+// shared libflang_rt.runtime.a on AIX
+CmdArgs.push_back("-bI:/usr/lib/syscalls.exp");
+CmdArgs.push_back("-bI:/usr/lib/aio.exp");
+CmdArgs.push_back("-bI:/usr/lib/threads.exp");
+CmdArgs.push_back("-lcrypt");
+  }
 
   // Add options for shared libraries.
   if (Args.hasArg(options::OPT_shared)) {

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-18 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 95377273d069e76023edf7ecc2df473e4e2f4aaa Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 01/10] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-16 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 9d3e16f3e7c5adf4b5e0c1c6ba861d9e0ffea23b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/8] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From 0cc486e4dda5aec6a3330758767709bedc69c186 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/8] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-14 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

I am working on a patch that re-uses `compilerRT` code as much as possible.

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-17 Thread Daniel Chen via cfe-commits


@@ -1187,16 +1187,19 @@ endif()
 # Build with _XOPEN_SOURCE on AIX, as stray macros in _ALL_SOURCE mode tend to
 # break things. In this case we need to enable the large-file API as well.
 if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
-  add_compile_definitions(_XOPEN_SOURCE=700)
-  add_compile_definitions(_LARGE_FILE_API)
-  add_compile_options(-pthread)
+  add_compile_definitions(_XOPEN_SOURCE=700)
+  add_compile_definitions(_LARGE_FILE_API)
+  add_compile_options(-pthread)
 
   # Modules should be built with -shared -Wl,-G, so we can use runtime linking
   # with plugins.
   string(APPEND CMAKE_MODULE_LINKER_FLAGS " -shared -Wl,-G")
 
   # Also set the correct flags for building shared libraries.
   string(APPEND CMAKE_SHARED_LINKER_FLAGS " -shared")
+
+  # Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF as AIX doesn't support it
+  set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL "" FORCE)

DanielCChen wrote:

Good point. Let me take a look.

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-17 Thread Daniel Chen via cfe-commits


@@ -101,3 +102,19 @@ bool PPCLinuxToolChain::SupportIEEEFloat128(
   return GlibcSupportsFloat128((Twine(D.DyldPrefix) + Linker).str()) &&
  !(D.CCCIsCXX() && HasUnsupportedCXXLib);
 }
+
+void PPCLinuxToolChain::addFortranRuntimeLibs(
+const ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(
+  Path = getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static,
+getDriver().IsFlangMode()

DanielCChen wrote:

Yes, we are. 
The `IsFlangMode()` is indeed checked before we call `addFortranRuntimeLibs`. 
Change both `AIX.cpp` and `PPCLinux.cpp` to `true`.

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-17 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 9d3e16f3e7c5adf4b5e0c1c6ba861d9e0ffea23b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 01/11] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From 0cc486e4dda5aec6a3330758767709bedc69c186 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 02/11] [flang-rt] Re-implement driver code of how flang-rt
 path is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArg

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-17 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 9d3e16f3e7c5adf4b5e0c1c6ba861d9e0ffea23b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/9] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From 0cc486e4dda5aec6a3330758767709bedc69c186 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/9] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-19 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-19 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-18 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 9d3e16f3e7c5adf4b5e0c1c6ba861d9e0ffea23b Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 01/10] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From 0cc486e4dda5aec6a3330758767709bedc69c186 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 02/10] [flang-rt] Re-implement driver code of how flang-rt
 path is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 90004c64a694a..dc23bdf2ffd05 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArg

[clang] [Driver] Generalize the `addFortranRuntimeLibs` function in `PPCLinux.cpp` to all Linux platform. (PR #134297)

2025-04-05 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Sorry that I missed a couple of things. I will bring this back after I hash 
them out.

https://github.com/llvm/llvm-project/pull/134297
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-04-05 Thread Daniel Chen via cfe-commits


@@ -223,6 +223,13 @@ endif()
 # This can be used to detect whether we're in the runtimes build.
 set(LLVM_RUNTIMES_BUILD ON)
 
+if (LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND UNIX AND ${CMAKE_SYSTEM_NAME} 
MATCHES "AIX")
+  # Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF as AIX doesn't support it
+  message(WARNING
+  "LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON is not supported on AIX. 
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR is set to OFF.")
+  set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL "" FORCE)
+endif()

DanielCChen wrote:

Great! Thanks everyone for the input! I will post another PR to change it to 
using `FATAL_ERROR` instead of `WARNING`

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-05 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> May I ask not to merge this yet? I have a question above, but I will not be 
> at work until next Thursday to discuss this in a timely manner.

@vzakhari Sure, I will wait until you come back.



https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [driver] return in `addArchSpecificRPath` for AIX and also get the triple without the OS on AIX. (PR #134520)

2025-04-05 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen created 
https://github.com/llvm/llvm-project/pull/134520

`addArchSpecificRPath` shoudl immediately return for AIX as AIX doesn't support 
`rpath` option.
`getArchSpecificLibPaths` also needs to get the triple without the OS version 
on AIX.

>From a3583c59f7797a40a11b550df5be9c56191f22a7 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 5 Apr 2025 23:24:09 -0400
Subject: [PATCH] [driver] return in addArchSpecificRPath for AIX and also get
 the triple without the OS on AIX.

---
 clang/lib/Driver/ToolChain.cpp | 7 ++-
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..dd3cc33b5a233 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -999,7 +999,12 @@ ToolChain::path_list ToolChain::getArchSpecificLibPaths() 
const {
 Paths.push_back(std::string(Path));
   };
 
-  AddPath({getTriple().str()});
+  // For AIX, get the triple without the OS version.
+  if (Triple.isOSAIX()) {
+const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
+AddPath({TripleWithoutVersion.str()});
+  } else
+AddPath({getTriple().str()});
   AddPath({getOSLibName(), llvm::Triple::getArchTypeName(getArch())});
   return Paths;
 }
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index ddeadff8f6dfb..e5d221cbf8b51 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1252,6 +1252,9 @@ void tools::addArchSpecificRPath(const ToolChain &TC, 
const ArgList &Args,
 options::OPT_fno_rtlib_add_rpath, false))
 return;
 
+  if (TC.getTriple().isOSAIX()) // AIX doesn't support -rpath option.
+return;
+
   SmallVector CandidateRPaths(TC.getArchSpecificLibPaths());
   if (const auto CandidateRPath = TC.getStdlibPath())
 CandidateRPaths.emplace_back(*CandidateRPath);

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [driver] return in `addArchSpecificRPath` for AIX and also get the triple without the OS on AIX in `getArchSpecificLibPaths`. (PR #134520)

2025-04-05 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/134520
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-04-04 Thread Daniel Chen via cfe-commits


@@ -109,7 +109,7 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()

DanielCChen wrote:

Thanks for the reivew!
The "old" code is confusing as the condition in `else(condition)` is ignored in 
this case. So remove it to make it easy to read.

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #132821)

2025-03-25 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> 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/` 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!
It doesn't seem there is any AIX specific configuration there. @daltenty Do you 
know if we need to do anything?

https://github.com/llvm/llvm-project/pull/132821
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-26 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@Meinersbur @MaskRay and all other reviewers,

PR #132821 enables `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` on AIX. As a result, 
I no longer need  to "force" AIX to use `os_dirname` for flang-rt. 

The change in this PR is intact because I re-used the same code to handle the 
option either ON or OFF.

I updated the description of this PR to reflect that.

I will undo PR #130875 and add a LIT test to this PR as soon as PR #132821 
lands. 

Sorry about the change or direction.

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-26 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Enable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #132821)

2025-03-26 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@ldionne I have checked that on AIX, clang uses the configuration from the 
system include as `-internal-isystem /opt/IBM/openxlCSDK/include/c++/v1`. There 
is already a test in `aix-toolchain-include.cpp` for that.

https://github.com/llvm/llvm-project/pull/132821
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-08 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From cd100a70479adbb4619d685e345485eea99987c5 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/4] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From 7db1cca2ad76b249d1fa2b76e6c488aa41cb3582 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/7] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits


@@ -2,22 +2,33 @@
 ! invocation. These libraries are added on top of other standard runtime
 ! libraries that the Clang driver will include.
 
-! RUN: %flang -### --target=ppc64le-linux-gnu %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,UNIX,UNIX-F128NONE
-! RUN: %flang -### --target=aarch64-apple-darwin %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-F128%f128-lib
+! RUN: %flang -### --target=ppc64le-linux-gnu %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,UNIX,UNIX-F128%f128-lib
 ! RUN: %flang -### --target=sparc-sun-solaris2.11 %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,UNIX,SOLARIS-F128%f128-lib
 ! RUN: %flang -### --target=x86_64-unknown-freebsd %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
 ! RUN: %flang -### --target=x86_64-unknown-netbsd %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
 ! RUN: %flang -### --target=x86_64-unknown-openbsd %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
 ! RUN: %flang -### --target=x86_64-unknown-dragonfly %S/Inputs/hello.f90 2>&1 
| FileCheck %s --check-prefixes=CHECK,BSD,BSD-F128%f128-lib
+! RUN: %flang -### --target=aarch64-apple-darwin %S/Inputs/hello.f90 2>&1 | 
FileCheck %s --check-prefixes=CHECK,DARWIN,DARWIN-F128%f128-lib

DanielCChen wrote:

This NFC movement is to have the RUN and CHECK have the same order so it is 
easy to maintain in the future. 

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From cd100a70479adbb4619d685e345485eea99987c5 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/7] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits


@@ -850,6 +852,21 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so

DanielCChen wrote:

Right. Will fix.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits


@@ -7,35 +7,106 @@
 !! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use 
 !! resource_dir_with_per_target_subdir as inputs.
 
-! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
 ! RUN: %flang %s -### 2>&1 \
 ! RUN:--target=powerpc64-ibm-aix \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
 
-! AIX64-LD-PER-TARGET-NOT: warning:
-! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
-! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! AIX64-LD-PER-TARGET-NOT: "-bnso"
-! AIX64-LD-PER-TARGET-SAME: "-b64"
-! AIX64-LD-PER-TARGET-SAME: "-bpT:0x1" "-bpD:0x11000"
-! AIX64-LD-PER-TARGET-SAME: "-lc"
-! AIX64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
-! AIX64-LD-PER-TARGET-SAME: "-lm"
-! AIX64-LD-PER-TARGET-SAME: "-lpthread"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: warning:

DanielCChen wrote:

Will do.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits


@@ -7,35 +7,106 @@
 !! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use 
 !! resource_dir_with_per_target_subdir as inputs.
 
-! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
 ! RUN: %flang %s -### 2>&1 \
 ! RUN:--target=powerpc64-ibm-aix \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
 
-! AIX64-LD-PER-TARGET-NOT: warning:
-! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
-! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! AIX64-LD-PER-TARGET-NOT: "-bnso"
-! AIX64-LD-PER-TARGET-SAME: "-b64"
-! AIX64-LD-PER-TARGET-SAME: "-bpT:0x1" "-bpD:0x11000"
-! AIX64-LD-PER-TARGET-SAME: "-lc"
-! AIX64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
-! AIX64-LD-PER-TARGET-SAME: "-lm"
-! AIX64-LD-PER-TARGET-SAME: "-lpthread"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: warning:
+! AIX64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" 
"[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-b64"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lpthread"
 
-! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt
+
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by option 
+! RUN: %flang -static-libflangrt %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-STATIC
+
+! AIX64-LD-PER-TARGET-STATIC-NOT: warning:

DanielCChen wrote:

Will do.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From cd100a70479adbb4619d685e345485eea99987c5 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/6] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-09 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen edited 
https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-28 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Hello reviewers,
I have rebased the PR to pull the change of enabling `PER_TARGET_RUNTIME_DIR` 
on AIX in.
I also added a couple of LIT tests to test the flang-rt path on both AIX and 
LoP.

Thanks for your time reviewing the PR!

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Add linker options to support statical linking to shared flang-rt on AIX. (PR #131822)

2025-03-30 Thread Daniel Chen via cfe-commits


@@ -127,9 +127,19 @@ void aix::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   }
 
   // Force static linking when "-static" is present.
-  if (Args.hasArg(options::OPT_static))
+  if (Args.hasArg(options::OPT_static)) {
 CmdArgs.push_back("-bnso");
 
+if (D.IsFlangMode()) {
+  // The folllowing linker options are needed to statically link to the
+  // shared libflang_rt.runtime.a on AIX
+  CmdArgs.push_back("-bI:/usr/lib/syscalls.exp");
+  CmdArgs.push_back("-bI:/usr/lib/aio.exp");
+  CmdArgs.push_back("-bI:/usr/lib/threads.exp");
+  CmdArgs.push_back("-lcrypt");
+}

DanielCChen wrote:

These extra options will be linked in when `flang` is the invocation driver. As 
the driver code is written in PR #131041, `libflang_rt.runtime.a` is always 
linked in with the full path name no matter if it is static or shared.


https://github.com/llvm/llvm-project/pull/131822
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Add linker options to support statical linking to shared flang-rt on AIX. (PR #131822)

2025-03-31 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

Note that the reason `aio.exp` is not needed is because flang-rt currently 
doesn't do asynchronous I/O. Once it is enabled using POSIX `aio_*` system 
calls, it will need to export those calls. 

https://github.com/llvm/llvm-project/pull/131822
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> Wouldn't it be more maintainable to just force the value to OFF for AIX where 
> the `option()` is defined?

Unfortunately, the cmake command line option `-D 
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` overrides the `option()` in the cmake 
file.

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/2] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/2] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131041

>From 660ec19fc5f59aa7c08331b5066388f3f5af14b9 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Wed, 12 Mar 2025 18:23:14 -0400
Subject: [PATCH 1/3] [flang-rt] Pass the whole path of libflang_rt.runtime.a
 to linker on AIX.

---
 clang/lib/Driver/ToolChains/CommonArgs.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index b43472a52038b..21f934cdba468 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1345,7 +1345,16 @@ void tools::addFortranRuntimeLibs(const ToolChain &TC, 
const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(TC, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
+if (TC.getTriple().isOSAIX()) {
+  // On AIX, pass the whole path of flang_rt.runtime.a to be consistent
+  // with clang.
+  std::string CRTBasename = "libflang_rt.runtime.a";
+  SmallString<128> Path(TC.getCompilerRTPath());
+  llvm::sys::path::append(Path, CRTBasename);
+  if (TC.getVFS().exists(Path))
+CmdArgs.push_back(Args.MakeArgString(std::string(Path)));
+} else
+  CmdArgs.push_back("-lflang_rt.runtime");
 addArchSpecificRPath(TC, Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions

>From ea6cf52d6a4e9a443fac4e2204f0201317f5f118 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Sat, 15 Mar 2025 16:27:08 -0400
Subject: [PATCH 2/3] [flang-rt] Re-implement driver code of how flang-rt path
 is built.

---
 clang/include/clang/Driver/ToolChain.h| 23 --
 clang/lib/Driver/ToolChain.cpp| 80 ---
 clang/lib/Driver/ToolChains/AIX.cpp   | 27 ++-
 clang/lib/Driver/ToolChains/AIX.h |  7 ++
 clang/lib/Driver/ToolChains/AVR.cpp   |  3 +-
 clang/lib/Driver/ToolChains/AVR.h |  3 +-
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 64 ---
 clang/lib/Driver/ToolChains/CommonArgs.h  |  9 ---
 clang/lib/Driver/ToolChains/Darwin.cpp|  8 +-
 clang/lib/Driver/ToolChains/Darwin.h  |  6 +-
 clang/lib/Driver/ToolChains/DragonFly.cpp |  4 +-
 clang/lib/Driver/ToolChains/FreeBSD.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Gnu.cpp   |  4 +-
 clang/lib/Driver/ToolChains/Haiku.cpp |  4 +-
 clang/lib/Driver/ToolChains/MSVC.cpp  |  4 +-
 clang/lib/Driver/ToolChains/MinGW.cpp |  4 +-
 clang/lib/Driver/ToolChains/MipsLinux.cpp |  3 +-
 clang/lib/Driver/ToolChains/MipsLinux.h   |  3 +-
 clang/lib/Driver/ToolChains/NetBSD.cpp|  4 +-
 clang/lib/Driver/ToolChains/OHOS.cpp  |  2 +-
 clang/lib/Driver/ToolChains/OHOS.h|  3 +-
 clang/lib/Driver/ToolChains/OpenBSD.cpp   | 11 +--
 clang/lib/Driver/ToolChains/OpenBSD.h |  3 +-
 clang/lib/Driver/ToolChains/PPCLinux.cpp  | 35 
 clang/lib/Driver/ToolChains/PPCLinux.h|  7 ++
 clang/lib/Driver/ToolChains/Solaris.cpp   |  4 +-
 flang-rt/cmake/modules/GetToolchainDirs.cmake |  2 +
 27 files changed, 206 insertions(+), 125 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 7d1d8feebf35e..579bd6f79efcd 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -216,8 +216,8 @@ class ToolChain {
 
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
   StringRef Component,
-  FileType Type,
-  bool AddArch) const;
+  FileType Type, bool AddArch,
+  bool IsFortran = false) const;
 
   /// Find the target-specific subdirectory for the current target triple under
   /// \p BaseDir, doing fallback triple searches as necessary.
@@ -509,11 +509,22 @@ class ToolChain {
 
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
-FileType Type = ToolChain::FT_Static) 
const;
+FileType Type = ToolChain::FT_Static,
+bool IsFortran = false) const;
+
+  /// Adds Fortran runtime libraries to \p CmdArgs.
+  virtual void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
+  /// Adds the path for the Fortran runtime libraries to \p CmdArgs.
+  virtual void
+  addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs) const;
 
-  const char *
-  getCompilerRTArgStri

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> > > Wouldn't it be more maintainable to just force the value to OFF for AIX 
> > > where the `option()` is defined?
> > 
> > 
> > Unfortunately, the cmake command line option 
> > `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` overrides the `option()` in the 
> > cmake file.
> 
> Sorry if this was not clear, I didn't mean changing the default value of the 
> option, but instead forcing it explicitly in the one central place where the 
> option is defined.

Right. What I observed is that no matter how and where I explicitly `set` the 
option OFF in top CMakeLists.txt of `llvm` or `clang`, if users build clang 
with the cmake flang`-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON` in their scripts, 
it will override the explicit set-to-OFF in the cmake. This may be the same 
reason that all the places I have changed also have `NOT APPLE` to disable it.

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/6] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/5] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/2] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
 on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/3] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-15 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/4] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-17 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

@arichardson I found the way to override the cache file. Thanks for the 
suggestion!

https://github.com/llvm/llvm-project/pull/131200
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [flang-rt] Pass the whole path of libflang_rt.runtime.a to linker on AIX (PR #131041)

2025-03-17 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> Approach look OK to me.
> 
> Could you add test(s) along the lines of 
> [aix-rlib.c](https://github.com/llvm/llvm-project/blob/main/clang/test/Driver/aix-rtlib.c).
>  If we make further changes, knowing what is expected on AIX/PPCLunux would 
> be very helpful.
> 
> A review from someone involved with the Clang driver side would be helpful. 
> @MaskRay ?

Thanks for the review again.
I am planning to add tests once the principle of the design is accepted. 

Further improvement:
1. The `addFortranRuntimeLibs` should contain common code only (something 
similar to what AIX.cpp is doing: just get the path) and leave platform 
specific stuff to the overriding functions for each platform (if they have 
unique stuff). The overriding functions can call the base one to get the common 
code.
2. `getCompilerRT` may be split into two: one for `lib/${os_dirname}` and one 
for `lib/${triple}`. For the platform like AIX that it only needs `os_dirname`, 
it can just use the base one without needing to override it. For the platform 
like LoP that honers the `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` option, it can 
call both without needing to override it (similar to PPCLinux.cpp)
3. Note that I only made AIX and LoP re-using the `compilerRT` code as I don't 
have means to test other platforms. But in theory, this code can go into the 
base function for other platforms.

https://github.com/llvm/llvm-project/pull/131041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-17 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/7] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-17 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/9] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[compiler-rt] [libcxx] [libcxxabi] [libunwind] [lldb] [llvm] [compiler-rt] Disable LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX. (PR #131200)

2025-03-17 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/131200

>From 1283ba24387e01aafcfc99e5db3f16c91deb5ac0 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Thu, 13 Mar 2025 15:52:23 -0400
Subject: [PATCH 1/8] [compiler-rt] Disable
 LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON on AIX.

---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake   | 2 +-
 compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 4 ++--
 compiler-rt/cmake/base-config-ix.cmake  | 4 ++--
 libcxx/CMakeLists.txt   | 2 +-
 libcxxabi/CMakeLists.txt| 2 +-
 libunwind/CMakeLists.txt| 2 +-
 lldb/test/CMakeLists.txt| 2 +-
 lldb/utils/lldb-dotest/CMakeLists.txt   | 2 +-
 llvm-libgcc/CMakeLists.txt  | 2 +-
 9 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake 
b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index c3e734f72392f..cb80cf84ac6b6 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -118,7 +118,7 @@ function(add_compiler_rt_component name)
 endfunction()
 
 macro(set_output_name output name arch)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT CMAKE_SYSTEM_NAME MATCHES 
"AIX")
 set(${output} ${name})
   else()
 if(ANDROID AND ${arch} STREQUAL "i386")
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake 
b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index 379e2c25949cb..21e384da03a3c 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -510,7 +510,7 @@ function(get_compiler_rt_target arch variable)
 endfunction()
 
 function(get_compiler_rt_install_dir arch install_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${install_dir} ${COMPILER_RT_INSTALL_LIBRARY_DIR}/${target} 
PARENT_SCOPE)
   else()
@@ -519,7 +519,7 @@ function(get_compiler_rt_install_dir arch install_dir)
 endfunction()
 
 function(get_compiler_rt_output_dir arch output_dir)
-  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+  if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT 
CMAKE_SYSTEM_NAME MATCHES "AIX")
 get_compiler_rt_target(${arch} target)
 set(${output_dir} ${COMPILER_RT_OUTPUT_LIBRARY_DIR}/${target} PARENT_SCOPE)
   else()
diff --git a/compiler-rt/cmake/base-config-ix.cmake 
b/compiler-rt/cmake/base-config-ix.cmake
index d92bc0e71fa1a..4224def96e948 100644
--- a/compiler-rt/cmake/base-config-ix.cmake
+++ b/compiler-rt/cmake/base-config-ix.cmake
@@ -103,13 +103,13 @@ if(NOT DEFINED COMPILER_RT_OS_DIR)
 string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
   endif()
 endif()
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib)
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
   set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
 "Path where built compiler-rt libraries should be installed.")
-else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+else()
   set(COMPILER_RT_OUTPUT_LIBRARY_DIR
 ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
   extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" 
"lib/${COMPILER_RT_OS_DIR}")
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index abe12c2805a7c..6273f1c141292 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,7 +414,7 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE 
STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared 
libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static 
libc++ runtime library.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
 string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index 6dcfc51e55321..ab11a15707533 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -182,7 +182,7 @@ set(CMAKE_MODULE_PATH
 set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
 "Path where built libc++abi runtime libraries should be installed.")
 
-if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME 
MATCHES "AIX")
   set(LIBCXXABI_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXXABI_LIBDIR_SUBDIR)

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-07 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> I would generally prefer if we could avoid having driver behavior depend on 
> the existance of files, but the linker would also pick an existing file as 
> well.

Agreed. The `if (static exists) - else if (shared exists)` logic in this PR is 
temporary until we have the compiler option to allow users to choose which one 
to link.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-08 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From cd100a70479adbb4619d685e345485eea99987c5 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/5] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-08 Thread Daniel Chen via cfe-commits


@@ -6880,6 +6880,13 @@ let Flags = [TargetSpecific] in {
 defm android_pad_segment : BooleanFFlag<"android-pad-segment">, Group;
 } // let Flags = [TargetSpecific]
 
+def shared_libflangrt : Flag<["-"], "shared-libflangrt">,
+  HelpText<"Dynamically link the shared flang-rt">, Group,
+  Visibility<[FlangOption]>, Flags<[NoArgumentUnused]>;
+def static_libflangrt : Flag<["-"], "static-libflangrt">, 
+  HelpText<"Statically link the static flang-rt">, Group,

DanielCChen wrote:

Same. I will change it.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-08 Thread Daniel Chen via cfe-commits


@@ -6880,6 +6880,13 @@ let Flags = [TargetSpecific] in {
 defm android_pad_segment : BooleanFFlag<"android-pad-segment">, Group;
 } // let Flags = [TargetSpecific]
 
+def shared_libflangrt : Flag<["-"], "shared-libflangrt">,
+  HelpText<"Dynamically link the shared flang-rt">, Group,

DanielCChen wrote:

Yes. It is indeed less verbose. I will change it.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-06 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From cd100a70479adbb4619d685e345485eea99987c5 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/2] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-06 Thread Daniel Chen via cfe-commits

DanielCChen wrote:

> Can you please explain why you want to link the static library by default? 
> For example, Clang has these options 
> https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-static-libgcc
>  that allow users to force the static linking, and, I think, by default it 
> links shared compiler support libraries.
> 
> Also, how does the full path linking of the shared library works with 
> `-frtlib-add-rpath`?

The `flang-rt` cmake is using the similar frame work to how `compiler-rt` is 
built. It publishes `libflang_rt.runtime.*` to the Clang `resource_dir` no 
matter if it is static or shared although `resource_dir` is normally for static 
libs. As your link points out, unlike Clang, Flang currently does not have a 
compiler option to switch between linking to the static or shared `flang-rt`, 
so the current order in this PR does not dictate the default.  
As the next step, I am planning to add a compiler option `-static-libflang_rt` 
that is similar to `-static-libgcc` for that purpose (or `-dynamic-libflang_rt` 
if we decide to link static `flang-rt` as default).

As for the `frtlib-add-rpath`, The current code before this PR is passing 
`-L/resource_dir/ -lflan_rt.runtime` to the linker. If the shared `flang-rt` is 
present in the `resource_dir`, the linker "prefers" the shared `flang-rt`. 
Users will need to specify `-frtlib-add-rpath` in order to link to the shared 
`flang-rt`. 
The full path linking should not affect that behavior. Users still need the 
`-frtlib-add-rpath` option to link to the shared `flang-rt` with full path 
name. 

I actually missed that in the shared path in this PR. I will push an amendment.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits


@@ -7,35 +7,100 @@
 !! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use 
 !! resource_dir_with_per_target_subdir as inputs.
 
-! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64-ibm-aix \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
 
-! AIX64-LD-PER-TARGET-NOT: warning:
-! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
-! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! AIX64-LD-PER-TARGET-NOT: "-bnso"
-! AIX64-LD-PER-TARGET-SAME: "-b64"
-! AIX64-LD-PER-TARGET-SAME: "-bpT:0x1" "-bpD:0x11000"
-! AIX64-LD-PER-TARGET-SAME: "-lc"
-! AIX64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
-! AIX64-LD-PER-TARGET-SAME: "-lm"
-! AIX64-LD-PER-TARGET-SAME: "-lpthread"
-
-! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! AIX64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" 
"[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-b64"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by option 
+! RUN: %flang -static-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-STATIC
+
+! AIX64-LD-PER-TARGET-STATIC: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-STATIC: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-STATIC-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-b64"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lc"
+! AIX64-LD-PER-TARGET-STATIC-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lm"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to shared flang-rt by option 
+! RUN: %flang -shared-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-SHARED
+
+! AIX64-LD-PER-TARGET-SHARED: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-SHARED: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-SHARED-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-b64"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lc"
+! AIX64-LD-PER-TARGET-SHARED-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lm"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lpthread"
+
+
+! Check powerpc64le-unknown-linux-gnu 64-bit linking to shared flang-rt by 
default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64le-unknown-linux-gnu \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET
-
-! LOP64-LD-PER-TARGET-NOT: warning:
-! LOP64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
-! LOP64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! LOP64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! LOP64-LD-PER-TARGET-NOT: "-bnso"
-! LOP64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64le-unknown-linux-gnu{{/|}}libflang_rt.runtime.a"
-! LOP64-LD-PER-TARGET-SAME: "-lm"
-! LOP64-LD-PER-TARGET-SAME: "-lc"
+! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-DEFAULT
+
+! LOP64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" 
"powerpc64le-u

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits


@@ -7,35 +7,100 @@
 !! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use 
 !! resource_dir_with_per_target_subdir as inputs.
 
-! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64-ibm-aix \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
 
-! AIX64-LD-PER-TARGET-NOT: warning:
-! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
-! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! AIX64-LD-PER-TARGET-NOT: "-bnso"
-! AIX64-LD-PER-TARGET-SAME: "-b64"
-! AIX64-LD-PER-TARGET-SAME: "-bpT:0x1" "-bpD:0x11000"
-! AIX64-LD-PER-TARGET-SAME: "-lc"
-! AIX64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
-! AIX64-LD-PER-TARGET-SAME: "-lm"
-! AIX64-LD-PER-TARGET-SAME: "-lpthread"
-
-! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! AIX64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" 
"[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-b64"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by option 
+! RUN: %flang -static-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-STATIC
+
+! AIX64-LD-PER-TARGET-STATIC: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-STATIC: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-STATIC-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-b64"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lc"
+! AIX64-LD-PER-TARGET-STATIC-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lm"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to shared flang-rt by option 
+! RUN: %flang -shared-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-SHARED
+
+! AIX64-LD-PER-TARGET-SHARED: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-SHARED: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-SHARED-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-b64"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lc"
+! AIX64-LD-PER-TARGET-SHARED-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lm"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lpthread"
+
+
+! Check powerpc64le-unknown-linux-gnu 64-bit linking to shared flang-rt by 
default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64le-unknown-linux-gnu \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET
-
-! LOP64-LD-PER-TARGET-NOT: warning:
-! LOP64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
-! LOP64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! LOP64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! LOP64-LD-PER-TARGET-NOT: "-bnso"
-! LOP64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64le-unknown-linux-gnu{{/|}}libflang_rt.runtime.a"
-! LOP64-LD-PER-TARGET-SAME: "-lm"
-! LOP64-LD-PER-TARGET-SAME: "-lc"
+! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-DEFAULT
+
+! LOP64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" 
"powerpc64le-u

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From 7db1cca2ad76b249d1fa2b76e6c488aa41cb3582 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/8] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits


@@ -7,35 +7,100 @@
 !! LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON, use 
 !! resource_dir_with_per_target_subdir as inputs.
 
-! Check powerpc64-ibm-aix 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64-ibm-aix \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-DEFAULT
 
-! AIX64-LD-PER-TARGET-NOT: warning:
-! AIX64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64-ibm-aix"
-! AIX64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! AIX64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! AIX64-LD-PER-TARGET-NOT: "-bnso"
-! AIX64-LD-PER-TARGET-SAME: "-b64"
-! AIX64-LD-PER-TARGET-SAME: "-bpT:0x1" "-bpD:0x11000"
-! AIX64-LD-PER-TARGET-SAME: "-lc"
-! AIX64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
-! AIX64-LD-PER-TARGET-SAME: "-lm"
-! AIX64-LD-PER-TARGET-SAME: "-lpthread"
-
-! Check powerpc64le-unknown-linux-gnu 64-bit linking to static flang-rt
-! RUN: %flang %s -### 2>&1 \
+! AIX64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-resource-dir" 
"[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-DEFAULT: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-DEFAULT-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-b64"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lc"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lm"
+! AIX64-LD-PER-TARGET-DEFAULT-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to static flang-rt by option 
+! RUN: %flang -static-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-STATIC
+
+! AIX64-LD-PER-TARGET-STATIC: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-STATIC: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-STATIC-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-b64"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lc"
+! AIX64-LD-PER-TARGET-STATIC-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lm"
+! AIX64-LD-PER-TARGET-STATIC-SAME: "-lpthread"
+
+
+! Check powerpc64-ibm-aix 64-bit linking to shared flang-rt by option 
+! RUN: %flang -shared-libflangrt -Werror %s -### 2>&1 \
+! RUN:--target=powerpc64-ibm-aix \
+! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
+! RUN:   | FileCheck %s --check-prefix=AIX64-LD-PER-TARGET-SHARED
+
+! AIX64-LD-PER-TARGET-SHARED: "-fc1" "-triple" "powerpc64-ibm-aix"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+! AIX64-LD-PER-TARGET-SHARED: "{{.*}}ld{{(.exe)?}}"
+! AIX64-LD-PER-TARGET-SHARED-NOT: "-bnso"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-b64"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-bpT:0x1" "-bpD:0x11000"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lc"
+! AIX64-LD-PER-TARGET-SHARED-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64-ibm-aix{{/|}}libflang_rt.runtime.a"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lm"
+! AIX64-LD-PER-TARGET-SHARED-SAME: "-lpthread"
+
+
+! Check powerpc64le-unknown-linux-gnu 64-bit linking to shared flang-rt by 
default
+! RUN: %flang -Werror %s -### 2>&1 \
 ! RUN:--target=powerpc64le-unknown-linux-gnu \
 ! RUN:
-resource-dir=%S/../../../clang/test/Driver/Inputs/resource_dir_with_per_target_subdir
 \
-! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET
-
-! LOP64-LD-PER-TARGET-NOT: warning:
-! LOP64-LD-PER-TARGET: "-fc1" "-triple" "powerpc64le-unknown-linux-gnu"
-! LOP64-LD-PER-TARGET-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
-! LOP64-LD-PER-TARGET: "{{.*}}ld{{(.exe)?}}"
-! LOP64-LD-PER-TARGET-NOT: "-bnso"
-! LOP64-LD-PER-TARGET-SAME: 
"[[RESOURCE_DIR]]{{/|}}lib{{/|}}powerpc64le-unknown-linux-gnu{{/|}}libflang_rt.runtime.a"
-! LOP64-LD-PER-TARGET-SAME: "-lm"
-! LOP64-LD-PER-TARGET-SAME: "-lc"
+! RUN:   | FileCheck %s --check-prefixes=LOP64-LD-PER-TARGET-DEFAULT
+
+! LOP64-LD-PER-TARGET-DEFAULT: "-fc1" "-triple" 
"powerpc64le-u

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits

https://github.com/DanielCChen updated 
https://github.com/llvm/llvm-project/pull/134362

>From 7db1cca2ad76b249d1fa2b76e6c488aa41cb3582 Mon Sep 17 00:00:00 2001
From: Daniel Chen 
Date: Fri, 4 Apr 2025 06:10:56 -0400
Subject: [PATCH 1/9] [driver] Generalize adding the path of
 libflang_rt.runtime.a.

---
 clang/include/clang/Driver/ToolChain.h   |  4 
 clang/lib/Driver/ToolChain.cpp   | 20 ++--
 clang/lib/Driver/ToolChains/AIX.cpp  |  8 
 clang/lib/Driver/ToolChains/AIX.h|  3 ---
 clang/lib/Driver/ToolChains/PPCLinux.cpp | 16 
 clang/lib/Driver/ToolChains/PPCLinux.h   |  3 ---
 flang/test/Driver/linker-flags.f90   |  2 +-
 7 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 076e4296c3090..d0059673d6a67 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -521,6 +521,10 @@ class ToolChain {
   addFortranRuntimeLibraryPath(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
 
+  /// Add the path for libflang_rt.runtime.a
+  void addFlangRTLibPath(const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CmdArgs) const;
+
   const char *getCompilerRTArgString(const llvm::opt::ArgList &Args,
  StringRef Component,
  FileType Type = ToolChain::FT_Static,
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 36d0ae34dec86..054618a44d7bc 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -816,8 +816,7 @@ void ToolChain::addFortranRuntimeLibs(const ArgList &Args,
   if (AsNeeded)
 addAsNeededOption(*this, Args, CmdArgs, /*as_needed=*/false);
 }
-CmdArgs.push_back("-lflang_rt.runtime");
-addArchSpecificRPath(*this, Args, CmdArgs);
+addFlangRTLibPath(Args, CmdArgs);
 
 // needs libexecinfo for backtrace functions
 if (getTriple().isOSFreeBSD() || getTriple().isOSNetBSD() ||
@@ -850,6 +849,23 @@ void ToolChain::addFortranRuntimeLibraryPath(const 
llvm::opt::ArgList &Args,
 CmdArgs.push_back(Args.MakeArgString("-L" + DefaultLibPath));
 }
 
+void ToolChain::addFlangRTLibPath(const ArgList &Args,
+  llvm::opt::ArgStringList &CmdArgs) const {
+  // Link static flang_rt.runtime.a or shared flang_rt.runtime.so
+  const char *Path;
+  if (getVFS().exists(Twine(Path = getCompilerRTArgString(
+Args, "runtime", ToolChain::FT_Static, true
+CmdArgs.push_back(Path);
+  else if (getVFS().exists(
+   Twine(Path = getCompilerRTArgString(
+ Args, "runtime", ToolChain::FT_Shared, true
+CmdArgs.push_back(Path);
+  else {
+CmdArgs.push_back("-lflang_rt.runtime");
+addArchSpecificRPath(*this, Args, CmdArgs);
+  }
+}
+
 // Android target triples contain a target version. If we don't have libraries
 // for the exact target version, we should fall back to the next newest version
 // or a versionless path, if any.
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 26b9d4c772be6..5dc80bc5a3d25 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -608,14 +608,6 @@ void AIX::addProfileRTLibs(const llvm::opt::ArgList &Args,
   ToolChain::addProfileRTLibs(Args, CmdArgs);
 }
 
-void AIX::addFortranRuntimeLibs(const ArgList &Args,
-llvm::opt::ArgStringList &CmdArgs) const {
-  // Link flang_rt.runtime.a. On AIX, the static and shared library are all
-  // named .a
-  CmdArgs.push_back(
-  getCompilerRTArgString(Args, "runtime", ToolChain::FT_Static, true));
-}
-
 ToolChain::CXXStdlibType AIX::GetDefaultCXXStdlibType() const {
   return ToolChain::CST_Libcxx;
 }
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 17e8370cd1218..8f130f6b54547 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -87,9 +87,6 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
   void addProfileRTLibs(const llvm::opt::ArgList &Args,
 llvm::opt::ArgStringList &CmdArgs) const override;
 
-  void addFortranRuntimeLibs(const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs) const override;
-
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
   RuntimeLibType GetDefaultRuntimeLibType() const override;
diff --git a/clang/lib/Driver/ToolChains/PPCLinux.cpp 
b/clang/lib/Driver/ToolChains/PPCLinux.cpp
index 575e88c6ab124..0ed0f91ad166c 100644
--- a/clang/lib/Driver/ToolChains/PPCLinux.cpp
+++ b/clang/lib/Driver/ToolChains/PPCLinux.cpp
@@ -12,7 +12,6 @@
 #include "clang/Driver/Options.h"
 #include "llvm/Support/FileSystem.h"

[clang] [flang] [driver] Generalize the code that adds the path of libflang_rt.runtime.a. (PR #134362)

2025-04-11 Thread Daniel Chen via cfe-commits


@@ -744,9 +744,12 @@ std::string ToolChain::buildCompilerRTBasename(const 
llvm::opt::ArgList &Args,
 Suffix = IsITANMSVCWindows ? ".lib" : ".a";
 break;
   case ToolChain::FT_Shared:
-Suffix = TT.isOSWindows()
- ? (TT.isWindowsGNUEnvironment() ? ".dll.a" : ".lib")
- : ".so";
+if (TT.isOSWindows())
+  Suffix = TT.isWindowsGNUEnvironment() ? ".dll.a" : ".lib";
+else if (TT.isOSAIX())
+  Suffix = ".a";

DanielCChen wrote:

On AIX, both static and shared library has the same `.a` suffix.

https://github.com/llvm/llvm-project/pull/134362
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


  1   2   >