BUILD.gn 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. # Copyright 2014 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//chrome/common/features.gni")
  5. import("//third_party/closure_compiler/compile_js.gni")
  6. import("//tools/grit/grit_rule.gni")
  7. import("//tools/grit/preprocess_if_expr.gni")
  8. import("//tools/polymer/html_to_wrapper.gni")
  9. import("//tools/typescript/ts_definitions.gni")
  10. import("//tools/typescript/ts_library.gni")
  11. import("//ui/file_manager/file_names.gni")
  12. import("//ui/webui/resources/tools/generate_grd.gni")
  13. grit("resources") {
  14. source = "file_manager_resources.grd"
  15. defines = [ "optimize_webui=$optimize_webui" ]
  16. outputs = [
  17. "grit/file_manager_resources.h",
  18. "grit/file_manager_resources_map.cc",
  19. "grit/file_manager_resources_map.h",
  20. "file_manager_resources.pak",
  21. "file_manager_resources.rc",
  22. ]
  23. }
  24. component("file_manager") {
  25. sources = [ "file_manager_export.h" ]
  26. public_deps = [
  27. ":file_manager_gen_resources",
  28. ":resources",
  29. "//base",
  30. ]
  31. defines = [ "FILE_MANAGER_IMPLEMENTATION" ]
  32. }
  33. group("closure_compile") {
  34. # Subfolders' closure_compile groups bundle the non-test "module" type-check
  35. # groups as well as unittests and test_support.
  36. testonly = true
  37. deps = [
  38. "file_manager/background/js:closure_compile",
  39. "file_manager/common/js:closure_compile",
  40. "file_manager/foreground/elements:closure_compile",
  41. "file_manager/foreground/js:closure_compile",
  42. "file_manager/foreground/js/metadata:closure_compile",
  43. "file_manager/foreground/js/ui:closure_compile",
  44. "file_manager/foreground/js/ui/banners:closure_compile",
  45. "image_loader:closure_compile",
  46. "integration_tests:closure_compile",
  47. "integration_tests/file_manager:closure_compile",
  48. ]
  49. }
  50. group("unit_test_data") {
  51. testonly = true
  52. deps = [
  53. "file_manager/background/js:js_test_type_check",
  54. "file_manager/common/js:js_test_type_check",
  55. "file_manager/foreground/elements:js_test_type_check",
  56. "file_manager/foreground/js:js_test_type_check",
  57. "file_manager/foreground/js/metadata:js_test_type_check",
  58. "file_manager/foreground/js/ui:js_test_type_check",
  59. "file_manager/foreground/js/ui/banners:js_test_type_check",
  60. "image_loader:js_test_type_check",
  61. ]
  62. data_deps = [ "image_loader:copy_from_filesapp" ]
  63. }
  64. preprocess_folder = "$target_gen_dir/preprocessed"
  65. # Move files to the preprocessed folder to combine all resources in the same
  66. # folder for JS bundling with rollup.
  67. # This is for files direct from the src/: input_folder="./".
  68. preprocess_if_expr("preprocess_static") {
  69. in_folder = "./"
  70. out_folder = preprocess_folder
  71. out_manifest = "$target_gen_dir/manifest_preprocess_static.json"
  72. in_files = static_js_files
  73. deps = [
  74. "//ui/file_manager/file_manager/background/js:js_modules",
  75. "//ui/file_manager/file_manager/background/js:main_background",
  76. "//ui/file_manager/file_manager/common/js:js_modules",
  77. "//ui/file_manager/file_manager/foreground/elements:web_components",
  78. "//ui/file_manager/file_manager/foreground/js:deferred_elements",
  79. "//ui/file_manager/file_manager/foreground/js:main",
  80. ]
  81. }
  82. preprocess_if_expr("preprocess_static_image_loader") {
  83. in_folder = "."
  84. out_folder = preprocess_folder
  85. out_manifest = "$target_gen_dir/manifest_preprocess_static_image_loader.json"
  86. in_files = image_loader_static_js_files
  87. deps = [
  88. "//ui/file_manager/image_loader:background",
  89. "//ui/file_manager/image_loader:js_modules",
  90. ]
  91. }
  92. # This is for files that are generated in "gen/": input_folder=target_gen_dir.
  93. preprocess_if_expr("preprocess_generated") {
  94. in_folder = target_gen_dir
  95. out_folder = preprocess_folder
  96. out_manifest = "$target_gen_dir/manifest_preprocess_generated.json"
  97. in_files = generated_js_files + ts_generated_templates
  98. deps = [
  99. ":html_wrapper_files",
  100. "//ui/file_manager/base/gn:file_types_data_gen_js",
  101. "//ui/file_manager/file_manager/foreground/elements:elements",
  102. "//ui/file_manager/file_manager/foreground/elements:web_components",
  103. "//ui/file_manager/file_manager/foreground/js/ui/banners:web_components",
  104. ]
  105. }
  106. preprocess_if_expr("preprocess_generated_image_loader") {
  107. in_folder = target_gen_dir
  108. out_folder = preprocess_folder
  109. out_manifest =
  110. "$target_gen_dir/manifest_preprocess_generated_image_loader.json"
  111. in_files = image_loader_generated_js_files
  112. deps = [ "//ui/file_manager/image_loader:copy_from_filesapp" ]
  113. }
  114. ts_library("build_ts") {
  115. root_dir = preprocess_folder
  116. out_dir = "$target_gen_dir/tsc"
  117. tsconfig_base = "tsconfig_base.json"
  118. composite = true
  119. extra_deps = [
  120. ":copy_definition",
  121. ":copy_fmp",
  122. ":copy_ts",
  123. ":generate_definitions",
  124. ":preprocess_generated",
  125. ":preprocess_generated_image_loader",
  126. ":preprocess_static",
  127. ":preprocess_static_image_loader",
  128. ]
  129. deps = [ "//ui/webui/resources:library" ]
  130. in_files =
  131. static_js_files + generated_js_files + ts_files + ts_generated_templates +
  132. image_loader_static_js_files + image_loader_generated_js_files
  133. definitions = [
  134. "$preprocess_folder/file_manager/externs/file_manager_private.js",
  135. "$target_gen_dir/file_manager/definitions/file_manager.d.ts",
  136. "$target_gen_dir/file_manager/externs/volume_manager.d.ts",
  137. ]
  138. }
  139. ts_library("test_build_ts") {
  140. testonly = true
  141. root_dir = preprocess_folder
  142. out_dir = "$target_gen_dir/tsc"
  143. tsconfig_base = "tsconfig_base.json"
  144. in_files = ts_test_files
  145. path_mappings = [
  146. # for chai_assert.js.
  147. "chrome://webui-test/*|" +
  148. rebase_path("$root_gen_dir/chrome/test/data/webui/tsc/*",
  149. target_gen_dir),
  150. ]
  151. definitions = [
  152. "$preprocess_folder/file_manager/externs/file_manager_private.js",
  153. "$target_gen_dir/file_manager/definitions/file_error.d.ts",
  154. "$target_gen_dir/file_manager/definitions/file_manager.d.ts",
  155. "$target_gen_dir/file_manager/externs/volume_manager.d.ts",
  156. ]
  157. deps = [ ":build_ts" ]
  158. extra_deps = [
  159. ":copy_definition",
  160. ":copy_fmp",
  161. ":copy_ts",
  162. ":generate_definitions",
  163. ]
  164. }
  165. ts_definitions("generate_definitions") {
  166. root_dir = "."
  167. out_dir = target_gen_dir
  168. js_files = [
  169. "file_manager/common/js/volume_manager_types.js",
  170. "file_manager/externs/entry_location.js",
  171. "file_manager/externs/files_app_entry_interfaces.js",
  172. "file_manager/externs/volume_info.js",
  173. "file_manager/externs/volume_info_list.js",
  174. "file_manager/externs/volume_manager.js",
  175. ]
  176. }
  177. # Copy definition files to GEN folder, so they can import relatively the
  178. # generated definitions.
  179. copy("copy_definition") {
  180. sources = [
  181. "file_manager/definitions/file_error.d.ts",
  182. "file_manager/definitions/file_manager.d.ts",
  183. ]
  184. outputs = [ "$target_gen_dir/{{source_target_relative}}" ]
  185. }
  186. copy("copy_ts") {
  187. sources = ts_files + ts_test_files
  188. outputs = [ "$preprocess_folder/{{source_target_relative}}" ]
  189. }
  190. copy("copy_fmp") {
  191. sources = [ "//third_party/closure_compiler/externs/file_manager_private.js" ]
  192. outputs = [ "$preprocess_folder/file_manager/externs/{{source_file_part}}" ]
  193. }
  194. js_library("js_from_ts") {
  195. sources = []
  196. foreach(_t, ts_files) {
  197. sources += [ "$target_gen_dir/tsc/" + string_replace(_t, ".ts", ".js") ]
  198. }
  199. extra_deps = [ ":build_ts" ]
  200. }
  201. grd_prefix = "file_manager_gen"
  202. generated_grd = "$target_gen_dir/${grd_prefix}_resources.grd"
  203. generate_grd("build_grd") {
  204. out_grd = generated_grd
  205. grdp_files = [ "$target_gen_dir/file_manager/static_resources.grdp" ]
  206. deps = [
  207. ":build_ts",
  208. "file_manager:build_static_grdp",
  209. "//ui/file_manager/image_loader:build",
  210. ]
  211. input_files_base_dir = rebase_path(target_gen_dir, root_build_dir)
  212. input_files = [ "image_loader/background.rollup.js" ]
  213. resource_path_rewrites =
  214. [ "image_loader/background.rollup.js|image_loader/background.js" ]
  215. if (optimize_webui) {
  216. input_files += [
  217. "file_manager/background/js/main_background.rollup.js",
  218. "file_manager/background/js/runtime_loaded_test_util.rollup.js",
  219. "file_manager/background/js/shared.rollup.js",
  220. "file_manager/foreground/js/deferred_elements.rollup.js",
  221. "file_manager/foreground/js/main.rollup.js",
  222. "file_manager/foreground/js/metadata_dispatcher.rollup.js",
  223. "file_manager/foreground/js/shared.rollup.js",
  224. "image_loader/image_orientation.js",
  225. "image_loader/lru_cache.js",
  226. "file_manager/common/js/file_types_data.js",
  227. ]
  228. resource_path_rewrites += [
  229. "file_manager/background/js/main_background.rollup.js|file_manager/background/js/main_background.js",
  230. "file_manager/background/js/runtime_loaded_test_util.rollup.js|file_manager/background/js/runtime_loaded_test_util.js",
  231. "file_manager/foreground/js/deferred_elements.rollup.js|file_manager/foreground/js/deferred_elements.js",
  232. "file_manager/foreground/js/main.rollup.js|file_manager/foreground/js/main.js",
  233. "file_manager/foreground/js/metadata_dispatcher.rollup.js|file_manager/foreground/js/metadata/metadata_dispatcher.js",
  234. ]
  235. deps += [
  236. "//ui/file_manager/file_manager/background/js:build",
  237. "//ui/file_manager/file_manager/foreground/elements:elements",
  238. "//ui/file_manager/file_manager/foreground/js:build",
  239. "//ui/file_manager/file_manager/foreground/js:build_worker",
  240. ]
  241. } else {
  242. manifest_files =
  243. filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ])
  244. }
  245. }
  246. # Resources for the JS modules.
  247. grit("file_manager_gen_resources") {
  248. defines = chrome_grit_defines
  249. # These arguments are needed since the grd is generated at build time.
  250. enable_input_discovery_for_gn_analyze = false
  251. source = generated_grd
  252. deps = [ ":build_grd" ]
  253. outputs = [
  254. "grit/file_manager_gen_resources.h",
  255. "grit/file_manager_gen_resources_map.cc",
  256. "grit/file_manager_gen_resources_map.h",
  257. "file_manager_gen_resources.pak",
  258. ]
  259. output_dir = target_gen_dir
  260. }
  261. html_to_wrapper("html_wrapper_files") {
  262. in_files = ts_templates
  263. }
  264. # GRD for test files.
  265. generate_grd("build_tests_grdp") {
  266. testonly = true
  267. grd_prefix = "file_manager_test"
  268. out_grd = "$target_gen_dir/tests_resources.grdp"
  269. input_files_base_dir = rebase_path(".", "//")
  270. input_files = unittest_files
  271. }
  272. # GRD for the actual application files that are processed by TS compiler.
  273. generate_grd("build_tests_gen_grdp") {
  274. testonly = true
  275. grd_prefix = "file_manager_test"
  276. out_grd = "$target_gen_dir/tests_gen_resources.grdp"
  277. manifest_files =
  278. filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ]) +
  279. filter_include(get_target_outputs(":test_build_ts"), [ "*.manifest" ])
  280. deps = [
  281. ":build_ts",
  282. ":test_build_ts",
  283. ]
  284. }