mgorny removed rL LLVM as the repository for this revision. mgorny updated this revision to Diff 73979. This revision is now accepted and ready to land.
https://reviews.llvm.org/D25338 Files: docs/CommandGuide/clang.rst include/clang/Driver/Options.td lib/Driver/Driver.cpp test/Driver/print-libgcc-file-name-clangrt.c test/Driver/print-libgcc-file-name-libgcc.c test/lit.cfg Index: test/lit.cfg =================================================================== --- test/lit.cfg +++ test/lit.cfg @@ -375,6 +375,11 @@ if platform.system() not in ['Windows']: config.available_features.add('utf8-capable-terminal') +# Support for libgcc runtime. Used to rule out tests that require +# clang to run with -rtlib=libgcc. +if platform.system() not in ['Darwin', 'Fuchsia']: + config.available_features.add('libgcc') + # Native compilation: Check if triples match. # FIXME: Consider cases that target can be executed # even if host_triple were different from target_triple. Index: test/Driver/print-libgcc-file-name-libgcc.c =================================================================== --- /dev/null +++ test/Driver/print-libgcc-file-name-libgcc.c @@ -0,0 +1,7 @@ +// Test that -print-libgcc-file-name correctly respects -rtlib=libgcc. + +// REQUIRES: libgcc + +// RUN: %clang -rtlib=libgcc -print-libgcc-file-name 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LIBGCC %s +// CHECK-LIBGCC: libgcc.a Index: test/Driver/print-libgcc-file-name-clangrt.c =================================================================== --- /dev/null +++ test/Driver/print-libgcc-file-name-clangrt.c @@ -0,0 +1,11 @@ +// Test that -print-libgcc-file-name correctly respects -rtlib=compiler-rt. + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name 2>&1 \ +// RUN: --target=x86_64-pc-linux \ +// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-X8664 %s +// CHECK-CLANGRT-X8664: libclang_rt.builtins-x86_64.a + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name 2>&1 \ +// RUN: --target=i686-pc-linux \ +// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-I686 %s +// CHECK-CLANGRT-I686: libclang_rt.builtins-i686.a Index: lib/Driver/Driver.cpp =================================================================== --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -994,7 +994,15 @@ } if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) { - llvm::outs() << GetFilePath("libgcc.a", TC) << "\n"; + ToolChain::RuntimeLibType RLT = TC.GetRuntimeLibType(C.getArgs()); + switch (RLT) { + case ToolChain::RLT_CompilerRT: + llvm::outs() << TC.getCompilerRTArgString(C.getArgs(), "builtins") << "\n"; + break; + case ToolChain::RLT_Libgcc: + llvm::outs() << GetFilePath("libgcc.a", TC) << "\n"; + break; + } return false; } Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1861,7 +1861,8 @@ def print_ivar_layout : Flag<["-"], "print-ivar-layout">, Flags<[CC1Option]>, HelpText<"Enable Objective-C Ivar layout bitmap print trace">; def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">, - HelpText<"Print the library path for \"libgcc.a\"">; + HelpText<"Print the library path for the currently used compiler runtime " + "library (\"libgcc.a\" or \"libclang_rt.builtins.*.a\")">; def print_multi_directory : Flag<["-", "--"], "print-multi-directory">; def print_multi_lib : Flag<["-", "--"], "print-multi-lib">; def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">, Index: docs/CommandGuide/clang.rst =================================================================== --- docs/CommandGuide/clang.rst +++ docs/CommandGuide/clang.rst @@ -394,7 +394,8 @@ .. option:: -print-libgcc-file-name - Print the library path for "libgcc.a". + Print the library path for the currently used compiler runtime library + ("libgcc.a" or "libclang_rt.builtins.*.a"). .. option:: -print-prog-name=<name>
Index: test/lit.cfg =================================================================== --- test/lit.cfg +++ test/lit.cfg @@ -375,6 +375,11 @@ if platform.system() not in ['Windows']: config.available_features.add('utf8-capable-terminal') +# Support for libgcc runtime. Used to rule out tests that require +# clang to run with -rtlib=libgcc. +if platform.system() not in ['Darwin', 'Fuchsia']: + config.available_features.add('libgcc') + # Native compilation: Check if triples match. # FIXME: Consider cases that target can be executed # even if host_triple were different from target_triple. Index: test/Driver/print-libgcc-file-name-libgcc.c =================================================================== --- /dev/null +++ test/Driver/print-libgcc-file-name-libgcc.c @@ -0,0 +1,7 @@ +// Test that -print-libgcc-file-name correctly respects -rtlib=libgcc. + +// REQUIRES: libgcc + +// RUN: %clang -rtlib=libgcc -print-libgcc-file-name 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LIBGCC %s +// CHECK-LIBGCC: libgcc.a Index: test/Driver/print-libgcc-file-name-clangrt.c =================================================================== --- /dev/null +++ test/Driver/print-libgcc-file-name-clangrt.c @@ -0,0 +1,11 @@ +// Test that -print-libgcc-file-name correctly respects -rtlib=compiler-rt. + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name 2>&1 \ +// RUN: --target=x86_64-pc-linux \ +// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-X8664 %s +// CHECK-CLANGRT-X8664: libclang_rt.builtins-x86_64.a + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name 2>&1 \ +// RUN: --target=i686-pc-linux \ +// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-I686 %s +// CHECK-CLANGRT-I686: libclang_rt.builtins-i686.a Index: lib/Driver/Driver.cpp =================================================================== --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -994,7 +994,15 @@ } if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) { - llvm::outs() << GetFilePath("libgcc.a", TC) << "\n"; + ToolChain::RuntimeLibType RLT = TC.GetRuntimeLibType(C.getArgs()); + switch (RLT) { + case ToolChain::RLT_CompilerRT: + llvm::outs() << TC.getCompilerRTArgString(C.getArgs(), "builtins") << "\n"; + break; + case ToolChain::RLT_Libgcc: + llvm::outs() << GetFilePath("libgcc.a", TC) << "\n"; + break; + } return false; } Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1861,7 +1861,8 @@ def print_ivar_layout : Flag<["-"], "print-ivar-layout">, Flags<[CC1Option]>, HelpText<"Enable Objective-C Ivar layout bitmap print trace">; def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">, - HelpText<"Print the library path for \"libgcc.a\"">; + HelpText<"Print the library path for the currently used compiler runtime " + "library (\"libgcc.a\" or \"libclang_rt.builtins.*.a\")">; def print_multi_directory : Flag<["-", "--"], "print-multi-directory">; def print_multi_lib : Flag<["-", "--"], "print-multi-lib">; def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">, Index: docs/CommandGuide/clang.rst =================================================================== --- docs/CommandGuide/clang.rst +++ docs/CommandGuide/clang.rst @@ -394,7 +394,8 @@ .. option:: -print-libgcc-file-name - Print the library path for "libgcc.a". + Print the library path for the currently used compiler runtime library + ("libgcc.a" or "libclang_rt.builtins.*.a"). .. option:: -print-prog-name=<name>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits