tree: 31b35e365d14c9886b7ccbd84ba89cb0c514810d [path history] [tgz]
  1. BUILD.gn
  2. DEPS
  3. OWNERS
  4. README.md
  5. action_target_generator.cc
  6. action_target_generator.h
  7. action_target_generator_unittest.cc
  8. action_values.cc
  9. action_values.h
  10. args.cc
  11. args.h
  12. args_unittest.cc
  13. bin/
  14. binary_target_generator.cc
  15. binary_target_generator.h
  16. bootstrap/
  17. build_settings.cc
  18. build_settings.h
  19. builder.cc
  20. builder.h
  21. builder_record.cc
  22. builder_record.h
  23. builder_unittest.cc
  24. bundle_data.cc
  25. bundle_data.h
  26. bundle_data_target_generator.cc
  27. bundle_data_target_generator.h
  28. bundle_file_rule.cc
  29. bundle_file_rule.h
  30. c_include_iterator.cc
  31. c_include_iterator.h
  32. c_include_iterator_unittest.cc
  33. command_args.cc
  34. command_check.cc
  35. command_clean.cc
  36. command_desc.cc
  37. command_format.cc
  38. command_format_unittest.cc
  39. command_gen.cc
  40. command_help.cc
  41. command_ls.cc
  42. command_path.cc
  43. command_refs.cc
  44. commands.cc
  45. commands.h
  46. config.cc
  47. config.h
  48. config_unittest.cc
  49. config_values.cc
  50. config_values.h
  51. config_values_extractors.cc
  52. config_values_extractors.h
  53. config_values_extractors_unittest.cc
  54. config_values_generator.cc
  55. config_values_generator.h
  56. copy_target_generator.cc
  57. copy_target_generator.h
  58. create_bundle_target_generator.cc
  59. create_bundle_target_generator.h
  60. deps_iterator.cc
  61. deps_iterator.h
  62. docs/
  63. eclipse_writer.cc
  64. eclipse_writer.h
  65. err.cc
  66. err.h
  67. escape.cc
  68. escape.h
  69. escape_unittest.cc
  70. example/
  71. exec_process.cc
  72. exec_process.h
  73. exec_process_unittest.cc
  74. filesystem_utils.cc
  75. filesystem_utils.h
  76. filesystem_utils_unittest.cc
  77. format_test_data/
  78. function_exec_script.cc
  79. function_foreach.cc
  80. function_foreach_unittest.cc
  81. function_forward_variables_from.cc
  82. function_forward_variables_from_unittest.cc
  83. function_get_label_info.cc
  84. function_get_label_info_unittest.cc
  85. function_get_path_info.cc
  86. function_get_path_info_unittest.cc
  87. function_get_target_outputs.cc
  88. function_get_target_outputs_unittest.cc
  89. function_process_file_template.cc
  90. function_process_file_template_unittest.cc
  91. function_read_file.cc
  92. function_rebase_path.cc
  93. function_rebase_path_unittest.cc
  94. function_set_default_toolchain.cc
  95. function_set_defaults.cc
  96. function_template.cc
  97. function_toolchain.cc
  98. function_write_file.cc
  99. function_write_file_unittest.cc
  100. functions.cc
  101. functions.h
  102. functions_target.cc
  103. functions_target_unittest.cc
  104. functions_unittest.cc
  105. gn.gyp
  106. gn_main.cc
  107. gn_unittests.isolate
  108. group_target_generator.cc
  109. group_target_generator.h
  110. header_checker.cc
  111. header_checker.h
  112. header_checker_unittest.cc
  113. import_manager.cc
  114. import_manager.h
  115. inherited_libraries.cc
  116. inherited_libraries.h
  117. inherited_libraries_unittest.cc
  118. input_conversion.cc
  119. input_conversion.h
  120. input_conversion_unittest.cc
  121. input_file.cc
  122. input_file.h
  123. input_file_manager.cc
  124. input_file_manager.h
  125. item.cc
  126. item.h
  127. label.cc
  128. label.h
  129. label_pattern.cc
  130. label_pattern.h
  131. label_pattern_unittest.cc
  132. label_ptr.h
  133. label_unittest.cc
  134. last_commit_position.py
  135. lib_file.cc
  136. lib_file.h
  137. loader.cc
  138. loader.h
  139. loader_unittest.cc
  140. location.cc
  141. location.h
  142. misc/
  143. ninja_action_target_writer.cc
  144. ninja_action_target_writer.h
  145. ninja_action_target_writer_unittest.cc
  146. ninja_binary_target_writer.cc
  147. ninja_binary_target_writer.h
  148. ninja_binary_target_writer_unittest.cc
  149. ninja_build_writer.cc
  150. ninja_build_writer.h
  151. ninja_build_writer_unittest.cc
  152. ninja_bundle_data_target_writer.cc
  153. ninja_bundle_data_target_writer.h
  154. ninja_copy_target_writer.cc
  155. ninja_copy_target_writer.h
  156. ninja_copy_target_writer_unittest.cc
  157. ninja_create_bundle_target_writer.cc
  158. ninja_create_bundle_target_writer.h
  159. ninja_create_bundle_target_writer_unittest.cc
  160. ninja_group_target_writer.cc
  161. ninja_group_target_writer.h
  162. ninja_group_target_writer_unittest.cc
  163. ninja_target_writer.cc
  164. ninja_target_writer.h
  165. ninja_target_writer_unittest.cc
  166. ninja_toolchain_writer.cc
  167. ninja_toolchain_writer.h
  168. ninja_toolchain_writer_unittest.cc
  169. ninja_utils.cc
  170. ninja_utils.h
  171. ninja_writer.cc
  172. ninja_writer.h
  173. operators.cc
  174. operators.h
  175. operators_unittest.cc
  176. ordered_set.h
  177. output_file.cc
  178. output_file.h
  179. parse_tree.cc
  180. parse_tree.h
  181. parse_tree_unittest.cc
  182. parser.cc
  183. parser.h
  184. parser_unittest.cc
  185. path_output.cc
  186. path_output.h
  187. path_output_unittest.cc
  188. pattern.cc
  189. pattern.h
  190. pattern_unittest.cc
  191. pool.cc
  192. pool.h
  193. qt_creator_writer.cc
  194. qt_creator_writer.h
  195. runtime_deps.cc
  196. runtime_deps.h
  197. runtime_deps_unittest.cc
  198. scheduler.cc
  199. scheduler.h
  200. scope.cc
  201. scope.h
  202. scope_per_file_provider.cc
  203. scope_per_file_provider.h
  204. scope_per_file_provider_unittest.cc
  205. scope_unittest.cc
  206. settings.cc
  207. settings.h
  208. setup.cc
  209. setup.h
  210. source_dir.cc
  211. source_dir.h
  212. source_dir_unittest.cc
  213. source_file.cc
  214. source_file.h
  215. source_file_type.cc
  216. source_file_type.h
  217. source_file_unittest.cc
  218. standard_out.cc
  219. standard_out.h
  220. string_utils.cc
  221. string_utils.h
  222. string_utils_unittest.cc
  223. substitution_list.cc
  224. substitution_list.h
  225. substitution_pattern.cc
  226. substitution_pattern.h
  227. substitution_pattern_unittest.cc
  228. substitution_type.cc
  229. substitution_type.h
  230. substitution_writer.cc
  231. substitution_writer.h
  232. substitution_writer_unittest.cc
  233. switches.cc
  234. switches.h
  235. target.cc
  236. target.h
  237. target_generator.cc
  238. target_generator.h
  239. target_unittest.cc
  240. template.cc
  241. template.h
  242. template_unittest.cc
  243. test_with_scope.cc
  244. test_with_scope.h
  245. token.cc
  246. token.h
  247. tokenizer.cc
  248. tokenizer.h
  249. tokenizer_unittest.cc
  250. tool.cc
  251. tool.h
  252. toolchain.cc
  253. toolchain.h
  254. trace.cc
  255. trace.h
  256. tutorial/
  257. unique_vector.h
  258. unique_vector_unittest.cc
  259. value.cc
  260. value.h
  261. value_extractors.cc
  262. value_extractors.h
  263. value_unittest.cc
  264. variables.cc
  265. variables.h
  266. visibility.cc
  267. visibility.h
  268. visibility_unittest.cc
  269. visual_studio_utils.cc
  270. visual_studio_utils.h
  271. visual_studio_utils_unittest.cc
  272. visual_studio_writer.cc
  273. visual_studio_writer.h
  274. visual_studio_writer_unittest.cc
  275. xcode_object.cc
  276. xcode_object.h
  277. xcode_writer.cc
  278. xcode_writer.h
  279. xml_element_writer.cc
  280. xml_element_writer.h
  281. xml_element_writer_unittest.cc
