diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-12-15 00:06:45 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-12-15 00:06:45 +0000 |
commit | a5a166d01a732ecc7f09f4b763ae6b939df5f0ff (patch) | |
tree | 783bb984aa6f52610808294757cef08e617bf8fd | |
parent | 7dc42e5d4c568b596012019d8535ba6f92b3c338 (diff) | |
download | bcm5719-llvm-a5a166d01a732ecc7f09f4b763ae6b939df5f0ff.tar.gz bcm5719-llvm-a5a166d01a732ecc7f09f4b763ae6b939df5f0ff.zip |
Add -resource-dir to clang -cc1, this allows the base directory for compiler
resources (e.g., /usr/lib/clang/1.1) to be passed on the command line instead of
computed.
llvm-svn: 91370
-rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 2 | ||||
-rw-r--r-- | clang/include/clang/Frontend/CompilerInvocation.h | 2 | ||||
-rw-r--r-- | clang/include/clang/Frontend/HeaderSearchOptions.h | 6 | ||||
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 15 | ||||
-rw-r--r-- | clang/lib/Frontend/InitHeaderSearch.cpp | 5 | ||||
-rw-r--r-- | clang/tools/driver/cc1_main.cpp | 6 | ||||
-rw-r--r-- | clang/tools/index-test/index-test.cpp | 7 |
8 files changed, 23 insertions, 26 deletions
diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index 1a30a0fdb7f..a9566f3f9d4 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -223,6 +223,8 @@ def load : Separate<"-load">, MetaVarName<"<dsopath>">, HelpText<"Load the named plugin (dynamic shared object)">; def plugin : Separate<"-plugin">, HelpText<"Use the named plugin action (use \"help\" to list available options)">; +def resource_dir : Separate<"-resource-dir">, + HelpText<"The directory which holds the compiler resource files">; def version : Flag<"-version">, HelpText<"Print the compiler version">; def _version : Flag<"--version">, Alias<version>; diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h index 56445e1aa13..f5a9053ceb6 100644 --- a/clang/include/clang/Frontend/CompilerInvocation.h +++ b/clang/include/clang/Frontend/CompilerInvocation.h @@ -94,7 +94,7 @@ public: /// compiler path. /// \param MainAddr - The address of main (or some other function in the main /// executable), for finding the builtin compiler path. - static std::string GetBuiltinIncludePath(const char *Argv0, void *MainAddr); + static std::string GetResourcesPath(const char *Argv0, void *MainAddr); /// toArgs - Convert the CompilerInvocation to a list of strings suitable for /// passing to CreateFromArgs. diff --git a/clang/include/clang/Frontend/HeaderSearchOptions.h b/clang/include/clang/Frontend/HeaderSearchOptions.h index fdc4d810cb3..690408547c0 100644 --- a/clang/include/clang/Frontend/HeaderSearchOptions.h +++ b/clang/include/clang/Frontend/HeaderSearchOptions.h @@ -61,9 +61,9 @@ public: std::string CXXEnvIncPath; std::string ObjCXXEnvIncPath; - /// If non-empty, the path to the compiler builtin include directory, which - /// will be searched following the user and environment includes. - std::string BuiltinIncludePath; + /// The directory which holds the compiler resource files (builtin includes, + /// etc.). + std::string ResourceDir; /// Include the compiler builtin includes. unsigned UseBuiltinIncludes : 1; diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index f6cb1704f6a..48296c7289e 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -327,10 +327,8 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin, (const char**) CCArgs.data()+CCArgs.size(), Diags); - // Set the builtin include path. - llvm::sys::Path P(ResourceFilesPath); - P.appendComponent("include"); - CI.getHeaderSearchOpts().BuiltinIncludePath = P.str(); + // Override the resources path. + CI.getHeaderSearchOpts().ResourceDir = ResourceFilesPath; CI.getFrontendOpts().DisableFree = UseBumpAllocator; return LoadFromCompilerInvocation(CI, Diags, OnlyLocalDecls); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 102bbe2f826..7a3388ffbb9 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -409,8 +409,9 @@ static void HeaderSearchOptsToArgs(const HeaderSearchOptions &Opts, // FIXME: Provide an option for this, and move env detection to driver. llvm::llvm_report_error("Not yet implemented!"); } - if (!Opts.BuiltinIncludePath.empty()) { - // FIXME: Provide an option for this, and move to driver. + if (!Opts.ResourceDir.empty()) { + Res.push_back("-resource-dir"); + Res.push_back(Opts.ResourceDir); } if (!Opts.UseStandardIncludes) Res.push_back("-nostdinc"); @@ -951,8 +952,8 @@ ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Diagnostic &Diags) { return DashX; } -std::string CompilerInvocation::GetBuiltinIncludePath(const char *Argv0, - void *MainAddr) { +std::string CompilerInvocation::GetResourcesPath(const char *Argv0, + void *MainAddr) { llvm::sys::Path P = llvm::sys::Path::GetMainExecutable(Argv0, MainAddr); if (!P.isEmpty()) { @@ -963,7 +964,6 @@ std::string CompilerInvocation::GetBuiltinIncludePath(const char *Argv0, P.appendComponent("lib"); P.appendComponent("clang"); P.appendComponent(CLANG_VERSION_STRING); - P.appendComponent("include"); } return P.str(); @@ -975,10 +975,7 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) { Opts.Verbose = Args.hasArg(OPT_v); Opts.UseBuiltinIncludes = !Args.hasArg(OPT_nobuiltininc); Opts.UseStandardIncludes = !Args.hasArg(OPT_nostdinc); - // Filled in by clients. - // - // FIXME: Elimate this. - Opts.BuiltinIncludePath = ""; + Opts.ResourceDir = getLastArgValue(Args, OPT_resource_dir); // Add -I... and -F... options in order. for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F), diff --git a/clang/lib/Frontend/InitHeaderSearch.cpp b/clang/lib/Frontend/InitHeaderSearch.cpp index f5c9c741b45..b4ea2576c3e 100644 --- a/clang/lib/Frontend/InitHeaderSearch.cpp +++ b/clang/lib/Frontend/InitHeaderSearch.cpp @@ -733,8 +733,9 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch &HS, if (HSOpts.UseBuiltinIncludes) { // Ignore the sys root, we *always* look for clang headers relative to // supplied path. - Init.AddPath(HSOpts.BuiltinIncludePath, System, - false, false, false, /*IgnoreSysRoot=*/ true); + llvm::sys::Path P(HSOpts.ResourceDir); + P.appendComponent("include"); + Init.AddPath(P.str(), System, false, false, false, /*IgnoreSysRoot=*/ true); } if (HSOpts.UseStandardIncludes) diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 5d7daccabdd..6e82c51d387 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -211,9 +211,9 @@ int cc1_main(const char **ArgBegin, const char **ArgEnd, // Infer the builtin include path if unspecified. if (Clang.getInvocation().getHeaderSearchOpts().UseBuiltinIncludes && - Clang.getInvocation().getHeaderSearchOpts().BuiltinIncludePath.empty()) - Clang.getInvocation().getHeaderSearchOpts().BuiltinIncludePath = - CompilerInvocation::GetBuiltinIncludePath(Argv0, MainAddr); + Clang.getInvocation().getHeaderSearchOpts().ResourceDir.empty()) + Clang.getInvocation().getHeaderSearchOpts().ResourceDir = + CompilerInvocation::GetResourcesPath(Argv0, MainAddr); // Honor -help. if (Clang.getInvocation().getFrontendOpts().ShowHelp) { diff --git a/clang/tools/index-test/index-test.cpp b/clang/tools/index-test/index-test.cpp index 8b12c0ba8cd..ff9fd543115 100644 --- a/clang/tools/index-test/index-test.cpp +++ b/clang/tools/index-test/index-test.cpp @@ -224,11 +224,10 @@ ASTUnit *CreateFromSource(const std::string &Filename, Diagnostic &Diags, Args.push_back(CompilerArgs[i].c_str()); void *MainAddr = (void*) (intptr_t) CreateFromSource; - llvm::sys::Path ResourcesPath( - CompilerInvocation::GetBuiltinIncludePath(Argv0, MainAddr)); - ResourcesPath.eraseComponent(); + std::string ResourceDir = + CompilerInvocation::GetResourcesPath(Argv0, MainAddr); return ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(), - Diags, ResourcesPath.str()); + Diags, ResourceDir); } int main(int argc, char **argv) { |