[clang] [flang] [flang][Driver] Let the linker fail on multiple definitions of main() (PR #73124)
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)
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)
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)
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)
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)
@@ -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)
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)
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)
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)
@@ -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)
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)
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)
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)
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)
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)
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)
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)
@@ -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)
@@ -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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
@@ -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)
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)
@@ -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)
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)
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)
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)
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)
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)
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)
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)
@@ -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)
@@ -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)
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)
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)
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)
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)
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)
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)
@@ -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)
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)
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)
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)
@@ -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)
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)
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)
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)
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)
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)
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)
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)
@@ -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)
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)
@@ -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)
@@ -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)
@@ -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)
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)
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)
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)
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)
@@ -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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
@@ -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)
@@ -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)
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)
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)
@@ -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)
@@ -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)
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)
@@ -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)
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)
@@ -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