mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-16 05:01:56 +00:00
[Driver] Make -print-libgcc-file-name print compiler-rt lib when used
Make the -print-libgcc-file-name option print an appropriate compiler runtime library, that is libgcc.a if gcc runtime is used and an appropriate compiler-rt library if that runtime is used. The main use for this is to allow linking executables built with -nodefaultlibs (e.g. to avoid linking to the standard C++ library) to the compiler runtime library, e.g. using: clang++ ... -nodefaultlibs $(clang++ ... -print-libgcc-file-name) in which case currently a program built like this linked to the gcc runtime unconditionally. The patch fixes it to use compiler-rt libraries instead when compiler-rt is the active runtime. Differential Revision: https://reviews.llvm.org/D25338 llvm-svn: 283746
This commit is contained in:
parent
c9edc2ee8d
commit
7cfe480122
@ -394,7 +394,8 @@ Driver Options
|
||||
|
||||
.. 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>
|
||||
|
||||
|
@ -1861,7 +1861,8 @@ def print_file_name_EQ : Joined<["-", "--"], "print-file-name=">,
|
||||
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">,
|
||||
|
@ -994,7 +994,15 @@ bool Driver::HandleImmediateArgs(const Compilation &C) {
|
||||
}
|
||||
|
||||
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.getCompilerRT(C.getArgs(), "builtins") << "\n";
|
||||
break;
|
||||
case ToolChain::RLT_Libgcc:
|
||||
llvm::outs() << GetFilePath("libgcc.a", TC) << "\n";
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Test that the montavista gcc-toolchain is correctly detected
|
||||
//
|
||||
// RUN: %clang -print-libgcc-file-name 2>&1 \
|
||||
// RUN: %clang -rtlib=platform -print-libgcc-file-name 2>&1 \
|
||||
// RUN: --target=i686-montavista-linux \
|
||||
// RUN: --gcc-toolchain=%S/Inputs/montavista_i686_tree/usr \
|
||||
// RUN: | FileCheck %s
|
||||
|
11
clang/test/Driver/print-libgcc-file-name-clangrt.c
Normal file
11
clang/test/Driver/print-libgcc-file-name-clangrt.c
Normal file
@ -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
|
7
clang/test/Driver/print-libgcc-file-name-libgcc.c
Normal file
7
clang/test/Driver/print-libgcc-file-name-libgcc.c
Normal file
@ -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
|
@ -375,6 +375,11 @@ if platform.system() not in ['Windows']:
|
||||
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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user