Index: tools/gn/runtime_deps.cc |
diff --git a/tools/gn/runtime_deps.cc b/tools/gn/runtime_deps.cc |
index 1849117559c856aec97aa177760f1d5f96d80944..14e13e368f748aac1a4c7a6bffa5f52482fb4243 100644 |
--- a/tools/gn/runtime_deps.cc |
+++ b/tools/gn/runtime_deps.cc |
@@ -204,72 +204,73 @@ bool WriteRuntimeDepsFile(const OutputFile& output_file, |
} // namespace |
const char kRuntimeDeps_Help[] = |
- "Runtime dependencies\n" |
- "\n" |
- " Runtime dependencies of a target are exposed via the \"runtime_deps\"\n" |
- " category of \"gn desc\" (see \"gn help desc\") or they can be written\n" |
- " at build generation time via write_runtime_deps(), or\n" |
- " --runtime-deps-list-file (see \"gn help --runtime-deps-list-file\").\n" |
- "\n" |
- " To a first approximation, the runtime dependencies of a target are\n" |
- " the set of \"data\" files, data directories, and the shared libraries\n" |
- " from all transitive dependencies. Executables, shared libraries, and\n" |
- " loadable modules are considered runtime dependencies of themselves.\n" |
- "\n" |
- "Executables\n" |
- "\n" |
- " Executable targets and those executable targets' transitive\n" |
- " dependencies are not considered unless that executable is listed in\n" |
- " \"data_deps\". Otherwise, GN assumes that the executable (and\n" |
- " everything it requires) is a build-time dependency only.\n" |
- "\n" |
- "Actions and copies\n" |
- "\n" |
- " Action and copy targets that are listed as \"data_deps\" will have all\n" |
- " of their outputs and data files considered as runtime dependencies.\n" |
- " Action and copy targets that are \"deps\" or \"public_deps\" will have\n" |
- " only their data files considered as runtime dependencies. These\n" |
- " targets can list an output file in both the \"outputs\" and \"data\"\n" |
- " lists to force an output file as a runtime dependency in all cases.\n" |
- "\n" |
- " The different rules for deps and data_deps are to express build-time\n" |
- " (deps) vs. run-time (data_deps) outputs. If GN counted all build-time\n" |
- " copy steps as data dependencies, there would be a lot of extra stuff,\n" |
- " and if GN counted all run-time dependencies as regular deps, the\n" |
- " build's parallelism would be unnecessarily constrained.\n" |
- "\n" |
- " This rule can sometimes lead to unintuitive results. For example,\n" |
- " given the three targets:\n" |
- " A --[data_deps]--> B --[deps]--> ACTION\n" |
- " GN would say that A does not have runtime deps on the result of the\n" |
- " ACTION, which is often correct. But the purpose of the B target might\n" |
- " be to collect many actions into one logic unit, and the \"data\"-ness\n" |
- " of A's dependency is lost. Solutions:\n" |
- "\n" |
- " - List the outputs of the action in it's data section (if the\n" |
- " results of that action are always runtime files).\n" |
- " - Have B list the action in data_deps (if the outputs of the actions\n" |
- " are always runtime files).\n" |
- " - Have B list the action in both deps and data deps (if the outputs\n" |
- " might be used in both contexts and you don't care about unnecessary\n" |
- " entries in the list of files required at runtime).\n" |
- " - Split B into run-time and build-time versions with the appropriate\n" |
- " \"deps\" for each.\n" |
- "\n" |
- "Static libraries and source sets\n" |
- "\n" |
- " The results of static_library or source_set targets are not considered\n" |
- " runtime dependencies since these are assumed to be intermediate\n" |
- " targets only. If you need to list a static library as a runtime\n" |
- " dependency, you can manually compute the .a/.lib file name for the\n" |
- " current platform and list it in the \"data\" list of a target\n" |
- " (possibly on the static library target itself).\n" |
- "\n" |
- "Multiple outputs\n" |
- "\n" |
- " Linker tools can specify which of their outputs should be considered\n" |
- " when computing the runtime deps by setting runtime_outputs. If this\n" |
- " is unset on the tool, the default will be the first output only.\n"; |
+ R"(Runtime dependencies |
+ |
+ Runtime dependencies of a target are exposed via the "runtime_deps" category |
+ of "gn desc" (see "gn help desc") or they can be written at build generation |
+ time via write_runtime_deps(), or --runtime-deps-list-file (see "gn help |
+ --runtime-deps-list-file"). |
+ |
+ To a first approximation, the runtime dependencies of a target are the set of |
+ "data" files, data directories, and the shared libraries from all transitive |
+ dependencies. Executables, shared libraries, and loadable modules are |
+ considered runtime dependencies of themselves. |
+ |
+Executables |
+ |
+ Executable targets and those executable targets' transitive dependencies are |
+ not considered unless that executable is listed in "data_deps". Otherwise, GN |
+ assumes that the executable (and everything it requires) is a build-time |
+ dependency only. |
+ |
+Actions and copies |
+ |
+ Action and copy targets that are listed as "data_deps" will have all of their |
+ outputs and data files considered as runtime dependencies. Action and copy |
+ targets that are "deps" or "public_deps" will have only their data files |
+ considered as runtime dependencies. These targets can list an output file in |
+ both the "outputs" and "data" lists to force an output file as a runtime |
+ dependency in all cases. |
+ |
+ The different rules for deps and data_deps are to express build-time (deps) |
+ vs. run-time (data_deps) outputs. If GN counted all build-time copy steps as |
+ data dependencies, there would be a lot of extra stuff, and if GN counted all |
+ run-time dependencies as regular deps, the build's parallelism would be |
+ unnecessarily constrained. |
+ |
+ This rule can sometimes lead to unintuitive results. For example, given the |
+ three targets: |
+ A --[data_deps]--> B --[deps]--> ACTION |
+ GN would say that A does not have runtime deps on the result of the ACTION, |
+ which is often correct. But the purpose of the B target might be to collect |
+ many actions into one logic unit, and the "data"-ness of A's dependency is |
+ lost. Solutions: |
+ |
+ - List the outputs of the action in it's data section (if the results of |
+ that action are always runtime files). |
+ - Have B list the action in data_deps (if the outputs of the actions are |
+ always runtime files). |
+ - Have B list the action in both deps and data deps (if the outputs might be |
+ used in both contexts and you don't care about unnecessary entries in the |
+ list of files required at runtime). |
+ - Split B into run-time and build-time versions with the appropriate "deps" |
+ for each. |
+ |
+Static libraries and source sets |
+ |
+ The results of static_library or source_set targets are not considered |
+ runtime dependencies since these are assumed to be intermediate targets only. |
+ If you need to list a static library as a runtime dependency, you can |
+ manually compute the .a/.lib file name for the current platform and list it |
+ in the "data" list of a target (possibly on the static library target |
+ itself). |
+ |
+Multiple outputs |
+ |
+ Linker tools can specify which of their outputs should be considered when |
+ computing the runtime deps by setting runtime_outputs. If this is unset on |
+ the tool, the default will be the first output only. |
+)"; |
RuntimeDepsVector ComputeRuntimeDeps(const Target* target) { |
RuntimeDepsVector result; |