llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-flang-driver @llvm/pr-subscribers-clang @llvm/pr-subscribers-backend-powerpc Author: Tarun Prabhu (tarunprabhu) <details> <summary>Changes</summary> This partially addresses some requests in #<!-- -->89888 --- Full diff: https://github.com/llvm/llvm-project/pull/108868.diff 13 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+5-2) - (modified) clang/lib/Driver/ToolChains/AIX.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/Darwin.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/DragonFly.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/FreeBSD.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/Gnu.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/Haiku.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/MSVC.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/MinGW.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/NetBSD.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/OpenBSD.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/Solaris.cpp (+2-1) - (added) flang/test/Driver/nostdlib.f90 (+29) ``````````diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 7f123335ce8cfa..aa3ae92fb6ae78 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5572,7 +5572,8 @@ def : Flag<["-"], "nocudalib">, Alias<nogpulib>; def gpulibc : Flag<["-"], "gpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Link the LLVM C Library for GPUs">; def nogpulibc : Flag<["-"], "nogpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; -def nodefaultlibs : Flag<["-"], "nodefaultlibs">; +def nodefaultlibs : Flag<["-"], "nodefaultlibs">, + Visibility<[ClangOption, FlangOption, CLOption, DXCOption]>; def nodriverkitlib : Flag<["-"], "nodriverkitlib">; def nofixprebinding : Flag<["-"], "nofixprebinding">; def nolibc : Flag<["-"], "nolibc">; @@ -5592,7 +5593,9 @@ def nostdincxx : Flag<["-"], "nostdinc++">, Visibility<[ClangOption, CC1Option]> Group<IncludePath_Group>, HelpText<"Disable standard #include directories for the C++ standard library">, MarshallingInfoNegativeFlag<HeaderSearchOpts<"UseStandardCXXIncludes">>; -def nostdlib : Flag<["-"], "nostdlib">, Group<Link_Group>; +def nostdlib : Flag<["-"], "nostdlib">, + Visibility<[ClangOption, CLOption, FlangOption, DXCOption]>, + Group<Link_Group>; def nostdlibxx : Flag<["-"], "nostdlib++">; def object : Flag<["-"], "object">; def o : JoinedOrSeparate<["-"], "o">, diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp index c2de7328c25c5d..09a8dc2f4fa5dd 100644 --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -330,7 +330,8 @@ void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, } } - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); CmdArgs.push_back("-lm"); diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index ebc9ed1aadb0ab..87380869f6fdab 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -713,7 +713,8 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, // Additional linker set-up and flags for Fortran. This is required in order // to generate executables. - if (getToolChain().getDriver().IsFlangMode()) { + if (getToolChain().getDriver().IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(getToolChain(), Args, CmdArgs); addFortranRuntimeLibs(getToolChain(), Args, CmdArgs); } diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp b/clang/lib/Driver/ToolChains/DragonFly.cpp index 1dbc46763c1156..1e0a4159bf4ad7 100644 --- a/clang/lib/Driver/ToolChains/DragonFly.cpp +++ b/clang/lib/Driver/ToolChains/DragonFly.cpp @@ -151,7 +151,8 @@ void dragonfly::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); CmdArgs.push_back("-lm"); diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index a8ee6540001ee4..3d744bc087f467 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -313,7 +313,8 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); if (Profiling) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index b7ae0deeb1219b..603d0468dd3f3c 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -572,7 +572,8 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); CmdArgs.push_back("-lm"); diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index 346652a7e4bd8e..af74f43e48364c 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -119,7 +119,8 @@ void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); } diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 7eb38098bed25b..80799d1e715f07 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -138,7 +138,8 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, for (const auto &LibPath : Args.getAllArgValues(options::OPT_L)) CmdArgs.push_back(Args.MakeArgString("-libpath:" + LibPath)); - if (C.getDriver().IsFlangMode()) { + if (C.getDriver().IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(TC, Args, CmdArgs); addFortranRuntimeLibs(TC, Args, CmdArgs); diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 85f40893e54247..e51daca5025a80 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -251,7 +251,8 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, D.getLTOMode() == LTOK_Thin); } - if (C.getDriver().IsFlangMode()) { + if (C.getDriver().IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(TC, Args, CmdArgs); addFortranRuntimeLibs(TC, Args, CmdArgs); } diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index d54f2288294949..abd5e1aa003b38 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -326,7 +326,8 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); CmdArgs.push_back("-lm"); diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index 3770471bae7c0d..f668a11e78f81d 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -239,7 +239,8 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below (i.e. // AddRunTimeLibs). - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(ToolChain, Args, CmdArgs); addFortranRuntimeLibs(ToolChain, Args, CmdArgs); if (Profiling) diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index e82ed2ca79ffd6..cf39038dcac37c 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -223,7 +223,8 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, // Additional linker set-up and flags for Fortran. This is required in order // to generate executables. As Fortran runtime depends on the C runtime, // these dependencies need to be listed before the C runtime below. - if (D.IsFlangMode()) { + if (D.IsFlangMode() && + !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { addFortranRuntimeLibraryPath(getToolChain(), Args, CmdArgs); addFortranRuntimeLibs(getToolChain(), Args, CmdArgs); CmdArgs.push_back("-lm"); diff --git a/flang/test/Driver/nostdlib.f90 b/flang/test/Driver/nostdlib.f90 new file mode 100644 index 00000000000000..cd707e632a45ff --- /dev/null +++ b/flang/test/Driver/nostdlib.f90 @@ -0,0 +1,29 @@ +! Check that the libraries do not appear when using -nostdlib and -nodefaultlibs + +! RUN: %flang -### -nostdlib --target=ppc64le-linux-gnu %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=aarch64-apple-darwin %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=sparc-sun-solaris2.11 %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-unknown-freebsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-unknown-netbsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-unknown-openbsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-unknown-dragonfly %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-unknown-haiku %s 2>&1 | FileCheck %s +! RUN: %flang -### -nostdlib --target=x86_64-windows-gnu %s 2>&1 | FileCheck %s + +! RUN: %flang -### -nodefaultlibs --target=ppc64le-linux-gnu %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=aarch64-apple-darwin %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=sparc-sun-solaris2.11 %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-unknown-freebsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-unknown-netbsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-unknown-openbsd %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-unknown-dragonfly %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-unknown-haiku %s 2>&1 | FileCheck %s +! RUN: %flang -### -nodefaultlibs --target=x86_64-windows-gnu %s 2>&1 | FileCheck %s + +! -lgcc will not be linked on all platforms, so checking for that is redundant +! in certain cases. But it is not clear that it is worth checking for each +! platform individually. + +! CHECK-NOT: "-lFortranRuntime" +! CHECK-NOT: "-lFortranDecimal" +! CHECK-NOT: "-lgcc" `````````` </details> https://github.com/llvm/llvm-project/pull/108868 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits