1// Copyright 2022 Google LLC 2// 3// Use of this source code is governed by a BSD-style license that can be 4// found in the LICENSE file. 5 6package main 7 8import ( 9 "flag" 10 "fmt" 11 "os" 12 "runtime/pprof" 13 14 "go.skia.org/infra/go/common" 15 "go.skia.org/infra/go/skerr" 16 "go.skia.org/skia/bazel/exporter" 17 "go.skia.org/skia/bazel/exporter/interfaces" 18) 19 20var gniExportDescs = []exporter.GNIExportDesc{ 21 {GNI: "gn/codec.gni", Vars: []exporter.GNIFileListExportDesc{ 22 {Var: "skia_codec_public", 23 Rules: []string{ 24 "//include/codec:any_codec_hdrs", 25 "//include/codec:core_hdrs", 26 }, 27 }, 28 {Var: "skia_codec_shared", 29 Rules: []string{ 30 "//src/codec:any_decoder", 31 "//include/codec:any_codec_hdrs", 32 }, 33 }, 34 {Var: "skia_codec_decode_bmp", 35 Rules: []string{ 36 "//src/codec:bmp_decode", 37 "//src/codec:wbmp_decode", 38 }, 39 }, 40 {Var: "skia_codec_xmp", 41 Rules: []string{ 42 "//src/codec:xmp_srcs", 43 }, 44 }, 45 {Var: "skia_codec_jpeg_xmp", 46 Rules: []string{ 47 "//src/codec:jpeg_xmp_hdrs", 48 "//src/codec:jpeg_xmp_srcs", 49 }, 50 }, 51 {Var: "skia_codec_png_base", 52 Rules: []string{ 53 "//src/codec:png_codec_base_hdrs", 54 "//src/codec:png_codec_base_srcs", 55 }, 56 }, 57 // TODO(https://crbug.com/381900683): Replace this with more granular lists. 58 {Var: "skia_codec_png", 59 Rules: []string{ 60 "//src/codec:buffet_png_srcs", 61 "//src/codec:common_png_srcs", 62 "//src/codec:png_codec_base_hdrs", 63 "//src/codec:png_codec_base_srcs", 64 }, 65 }, 66 {Var: "skia_codec_rust_png_public", 67 Rules: []string{ 68 "//experimental/rust_png/decoder:hdrs", 69 }, 70 }, 71 {Var: "skia_codec_rust_png", 72 Rules: []string{ 73 "//experimental/rust_png/decoder:srcs", 74 "//experimental/rust_png/ffi:utils", 75 }, 76 }, 77 {Var: "skia_codec_rust_png_ffi_rs_srcs", 78 Rules: []string{ 79 "//experimental/rust_png/ffi:rs_srcs", 80 }, 81 }, 82 {Var: "skia_codec_rust_png_ffi_cxx_bridge_srcs", 83 Rules: []string{ 84 "//experimental/rust_png/ffi:cxx_bridge_srcs", 85 }, 86 }, 87 {Var: "skia_codec_rust_png_ffi_cpp_hdrs", 88 Rules: []string{ 89 "//experimental/rust_png/ffi:ffi_cpp", 90 }, 91 }, 92 }}, 93 {GNI: "gn/core.gni", Vars: []exporter.GNIFileListExportDesc{ 94 {Var: "skia_core_public", 95 Rules: []string{ 96 "//include/core:core_hdrs", 97 }}, 98 {Var: "skia_core_sources", 99 Rules: []string{ 100 "//include/private:core_priv_hdrs", 101 "//include/private/base:private_hdrs", 102 "//include/private/base:shared_gpu_private_hdrs", 103 "//include/private/chromium:core_hdrs", 104 "//include/private/chromium:shared_private_hdrs", 105 "//src/base:private_hdrs", 106 "//src/base:skslc_srcs", 107 "//src/base:srcs", 108 "//src/core:core_priv_hdrs", 109 "//src/core:core_priv_srcs", 110 "//src/core:core_srcs", 111 "//src/core:textual_hdrs", 112 "//src/image:image_hdrs", 113 "//src/image:image_srcs", 114 "//src/lazy:lazy_hdrs", 115 "//src/lazy:lazy_srcs", 116 "//src/opts:textual_hdrs", 117 "//src/shaders:shader_hdrs", 118 "//src/shaders:shader_srcs", 119 "//src/text:text_hdrs", 120 "//src/text:text_srcs", 121 }}, 122 {Var: "skia_pathops_public", 123 Rules: []string{"//include/pathops:public_hdrs"}}, 124 {Var: "skia_pathops_sources", 125 Rules: []string{ 126 "//src/pathops:_pathops_hdrs", 127 "//src/pathops:_pathops_srcs", 128 }}, 129 {Var: "skia_encode_public", 130 Rules: []string{"//include/encode:encode_hdrs"}}, 131 {Var: "skia_encode_srcs", 132 Rules: []string{ 133 "//src/encode:encoder_common", 134 "//src/encode:icc_support", 135 }}, 136 {Var: "skia_encode_jpeg_public", 137 Rules: []string{"//include/encode:jpeg_hdrs"}}, 138 {Var: "skia_encode_jpeg_srcs", 139 Rules: []string{"//src/encode:jpeg_encode_srcs", 140 "//src/encode:jpeg_encode_hdrs"}}, 141 {Var: "skia_encode_rust_png_public", 142 Rules: []string{"//experimental/rust_png/encoder:hdrs"}}, 143 {Var: "skia_encode_rust_png_srcs", 144 Rules: []string{ 145 "//experimental/rust_png/encoder:srcs", 146 "//experimental/rust_png/ffi:utils", 147 }}, 148 {Var: "skia_encode_png_base", 149 Rules: []string{ 150 "//src/encode:png_encode_base_srcs", 151 "//src/encode:png_encode_base_hdrs", 152 }}, 153 // TODO(https://crbug.com/381900683): Rename this list. 154 {Var: "skia_encode_png_public", 155 Rules: []string{"//include/encode:png_hdrs"}}, 156 // TODO(https://crbug.com/381900683): Replace this with more granular lists. 157 {Var: "skia_encode_png_srcs", 158 Rules: []string{ 159 "//src/encode:png_encode_base_srcs", 160 "//src/encode:png_encode_base_hdrs", 161 "//src/encode:png_encode_srcs", 162 "//src/encode:png_encode_hdrs", 163 }}, 164 {Var: "skia_encode_webp_public", 165 Rules: []string{"//include/encode:webp_hdrs"}}, 166 {Var: "skia_encode_webp_srcs", 167 Rules: []string{"//src/encode:webp_encode_srcs"}}, 168 {Var: "skia_no_encode_jpeg_srcs", 169 Rules: []string{"//src/encode:no_jpeg_encode_srcs"}}, 170 {Var: "skia_no_encode_png_srcs", 171 Rules: []string{"//src/encode:no_png_encode_srcs"}}, 172 {Var: "skia_no_encode_webp_srcs", 173 Rules: []string{"//src/encode:no_webp_encode_srcs"}}, 174 {Var: "skia_discardable_memory_chromium", 175 Rules: []string{"//include/private/chromium:discardable_memory_hdrs"}}, 176 {Var: "skia_no_slug_srcs", 177 Rules: []string{}}, 178 }, 179 }, 180 {GNI: "gn/effects.gni", Vars: []exporter.GNIFileListExportDesc{ 181 {Var: "skia_effects_public", 182 Rules: []string{ 183 "//include/effects:core_hdrs", 184 }}, 185 {Var: "skia_effects_sources", 186 Rules: []string{ 187 "//src/effects:effects_hdrs", 188 "//src/effects:effects_srcs", 189 "//src/shaders/gradients:gradient_hdrs", 190 "//src/shaders/gradients:gradient_srcs", 191 }}, 192 {Var: "skia_colorfilters_sources", 193 Rules: []string{ 194 "//src/effects/colorfilters:colorfilter_srcs", 195 "//src/effects/colorfilters:colorfilter_hdrs", 196 }}, 197 }}, 198 {GNI: "gn/effects_imagefilters.gni", Vars: []exporter.GNIFileListExportDesc{ 199 {Var: "skia_effects_imagefilter_public", 200 Rules: []string{ 201 "//include/effects:public_imagefilters_hdrs", 202 }}, 203 {Var: "skia_effects_imagefilter_sources", 204 Rules: []string{ 205 "//src/effects/imagefilters:srcs", 206 }}}, 207 }, 208 {GNI: "gn/ports.gni", Vars: []exporter.GNIFileListExportDesc{ 209 {Var: "skia_ports_sources", 210 Rules: []string{ 211 "//src/ports:global_init", 212 "//src/ports:osfile", 213 }}, 214 {Var: "skia_ports_freetype_sources", 215 Rules: []string{ 216 "//src/ports:freetype_support", 217 }}, 218 {Var: "skia_ports_fontmgr_android_public", 219 Rules: []string{ 220 "//include/ports:android_fontmgr_hdrs", 221 }}, 222 {Var: "skia_ports_fontmgr_android_sources", 223 Rules: []string{ 224 "//src/ports:fontmgr_android_freetype", 225 }}, 226 {Var: "skia_ports_fontmgr_android_ndk_public", 227 Rules: []string{ 228 "//include/ports:android_ndk_fontmgr_hdrs", 229 }}, 230 {Var: "skia_ports_fontmgr_android_ndk_sources", 231 Rules: []string{ 232 "//src/ports:fontmgr_android_ndk_freetype", 233 }}, 234 {Var: "skia_ports_fontmgr_custom_sources", 235 Rules: []string{ 236 "//src/ports:fontmgr_custom", 237 }}, 238 {Var: "skia_ports_fontmgr_coretext_public", 239 Rules: []string{ 240 "//include/ports:mac_typeface", 241 "//include/ports:coretext_fontmgr_hdrs", 242 }}, 243 {Var: "skia_ports_fontmgr_coretext_sources", 244 Rules: []string{ 245 "//src/ports:fontmgr_coretext", 246 "//src/ports:typeface_mac_srcs", 247 "//src/ports:typeface_mac_hdrs", 248 }}, 249 {Var: "skia_ports_fontmgr_directory_public", 250 Rules: []string{ 251 "//include/ports:directory_fontmgr_hdrs", 252 }}, 253 {Var: "skia_ports_fontmgr_directory_sources", 254 Rules: []string{ 255 "//src/ports:fontmgr_directory_freetype", 256 }}, 257 {Var: "skia_ports_fontmgr_embedded_public", 258 Rules: []string{ 259 "//include/ports:data_fontmgr_hdrs", 260 }}, 261 {Var: "skia_ports_fontmgr_embedded_sources", 262 Rules: []string{ 263 "//src/ports:fontmgr_data_freetype", 264 }}, 265 {Var: "skia_ports_fontmgr_empty_public", 266 Rules: []string{ 267 "//include/ports:empty_fontmgr_hdrs", 268 }}, 269 {Var: "skia_ports_fontmgr_empty_sources", 270 Rules: []string{ 271 "//src/ports:fontmgr_empty_freetype", 272 }}, 273 {Var: "skia_ports_fontmgr_fontconfig_public", 274 Rules: []string{ 275 "//include/ports:fontconfig_fontmgr_hdrs", 276 }}, 277 {Var: "skia_ports_fontmgr_fontconfig_sources", 278 Rules: []string{ 279 "//src/ports:fontmgr_fontconfig_freetype", 280 }}, 281 {Var: "skia_ports_fontmgr_fontations_public", 282 Rules: []string{ 283 "//include/ports:fontmgr_fontations_hdrs", 284 }}, 285 {Var: "skia_ports_fontmgr_fontations_sources", 286 Rules: []string{ 287 "//src/ports:fontmgr_fontations_empty_srcs", 288 }}, 289 {Var: "skia_ports_fontmgr_fuchsia_public", 290 Rules: []string{ 291 "//include/ports:fuchsia_fontmgr_hdrs", 292 }}, 293 {Var: "skia_ports_fontmgr_fuchsia_sources", 294 Rules: []string{ 295 "//src/ports:fontmgr_fuchsia_srcs", 296 }}, 297 {Var: "skia_ports_typeface_fontations_sources", 298 Rules: []string{ 299 "//src/ports:typeface_fontations_hdrs", 300 "//src/ports:typeface_fontations_srcs", 301 }}, 302 {Var: "skia_ports_typeface_proxy_sources", 303 Rules: []string{ 304 "//src/ports:typeface_proxy_hdrs", 305 "//src/ports:typeface_proxy_srcs", 306 }}, 307 {Var: "skia_ports_windows_sources", 308 Rules: []string{ 309 "//src/ports:osfile_win", 310 }}, 311 {Var: "skia_ports_windows_fonts_public", 312 Rules: []string{ 313 "//include/ports:typeface_windows_hdrs", 314 }}, 315 {Var: "skia_ports_windows_fonts_sources", 316 Rules: []string{ 317 "//src/ports:windows_fonts_srcs", 318 }}, 319 {Var: "skia_ports_fci_public", 320 Rules: []string{ 321 "//include/ports:fci_fontmgr_hdrs", 322 }}, 323 {Var: "skia_ports_fci_sources", 324 Rules: []string{ 325 "//src/ports:fontconfig_interface_srcs", 326 }}, 327 {Var: "skia_ports_fonthost_win_sources", 328 Rules: []string{ 329 "//src/ports:fonthost_win_srcs", 330 }}, 331 }}, 332 {GNI: "gn/pdf.gni", Vars: []exporter.GNIFileListExportDesc{ 333 {Var: "skia_pdf_public", 334 Rules: []string{"//include/docs:pdf_hdrs"}}, 335 {Var: "skia_pdf_sources", 336 Rules: []string{ 337 "//src/pdf:_pdf_hdrs", 338 "//src/pdf:_pdf_srcs", 339 }}, 340 }}, 341 {GNI: "gn/sksl.gni", Vars: []exporter.GNIFileListExportDesc{ 342 {Var: "skia_sksl_core_sources", 343 Rules: []string{ 344 "//include/sksl:core_hdrs", 345 "//src/sksl/analysis:analysis_hdrs", 346 "//src/sksl/analysis:analysis_srcs", 347 "//src/sksl/codegen:rasterpipeline_hdrs", 348 "//src/sksl/codegen:rasterpipeline_srcs", 349 "//src/sksl/ir:ir_hdrs", 350 "//src/sksl/ir:ir_srcs", 351 "//src/sksl/tracing:private_hdrs", 352 "//src/sksl/tracing:skopts_hdrs", 353 "//src/sksl/tracing:srcs", 354 "//src/sksl/transform:transform_hdrs", 355 "//src/sksl/transform:transform_srcs", 356 "//src/sksl:sksl_hdrs", 357 "//src/sksl:sksl_srcs", 358 }}, 359 {Var: "skia_sksl_core_module_sources", 360 Rules: []string{ 361 "//src/sksl:sksl_default_module_srcs", 362 "//src/sksl:sksl_graphite_modules_hdrs", 363 }}, 364 {Var: "skia_sksl_graphite_modules_sources", 365 Rules: []string{ 366 "//src/sksl:sksl_graphite_modules_srcs", 367 "//src/sksl:sksl_graphite_modules_hdrs", 368 }}, 369 {Var: "skia_sksl_tracing_sources", 370 Rules: []string{ 371 "//src/sksl/tracing:enabled_hdrs", 372 "//src/sksl/tracing:enabled_srcs", 373 }}, 374 {Var: "skia_sksl_pipeline_sources", 375 Rules: []string{ 376 "//src/sksl/codegen:gpu", 377 }}, 378 {Var: "skia_sksl_codegen_sources", 379 Rules: []string{ 380 "//src/sksl/codegen:codegen_shared_exported", 381 "//src/sksl/codegen:codegen_shared_priv", 382 "//src/sksl/codegen:glsl", 383 "//src/sksl/codegen:metal", 384 "//src/sksl/codegen:spirv", 385 "//src/sksl/codegen:wgsl", 386 }}, 387 {Var: "skia_sksl_hlsl_sources", 388 Rules: []string{ 389 "//src/sksl/codegen:hlsl", 390 }}, 391 {Var: "skia_sksl_validate_spirv_sources", 392 Rules: []string{ 393 "//src/sksl/codegen:spirv_validator", 394 }}, 395 {Var: "skia_sksl_validate_wgsl_sources", 396 Rules: []string{ 397 "//src/sksl/codegen:wgsl_validator", 398 }}, 399 {Var: "skslc_deps", 400 Rules: []string{ 401 "//src/base:skslc_srcs", 402 "//src/core:core_skslc_hdrs", 403 "//src/core:core_skslc_srcs", 404 "//src/gpu/ganesh:core_skslc_hdrs", 405 "//src/gpu/ganesh:core_skslc_srcs", 406 "//src/ports:malloc", 407 "//src/ports:osfile", 408 "//src/sksl:sksl_skslc_module_srcs", 409 "//src/utils:utils_skslc_hdrs", 410 "//src/utils:utils_skslc_srcs", 411 "//src/utils:json_srcs", 412 }}}, 413 }, 414 {GNI: "gn/sksl_tests.gni", Vars: []exporter.GNIFileListExportDesc{ 415 // This order was the order the original file was in. It could be alphabetized if we like. 416 {Var: "sksl_error_tests", Rules: []string{"//resources/sksl:sksl_error_tests"}}, 417 {Var: "sksl_glsl_tests", Rules: []string{"//resources/sksl:sksl_glsl_tests"}}, 418 {Var: "sksl_mesh_tests", Rules: []string{"//resources/sksl:sksl_mesh_tests"}}, 419 {Var: "sksl_mesh_error_tests", Rules: []string{"//resources/sksl:sksl_mesh_error_tests"}}, 420 {Var: "sksl_metal_tests", Rules: []string{"//resources/sksl:sksl_metal_tests"}}, 421 {Var: "sksl_spirv_tests", Rules: []string{"//resources/sksl:sksl_spirv_tests"}}, 422 {Var: "sksl_wgsl_tests", Rules: []string{"//resources/sksl:sksl_wgsl_tests"}}, 423 {Var: "sksl_shared_tests", Rules: []string{"//resources/sksl:sksl_shared_tests"}}, 424 {Var: "sksl_compute_tests", Rules: []string{"//resources/sksl:sksl_compute_tests"}}, 425 {Var: "sksl_folding_tests", Rules: []string{"//resources/sksl:sksl_folding_tests"}}, 426 {Var: "sksl_inliner_tests", Rules: []string{"//resources/sksl:sksl_inliner_tests"}}, 427 {Var: "sksl_blend_tests", Rules: []string{"//resources/sksl:sksl_blend_tests"}}, 428 {Var: "sksl_settings_tests", Rules: []string{"//resources/sksl:sksl_settings_tests"}}, 429 {Var: "sksl_rte_tests", Rules: []string{"//resources/sksl:sksl_rte_tests"}}, 430 {Var: "sksl_rte_error_tests", Rules: []string{"//resources/sksl:sksl_rte_error_tests"}}, 431 }}, 432 {GNI: "gn/utils.gni", Vars: []exporter.GNIFileListExportDesc{ 433 {Var: "skia_utils_public", 434 Rules: []string{ 435 "//include/utils:core_hdrs", 436 "//include/utils/mac:public_hdrs"}}, 437 {Var: "skia_utils_chromium", 438 Rules: []string{ 439 "//include/docs:multi_picture_document_hdrs", 440 }}, 441 {Var: "skia_utils_private", 442 Rules: []string{ 443 "//src/utils/mac:mac_utils_priv", 444 "//src/utils/mac:mac_utils", 445 "//src/utils/win:core_hdrs", 446 "//src/utils/win:core_srcs", 447 "//src/utils:core_priv_hdrs", 448 "//src/utils:core_srcs", 449 "//src/utils:char_to_glyphcache", 450 "//src/utils:canvas_state_utils", 451 "//src/utils:json_hdrs", 452 "//src/utils:json_srcs", 453 "//src/utils:multi_picture_document", 454 "//src/utils:clip_stack_utils", 455 "//src/utils:float_to_decimal", 456 "//src/utils:utils_skslc_hdrs", 457 "//src/utils:utils_skslc_srcs", 458 }}, 459 }, 460 }, 461 {GNI: "gn/xps.gni", Vars: []exporter.GNIFileListExportDesc{ 462 {Var: "skia_xps_public", 463 Rules: []string{"//include/docs:xps_hdrs"}}, 464 {Var: "skia_xps_sources", 465 Rules: []string{ 466 "//src/xps:core_hdrs", 467 "//src/xps:core_srcs", 468 }}}, 469 }, 470 {GNI: "gn/xml.gni", Vars: []exporter.GNIFileListExportDesc{ 471 {Var: "skia_xml_sources", 472 Rules: []string{ 473 "//src/xml:_xml_hdrs", 474 "//src/xml:_xml_srcs", 475 }}}, 476 }, 477 {GNI: "gn/gpu.gni", Vars: []exporter.GNIFileListExportDesc{ 478 {Var: "skia_gpu_public", 479 Rules: []string{ 480 "//include/gpu/ganesh/mock:public_hdrs", 481 "//include/gpu:shared_gpu_hdrs", 482 "//include/gpu/ganesh:ganesh_hdrs", 483 }}, 484 {Var: "skia_ganesh_private", 485 Rules: []string{ 486 "//include/private/gpu/ganesh:private_hdrs", 487 "//src/gpu/ganesh/effects:effects_hdrs", 488 "//src/gpu/ganesh/effects:effects_srcs", 489 "//src/gpu/ganesh/geometry:geometry_hdrs", 490 "//src/gpu/ganesh/geometry:geometry_srcs", 491 "//src/gpu/ganesh/glsl:glsl_hdrs", 492 "//src/gpu/ganesh/glsl:glsl_srcs", 493 "//src/gpu/ganesh/gradients:gradient_hdrs", 494 "//src/gpu/ganesh/gradients:gradient_srcs", 495 "//src/gpu/ganesh/image:image_hdrs", 496 "//src/gpu/ganesh/image:image_srcs", 497 "//src/gpu/ganesh/mock:mock_hdrs", 498 "//src/gpu/ganesh/mock:mock_srcs", 499 "//src/gpu/ganesh/ops:ops_hdrs", 500 "//src/gpu/ganesh/ops:ops_srcs", 501 "//src/gpu/ganesh/surface:surface_srcs", 502 "//src/gpu/ganesh/surface:surface_srcs", 503 "//src/gpu/ganesh/tessellate:tessellate_hdrs", 504 "//src/gpu/ganesh/tessellate:tessellate_srcs", 505 "//src/gpu/ganesh/text:private_hdrs", 506 "//src/gpu/ganesh/text:srcs", 507 "//src/gpu/ganesh:core_hdrs", 508 "//src/gpu/ganesh:core_skslc_hdrs", 509 "//src/gpu/ganesh:core_skslc_srcs", 510 "//src/gpu/ganesh:core_srcs", 511 }}, 512 {Var: "skia_gpu_android_private", 513 Rules: []string{ 514 "//src/gpu/ganesh/surface:android_srcs", 515 "//src/gpu/ganesh:android_srcs", 516 "//src/image:android_srcs", 517 }}, 518 {Var: "skia_gpu_chromium_public", 519 Rules: []string{ 520 "//include/private/chromium:ganesh_private_hdrs", 521 }}, 522 {Var: "skia_gpu_gl_public", 523 Rules: []string{ 524 "//include/gpu/ganesh/gl:public_hdrs", 525 }}, 526 {Var: "skia_gpu_gl_private", 527 Rules: []string{ 528 "//src/gpu/ganesh/gl:core_hdrs", 529 "//src/gpu/ganesh/gl:core_srcs", 530 "//src/gpu/ganesh/gl/builders:builder_hdrs", 531 "//src/gpu/ganesh/gl/builders:builder_srcs", 532 }}, 533 {Var: "skia_android_gl_sources", 534 Rules: []string{ 535 "//src/gpu/ganesh/gl:android_srcs", 536 }}, 537 {Var: "skia_null_gpu_sources", 538 Rules: []string{ 539 "//src/gpu/ganesh/gl:native_interface_none", 540 }}, 541 {Var: "skia_gpu_vk_public", 542 Rules: []string{ 543 "//include/gpu/vk:shared_public_hdrs", 544 "//include/gpu/ganesh/vk:public_hdrs", 545 }}, 546 {Var: "skia_gpu_vk_chromium_public", 547 Rules: []string{ 548 "//include/private/chromium:vk_ganesh_hdrs", 549 }}, 550 {Var: "skia_gpu_vk_private", 551 Rules: []string{ 552 "//src/gpu/ganesh/vk:vk_hdrs", 553 "//src/gpu/ganesh/vk:vk_srcs", 554 }}, 555 {Var: "skia_gpu_vk_android_private", 556 Rules: []string{ 557 "//src/gpu/ganesh/vk:android_srcs", 558 }}, 559 {Var: "skia_gpu_vk_chromium_private", 560 Rules: []string{ 561 "//src/gpu/ganesh/vk:vk_chromium_srcs", 562 }}, 563 {Var: "skia_direct3d_sources", 564 Rules: []string{ 565 "//include/private/gpu/ganesh:d3d_private_hdrs", 566 "//src/gpu/ganesh/d3d:d3d_hdrs", 567 "//src/gpu/ganesh/d3d:d3d_srcs", 568 }}, 569 {Var: "skia_gpu_metal_public", 570 Rules: []string{ 571 "//include/gpu/ganesh/mtl:public_hdrs", 572 }}, 573 {Var: "skia_gpu_metal_private", 574 Rules: []string{ 575 "//src/gpu/ganesh/surface:mtl_objc_srcs", 576 "//src/gpu/ganesh/mtl:mtl_hdrs", 577 "//src/gpu/ganesh/mtl:mtl_srcs", 578 }}, 579 {Var: "skia_gpu_metal_cpp", 580 Rules: []string{ 581 "//src/gpu/ganesh/mtl:mtl_cpp_hdrs", 582 }}, 583 {Var: "skia_shared_gpu_sources", 584 Rules: []string{ 585 "//include/gpu:shared_gpu_hdrs", 586 "//include/private/base:shared_gpu_private_hdrs", 587 "//include/private/chromium:shared_private_hdrs", 588 "//src/gpu:shared_hdrs", 589 "//src/gpu:shared_srcs", 590 "//src/gpu/tessellate:tessellate_hdrs", 591 "//src/gpu/tessellate:tessellate_srcs", 592 "//src/text/gpu:gpu_hdrs", 593 "//src/text/gpu:gpu_srcs", 594 }}, 595 {Var: "skia_shared_vk_sources", 596 Rules: []string{ 597 "//include/private/gpu/vk:private_hdrs", 598 "//src/gpu/vk:_vk_hdrs", 599 "//src/gpu/vk:_vk_srcs"}}, 600 {Var: "skia_vma_sources", 601 Rules: []string{ 602 "//src/gpu/vk/vulkanmemoryallocator:vma_srcs", 603 }}, 604 {Var: "skia_shared_mtl_sources", 605 Rules: []string{ 606 "//include/gpu/mtl:public_hdrs", 607 "//src/gpu/mtl:mtl_hdrs", 608 "//src/gpu/mtl:mtl_srcs", 609 }}, 610 {Var: "skia_shared_android_sources", 611 Rules: []string{ 612 "//src/gpu/android:shared_android_srcs", 613 }}, 614 }}, 615 {GNI: "modules/svg/svg.gni", Vars: []exporter.GNIFileListExportDesc{ 616 {Var: "skia_svg_public", 617 Rules: []string{"//modules/svg/include:public_hdrs"}}, 618 {Var: "skia_svg_sources", 619 Rules: []string{ 620 "//modules/svg/src:private_hdrs", 621 "//modules/svg/src:srcs", 622 }}, 623 }}, 624 {GNI: "modules/bentleyottmann/bentleyottmann.gni", Vars: []exporter.GNIFileListExportDesc{ 625 {Var: "bentleyottmann_public", 626 Rules: []string{ 627 "//modules/bentleyottmann/include:hdrs", 628 }}, 629 {Var: "bentleyottmann_sources", 630 Rules: []string{ 631 "//modules/bentleyottmann/src:srcs", 632 }}, 633 {Var: "bentleyottmann_tests", 634 Rules: []string{ 635 "//modules/bentleyottmann/tests:tests", 636 }}, 637 }}, 638 {GNI: "modules/skparagraph/skparagraph.gni", Vars: []exporter.GNIFileListExportDesc{ 639 {Var: "skparagraph_public", 640 Rules: []string{ 641 "//modules/skparagraph/include:hdrs", 642 "//modules/skparagraph/utils:utils_hdrs"}}, 643 {Var: "skparagraph_sources", 644 Rules: []string{ 645 "//modules/skparagraph/src:srcs", 646 "//modules/skparagraph/utils:utils_srcs"}}, 647 {Var: "skparagraph_utils", 648 Rules: []string{ 649 "//modules/skparagraph/utils:utils_hdrs", 650 "//modules/skparagraph/utils:utils_srcs", 651 }}, 652 {Var: "skparagraph_tests", 653 Rules: []string{ 654 "//modules/skparagraph/tests:tests_hdrs", 655 "//modules/skparagraph/tests:tests_srcs", 656 }}, 657 }}, 658 {GNI: "modules/skresources/skresources.gni", Vars: []exporter.GNIFileListExportDesc{ 659 {Var: "skia_skresources_public", 660 Rules: []string{"//modules/skresources/include:hdrs"}}, 661 {Var: "skia_skresources_sources", 662 Rules: []string{"//modules/skresources/src:srcs"}}, 663 }}, 664 {GNI: "modules/skshaper/skshaper.gni", Vars: []exporter.GNIFileListExportDesc{ 665 {Var: "skia_shaper_public", 666 Rules: []string{"//modules/skshaper/include:hdrs", 667 "//modules/skshaper/utils:core_hdrs", 668 }}, 669 {Var: "skia_shaper_primitive_sources", 670 Rules: []string{"//modules/skshaper/src:base_srcs"}}, 671 {Var: "skia_shaper_harfbuzz_sources", 672 Rules: []string{"//modules/skshaper/src:harfbuzz_srcs"}}, 673 {Var: "skia_shaper_skunicode_sources", 674 Rules: []string{"//modules/skshaper/src:skunicode_srcs"}}, 675 {Var: "skia_shaper_coretext_sources", 676 Rules: []string{"//modules/skshaper/src:coretext_srcs"}}, 677 {Var: "skia_shaper_tests", 678 Rules: []string{"//modules/skshaper/tests:tests_srcs"}}, 679 }}, 680 {GNI: "modules/skunicode/skunicode.gni", Vars: []exporter.GNIFileListExportDesc{ 681 {Var: "skia_unicode_public", 682 Rules: []string{"//modules/skunicode/include:hdrs"}}, 683 {Var: "skia_unicode_sources", 684 Rules: []string{"//modules/skunicode/src:srcs"}}, 685 {Var: "skia_unicode_icu_sources", 686 Rules: []string{"//modules/skunicode/src:icu_srcs"}}, 687 {Var: "skia_unicode_icu_bidi_sources", 688 Rules: []string{"//modules/skunicode/src:icu_bidi_srcs"}}, 689 {Var: "skia_unicode_bidi_full_sources", 690 Rules: []string{"//modules/skunicode/src:bidi_full_srcs"}}, 691 {Var: "skia_unicode_bidi_subset_sources", 692 Rules: []string{"//modules/skunicode/src:bidi_subset_srcs"}}, 693 {Var: "skia_unicode_icu4x_sources", 694 Rules: []string{"//modules/skunicode/src:icu4x_srcs"}}, 695 {Var: "skia_unicode_client_icu_sources", 696 Rules: []string{"//modules/skunicode/src:client_srcs"}}, 697 {Var: "skia_unicode_builtin_icu_sources", 698 Rules: []string{"//modules/skunicode/src:builtin_srcs"}}, 699 {Var: "skia_unicode_runtime_icu_sources", 700 Rules: []string{"//modules/skunicode/src:runtime_srcs"}}, 701 {Var: "skia_unicode_libgrapheme_sources", 702 Rules: []string{"//modules/skunicode/src:libgrapheme_srcs"}}, 703 {Var: "skia_unicode_tests", 704 Rules: []string{"//modules/skunicode/tests:tests"}}, 705 }}, 706 {GNI: "modules/sksg/sksg.gni", Vars: []exporter.GNIFileListExportDesc{ 707 {Var: "skia_sksg_sources", 708 Rules: []string{"//modules/sksg/src:srcs"}}, 709 }}, 710 {GNI: "modules/skottie/skottie.gni", Vars: []exporter.GNIFileListExportDesc{ 711 {Var: "skia_skottie_public", 712 Rules: []string{"//modules/skottie/include:hdrs"}}, 713 {Var: "skia_skottie_sources", 714 Rules: []string{ 715 "//modules/skottie/src:core_hdrs", 716 "//modules/skottie/src:core_srcs", 717 "//modules/skottie/src/animator:srcs", 718 "//modules/skottie/src/effects:srcs", 719 "//modules/skottie/src/layers:srcs", 720 "//modules/skottie/src/layers/shapelayer:srcs", 721 "//modules/skottie/src/text:text_hdrs", 722 "//modules/skottie/src/text:text_srcs", 723 "//modules/skottie/src/text:text_shaper_srcs", 724 }}, 725 }}, 726 {GNI: "modules/skcms/skcms.gni", Vars: []exporter.GNIFileListExportDesc{ 727 {Var: "skcms_public_headers", 728 Rules: []string{"//modules/skcms:public_hdrs"}}, 729 {Var: "skcms_public", 730 Rules: []string{ 731 "//modules/skcms:skcms_public", 732 }}, 733 {Var: "skcms_TransformBaseline", 734 Rules: []string{ 735 "//modules/skcms:skcms_TransformBaseline", 736 }}, 737 {Var: "skcms_TransformHsw", 738 Rules: []string{ 739 "//modules/skcms:skcms_TransformHsw", 740 }}, 741 {Var: "skcms_TransformSkx", 742 Rules: []string{ 743 "//modules/skcms:skcms_TransformSkx", 744 }}, 745 }}, 746} 747 748const ( 749 unknownErr = 1 750 invalidArgErr = 2 751 exportErr = 3 752 verifyErr = 4 753 profilerErr = 5 754) 755 756type fileSystem struct { 757 workspaceDir string 758 outFormat string 759 openFiles []*os.File 760} 761 762func (fs *fileSystem) OpenFile(path string) (interfaces.Writer, error) { 763 f, err := os.Create(path) 764 if err != nil { 765 return nil, skerr.Wrap(err) 766 } 767 fs.openFiles = append(fs.openFiles, f) 768 return f, nil 769} 770 771func (fs *fileSystem) ReadFile(filename string) ([]byte, error) { 772 return os.ReadFile(filename) 773} 774 775func (fs *fileSystem) Shutdown() { 776 for _, f := range fs.openFiles { 777 f.Close() // Ignore error. 778 } 779} 780 781// Make sure fileSystem fulfills the FileSystem interface. 782var _ interfaces.FileSystem = (*fileSystem)(nil) 783 784func createExporter(projName, cmakeFileName string, fs *fileSystem) interfaces.Exporter { 785 if fs.outFormat == "cmake" { 786 return exporter.NewCMakeExporter(projName, fs.workspaceDir, cmakeFileName, fs) 787 } 788 params := exporter.GNIExporterParams{ 789 WorkspaceDir: fs.workspaceDir, 790 ExportDescs: gniExportDescs, 791 } 792 return exporter.NewGNIExporter(params, fs) 793} 794 795func doExport(qr interfaces.QueryCommand, exp interfaces.Exporter, outFormat string) { 796 err := exp.Export(qr) 797 if err != nil { 798 fmt.Fprintf(os.Stderr, "Error exporting to %s: %v\n", outFormat, err) 799 os.Exit(exportErr) 800 } 801} 802 803func main() { 804 var ( 805 queryRules = common.NewMultiStringFlag("rule", nil, "Bazel rule (may be repeated).") 806 outFormat = flag.String("output_format", "", "Desired output format. One of cmake or gni.") 807 cmakeFileName = flag.String("out", "CMakeLists.txt", "CMake output file") 808 projName = flag.String("proj_name", "", "CMake project name") 809 cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") 810 ) 811 flag.Parse() 812 if *outFormat != "cmake" && *outFormat != "gni" { 813 if *outFormat == "" { 814 fmt.Fprintln(os.Stderr, "Output format required") 815 } else { 816 fmt.Fprintf(os.Stderr, "Incorrect output format: \"%s\"\n", *outFormat) 817 } 818 fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) 819 flag.PrintDefaults() 820 os.Exit(invalidArgErr) 821 } 822 if *cmakeFileName == "" || *projName == "" { 823 fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) 824 flag.PrintDefaults() 825 os.Exit(invalidArgErr) 826 } 827 workspaceDir, err := os.Getwd() 828 if err != nil { 829 fmt.Fprintf(os.Stderr, "Error getting pwd: %v", err) 830 os.Exit(unknownErr) 831 } 832 if *cpuprofile != "" { 833 f, err := os.Create(*cpuprofile) 834 if err != nil { 835 fmt.Fprintf(os.Stderr, "unable to create %q: %v\n", *cpuprofile, err) 836 os.Exit(profilerErr) 837 } 838 defer f.Close() 839 if err = pprof.StartCPUProfile(f); err != nil { 840 fmt.Fprintf(os.Stderr, "error starting CPU profile: %v\n", err) 841 os.Exit(profilerErr) 842 } 843 defer pprof.StopCPUProfile() 844 } 845 var qcmd *exporter.BazelQueryCommand 846 switch *outFormat { 847 case "gni": 848 qcmd = exporter.NewBazelGNIQueryCommand(*queryRules, workspaceDir) 849 case "cmake": 850 qcmd = exporter.NewBazelCMakeQueryCommand(*queryRules, workspaceDir) 851 } 852 fs := fileSystem{workspaceDir: workspaceDir, outFormat: *outFormat} 853 defer fs.Shutdown() 854 var exp interfaces.Exporter = createExporter(*projName, *cmakeFileName, &fs) 855 doExport(qcmd, exp, *outFormat) 856} 857