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