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