From: Chandler Carruth Date: Wed, 20 Oct 2010 07:00:47 +0000 (+0000) Subject: Add support for the '--sysroot' flag, and an accompanying test of its X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=feee58ce268765742e41c473c8648607fd4831a7;p=clang Add support for the '--sysroot' flag, and an accompanying test of its interactions with -isysroot and other driver commands. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116912 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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"