Hi, 2012/3/10 Rafael Espíndola <[email protected]>: > On the clang patch: > > Typo: Retunrs in > > /// Retunrs the sysroot path after removing the trailing /. > > > + #include "clang/Config/config.h" > > This should be with the other includes > > getSysRoot is returning a StringRef to a deleted object, no? Probably > the best is to avoid using SmallString in Compilation::getSysRoot > (which unfortunately means not using > llvm::sys::path::remove_filename). > > The getSysRoot code is duplicated inline in Driver::BuildCompilation, no?
The code in the Driver happens before Compilation is created. I took care of this duplication of code by initializing a field in Compilation with the value that we computed in the Driver::SysRoot field. > > On the llvm patch: > > GCC_INSTALL_PREFIX and DEFAULT_SYSROOT can go in the clang CMakeFile, > no? (thanks for adding GCC_INSTALL_PREFIX!). Fixed: I moved both vars in the clang CMakeLists.txt Thanks, Sebastian -- Qualcomm Innovation Center, Inc is a member of Code Aurora Forum
From d27eef5acdbe4150784bcebca8923d79cd0d9e55 Mon Sep 17 00:00:00 2001 From: Sebastian Pop <[email protected]> Date: Thu, 9 Feb 2012 13:02:01 -0600 Subject: [PATCH] add configure flag --with-default-sysroot --- autoconf/configure.ac | 7 +++++++ configure | 17 ++++++++++++++++- include/llvm/Config/config.h.cmake | 3 --- include/llvm/Config/config.h.in | 3 +++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/autoconf/configure.ac b/autoconf/configure.ac index 5ea2e30..6ab1544 100644 --- a/autoconf/configure.ac +++ b/autoconf/configure.ac @@ -845,6 +845,13 @@ AC_ARG_WITH(gcc-toolchain, AC_DEFINE_UNQUOTED(GCC_INSTALL_PREFIX,"$withval", [Directory where gcc is installed.]) +AC_ARG_WITH(sysroot, + AS_HELP_STRING([--with-default-sysroot], + [Add --sysroot=<path> to all compiler invocations.]),, + withval="") +AC_DEFINE_UNQUOTED(DEFAULT_SYSROOT,"$withval", + [Default <path> to all compiler invocations for --sysroot=<path>.]) + dnl Allow linking of LLVM with GPLv3 binutils code. AC_ARG_WITH(binutils-include, AS_HELP_STRING([--with-binutils-include], diff --git a/configure b/configure index 00f49df..254e96b 100755 --- a/configure +++ b/configure @@ -1442,6 +1442,7 @@ Optional Packages: --with-c-include-dirs Colon separated list of directories clang will search for headers --with-gcc-toolchain Directory where gcc is installed. + --with-default-sysroot Add --sysroot=<path> to all compiler invocations. --with-binutils-include Specify path to binutils/include/ containing plugin-api.h file for gold plugin. --with-bug-report-url Specify the URL where bug reports should be @@ -5592,6 +5593,20 @@ _ACEOF +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then + withval=$with_sysroot; +else + withval="" +fi + + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_SYSROOT "$withval" +_ACEOF + + + # Check whether --with-binutils-include was given. if test "${with_binutils_include+set}" = set; then withval=$with_binutils_include; @@ -10395,7 +10410,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 10398 "configure" +#line 10413 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/include/llvm/Config/config.h.cmake b/include/llvm/Config/config.h.cmake index c475014..55e738f 100644 --- a/include/llvm/Config/config.h.cmake +++ b/include/llvm/Config/config.h.cmake @@ -11,9 +11,6 @@ /* Relative directory for resource files */ #define CLANG_RESOURCE_DIR "${CLANG_RESOURCE_DIR}" -/* Directory wherelibstdc++ is installed. */ -#define GCC_INSTALL_PREFIX "${GCC_INSTALL_PREFIX}" - /* Directories clang will search for headers */ #define C_INCLUDE_DIRS "${C_INCLUDE_DIRS}" diff --git a/include/llvm/Config/config.h.in b/include/llvm/Config/config.h.in index 1a996a2..62376b1 100644 --- a/include/llvm/Config/config.h.in +++ b/include/llvm/Config/config.h.in @@ -12,6 +12,9 @@ /* Directories clang will search for headers */ #undef C_INCLUDE_DIRS +/* Default <path> to all compiler invocations for --sysroot=<path>. */ +#undef DEFAULT_SYSROOT + /* Define if CBE is enabled for printf %a output */ #undef ENABLE_CBE_PRINTF_A -- 1.7.5.4
From a6c17b4fe73a7f959e5ec3d7de2583c5a51bef95 Mon Sep 17 00:00:00 2001 From: Sebastian Pop <[email protected]> Date: Thu, 9 Feb 2012 13:06:08 -0600 Subject: [PATCH] use DEFAULT_SYSROOT --- CMakeLists.txt | 4 ++++ include/clang/Config/config.h.cmake | 9 ++++++--- include/clang/Config/config.h.in | 9 ++++++--- include/clang/Driver/Compilation.h | 8 ++++++++ lib/Driver/Compilation.cpp | 5 +++-- lib/Driver/Driver.cpp | 16 +++++++++++++--- lib/Driver/Tools.cpp | 10 ++++++---- 7 files changed, 46 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1197610..c828482 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,10 @@ set(CLANG_RESOURCE_DIR "" CACHE STRING set(C_INCLUDE_DIRS "" CACHE STRING "Colon separated list of directories clang will search for headers.") +set(GCC_INSTALL_PREFIX "" CACHE PATH "Directory where gcc is installed." ) +set(DEFAULT_SYSROOT "" CACHE PATH + "Default <path> to all compiler invocations for --sysroot=<path>." ) + set(CLANG_VENDOR "" CACHE STRING "Vendor-specific text for showing with version information.") diff --git a/include/clang/Config/config.h.cmake b/include/clang/Config/config.h.cmake index bd5dc31..c18c4cc 100644 --- a/include/clang/Config/config.h.cmake +++ b/include/clang/Config/config.h.cmake @@ -4,8 +4,11 @@ /* Relative directory for resource files */ #define CLANG_RESOURCE_DIR "${CLANG_RESOURCE_DIR}" -/* Directory where gcc is installed. */ -#define GCC_INSTALL_PREFIX "${GCC_INSTALL_PREFIX}" - /* Directories clang will search for headers */ #define C_INCLUDE_DIRS "${C_INCLUDE_DIRS}" + +/* Default <path> to all compiler invocations for --sysroot=<path>. */ +#define DEFAULT_SYSROOT "${DEFAULT_SYSROOT}" + +/* Directory where gcc is installed. */ +#define GCC_INSTALL_PREFIX "${GCC_INSTALL_PREFIX}" diff --git a/include/clang/Config/config.h.in b/include/clang/Config/config.h.in index 3f5d503..24ed6bd 100644 --- a/include/clang/Config/config.h.in +++ b/include/clang/Config/config.h.in @@ -9,10 +9,13 @@ /* Relative directory for resource files */ #undef CLANG_RESOURCE_DIR -/* Directory where gcc is installed. */ -#undef GCC_INSTALL_PREFIX - /* Directories clang will search for headers */ #undef C_INCLUDE_DIRS +/* Default <path> to all compiler invocations for --sysroot=<path>. */ +#undef DEFAULT_SYSROOT + +/* Directory where gcc is installed. */ +#undef GCC_INSTALL_PREFIX + #endif diff --git a/include/clang/Driver/Compilation.h b/include/clang/Driver/Compilation.h index fd88c3a..6a8f351 100644 --- a/include/clang/Driver/Compilation.h +++ b/include/clang/Driver/Compilation.h @@ -63,6 +63,9 @@ class Compilation { /// Redirection for stdout, stderr, etc. const llvm::sys::Path **Redirects; + /// sysroot, if present. + StringRef SysRoot; + public: Compilation(const Driver &D, const ToolChain &DefaultToolChain, InputArgList *Args, DerivedArgList *TranslatedArgs); @@ -92,6 +95,11 @@ public: return FailureResultFiles; } + /// Returns the sysroot path without the trailing /. + StringRef getSysRoot() const { + return SysRoot; + } + /// getArgsForToolChain - Return the derived argument list for the /// tool chain \arg TC (or the default tool chain, if TC is not /// specified). diff --git a/lib/Driver/Compilation.cpp b/lib/Driver/Compilation.cpp index 42c8449..cd72fe9 100644 --- a/lib/Driver/Compilation.cpp +++ b/lib/Driver/Compilation.cpp @@ -7,9 +7,10 @@ // //===----------------------------------------------------------------------===// +#include "clang/Config/config.h" #include "clang/Driver/Compilation.h" - #include "clang/Driver/Action.h" +#include "clang/Driver/Arg.h" #include "clang/Driver/ArgList.h" #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" @@ -28,7 +29,7 @@ using namespace clang; Compilation::Compilation(const Driver &D, const ToolChain &_DefaultToolChain, InputArgList *_Args, DerivedArgList *_TranslatedArgs) : TheDriver(D), DefaultToolChain(_DefaultToolChain), Args(_Args), - TranslatedArgs(_TranslatedArgs), Redirects(0) { + TranslatedArgs(_TranslatedArgs), Redirects(0), SysRoot(D.SysRoot) { } Compilation::~Compilation() { diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index c985e2f..b83e525 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -323,8 +323,20 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { A->claim(); PrefixDirs.push_back(A->getValue(*Args, 0)); } + if (const Arg *A = Args->getLastArg(options::OPT__sysroot_EQ)) SysRoot = A->getValue(*Args); + else + SysRoot = DEFAULT_SYSROOT; + + if (SysRoot != "") { + llvm::SmallString<128> Prefix(SysRoot); + if (Prefix.back() == '/') { + llvm::sys::path::remove_filename(Prefix); // remove the / + SysRoot = Prefix.str(); + } + } + if (Args->hasArg(options::OPT_nostdlib)) UseStdLib = false; @@ -659,9 +671,7 @@ bool Driver::HandleImmediateArgs(const Compilation &C) { llvm::outs() << "\n"; llvm::outs() << "libraries: =" << ResourceDir; - std::string sysroot; - if (Arg *A = C.getArgs().getLastArg(options::OPT__sysroot_EQ)) - sysroot = A->getValue(C.getArgs()); + StringRef sysroot = C.getSysRoot(); for (ToolChain::path_list::const_iterator it = TC.getFilePaths().begin(), ie = TC.getFilePaths().end(); it != ie; ++it) { diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index c9db799..64bb6a2 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -373,10 +373,11 @@ void Clang::AddPreprocessingOptions(Compilation &C, // 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)) { + StringRef sysroot = C.getSysRoot(); + if (sysroot != "") { if (!Args.hasArg(options::OPT_isysroot)) { CmdArgs.push_back("-isysroot"); - CmdArgs.push_back(A->getValue(Args)); + CmdArgs.push_back(sysroot.str().c_str()); } } @@ -3906,9 +3907,10 @@ void darwin::Link::AddLinkArgs(Compilation &C, // Give --sysroot= preference, over the Apple specific behavior to also use // --isysroot as the syslibroot. - if (const Arg *A = Args.getLastArg(options::OPT__sysroot_EQ)) { + StringRef sysroot = C.getSysRoot(); + if (sysroot != "") { CmdArgs.push_back("-syslibroot"); - CmdArgs.push_back(A->getValue(Args)); + CmdArgs.push_back(sysroot.str().c_str()); } else if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) { CmdArgs.push_back("-syslibroot"); CmdArgs.push_back(A->getValue(Args)); -- 1.7.5.4
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
