summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2011-09-23 20:33:41 +0000
committerDaniel Dunbar <daniel@zuster.org>2011-09-23 20:33:41 +0000
commit10d398f8943076f63cb05f0e1ac8e7cbf47f14eb (patch)
treec244ffd0f1edc9d61c704cfef017f1611558a32a /clang
parent83dea558bcca18a5b15d7c044c18099b26b5a3d4 (diff)
downloadbcm5719-llvm-10d398f8943076f63cb05f0e1ac8e7cbf47f14eb.tar.gz
bcm5719-llvm-10d398f8943076f63cb05f0e1ac8e7cbf47f14eb.zip
Driver: Add a --working-directory option which can be used to cause the compiler
to operate "as if" in a certain working directory. - For now, we just implement this by changing the actual working directory, but eventually we would want to handle this transparently. This is useful to avoid an extra exec() pair in some situations, and will be something we would want to support for more flexibility in using the Clang libraries. llvm-svn: 140409
Diffstat (limited to 'clang')
-rw-r--r--clang/docs/tools/clang.pod7
-rw-r--r--clang/include/clang/Driver/Options.td2
-rw-r--r--clang/lib/Driver/Driver.cpp7
3 files changed, 16 insertions, 0 deletions
diff --git a/clang/docs/tools/clang.pod b/clang/docs/tools/clang.pod
index 704cc8743ba..abecd1c8ef5 100644
--- a/clang/docs/tools/clang.pod
+++ b/clang/docs/tools/clang.pod
@@ -407,6 +407,13 @@ Print timing summary of each stage of compilation.
Show commands to run and use verbose output.
+=item B<--working-directory>
+
+Use the given argument as the effective working directory to run the compiler
+in. This is useful for running the compiler as if in a specific working
+directory without the overhead of having to change directory using an auxiliary
+process.
+
=back
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 3f48b96d758..770b7d86f9f 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -855,6 +855,8 @@ def _verbose : Flag<"--verbose">, Alias<v>;
def _version : Flag<"--version">;
def _warn__EQ : Joined<"--warn-=">, Alias<W_Joined>;
def _warn_ : Joined<"--warn-">, Alias<W_Joined>;
+def _working_directory : Separate<"--working-directory">,
+ HelpText<"Use the given argument as the effective working directory">;
def _write_dependencies : Flag<"--write-dependencies">, Alias<MD>;
def _write_user_dependencies : Flag<"--write-user-dependencies">, Alias<MMD>;
def _ : Joined<"--">, Flags<[Unsupported]>;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index ec9295d6fb7..d64eab5999b 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -323,6 +323,13 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
if (Args->hasArg(options::OPT_nostdlib))
UseStdLib = false;
+ // Honor --working-directory. Eventually we want to handle this completely
+ // internally to support good use as a library, but for now we just change our
+ // working directory.
+ if (const Arg *A = Args->getLastArg(options::OPT__working_directory)) {
+ ::chdir(A->getValue(*Args));
+ }
+
Host = GetHostInfo(DefaultHostTriple.c_str());
// Perform the default argument translations.
OpenPOWER on IntegriCloud