diff options
-rw-r--r-- | lib/Driver/Tools.cpp | 9 | ||||
-rw-r--r-- | test/Driver/sysroot-flags.c | 26 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 7924a034df..882571fdb2 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -295,6 +295,15 @@ void Clang::AddPreprocessingOptions(const Driver &D, // -I- is a deprecated GCC feature, reject it. if (Arg *A = Args.getLastArg(options::OPT_I_)) D.Diag(clang::diag::err_drv_I_dash_not_supported) << A->getAsString(Args); + + // If we have a --sysroot, and don't have an explicit -isysroot flag, add an + // -isysroot to the CC1 invocation. + if (Arg *A = Args.getLastArg(options::OPT__sysroot_EQ)) { + if (!Args.hasArg(options::OPT_isysroot)) { + CmdArgs.push_back("-isysroot"); + CmdArgs.push_back(A->getValue(Args)); + } + } } /// getARMTargetCPU - Get the (LLVM) name of the ARM cpu we are targetting. diff --git a/test/Driver/sysroot-flags.c b/test/Driver/sysroot-flags.c new file mode 100644 index 0000000000..35f484afc7 --- /dev/null +++ b/test/Driver/sysroot-flags.c @@ -0,0 +1,26 @@ +// Check for proper handling of --sysroot and -isysroot flags. + +// RUN: %clang -### -fsyntax-only -isysroot /foo/bar %s |& \ +// RUN: FileCheck %s -check-prefix=ISYSROOT +// ISYSROOT: "-isysroot" "/foo/bar" + +// Check that we get both isysroot for headers, and pass --sysroot on to GCC to +// produce the final binary. +// RUN: %clang -### -triple x86_64-unknown-linux-gnu --sysroot=/foo/bar \ +// RUN: -o /dev/null %s |& FileCheck %s -check-prefix=SYSROOT_EQ +// SYSROOT_EQ: "-isysroot" "/foo/bar" +// SYSROOT_EQ: "--sysroot=/foo/bar" + +// Check for overriding the header sysroot by providing both --sysroot and +// -isysroot. +// RUN: %clang -### -triple x86_64-unknown-linux-gnu -isysroot /baz \ +// RUN: --sysroot=/foo/bar -o /dev/null %s |& FileCheck %s \ +// RUN: -check-prefix=ISYSROOT_AND_SYSROOT +// ISYSROOT_AND_SYSROOT: "-isysroot" "/baz" +// ISYSROOT_AND_SYSROOT: "--sysroot=/foo/bar" + +// Check that omitting the equals works as well. +// RUN: %clang -### -triple x86_64-unknown-linux-gnu --sysroot /foo/bar \ +// RUN: -o /dev/null %s |& FileCheck %s -check-prefix=SYSROOT_SEPARATE +// SYSROOT_SEPARATE: "-isysroot" "/foo/bar" +// SYSROOT_SEPARATE: "--sysroot=/foo/bar" |