tools/gn/README.md

What is GN?

GN is a meta-build system that generates NinjaBuild files. It's meant to be faster and simpler than GYP. It outputs only Ninja build files.

Why bother with GN?

  1. We believe GN files are more readable and more maintainable than GYP files.
  2. GN is fast:
  • GN is 20x faster than GYP.
  • GN supports automatically re-running itself as needed by Ninja as part of the build. This eliminates the need to remember to re-run GN when you change a build file.
  1. GN gives us better tools for enforcing dependencies (see gn check and the visibility, public_deps, and data_deps options for some examples).
  2. GN gives us tools for querying the build graph; you can ask “what does X depend on” and “who depends on Y”, for example.

What's the status?

as of March 2016:

  • Linux and Android: Complete but not quite all bots have been flipped. Developers should be using GN on these platforms for most work.
  • Windows and ChromeOS: Should be usable for almost all development. Some bots need to be flipped. cros_sdk builds don't work on ChromeOS yet.
  • Mac and iOS: Work is in progress, generally not usable for normal development.

When are you going to be done?

as of March 2016:

We expect most work to be finishing up between now and the end of Q2.

What does “done” mean?

Ideally we're done when all of the GYP files have been deleted from Chromium and no one misses them.

We will be “mostly” done when the following are true:

  • All of the bots maintained by the Chrome infra team for Chromium and downstream of Chromium have been switched to GN. (Upstream projects like Skia and V8 can choose to stay on GYP if they like).
  • Any developer configurations we care about that don‘t have bots also work (Generally speaking, we’re aiming to not have any of these.
  • Configurations we care about should have bots to ensure they don't break). We have verified that all of the tests pass. We have verified that the command lines match in the above configurations as much as possible, and we accept any differences. We have reviewed any binary differences that result in the official builds and accepted them. The GN files are the “source of truth” for the build, and normal chromium developers normally do not need to touch GYP files to keep things working. We have replacements for the hybrid “msvs-ninja” and “xcode-ninja” configurations that GYP can currently build.

The difference between “mostly done” and “done” exists to cover any issues we haven't yet identified :)

How can I help?

We could especially use infrastructure/bot, Mac, and iOS help.

Or, look at the list of open bugs related to the migration and see if there's anything that catches your fancy.

I want more info on GN!

Read these links: