diff options
-rw-r--r-- | docs/tools/clang.pod | 7 | ||||
-rw-r--r-- | include/clang/Driver/Options.td | 2 | ||||
-rw-r--r-- | lib/Driver/Driver.cpp | 7 |
3 files changed, 16 insertions, 0 deletions
diff --git a/docs/tools/clang.pod b/docs/tools/clang.pod index 704cc8743b..abecd1c8ef 100644 --- a/docs/tools/clang.pod +++ b/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/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 3f48b96d75..770b7d86f9 100644 --- a/include/clang/Driver/Options.td +++ b/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/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index ec9295d6fb..d64eab5999 100644 --- a/lib/Driver/Driver.cpp +++ b/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. |