
Clients of the dependency scanning service may need to add dependencies based on the visibility of importing modules, for example, when determining whether a Swift overlay dependency should be brought in based on whether there's a corresponding **visible** clang module for it. This patch introduces a new field `VisibleModules` that contains all the visible top-level modules in a given TU. Because visibility is determined by which headers or (sub)modules were imported, and not top-level module dependencies, the scanner now performs a separate DFS starting from what was directly imported for this computation. In my local performance testing, there was no observable performance impact. resolves: rdar://151416358 --------- Co-authored-by: Jan Svoboda <jan@svoboda.ai>
48 lines
2.2 KiB
TableGen
48 lines
2.2 KiB
TableGen
include "llvm/Option/OptParser.td"
|
|
|
|
class F<string name, string help> : Flag<["-"], name>, HelpText<help>;
|
|
class Arg<string name, string help> : Separate<["-"], name>, HelpText<help>;
|
|
|
|
multiclass Eq<string name, string help> {
|
|
def NAME #_EQ : Joined<["-", "--"], name #"=">, HelpText<help>;
|
|
def : Separate<["-", "--"], name>, Alias<!cast<Joined>(NAME #_EQ)>;
|
|
}
|
|
|
|
def help : Flag<["--"], "help">, HelpText<"Display this help">;
|
|
def version : Flag<["--"], "version">, HelpText<"Display the version">;
|
|
|
|
def o : Arg<"o", "Destination of the primary output">;
|
|
|
|
defm mode : Eq<"mode", "The preprocessing mode used to compute the dependencies">;
|
|
|
|
defm format : Eq<"format", "The output format for the dependencies">;
|
|
|
|
defm module_files_dir : Eq<"module-files-dir",
|
|
"The build directory for modules. Defaults to the value of '-fmodules-cache-path=' from command lines for implicit modules">;
|
|
|
|
def optimize_args_EQ : CommaJoined<["-", "--"], "optimize-args=">, HelpText<"Which command-line arguments of modules to optimize">;
|
|
def eager_load_pcm : F<"eager-load-pcm", "Load PCM files eagerly (instead of lazily on import)">;
|
|
|
|
def j : Arg<"j", "Number of worker threads to use (default: use all concurrent threads)">;
|
|
|
|
defm compilation_database : Eq<"compilation-database", "Compilation database">;
|
|
defm module_name : Eq<"module-name", "the module of which the dependencies are to be computed">;
|
|
defm dependency_target : Eq<"dependency-target", "The names of dependency targets for the dependency file">;
|
|
|
|
defm tu_buffer_path: Eq<"tu-buffer-path", "The path to the translation unit for depscan. Not compatible with -module-name">;
|
|
|
|
def deprecated_driver_command : F<"deprecated-driver-command", "use a single driver command to build the tu (deprecated)">;
|
|
|
|
defm resource_dir_recipe : Eq<"resource-dir-recipe", "How to produce missing '-resource-dir' argument">;
|
|
|
|
def print_timing : F<"print-timing", "Print timing information">;
|
|
|
|
def emit_visible_modules
|
|
: F<"emit-visible-modules", "emit visible modules in primary output">;
|
|
|
|
def verbose : F<"v", "Use verbose output">;
|
|
|
|
def round_trip_args : F<"round-trip-args", "verify that command-line arguments are canonical by parsing and re-serializing">;
|
|
|
|
def DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>;
|