• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1################################################################################
2# Skylark macros
3################################################################################
4
5def skia_select(conditions, results):
6    """select() for conditions provided externally.
7
8    Instead of {"conditionA": resultA, "conditionB": resultB},
9    this takes two arrays, ["conditionA", "conditionB"] and [resultA, resultB].
10
11    This allows the exact targets of the conditions to be provided externally while
12    the results can live here, hiding the structure of those conditions in Google3.
13
14    Maybe this is too much paranoia?
15
16    Args:
17      conditions: [CONDITION_UNIX, CONDITION_ANDROID, CONDITION_IOS, CONDITION_WASM, ...]
18      results: [RESULT_UNIX, RESULT_ANDROID, RESULT_IOS, RESULT_WASM, ....]
19    Returns:
20      The result matching the active condition.
21    """
22    selector = {}
23    for i in range(len(conditions)):
24        selector[conditions[i]] = results[i]
25    return select(selector)
26
27def skia_glob(srcs):
28    """Replaces glob() with a version that accepts a struct.
29
30    Args:
31      srcs: struct(include=[], exclude=[])
32    Returns:
33      Equivalent of glob(srcs.include, exclude=srcs.exclude)
34    """
35    if hasattr(srcs, "include"):
36        if hasattr(srcs, "exclude"):
37            return native.glob(srcs.include, exclude = srcs.exclude)
38        else:
39            return native.glob(srcs.include)
40    return []
41
42################################################################################
43## skia_{all,public}_hdrs()
44################################################################################
45def skia_all_hdrs():
46    return native.glob([
47        "src/**/*.h",
48        "include/**/*.h",
49        "third_party/**/*.h",
50    ])
51
52def skia_public_hdrs():
53    return native.glob(
54        ["include/**/*.h"],
55        exclude = [
56            "include/private/**/*",
57        ],
58    )
59
60################################################################################
61## skia_opts_srcs()
62################################################################################
63# Intel
64SKIA_OPTS_SSE2 = "SSE2"
65
66SKIA_OPTS_SSSE3 = "SSSE3"
67
68SKIA_OPTS_SSE41 = "SSE41"
69
70SKIA_OPTS_SSE42 = "SSE42"
71
72SKIA_OPTS_AVX = "AVX"
73
74SKIA_OPTS_HSW = "HSW"
75
76# Arm
77SKIA_OPTS_NEON = "NEON"
78
79SKIA_OPTS_CRC32 = "CRC32"  # arm64
80
81def opts_srcs(opts):
82    if opts == SKIA_OPTS_SSE2:
83        return native.glob([
84            "src/opts/*_SSE2.cpp",
85            "src/opts/*_sse2.cpp",  # No matches currently.
86        ])
87    elif opts == SKIA_OPTS_SSSE3:
88        return native.glob([
89            "src/opts/*_SSSE3.cpp",
90            "src/opts/*_ssse3.cpp",
91        ])
92    elif opts == SKIA_OPTS_SSE41:
93        return native.glob([
94            "src/opts/*_sse41.cpp",
95        ])
96    elif opts == SKIA_OPTS_SSE42:
97        return native.glob([
98            "src/opts/*_sse42.cpp",
99        ])
100    elif opts == SKIA_OPTS_AVX:
101        return native.glob([
102            "src/opts/*_avx.cpp",
103        ])
104    elif opts == SKIA_OPTS_HSW:
105        return native.glob([
106            "src/opts/*_hsw.cpp",
107        ])
108    elif opts == SKIA_OPTS_NEON:
109        return native.glob([
110            "src/opts/*_neon.cpp",
111        ])
112    elif opts == SKIA_OPTS_CRC32:
113        return native.glob([
114            "src/opts/*_crc32.cpp",
115        ])
116    else:
117        fail("skia_opts_srcs parameter 'opts' must be one of SKIA_OPTS_*.")
118
119def opts_cflags(opts):
120    if opts == SKIA_OPTS_SSE2:
121        return ["-msse2"]
122    elif opts == SKIA_OPTS_SSSE3:
123        return ["-mssse3"]
124    elif opts == SKIA_OPTS_SSE41:
125        return ["-msse4.1"]
126    elif opts == SKIA_OPTS_SSE42:
127        return ["-msse4.2"]
128    elif opts == SKIA_OPTS_AVX:
129        return ["-mavx"]
130    elif opts == SKIA_OPTS_HSW:
131        return ["-mavx2", "-mf16c", "-mfma"]
132    elif opts == SKIA_OPTS_NEON:
133        return ["-mfpu=neon"]
134    elif opts == SKIA_OPTS_CRC32:
135        # NDK r11's Clang (3.8) doesn't pass along this -march setting correctly to an external
136        # assembler, so we do it manually with -Wa.  This is just a bug, fixed in later Clangs.
137        return ["-march=armv8-a+crc", "-Wa,-march=armv8-a+crc"]
138    else:
139        return []
140
141SKIA_CPU_ARM = "ARM"
142
143SKIA_CPU_ARM64 = "ARM64"
144
145SKIA_CPU_X86 = "X86"
146
147SKIA_CPU_OTHER = "OTHER"
148
149def opts_rest_srcs(cpu):
150    srcs = []
151    if cpu == SKIA_CPU_ARM or cpu == SKIA_CPU_ARM64:
152        srcs += native.glob([
153            "src/opts/*_arm.cpp",
154            "src/opts/SkBitmapProcState_opts_none.cpp",
155        ])
156        if cpu == SKIA_CPU_ARM64:
157            # NEON doesn't need special flags to compile on ARM64.
158            srcs += native.glob([
159                "src/opts/*_neon.cpp",
160            ])
161    elif cpu == SKIA_CPU_X86:
162        srcs += native.glob([
163            "src/opts/*_x86.cpp",
164        ])
165    elif cpu == SKIA_CPU_OTHER:
166        srcs += native.glob([
167            "src/opts/*_none.cpp",
168        ])
169    else:
170        fail("opts_rest_srcs parameter 'cpu' must be one of " +
171             "SKIA_CPU_{ARM,ARM64,X86,OTHER}.")
172    return srcs
173
174def skia_opts_deps(cpu):
175    res = [":opts_rest"]
176
177    if cpu == SKIA_CPU_ARM:
178        res += [":opts_neon"]
179
180    if cpu == SKIA_CPU_ARM64:
181        res += [":opts_crc32"]
182
183    if cpu == SKIA_CPU_X86:
184        res += [
185            ":opts_sse2",
186            ":opts_ssse3",
187            ":opts_sse41",
188            ":opts_sse42",
189            ":opts_avx",
190            ":opts_hsw",
191        ]
192
193    return res
194
195################################################################################
196## BASE_SRCS
197################################################################################
198
199# All platform-independent SRCS.
200BASE_SRCS_ALL = struct(
201    include = [
202        "include/private/**/*.h",
203        "src/**/*.h",
204        "src/**/*.cpp",
205        "src/**/*.inc",
206    ],
207    exclude = [
208        # Exclude platform-dependent files.
209        "src/codec/*",
210        "src/device/xps/*",  # Windows-only. Move to ports?
211        "src/doc/*_XPS.cpp",  # Windows-only. Move to ports?
212        "src/gpu/gl/android/*",
213        "src/gpu/gl/egl/*",
214        "src/gpu/gl/glfw/*",
215        "src/gpu/gl/glx/*",
216        "src/gpu/gl/iOS/*",
217        "src/gpu/gl/mac/*",
218        "src/gpu/gl/win/*",
219        "src/opts/**/*",
220        "src/ports/**/*",
221        "src/utils/android/**/*",
222        "src/utils/mac/**/*",
223        "src/utils/win/**/*",
224
225        # Exclude multiple definitions.
226        "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
227        "src/pdf/SkDocument_PDF_None.cpp",  # We use src/pdf/SkPDFDocument.cpp.
228
229        # Exclude files that don't compile everywhere.
230        "src/svg/**/*",  # Depends on xml, SkJpegCodec, and SkPngCodec.
231        "src/xml/**/*",  # Avoid dragging in expat when not needed.
232
233        # Exclude all GL specific files
234        "src/gpu/gl/*",
235        "src/gpu/gl/builders/*",
236
237        # Exclude all WebGL specific files
238        "src/gpu/gl/webgl/*",
239
240        # Currently exclude all vulkan specific files
241        "src/gpu/vk/*",
242
243        # Currently exclude all Direct3D specific files
244        "src/gpu/d3d/*",
245
246        # Currently exclude all Dawn-specific files
247        "src/gpu/dawn/*",
248
249        # Defines main.
250        "src/sksl/SkSLMain.cpp",
251
252        # Only used to regenerate the lexer
253        "src/sksl/lex/*",
254    ],
255)
256
257def codec_srcs(limited):
258    """Sources for the codecs. Excludes Raw, and Ico, Webp, and Png if limited."""
259
260    exclude = ["src/codec/*Raw*.cpp"]
261    if limited:
262        exclude += [
263            "src/codec/*Ico*.cpp",
264            "src/codec/*Webp*.cpp",
265            "src/codec/*Png*",
266        ]
267    return native.glob(["src/codec/*.cpp"], exclude = exclude)
268
269GL_SRCS_UNIX = struct(
270    include = [
271        "src/gpu/gl/*",
272        "src/gpu/gl/builders/*",
273    ],
274    exclude = [],
275)
276PORTS_SRCS_UNIX = struct(
277    include = [
278        "src/ports/**/*.cpp",
279        "src/ports/**/*.h",
280    ],
281    exclude = [
282        "src/ports/*CG*",
283        "src/ports/*WIC*",
284        "src/ports/*android*",
285        "src/ports/*chromium*",
286        "src/ports/*mac*",
287        "src/ports/*mozalloc*",
288        "src/ports/*nacl*",
289        "src/ports/*win*",
290        "src/ports/*NDK*",
291        "src/ports/SkFontMgr_custom_directory_factory.cpp",
292        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
293        "src/ports/SkFontMgr_custom_empty_factory.cpp",
294        "src/ports/SkFontMgr_empty_factory.cpp",
295        "src/ports/SkFontMgr_fontconfig_factory.cpp",
296        "src/ports/SkFontMgr_fuchsia.cpp",
297        "src/ports/SkImageGenerator_none.cpp",
298    ],
299)
300
301GL_SRCS_ANDROID = struct(
302    include = [
303        "src/gpu/gl/*",
304        "src/gpu/gl/builders/*",
305        "src/gpu/gl/android/*.cpp",
306    ],
307    exclude = [
308        "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
309    ],
310)
311PORTS_SRCS_ANDROID = struct(
312    include = [
313        "src/ports/**/*.cpp",
314        "src/ports/**/*.h",
315    ],
316    exclude = [
317        "src/ports/*CG*",
318        "src/ports/*FontConfig*",
319        "src/ports/*WIC*",
320        "src/ports/*chromium*",
321        "src/ports/*fontconfig*",
322        "src/ports/*mac*",
323        "src/ports/*mozalloc*",
324        "src/ports/*nacl*",
325        "src/ports/*win*",
326        "src/ports/*NDK*",  # TODO (scroggo): enable NDK decoding/encoding in Google3
327        "src/ports/SkDebug_stdio.cpp",
328        "src/ports/SkFontMgr_custom_directory_factory.cpp",
329        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
330        "src/ports/SkFontMgr_custom_empty_factory.cpp",
331        "src/ports/SkFontMgr_empty_factory.cpp",
332        "src/ports/SkFontMgr_fuchsia.cpp",
333        "src/ports/SkImageGenerator_none.cpp",
334    ],
335)
336
337GL_SRCS_IOS = struct(
338    include = [
339        "src/gpu/gl/*",
340        "src/gpu/gl/builders/*",
341        "src/gpu/gl/iOS/GrGLMakeNativeInterface_iOS.cpp",
342    ],
343    exclude = [
344        "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
345    ],
346)
347PORTS_SRCS_IOS = struct(
348    include = [
349        "src/ports/**/*.cpp",
350        "src/ports/**/*.h",
351        "src/utils/mac/*.cpp",
352    ],
353    exclude = [
354        "src/ports/*FontConfig*",
355        "src/ports/*FreeType*",
356        "src/ports/*WIC*",
357        "src/ports/*android*",
358        "src/ports/*chromium*",
359        "src/ports/*fontconfig*",
360        "src/ports/*mozalloc*",
361        "src/ports/*nacl*",
362        "src/ports/*win*",
363        "src/ports/*NDK*",
364        "src/ports/SkFontMgr_custom.cpp",
365        "src/ports/SkFontMgr_custom_directory.cpp",
366        "src/ports/SkFontMgr_custom_embedded.cpp",
367        "src/ports/SkFontMgr_custom_empty.cpp",
368        "src/ports/SkFontMgr_custom_directory_factory.cpp",
369        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
370        "src/ports/SkFontMgr_custom_empty_factory.cpp",
371        "src/ports/SkFontMgr_empty_factory.cpp",
372        "src/ports/SkFontMgr_fuchsia.cpp",
373        "src/ports/SkImageGenerator_none.cpp",
374    ],
375)
376
377GL_SRCS_WASM = struct(
378    include = [
379        "src/gpu/gl/*",
380        "src/gpu/gl/builders/*",
381        "src/gpu/gl/egl/GrGLMakeEGLInterface.cpp",
382        "src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp",
383    ],
384    exclude = [
385        "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
386    ],
387)
388PORTS_SRCS_WASM = struct(
389    include = [
390        "src/ports/**/*.cpp",
391        "src/ports/**/*.h",
392    ],
393    exclude = [
394        # commented lines below left in because they indicate specifically what is
395        # included here and not in other PORTS_SRCS lists.
396        "src/ports/*FontConfig*",
397        #"src/ports/*FreeType*",
398        "src/ports/*WIC*",
399        "src/ports/*CG*",
400        "src/ports/*android*",
401        "src/ports/*chromium*",
402        "src/ports/*fontconfig*",
403        "src/ports/*mac*",
404        "src/ports/*mozalloc*",
405        "src/ports/*nacl*",
406        "src/ports/*win*",
407        "src/ports/*NDK*",
408        #"src/ports/SkDebug_stdio.cpp",
409        #"src/ports/SkFontMgr_custom.cpp",
410        "src/ports/SkFontMgr_custom_directory.cpp",
411        "src/ports/SkFontMgr_custom_directory_factory.cpp",
412        "src/ports/SkFontMgr_custom_embedded.cpp",
413        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
414        "src/ports/SkFontMgr_custom_empty.cpp",
415        "src/ports/SkFontMgr_custom_empty_factory.cpp",
416        # "src/ports/SkFontMgr_empty_factory.cpp",
417        "src/ports/SkFontMgr_fontconfig_factory.cpp",
418        "src/ports/SkFontMgr_fuchsia.cpp",
419        "src/ports/SkImageGenerator_none.cpp",
420    ],
421)
422
423GL_SRCS_FUCHSIA = struct(
424    include = [
425        "src/gpu/vk/*",
426    ],
427    exclude = [],
428)
429PORTS_SRCS_FUCHSIA = struct(
430    include = [
431        "src/ports/**/*.cpp",
432        "src/ports/**/*.h",
433    ],
434    exclude = [
435        "src/ports/*FontConfig*",
436        #"src/ports/*FreeType*",
437        "src/ports/*WIC*",
438        "src/ports/*CG*",
439        "src/ports/*android*",
440        "src/ports/*chromium*",
441        "src/ports/*fontconfig*",
442        "src/ports/*mac*",
443        "src/ports/*mozalloc*",
444        "src/ports/*nacl*",
445        "src/ports/*win*",
446        "src/ports/*NDK*",
447        #"src/ports/SkDebug_stdio.cpp",
448        #"src/ports/SkFontMgr_custom.cpp",
449        "src/ports/SkFontMgr_custom_directory.cpp",
450        "src/ports/SkFontMgr_custom_directory_factory.cpp",
451        "src/ports/SkFontMgr_custom_embedded.cpp",
452        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
453        "src/ports/SkFontMgr_custom_empty.cpp",
454        "src/ports/SkFontMgr_custom_empty_factory.cpp",
455        #"src/ports/SkFontMgr_empty_factory.cpp",
456        "src/ports/SkFontMgr_fontconfig_factory.cpp",
457        #"src/ports/SkFontMgr_fuchsia.cpp",
458        "src/ports/SkImageGenerator_none.cpp",
459    ],
460)
461
462GL_SRCS_MACOS = struct(
463    include = [
464        "src/gpu/gl/*",
465        "src/gpu/gl/builders/*",
466        "src/gpu/gl/mac/GrGLMakeNativeInterface_mac.cpp",
467    ],
468    exclude = [
469        "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
470    ],
471)
472PORTS_SRCS_MACOS = PORTS_SRCS_IOS
473
474def base_srcs():
475    return skia_glob(BASE_SRCS_ALL)
476
477def ports_srcs(os_conditions):
478    return skia_select(
479        os_conditions,
480        [
481            skia_glob(PORTS_SRCS_UNIX),
482            skia_glob(PORTS_SRCS_ANDROID),
483            skia_glob(PORTS_SRCS_IOS),
484            skia_glob(PORTS_SRCS_WASM),
485            skia_glob(PORTS_SRCS_FUCHSIA),
486            skia_glob(PORTS_SRCS_MACOS),
487        ],
488    )
489
490def gl_srcs(os_conditions):
491    return skia_select(
492        os_conditions,
493        [
494            skia_glob(GL_SRCS_UNIX),
495            skia_glob(GL_SRCS_ANDROID),
496            skia_glob(GL_SRCS_IOS),
497            skia_glob(GL_SRCS_WASM),
498            skia_glob(GL_SRCS_FUCHSIA),
499            skia_glob(GL_SRCS_MACOS),
500        ],
501    )
502
503def skia_srcs(os_conditions):
504    return base_srcs() + ports_srcs(os_conditions) + gl_srcs(os_conditions)
505
506def metal_objc_srcs():
507    return native.glob(
508        [
509            "include/**/*.h",
510            "src/**/*.h",
511            "src/gpu/mtl/**/*.mm",
512            "third_party/**/*.h",
513        ],
514    ) + [
515        "src/image/SkSurface_GpuMtl.mm",
516    ]
517
518################################################################################
519## INCLUDES
520################################################################################
521
522# Includes needed by Skia implementation.  Not public includes.
523INCLUDES = [
524    ".",
525    "include/android",
526    "include/c",
527    "include/codec",
528    "include/config",
529    "include/core",
530    "include/docs",
531    "include/effects",
532    "include/encode",
533    "include/gpu",
534    "include/pathops",
535    "include/ports",
536    "include/private",
537    "include/third_party/skcms",
538    "include/utils",
539    "include/utils/mac",
540    "src/codec",
541    "src/core",
542    "src/gpu",
543    "src/image",
544    "src/images",
545    "src/lazy",
546    "src/opts",
547    "src/pdf",
548    "src/ports",
549    "src/sfnt",
550    "src/shaders",
551    "src/shaders/gradients",
552    "src/sksl",
553    "src/utils",
554    "third_party/gif",
555]
556
557################################################################################
558## DM_SRCS
559################################################################################
560
561DM_SRCS_ALL = struct(
562    include = [
563        "dm/*.cpp",
564        "dm/*.h",
565        "experimental/pipe/*.cpp",
566        "experimental/pipe/*.h",
567        "gm/*.cpp",
568        "gm/*.h",
569        "gm/verifiers/*.cpp",
570        "gm/verifiers/*.h",
571        # TODO(fmalita): SVG sources should not be included here
572        "modules/svg/include/*.h",
573        "modules/svg/src/*.cpp",
574        "src/utils/SkMultiPictureDocument.cpp",
575        "src/xml/*.cpp",
576        "tests/*.cpp",
577        "tests/*.h",
578        "tools/AutoreleasePool.h",
579        "tools/BinaryAsset.h",
580        "tools/CrashHandler.cpp",
581        "tools/CrashHandler.h",
582        "tools/DDLPromiseImageHelper.cpp",
583        "tools/DDLPromiseImageHelper.h",
584        "tools/DDLTileHelper.cpp",
585        "tools/DDLTileHelper.h",
586        "tools/HashAndEncode.cpp",
587        "tools/HashAndEncode.h",
588        "tools/ProcStats.cpp",
589        "tools/ProcStats.h",
590        "tools/Registry.h",
591        "tools/ResourceFactory.h",
592        "tools/Resources.cpp",
593        "tools/Resources.h",
594        "tools/RuntimeBlendUtils.cpp",
595        "tools/RuntimeBlendUtils.h",
596        "tools/SkMetaData.cpp",
597        "tools/SkMetaData.h",
598        "tools/SkSharingProc.cpp",
599        "tools/ToolUtils.cpp",
600        "tools/ToolUtils.h",
601        "tools/UrlDataManager.cpp",
602        "tools/UrlDataManager.h",
603        "tools/debugger/*.cpp",
604        "tools/debugger/*.h",
605        "tools/flags/*.cpp",
606        "tools/flags/*.h",
607        "tools/fonts/RandomScalerContext.cpp",
608        "tools/fonts/RandomScalerContext.h",
609        "tools/fonts/TestFontMgr.cpp",
610        "tools/fonts/TestFontMgr.h",
611        "tools/fonts/TestSVGTypeface.cpp",
612        "tools/fonts/TestSVGTypeface.h",
613        "tools/fonts/TestTypeface.cpp",
614        "tools/fonts/TestTypeface.h",
615        "tools/fonts/ToolUtilsFont.cpp",
616        "tools/fonts/test_font_index.inc",
617        "tools/fonts/test_font_monospace.inc",
618        "tools/fonts/test_font_sans_serif.inc",
619        "tools/fonts/test_font_serif.inc",
620        "tools/gpu/**/*.cpp",
621        "tools/gpu/**/*.h",
622        "tools/ios_utils.h",
623        "tools/random_parse_path.cpp",
624        "tools/random_parse_path.h",
625        "tools/timer/*.cpp",
626        "tools/timer/*.h",
627        "tools/trace/*.cpp",
628        "tools/trace/*.h",
629    ],
630    exclude = [
631        "gm/cgms.cpp",
632        "gm/fiddle.cpp",
633        "gm/video_decoder.cpp",
634        "tests/FontMgrAndroidParserTest.cpp",  # Android-only.
635        "tests/FontMgrFontConfigTest.cpp",  # FontConfig-only.
636        "tests/TypefaceMacTest.cpp",  # CoreText-only.
637        "tests/SkParagraphTest.cpp",  # Skipping tests for now.
638        "tests/skia_test.cpp",  # Old main.
639        "tools/gpu/d3d/*",
640        "tools/gpu/dawn/*",
641        "tools/gpu/gl/angle/*",
642        "tools/gpu/gl/egl/*",
643        "tools/gpu/gl/glx/*",
644        "tools/gpu/gl/iOS/*",
645        "tools/gpu/gl/mac/*",
646        "tools/gpu/gl/win/*",
647        "tools/timer/SysTimer_mach.cpp",
648        "tools/timer/SysTimer_windows.cpp",
649    ],
650)
651
652################################################################################
653## dm_srcs()
654################################################################################
655
656def dm_srcs(os_conditions):
657    """Sources for the dm binary for the specified os."""
658    return skia_glob(DM_SRCS_ALL) + skia_select(
659        os_conditions,
660        [
661            ["tests/FontMgrFontConfigTest.cpp"],  # Unix
662            ["tests/FontMgrAndroidParserTest.cpp"],  # Android
663            ["tests/TypefaceMacTest.cpp"],  # iOS
664            [],  # WASM
665            [],  # Fuchsia
666            ["tests/TypefaceMacTest.cpp"],  # macOS
667        ],
668    )
669
670################################################################################
671## DM_ARGS
672################################################################################
673
674def DM_ARGS(asan):
675    source = ["gm", "image", "lottie"]
676
677    # TODO(benjaminwagner): f16, pic-8888, serialize-8888, and tiles_rt-8888 fail.
678    config = ["565", "8888", "pdf"]
679    match = ["~Codec_78329453"]
680    return (["--src"] + source + ["--config"] + config + ["--nonativeFonts"] +
681            ["--match"] + match)
682
683################################################################################
684## COPTS
685################################################################################
686
687def base_copts(os_conditions):
688    return ["-Wno-implicit-fallthrough"] + skia_select(
689        os_conditions,
690        [
691            # UNIX
692            [
693                # Internal use of deprecated methods. :(
694                "-Wno-deprecated-declarations",
695                # TODO(kjlubick)
696                "-Wno-self-assign",  # Spurious warning in tests/PathOpsDVectorTest.cpp?
697            ],
698            # ANDROID
699            [
700                # 'GrResourceCache' declared with greater visibility than the
701                # type of its field 'GrResourceCache::fPurgeableQueue'... bogus.
702                "-Wno-error=attributes",
703            ],
704            [],  # iOS
705            [],  # wasm
706            [],  # Fuchsia
707            [],  # macOS
708        ],
709    )
710
711################################################################################
712## DEFINES
713################################################################################
714
715def base_defines(os_conditions):
716    return [
717        # Chrome DEFINES.
718        "SK_USE_FREETYPE_EMBOLDEN",
719        # Turn on a few Google3-specific build fixes.
720        "SK_BUILD_FOR_GOOGLE3",
721        # Required for building dm.
722        "GR_TEST_UTILS",
723        # Staging flags for API changes
724        "SK_PARAGRAPH_GRAPHEME_EDGES",
725        # Should remove after we update golden images
726        "SK_WEBP_ENCODER_USE_DEFAULT_METHOD",
727        # Experiment to diagnose image diffs in Google3
728        "SK_DISABLE_LOWP_RASTER_PIPELINE",
729        # JPEG is in codec_limited
730        "SK_CODEC_DECODES_JPEG",
731        "SK_ENCODE_JPEG",
732        "SK_HAS_ANDROID_CODEC",
733    ] + skia_select(
734        os_conditions,
735        [
736            # UNIX
737            [
738                "PNG_SKIP_SETJMP_CHECK",
739                "SK_BUILD_FOR_UNIX",
740                "SK_CODEC_DECODES_PNG",
741                "SK_CODEC_DECODES_WEBP",
742                "SK_ENCODE_PNG",
743                "SK_ENCODE_WEBP",
744                "SK_R32_SHIFT=16",
745                "SK_GL",
746            ],
747            # ANDROID
748            [
749                "SK_BUILD_FOR_ANDROID",
750                "SK_CODEC_DECODES_PNG",
751                "SK_CODEC_DECODES_WEBP",
752                "SK_ENCODE_PNG",
753                "SK_ENCODE_WEBP",
754                "SK_GL",
755            ],
756            # IOS
757            [
758                "SK_BUILD_FOR_IOS",
759                "SKNX_NO_SIMD",
760                "SK_NO_COMMAND_BUFFER",  # Test tools that use thread_local.
761                "SK_GL",
762            ],
763            # WASM
764            [
765                "SK_DISABLE_LEGACY_SHADERCONTEXT",
766                "SK_DISABLE_TRACING",
767                "SK_GL",
768                "SK_SUPPORT_GPU=1",
769                "SK_DISABLE_AAA",
770                "SK_DISABLE_EFFECT_DESERIALIZATION",
771                "SK_FORCE_8_BYTE_ALIGNMENT",
772                "SKNX_NO_SIMD",
773            ],
774            # FUCHSIA
775            [
776                "SK_BUILD_FOR_UNIX",
777                "SK_CODEC_DECODES_PNG",
778                "SK_CODEC_DECODES_WEBP",
779                "SK_ENCODE_PNG",
780                "SK_ENCODE_WEBP",
781                "SK_R32_SHIFT=16",
782                "SK_VULKAN",
783            ],
784            # MACOS
785            [
786                "SK_BUILD_FOR_MAC",
787                "SK_GL",
788            ],
789        ],
790    )
791
792################################################################################
793## LINKOPTS
794################################################################################
795
796def base_linkopts(os_conditions):
797    return [
798        "-ldl",
799    ] + skia_select(
800        os_conditions,
801        [
802            [],  # Unix
803            # ANDROID
804            [
805                "-lEGL",
806                "-lGLESv2",
807            ],
808            # IOS
809            [
810                "-framework CoreFoundation",
811                "-framework CoreGraphics",
812                "-framework CoreText",
813                "-framework ImageIO",
814                "-framework MobileCoreServices",
815            ],
816            [],  # wasm
817            [],  # Fuchsia
818            # MACOS
819            [
820                "-framework CoreFoundation",
821                "-framework CoreGraphics",
822                "-framework CoreText",
823                "-framework ImageIO",
824                "-framework ApplicationServices",
825            ],
826        ],
827    )
828
829################################################################################
830## sksg_lib
831################################################################################
832
833def sksg_lib_hdrs():
834    return native.glob(["modules/sksg/include/*.h"])
835
836def sksg_lib_srcs():
837    return native.glob([
838        "modules/sksg/src/*.cpp",
839        "modules/sksg/src/*.h",
840    ])
841
842################################################################################
843## skparagraph_lib
844################################################################################
845
846def skparagraph_lib_hdrs():
847    return native.glob(["modules/skparagraph/include/*.h"])
848
849def skparagraph_lib_srcs():
850    return native.glob(["modules/skparagraph/src/*.cpp"])
851
852################################################################################
853## experimental xform
854################################################################################
855
856def exp_xform_lib_hdrs():
857    return native.glob(["experimental/xform/*.h"])
858
859def exp_xform_lib_srcs():
860    return native.glob(["experimental/xform/*.cpp"])
861
862################################################################################
863## skresources_lib
864################################################################################
865
866def skresources_lib_hdrs():
867    return ["modules/skresources/include/SkResources.h"]
868
869def skresources_lib_srcs():
870    return ["modules/skresources/src/SkResources.cpp"]
871
872################################################################################
873## skottie_lib
874################################################################################
875
876def skottie_lib_hdrs():
877    return native.glob(["modules/skottie/include/*.h"])
878
879def skottie_lib_srcs():
880    return native.glob(
881        [
882            "modules/skottie/src/*.cpp",
883            "modules/skottie/src/*.h",
884            "modules/skottie/src/animator/*.cpp",
885            "modules/skottie/src/animator/*.h",
886            "modules/skottie/src/effects/*.cpp",
887            "modules/skottie/src/effects/*.h",
888            "modules/skottie/src/layers/*.cpp",
889            "modules/skottie/src/layers/*.h",
890            "modules/skottie/src/layers/shapelayer/*.cpp",
891            "modules/skottie/src/layers/shapelayer/*.h",
892            "modules/skottie/src/text/*.cpp",
893            "modules/skottie/src/text/*.h",
894        ],
895        exclude = [
896            "modules/skottie/src/SkottieTest.cpp",
897            "modules/skottie/src/SkottieTool.cpp",
898        ],
899    )
900
901################################################################################
902## skottie_utils
903################################################################################
904
905SKOTTIE_UTILS_HDRS = [
906    "modules/skottie/utils/SkottieUtils.h",
907]
908
909SKOTTIE_UTILS_SRCS = [
910    "modules/skottie/utils/SkottieUtils.cpp",
911]
912
913################################################################################
914## skottie_shaper
915################################################################################
916
917SKOTTIE_SHAPER_HDRS = [
918    "modules/skottie/src/text/SkottieShaper.h",
919]
920
921SKOTTIE_SHAPER_SRCS = [
922    "modules/skottie/src/text/SkottieShaper.cpp",
923]
924
925################################################################################
926## skottie_tool
927################################################################################
928
929SKOTTIE_TOOL_SRCS = [
930    "modules/skottie/src/SkottieTool.cpp",
931    "modules/skresources/src/SkResources.cpp",
932    "modules/skresources/include/SkResources.h",
933    # TODO(benjaminwagner): Add "flags" target.
934    "tools/flags/CommandLineFlags.cpp",
935    "tools/flags/CommandLineFlags.h",
936]
937
938################################################################################
939## SkShaper
940################################################################################
941
942# Stubs, pending SkUnicode fission
943SKUNICODE_ICU_BUILTIN_SRCS = [
944    "modules/skunicode/include/SkUnicode.h",
945    "modules/skunicode/src/SkUnicode_icu.cpp",
946    "modules/skunicode/src/SkUnicode_icu.h",
947    "modules/skunicode/src/SkUnicode_icu_builtin.cpp",
948]
949
950SKUNICODE_ICU_RUNTIME_SRCS = [
951    "modules/skunicode/include/SkUnicode.h",
952    "modules/skunicode/src/SkUnicode_icu.cpp",
953    "modules/skunicode/src/SkUnicode_icu.h",
954    "modules/skunicode/src/SkUnicode_icu_runtime.cpp",
955]
956
957SKSHAPER_HARFBUZZ_SRCS = [
958    "modules/skshaper/include/SkShaper.h",
959    "modules/skshaper/src/SkShaper.cpp",
960    "modules/skshaper/src/SkShaper_harfbuzz.cpp",
961    "modules/skshaper/src/SkShaper_primitive.cpp",
962]
963
964SKSHAPER_PRIMITIVE_SRCS = [
965    "modules/skshaper/include/SkShaper.h",
966    "modules/skshaper/src/SkShaper.cpp",
967    "modules/skshaper/src/SkShaper_primitive.cpp",
968]
969
970################################################################################
971## skottie_ios_lib
972################################################################################
973
974SKOTTIE_IOS_LIB_SRCS = [
975    "tools/skottie_ios_app/SkiaContext.mm",
976    "tools/skottie_ios_app/SkiaUIContext.mm",
977    "tools/skottie_ios_app/SkiaViewController.mm",
978    "tools/skottie_ios_app/SkottieViewController.mm",
979]
980
981SKOTTIE_IOS_LIB_HDRS = [
982    "tools/skottie_ios_app/SkiaContext.h",
983    "tools/skottie_ios_app/SkiaViewController.h",
984    "tools/skottie_ios_app/SkottieViewController.h",
985]
986
987SKOTTIE_IOS_LIB_SDK_FRAMEWORKS = [
988    "Foundation",
989    "UIKit",
990]
991
992################################################################################
993## svg_lib
994################################################################################
995
996def svg_lib_hdrs():
997    return native.glob(["modules/svg/include/*.h"])
998
999def svg_lib_srcs():
1000    return native.glob(["modules/svg/src/*.cpp"])
1001
1002################################################################################
1003## svg_tool
1004################################################################################
1005
1006SVG_TOOL_SRCS = [
1007    "modules/svg/utils/SvgTool.cpp",
1008    # TODO(benjaminwagner): Add "flags" target.
1009    "tools/flags/CommandLineFlags.cpp",
1010    "tools/flags/CommandLineFlags.h",
1011]
1012