diff options
author | Anchu Rajendran S <asudhaku@amd.com> | 2025-09-18 08:55:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-18 08:55:20 -0700 |
commit | 5b2af16be591172cde8203160d1e01f5815a16ac (patch) | |
tree | 3f5260800a46c3b74ba0f075e4bc77d2cc32eb0e /flang/lib/Frontend/CompilerInvocation.cpp | |
parent | f7b1b397673a234b62dc4ec68d9afa423fe4f520 (diff) | |
download | llvm-5b2af16be591172cde8203160d1e01f5815a16ac.zip llvm-5b2af16be591172cde8203160d1e01f5815a16ac.tar.gz llvm-5b2af16be591172cde8203160d1e01f5815a16ac.tar.bz2 |
[flang][Driver] Enables lto-partitions and fat-lto-object. (#158125)
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | flang/lib/Frontend/CompilerInvocation.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 4729f8a..09b5173 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -332,17 +332,6 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, if (args.hasArg(clang::driver::options::OPT_finstrument_functions)) opts.InstrumentFunctions = 1; - // -flto=full/thin option. - if (const llvm::opt::Arg *a = - args.getLastArg(clang::driver::options::OPT_flto_EQ)) { - llvm::StringRef s = a->getValue(); - assert((s == "full" || s == "thin") && "Unknown LTO mode."); - if (s == "full") - opts.PrepareForFullLTO = true; - else - opts.PrepareForThinLTO = true; - } - if (const llvm::opt::Arg *a = args.getLastArg( clang::driver::options::OPT_mcode_object_version_EQ)) { llvm::StringRef s = a->getValue(); @@ -1489,6 +1478,7 @@ static bool parseLinkerOptionsArgs(CompilerInvocation &invoc, llvm::opt::ArgList &args, clang::DiagnosticsEngine &diags) { llvm::Triple triple = llvm::Triple(invoc.getTargetOpts().triple); + CodeGenOptions &opts = invoc.getCodeGenOpts(); // TODO: support --dependent-lib on other platforms when MLIR supports // !llvm.dependent.lib @@ -1501,8 +1491,35 @@ static bool parseLinkerOptionsArgs(CompilerInvocation &invoc, return false; } - invoc.getCodeGenOpts().DependentLibs = + opts.DependentLibs = args.getAllArgValues(clang::driver::options::OPT_dependent_lib); + + // -flto=full/thin option. + if (const llvm::opt::Arg *a = + args.getLastArg(clang::driver::options::OPT_flto_EQ)) { + llvm::StringRef s = a->getValue(); + assert((s == "full" || s == "thin") && "Unknown LTO mode."); + if (s == "full") + opts.PrepareForFullLTO = true; + else + opts.PrepareForThinLTO = true; + } + + // -ffat-lto-objects + if (const llvm::opt::Arg *arg = + args.getLastArg(clang::driver::options::OPT_ffat_lto_objects, + clang::driver::options::OPT_fno_fat_lto_objects)) { + opts.PrepareForFatLTO = + arg->getOption().matches(clang::driver::options::OPT_ffat_lto_objects); + if (opts.PrepareForFatLTO) { + assert((opts.PrepareForFullLTO || opts.PrepareForThinLTO) && + "Unknown LTO mode"); + + if (!triple.isOSBinFormatELF()) + diags.Report(clang::diag::err_drv_unsupported_opt_for_target) + << arg->getAsString(args) << triple.getTriple(); + } + } return true; } |