| ################################################################################ | 
 | # Skylark macros | 
 | ################################################################################ | 
 |  | 
 | def skia_select(conditions, results): | 
 |     """select() for conditions provided externally. | 
 |  | 
 |     Instead of {"conditionA": resultA, "conditionB": resultB}, | 
 |     this takes two arrays, ["conditionA", "conditionB"] and [resultA, resultB]. | 
 |  | 
 |     This allows the exact targets of the conditions to be provided externally while | 
 |     the results can live here, hiding the structure of those conditions in Google3. | 
 |  | 
 |     Maybe this is too much paranoia? | 
 |  | 
 |     Args: | 
 |       conditions: [CONDITION_UNIX, CONDITION_ANDROID, CONDITION_IOS, CONDITION_WASM, ...] | 
 |       results: [RESULT_UNIX, RESULT_ANDROID, RESULT_IOS, RESULT_WASM, ....] | 
 |     Returns: | 
 |       The result matching the active condition. | 
 |     """ | 
 |     selector = {} | 
 |     for i in range(len(conditions)): | 
 |         selector[conditions[i]] = results[i] | 
 |     return select(selector) | 
 |  | 
 | def skia_glob(srcs): | 
 |     """Replaces glob() with a version that accepts a struct. | 
 |  | 
 |     Args: | 
 |       srcs: struct(include=[], exclude=[]) | 
 |     Returns: | 
 |       Equivalent of glob(srcs.include, exclude=srcs.exclude) | 
 |     """ | 
 |     if hasattr(srcs, "include"): | 
 |         if hasattr(srcs, "exclude"): | 
 |             return native.glob(srcs.include, exclude = srcs.exclude) | 
 |         else: | 
 |             return native.glob(srcs.include) | 
 |     return [] | 
 |  | 
 | ################################################################################ | 
 | ## skia_{all,public}_hdrs() | 
 | ################################################################################ | 
 | def skia_all_hdrs(): | 
 |     return native.glob([ | 
 |         "src/**/*.h", | 
 |         "include/**/*.h", | 
 |         "third_party/**/*.h", | 
 |     ]) | 
 |  | 
 | def skia_public_hdrs(): | 
 |     return native.glob( | 
 |         ["include/**/*.h"], | 
 |         exclude = [ | 
 |             "include/private/**/*", | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## skia_opts_srcs() | 
 | ################################################################################ | 
 | # Intel | 
 | SKIA_OPTS_SSE2 = "SSE2" | 
 |  | 
 | SKIA_OPTS_SSSE3 = "SSSE3" | 
 |  | 
 | SKIA_OPTS_SSE41 = "SSE41" | 
 |  | 
 | SKIA_OPTS_SSE42 = "SSE42" | 
 |  | 
 | SKIA_OPTS_AVX = "AVX" | 
 |  | 
 | SKIA_OPTS_HSW = "HSW" | 
 |  | 
 | # Arm | 
 | SKIA_OPTS_NEON = "NEON" | 
 |  | 
 | SKIA_OPTS_CRC32 = "CRC32"  # arm64 | 
 |  | 
 | def opts_srcs(opts): | 
 |     if opts == SKIA_OPTS_SSE2: | 
 |         return native.glob([ | 
 |             "src/opts/*_SSE2.cpp", | 
 |             "src/opts/*_sse2.cpp",  # No matches currently. | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_SSSE3: | 
 |         return native.glob([ | 
 |             "src/opts/*_SSSE3.cpp", | 
 |             "src/opts/*_ssse3.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_SSE41: | 
 |         return native.glob([ | 
 |             "src/opts/*_sse41.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_SSE42: | 
 |         return native.glob([ | 
 |             "src/opts/*_sse42.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_AVX: | 
 |         return native.glob([ | 
 |             "src/opts/*_avx.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_HSW: | 
 |         return native.glob([ | 
 |             "src/opts/*_hsw.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_NEON: | 
 |         return native.glob([ | 
 |             "src/opts/*_neon.cpp", | 
 |         ]) | 
 |     elif opts == SKIA_OPTS_CRC32: | 
 |         return native.glob([ | 
 |             "src/opts/*_crc32.cpp", | 
 |         ]) | 
 |     else: | 
 |         fail("skia_opts_srcs parameter 'opts' must be one of SKIA_OPTS_*.") | 
 |  | 
 | def opts_cflags(opts): | 
 |     if opts == SKIA_OPTS_SSE2: | 
 |         return ["-msse2"] | 
 |     elif opts == SKIA_OPTS_SSSE3: | 
 |         return ["-mssse3"] | 
 |     elif opts == SKIA_OPTS_SSE41: | 
 |         return ["-msse4.1"] | 
 |     elif opts == SKIA_OPTS_SSE42: | 
 |         return ["-msse4.2"] | 
 |     elif opts == SKIA_OPTS_AVX: | 
 |         return ["-mavx"] | 
 |     elif opts == SKIA_OPTS_HSW: | 
 |         return ["-mavx2", "-mf16c", "-mfma"] | 
 |     elif opts == SKIA_OPTS_NEON: | 
 |         return ["-mfpu=neon"] | 
 |     elif opts == SKIA_OPTS_CRC32: | 
 |         # NDK r11's Clang (3.8) doesn't pass along this -march setting correctly to an external | 
 |         # assembler, so we do it manually with -Wa.  This is just a bug, fixed in later Clangs. | 
 |         return ["-march=armv8-a+crc", "-Wa,-march=armv8-a+crc"] | 
 |     else: | 
 |         return [] | 
 |  | 
 | SKIA_CPU_ARM = "ARM" | 
 |  | 
 | SKIA_CPU_ARM64 = "ARM64" | 
 |  | 
 | SKIA_CPU_X86 = "X86" | 
 |  | 
 | SKIA_CPU_OTHER = "OTHER" | 
 |  | 
 | def opts_rest_srcs(cpu): | 
 |     srcs = [] | 
 |     if cpu == SKIA_CPU_ARM or cpu == SKIA_CPU_ARM64: | 
 |         srcs += native.glob([ | 
 |             "src/opts/*_arm.cpp", | 
 |             "src/opts/SkBitmapProcState_opts_none.cpp", | 
 |         ]) | 
 |         if cpu == SKIA_CPU_ARM64: | 
 |             # NEON doesn't need special flags to compile on ARM64. | 
 |             srcs += native.glob([ | 
 |                 "src/opts/*_neon.cpp", | 
 |             ]) | 
 |     elif cpu == SKIA_CPU_X86: | 
 |         srcs += native.glob([ | 
 |             "src/opts/*_x86.cpp", | 
 |         ]) | 
 |     elif cpu == SKIA_CPU_OTHER: | 
 |         srcs += native.glob([ | 
 |             "src/opts/*_none.cpp", | 
 |         ]) | 
 |     else: | 
 |         fail("opts_rest_srcs parameter 'cpu' must be one of " + | 
 |              "SKIA_CPU_{ARM,ARM64,X86,OTHER}.") | 
 |     return srcs | 
 |  | 
 | def skia_opts_deps(cpu): | 
 |     res = [":opts_rest"] | 
 |  | 
 |     if cpu == SKIA_CPU_ARM: | 
 |         res += [":opts_neon"] | 
 |  | 
 |     if cpu == SKIA_CPU_ARM64: | 
 |         res += [":opts_crc32"] | 
 |  | 
 |     if cpu == SKIA_CPU_X86: | 
 |         res += [ | 
 |             ":opts_sse2", | 
 |             ":opts_ssse3", | 
 |             ":opts_sse41", | 
 |             ":opts_sse42", | 
 |             ":opts_avx", | 
 |             ":opts_hsw", | 
 |         ] | 
 |  | 
 |     return res | 
 |  | 
 | ################################################################################ | 
 | ## BASE_SRCS | 
 | ################################################################################ | 
 |  | 
 | # All platform-independent SRCS. | 
 | BASE_SRCS_ALL = struct( | 
 |     include = [ | 
 |         "include/private/**/*.h", | 
 |         "src/**/*.h", | 
 |         "src/**/*.cpp", | 
 |         "src/**/*.inc", | 
 |     ], | 
 |     exclude = [ | 
 |         # Exclude platform-dependent files. | 
 |         "src/codec/*", | 
 |         "src/device/xps/*",  # Windows-only. Move to ports? | 
 |         "src/doc/*_XPS.cpp",  # Windows-only. Move to ports? | 
 |         "src/gpu/gl/android/*", | 
 |         "src/gpu/gl/egl/*", | 
 |         "src/gpu/gl/glfw/*", | 
 |         "src/gpu/gl/glx/*", | 
 |         "src/gpu/gl/iOS/*", | 
 |         "src/gpu/gl/mac/*", | 
 |         "src/gpu/gl/win/*", | 
 |         "src/opts/**/*", | 
 |         "src/ports/**/*", | 
 |         "src/utils/android/**/*", | 
 |         "src/utils/mac/**/*", | 
 |         "src/utils/win/**/*", | 
 |  | 
 |         # Exclude multiple definitions. | 
 |         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp", | 
 |         "src/pdf/SkDocument_PDF_None.cpp",  # We use src/pdf/SkPDFDocument.cpp. | 
 |  | 
 |         # Exclude files that don't compile everywhere. | 
 |         "src/svg/**/*",  # Depends on xml, SkJpegCodec, and SkPngCodec. | 
 |         "src/xml/**/*",  # Avoid dragging in expat when not needed. | 
 |  | 
 |         # Exclude all GL specific files | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |  | 
 |         # Exclude all WebGL specific files | 
 |         "src/gpu/gl/webgl/*", | 
 |  | 
 |         # Currently exclude all vulkan specific files | 
 |         "src/gpu/vk/*", | 
 |  | 
 |         # Currently exclude all Direct3D specific files | 
 |         "src/gpu/d3d/*", | 
 |  | 
 |         # Currently exclude all Dawn-specific files | 
 |         "src/gpu/dawn/*", | 
 |  | 
 |         # Defines main. | 
 |         "src/sksl/SkSLMain.cpp", | 
 |  | 
 |         # Only used to regenerate the lexer | 
 |         "src/sksl/lex/*", | 
 |     ], | 
 | ) | 
 |  | 
 | def codec_srcs(limited): | 
 |     """Sources for the codecs. Excludes Raw, and Ico, Webp, and Png if limited.""" | 
 |  | 
 |     exclude = ["src/codec/*Raw*.cpp"] | 
 |     if limited: | 
 |         exclude += [ | 
 |             "src/codec/*Ico*.cpp", | 
 |             "src/codec/*Webp*.cpp", | 
 |             "src/codec/*Png*", | 
 |         ] | 
 |     return native.glob(["src/codec/*.cpp"], exclude = exclude) | 
 |  | 
 | GL_SRCS_UNIX = struct( | 
 |     include = [ | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |     ], | 
 |     exclude = [], | 
 | ) | 
 | PORTS_SRCS_UNIX = struct( | 
 |     include = [ | 
 |         "src/ports/**/*.cpp", | 
 |         "src/ports/**/*.h", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/ports/*CG*", | 
 |         "src/ports/*WIC*", | 
 |         "src/ports/*android*", | 
 |         "src/ports/*chromium*", | 
 |         "src/ports/*mac*", | 
 |         "src/ports/*mozalloc*", | 
 |         "src/ports/*nacl*", | 
 |         "src/ports/*win*", | 
 |         "src/ports/*NDK*", | 
 |         "src/ports/SkFontMgr_custom_directory_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_fontconfig_factory.cpp", | 
 |         "src/ports/SkFontMgr_fuchsia.cpp", | 
 |         "src/ports/SkImageGenerator_none.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | GL_SRCS_ANDROID = struct( | 
 |     include = [ | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |         "src/gpu/gl/android/*.cpp", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp", | 
 |     ], | 
 | ) | 
 | PORTS_SRCS_ANDROID = struct( | 
 |     include = [ | 
 |         "src/ports/**/*.cpp", | 
 |         "src/ports/**/*.h", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/ports/*CG*", | 
 |         "src/ports/*FontConfig*", | 
 |         "src/ports/*WIC*", | 
 |         "src/ports/*chromium*", | 
 |         "src/ports/*fontconfig*", | 
 |         "src/ports/*mac*", | 
 |         "src/ports/*mozalloc*", | 
 |         "src/ports/*nacl*", | 
 |         "src/ports/*win*", | 
 |         "src/ports/*NDK*",  # TODO (scroggo): enable NDK decoding/encoding in Google3 | 
 |         "src/ports/SkDebug_stdio.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_fuchsia.cpp", | 
 |         "src/ports/SkImageGenerator_none.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | GL_SRCS_IOS = struct( | 
 |     include = [ | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |         "src/gpu/gl/iOS/GrGLMakeNativeInterface_iOS.cpp", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp", | 
 |     ], | 
 | ) | 
 | PORTS_SRCS_IOS = struct( | 
 |     include = [ | 
 |         "src/ports/**/*.cpp", | 
 |         "src/ports/**/*.h", | 
 |         "src/utils/mac/*.cpp", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/ports/*FontConfig*", | 
 |         "src/ports/*FreeType*", | 
 |         "src/ports/*WIC*", | 
 |         "src/ports/*android*", | 
 |         "src/ports/*chromium*", | 
 |         "src/ports/*fontconfig*", | 
 |         "src/ports/*mozalloc*", | 
 |         "src/ports/*nacl*", | 
 |         "src/ports/*win*", | 
 |         "src/ports/*NDK*", | 
 |         "src/ports/SkFontMgr_custom.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_fuchsia.cpp", | 
 |         "src/ports/SkImageGenerator_none.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | GL_SRCS_WASM = struct( | 
 |     include = [ | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |         "src/gpu/gl/egl/GrGLMakeEGLInterface.cpp", | 
 |         "src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp", | 
 |     ], | 
 | ) | 
 | PORTS_SRCS_WASM = struct( | 
 |     include = [ | 
 |         "src/ports/**/*.cpp", | 
 |         "src/ports/**/*.h", | 
 |     ], | 
 |     exclude = [ | 
 |         # commented lines below left in because they indicate specifically what is | 
 |         # included here and not in other PORTS_SRCS lists. | 
 |         "src/ports/*FontConfig*", | 
 |         #"src/ports/*FreeType*", | 
 |         "src/ports/*WIC*", | 
 |         "src/ports/*CG*", | 
 |         "src/ports/*android*", | 
 |         "src/ports/*chromium*", | 
 |         "src/ports/*fontconfig*", | 
 |         "src/ports/*mac*", | 
 |         "src/ports/*mozalloc*", | 
 |         "src/ports/*nacl*", | 
 |         "src/ports/*win*", | 
 |         "src/ports/*NDK*", | 
 |         #"src/ports/SkDebug_stdio.cpp", | 
 |         #"src/ports/SkFontMgr_custom.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty_factory.cpp", | 
 |         # "src/ports/SkFontMgr_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_fontconfig_factory.cpp", | 
 |         "src/ports/SkFontMgr_fuchsia.cpp", | 
 |         "src/ports/SkImageGenerator_none.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | GL_SRCS_FUCHSIA = struct( | 
 |     include = [ | 
 |         "src/gpu/vk/*", | 
 |     ], | 
 |     exclude = [], | 
 | ) | 
 | PORTS_SRCS_FUCHSIA = struct( | 
 |     include = [ | 
 |         "src/ports/**/*.cpp", | 
 |         "src/ports/**/*.h", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/ports/*FontConfig*", | 
 |         #"src/ports/*FreeType*", | 
 |         "src/ports/*WIC*", | 
 |         "src/ports/*CG*", | 
 |         "src/ports/*android*", | 
 |         "src/ports/*chromium*", | 
 |         "src/ports/*fontconfig*", | 
 |         "src/ports/*mac*", | 
 |         "src/ports/*mozalloc*", | 
 |         "src/ports/*nacl*", | 
 |         "src/ports/*win*", | 
 |         "src/ports/*NDK*", | 
 |         #"src/ports/SkDebug_stdio.cpp", | 
 |         #"src/ports/SkFontMgr_custom.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory.cpp", | 
 |         "src/ports/SkFontMgr_custom_directory_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded.cpp", | 
 |         "src/ports/SkFontMgr_custom_embedded_factory.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty.cpp", | 
 |         "src/ports/SkFontMgr_custom_empty_factory.cpp", | 
 |         #"src/ports/SkFontMgr_empty_factory.cpp", | 
 |         "src/ports/SkFontMgr_fontconfig_factory.cpp", | 
 |         #"src/ports/SkFontMgr_fuchsia.cpp", | 
 |         "src/ports/SkImageGenerator_none.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | GL_SRCS_MACOS = struct( | 
 |     include = [ | 
 |         "src/gpu/gl/*", | 
 |         "src/gpu/gl/builders/*", | 
 |         "src/gpu/gl/mac/GrGLMakeNativeInterface_mac.cpp", | 
 |     ], | 
 |     exclude = [ | 
 |         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp", | 
 |     ], | 
 | ) | 
 | PORTS_SRCS_MACOS = PORTS_SRCS_IOS | 
 |  | 
 | def base_srcs(): | 
 |     return skia_glob(BASE_SRCS_ALL) | 
 |  | 
 | def ports_srcs(os_conditions): | 
 |     return skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             skia_glob(PORTS_SRCS_UNIX), | 
 |             skia_glob(PORTS_SRCS_ANDROID), | 
 |             skia_glob(PORTS_SRCS_IOS), | 
 |             skia_glob(PORTS_SRCS_WASM), | 
 |             skia_glob(PORTS_SRCS_FUCHSIA), | 
 |             skia_glob(PORTS_SRCS_MACOS), | 
 |         ], | 
 |     ) | 
 |  | 
 | def gl_srcs(os_conditions): | 
 |     return skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             skia_glob(GL_SRCS_UNIX), | 
 |             skia_glob(GL_SRCS_ANDROID), | 
 |             skia_glob(GL_SRCS_IOS), | 
 |             skia_glob(GL_SRCS_WASM), | 
 |             skia_glob(GL_SRCS_FUCHSIA), | 
 |             skia_glob(GL_SRCS_MACOS), | 
 |         ], | 
 |     ) | 
 |  | 
 | def skia_srcs(os_conditions): | 
 |     return base_srcs() + ports_srcs(os_conditions) + gl_srcs(os_conditions) | 
 |  | 
 | def metal_objc_srcs(): | 
 |     return native.glob( | 
 |         [ | 
 |             "include/**/*.h", | 
 |             "src/**/*.h", | 
 |             "src/gpu/mtl/**/*.mm", | 
 |             "third_party/**/*.h", | 
 |         ], | 
 |     ) + [ | 
 |         "src/image/SkSurface_GpuMtl.mm", | 
 |     ] | 
 |  | 
 | ################################################################################ | 
 | ## INCLUDES | 
 | ################################################################################ | 
 |  | 
 | # Includes needed by Skia implementation.  Not public includes. | 
 | INCLUDES = [ | 
 |     ".", | 
 |     "include/android", | 
 |     "include/c", | 
 |     "include/codec", | 
 |     "include/config", | 
 |     "include/core", | 
 |     "include/docs", | 
 |     "include/effects", | 
 |     "include/encode", | 
 |     "include/gpu", | 
 |     "include/pathops", | 
 |     "include/ports", | 
 |     "include/private", | 
 |     "include/third_party/skcms", | 
 |     "include/utils", | 
 |     "include/utils/mac", | 
 |     "src/codec", | 
 |     "src/core", | 
 |     "src/gpu", | 
 |     "src/image", | 
 |     "src/images", | 
 |     "src/lazy", | 
 |     "src/opts", | 
 |     "src/pdf", | 
 |     "src/ports", | 
 |     "src/sfnt", | 
 |     "src/shaders", | 
 |     "src/shaders/gradients", | 
 |     "src/sksl", | 
 |     "src/utils", | 
 |     "third_party/gif", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## DM_SRCS | 
 | ################################################################################ | 
 |  | 
 | DM_SRCS_ALL = struct( | 
 |     include = [ | 
 |         "dm/*.cpp", | 
 |         "dm/*.h", | 
 |         "experimental/pipe/*.cpp", | 
 |         "experimental/pipe/*.h", | 
 |         "gm/*.cpp", | 
 |         "gm/*.h", | 
 |         "gm/verifiers/*.cpp", | 
 |         "gm/verifiers/*.h", | 
 |         # TODO(fmalita): SVG sources should not be included here | 
 |         "modules/svg/include/*.h", | 
 |         "modules/svg/src/*.cpp", | 
 |         "src/utils/SkMultiPictureDocument.cpp", | 
 |         "src/xml/*.cpp", | 
 |         "tests/*.cpp", | 
 |         "tests/*.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_DoStatement.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_DoStatement.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_ForStatement.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_ForStatement.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_IfStatement.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_IfStatement.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_SwitchStatement.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_SwitchStatement.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_Swizzle.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_Swizzle.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_Ternary.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_Ternary.h", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_WhileStatement.dsl.cpp", | 
 |         "tests/sksl/dslfp/GrDSLFPTest_WhileStatement.h", | 
 |         "tools/AutoreleasePool.h", | 
 |         "tools/BigPathBench.inc", | 
 |         "tools/BinaryAsset.h", | 
 |         "tools/CrashHandler.cpp", | 
 |         "tools/CrashHandler.h", | 
 |         "tools/DDLPromiseImageHelper.cpp", | 
 |         "tools/DDLPromiseImageHelper.h", | 
 |         "tools/DDLTileHelper.cpp", | 
 |         "tools/DDLTileHelper.h", | 
 |         "tools/HashAndEncode.cpp", | 
 |         "tools/HashAndEncode.h", | 
 |         "tools/ProcStats.cpp", | 
 |         "tools/ProcStats.h", | 
 |         "tools/Registry.h", | 
 |         "tools/ResourceFactory.h", | 
 |         "tools/Resources.cpp", | 
 |         "tools/Resources.h", | 
 |         "tools/RuntimeBlendUtils.cpp", | 
 |         "tools/RuntimeBlendUtils.h", | 
 |         "tools/SkMetaData.cpp", | 
 |         "tools/SkMetaData.h", | 
 |         "tools/SkSharingProc.cpp", | 
 |         "tools/ToolUtils.cpp", | 
 |         "tools/ToolUtils.h", | 
 |         "tools/UrlDataManager.cpp", | 
 |         "tools/UrlDataManager.h", | 
 |         "tools/debugger/*.cpp", | 
 |         "tools/debugger/*.h", | 
 |         "tools/flags/*.cpp", | 
 |         "tools/flags/*.h", | 
 |         "tools/fonts/RandomScalerContext.cpp", | 
 |         "tools/fonts/RandomScalerContext.h", | 
 |         "tools/fonts/TestFontMgr.cpp", | 
 |         "tools/fonts/TestFontMgr.h", | 
 |         "tools/fonts/TestSVGTypeface.cpp", | 
 |         "tools/fonts/TestSVGTypeface.h", | 
 |         "tools/fonts/TestTypeface.cpp", | 
 |         "tools/fonts/TestTypeface.h", | 
 |         "tools/fonts/ToolUtilsFont.cpp", | 
 |         "tools/fonts/test_font_index.inc", | 
 |         "tools/fonts/test_font_monospace.inc", | 
 |         "tools/fonts/test_font_sans_serif.inc", | 
 |         "tools/fonts/test_font_serif.inc", | 
 |         "tools/gpu/**/*.cpp", | 
 |         "tools/gpu/**/*.h", | 
 |         "tools/ios_utils.h", | 
 |         "tools/random_parse_path.cpp", | 
 |         "tools/random_parse_path.h", | 
 |         "tools/timer/*.cpp", | 
 |         "tools/timer/*.h", | 
 |         "tools/trace/*.cpp", | 
 |         "tools/trace/*.h", | 
 |     ], | 
 |     exclude = [ | 
 |         "gm/cgms.cpp", | 
 |         "gm/fiddle.cpp", | 
 |         "gm/video_decoder.cpp", | 
 |         "tests/FontMgrAndroidParserTest.cpp",  # Android-only. | 
 |         "tests/FontMgrFontConfigTest.cpp",  # FontConfig-only. | 
 |         "tests/TypefaceMacTest.cpp",  # CoreText-only. | 
 |         "tests/SkParagraphTest.cpp",  # Skipping tests for now. | 
 |         "tests/skia_test.cpp",  # Old main. | 
 |         "tools/gpu/d3d/*", | 
 |         "tools/gpu/dawn/*", | 
 |         "tools/gpu/gl/angle/*", | 
 |         "tools/gpu/gl/egl/*", | 
 |         "tools/gpu/gl/glx/*", | 
 |         "tools/gpu/gl/iOS/*", | 
 |         "tools/gpu/gl/mac/*", | 
 |         "tools/gpu/gl/win/*", | 
 |         "tools/timer/SysTimer_mach.cpp", | 
 |         "tools/timer/SysTimer_windows.cpp", | 
 |     ], | 
 | ) | 
 |  | 
 | ################################################################################ | 
 | ## dm_srcs() | 
 | ################################################################################ | 
 |  | 
 | def dm_srcs(os_conditions): | 
 |     """Sources for the dm binary for the specified os.""" | 
 |     return skia_glob(DM_SRCS_ALL) + skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             ["tests/FontMgrFontConfigTest.cpp"],  # Unix | 
 |             ["tests/FontMgrAndroidParserTest.cpp"],  # Android | 
 |             ["tests/TypefaceMacTest.cpp"],  # iOS | 
 |             [],  # WASM | 
 |             [],  # Fuchsia | 
 |             ["tests/TypefaceMacTest.cpp"],  # macOS | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## DM_ARGS | 
 | ################################################################################ | 
 |  | 
 | def DM_ARGS(asan): | 
 |     source = ["gm", "image", "lottie"] | 
 |  | 
 |     # TODO(benjaminwagner): f16, pic-8888, serialize-8888, and tiles_rt-8888 fail. | 
 |     config = ["565", "8888", "pdf"] | 
 |     match = ["~Codec_78329453"] | 
 |     return (["--src"] + source + ["--config"] + config + ["--nonativeFonts"] + | 
 |             ["--match"] + match) | 
 |  | 
 | ################################################################################ | 
 | ## COPTS | 
 | ################################################################################ | 
 |  | 
 | def base_copts(os_conditions): | 
 |     return ["-Wno-implicit-fallthrough"] + skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             # UNIX | 
 |             [ | 
 |                 # Internal use of deprecated methods. :( | 
 |                 "-Wno-deprecated-declarations", | 
 |                 # TODO(kjlubick) | 
 |                 "-Wno-self-assign",  # Spurious warning in tests/PathOpsDVectorTest.cpp? | 
 |             ], | 
 |             # ANDROID | 
 |             [ | 
 |                 # 'GrResourceCache' declared with greater visibility than the | 
 |                 # type of its field 'GrResourceCache::fPurgeableQueue'... bogus. | 
 |                 "-Wno-error=attributes", | 
 |             ], | 
 |             [],  # iOS | 
 |             [],  # wasm | 
 |             [],  # Fuchsia | 
 |             [],  # macOS | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## DEFINES | 
 | ################################################################################ | 
 |  | 
 | def base_defines(os_conditions): | 
 |     return [ | 
 |         # Chrome DEFINES. | 
 |         "SK_USE_FREETYPE_EMBOLDEN", | 
 |         # Turn on a few Google3-specific build fixes. | 
 |         "SK_BUILD_FOR_GOOGLE3", | 
 |         # Required for building dm. | 
 |         "GR_TEST_UTILS", | 
 |         # Staging flags for API changes | 
 |         "SK_PARAGRAPH_GRAPHEME_EDGES", | 
 |         # Should remove after we update golden images | 
 |         "SK_WEBP_ENCODER_USE_DEFAULT_METHOD", | 
 |         # Experiment to diagnose image diffs in Google3 | 
 |         "SK_DISABLE_LOWP_RASTER_PIPELINE", | 
 |         # JPEG is in codec_limited | 
 |         "SK_CODEC_DECODES_JPEG", | 
 |         "SK_ENCODE_JPEG", | 
 |         "SK_HAS_ANDROID_CODEC", | 
 |     ] + skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             # UNIX | 
 |             [ | 
 |                 "PNG_SKIP_SETJMP_CHECK", | 
 |                 "SK_BUILD_FOR_UNIX", | 
 |                 "SK_CODEC_DECODES_PNG", | 
 |                 "SK_CODEC_DECODES_WEBP", | 
 |                 "SK_ENCODE_PNG", | 
 |                 "SK_ENCODE_WEBP", | 
 |                 "SK_R32_SHIFT=16", | 
 |                 "SK_GL", | 
 |             ], | 
 |             # ANDROID | 
 |             [ | 
 |                 "SK_BUILD_FOR_ANDROID", | 
 |                 "SK_CODEC_DECODES_PNG", | 
 |                 "SK_CODEC_DECODES_WEBP", | 
 |                 "SK_ENCODE_PNG", | 
 |                 "SK_ENCODE_WEBP", | 
 |                 "SK_GL", | 
 |             ], | 
 |             # IOS | 
 |             [ | 
 |                 "SK_BUILD_FOR_IOS", | 
 |                 "SKNX_NO_SIMD", | 
 |                 "SK_NO_COMMAND_BUFFER",  # Test tools that use thread_local. | 
 |                 "SK_GL", | 
 |             ], | 
 |             # WASM | 
 |             [ | 
 |                 "SK_DISABLE_LEGACY_SHADERCONTEXT", | 
 |                 "SK_DISABLE_TRACING", | 
 |                 "SK_GL", | 
 |                 "SK_SUPPORT_GPU=1", | 
 |                 "SK_DISABLE_AAA", | 
 |                 "SK_DISABLE_EFFECT_DESERIALIZATION", | 
 |                 "SK_FORCE_8_BYTE_ALIGNMENT", | 
 |                 "SKNX_NO_SIMD", | 
 |             ], | 
 |             # FUCHSIA | 
 |             [ | 
 |                 "SK_BUILD_FOR_UNIX", | 
 |                 "SK_CODEC_DECODES_PNG", | 
 |                 "SK_CODEC_DECODES_WEBP", | 
 |                 "SK_ENCODE_PNG", | 
 |                 "SK_ENCODE_WEBP", | 
 |                 "SK_R32_SHIFT=16", | 
 |                 "SK_VULKAN", | 
 |             ], | 
 |             # MACOS | 
 |             [ | 
 |                 "SK_BUILD_FOR_MAC", | 
 |                 "SK_GL", | 
 |             ], | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## LINKOPTS | 
 | ################################################################################ | 
 |  | 
 | def base_linkopts(os_conditions): | 
 |     return [ | 
 |         "-ldl", | 
 |     ] + skia_select( | 
 |         os_conditions, | 
 |         [ | 
 |             [],  # Unix | 
 |             # ANDROID | 
 |             [ | 
 |                 "-lEGL", | 
 |                 "-lGLESv2", | 
 |             ], | 
 |             # IOS | 
 |             [ | 
 |                 "-framework CoreFoundation", | 
 |                 "-framework CoreGraphics", | 
 |                 "-framework CoreText", | 
 |                 "-framework ImageIO", | 
 |                 "-framework MobileCoreServices", | 
 |             ], | 
 |             [],  # wasm | 
 |             [],  # Fuchsia | 
 |             # MACOS | 
 |             [ | 
 |                 "-framework CoreFoundation", | 
 |                 "-framework CoreGraphics", | 
 |                 "-framework CoreText", | 
 |                 "-framework ImageIO", | 
 |                 "-framework ApplicationServices", | 
 |             ], | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## sksg_lib | 
 | ################################################################################ | 
 |  | 
 | def sksg_lib_hdrs(): | 
 |     return native.glob(["modules/sksg/include/*.h"]) | 
 |  | 
 | def sksg_lib_srcs(): | 
 |     return native.glob([ | 
 |         "modules/sksg/src/*.cpp", | 
 |         "modules/sksg/src/*.h", | 
 |     ]) | 
 |  | 
 | ################################################################################ | 
 | ## skparagraph_lib | 
 | ################################################################################ | 
 |  | 
 | def skparagraph_lib_hdrs(): | 
 |     return native.glob(["modules/skparagraph/include/*.h"]) | 
 |  | 
 | def skparagraph_lib_srcs(): | 
 |     return native.glob(["modules/skparagraph/src/*.cpp"]) | 
 |  | 
 | ################################################################################ | 
 | ## experimental xform | 
 | ################################################################################ | 
 |  | 
 | def exp_xform_lib_hdrs(): | 
 |     return native.glob(["experimental/xform/*.h"]) | 
 |  | 
 | def exp_xform_lib_srcs(): | 
 |     return native.glob(["experimental/xform/*.cpp"]) | 
 |  | 
 | ################################################################################ | 
 | ## skresources_lib | 
 | ################################################################################ | 
 |  | 
 | def skresources_lib_hdrs(): | 
 |     return ["modules/skresources/include/SkResources.h"] | 
 |  | 
 | def skresources_lib_srcs(): | 
 |     return ["modules/skresources/src/SkResources.cpp"] | 
 |  | 
 | ################################################################################ | 
 | ## skottie_lib | 
 | ################################################################################ | 
 |  | 
 | def skottie_lib_hdrs(): | 
 |     return native.glob(["modules/skottie/include/*.h"]) | 
 |  | 
 | def skottie_lib_srcs(): | 
 |     return native.glob( | 
 |         [ | 
 |             "modules/skottie/src/*.cpp", | 
 |             "modules/skottie/src/*.h", | 
 |             "modules/skottie/src/animator/*.cpp", | 
 |             "modules/skottie/src/animator/*.h", | 
 |             "modules/skottie/src/effects/*.cpp", | 
 |             "modules/skottie/src/effects/*.h", | 
 |             "modules/skottie/src/layers/*.cpp", | 
 |             "modules/skottie/src/layers/*.h", | 
 |             "modules/skottie/src/layers/shapelayer/*.cpp", | 
 |             "modules/skottie/src/layers/shapelayer/*.h", | 
 |             "modules/skottie/src/text/*.cpp", | 
 |             "modules/skottie/src/text/*.h", | 
 |         ], | 
 |         exclude = [ | 
 |             "modules/skottie/src/SkottieTest.cpp", | 
 |             "modules/skottie/src/SkottieTool.cpp", | 
 |         ], | 
 |     ) | 
 |  | 
 | ################################################################################ | 
 | ## skottie_utils | 
 | ################################################################################ | 
 |  | 
 | SKOTTIE_UTILS_HDRS = [ | 
 |     "modules/skottie/utils/SkottieUtils.h", | 
 | ] | 
 |  | 
 | SKOTTIE_UTILS_SRCS = [ | 
 |     "modules/skottie/utils/SkottieUtils.cpp", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## skottie_shaper | 
 | ################################################################################ | 
 |  | 
 | SKOTTIE_SHAPER_HDRS = [ | 
 |     "modules/skottie/src/text/SkottieShaper.h", | 
 | ] | 
 |  | 
 | SKOTTIE_SHAPER_SRCS = [ | 
 |     "modules/skottie/src/text/SkottieShaper.cpp", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## skottie_tool | 
 | ################################################################################ | 
 |  | 
 | SKOTTIE_TOOL_SRCS = [ | 
 |     "modules/skottie/src/SkottieTool.cpp", | 
 |     "modules/skresources/src/SkResources.cpp", | 
 |     "modules/skresources/include/SkResources.h", | 
 |     # TODO(benjaminwagner): Add "flags" target. | 
 |     "tools/flags/CommandLineFlags.cpp", | 
 |     "tools/flags/CommandLineFlags.h", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## SkShaper | 
 | ################################################################################ | 
 |  | 
 | SKSHAPER_HARFBUZZ_SRCS = [ | 
 |     "modules/skshaper/include/SkShaper.h", | 
 |     "modules/skshaper/src/SkShaper.cpp", | 
 |     "modules/skshaper/src/SkShaper_harfbuzz.cpp", | 
 |     "modules/skshaper/src/SkShaper_primitive.cpp", | 
 |     "modules/skshaper/src/SkUnicode.h", | 
 |     "modules/skshaper/src/SkUnicode_icu.cpp", | 
 | ] | 
 |  | 
 | SKSHAPER_PRIMITIVE_SRCS = [ | 
 |     "modules/skshaper/include/SkShaper.h", | 
 |     "modules/skshaper/src/SkShaper.cpp", | 
 |     "modules/skshaper/src/SkShaper_primitive.cpp", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## skottie_ios_lib | 
 | ################################################################################ | 
 |  | 
 | SKOTTIE_IOS_LIB_SRCS = [ | 
 |     "tools/skottie_ios_app/SkiaContext.mm", | 
 |     "tools/skottie_ios_app/SkiaUIContext.mm", | 
 |     "tools/skottie_ios_app/SkiaViewController.mm", | 
 |     "tools/skottie_ios_app/SkottieViewController.mm", | 
 | ] | 
 |  | 
 | SKOTTIE_IOS_LIB_HDRS = [ | 
 |     "tools/skottie_ios_app/SkiaContext.h", | 
 |     "tools/skottie_ios_app/SkiaViewController.h", | 
 |     "tools/skottie_ios_app/SkottieViewController.h", | 
 | ] | 
 |  | 
 | SKOTTIE_IOS_LIB_SDK_FRAMEWORKS = [ | 
 |     "Foundation", | 
 |     "UIKit", | 
 | ] | 
 |  | 
 | ################################################################################ | 
 | ## svg_lib | 
 | ################################################################################ | 
 |  | 
 | def svg_lib_hdrs(): | 
 |     return native.glob(["modules/svg/include/*.h"]) | 
 |  | 
 | def svg_lib_srcs(): | 
 |     return native.glob(["modules/svg/src/*.cpp"]) | 
 |  | 
 | ################################################################################ | 
 | ## svg_tool | 
 | ################################################################################ | 
 |  | 
 | SVG_TOOL_SRCS = [ | 
 |     "modules/svg/utils/SvgTool.cpp", | 
 |     # TODO(benjaminwagner): Add "flags" target. | 
 |     "tools/flags/CommandLineFlags.cpp", | 
 |     "tools/flags/CommandLineFlags.h", | 
 | ] |