• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1################################################################################
2# Skylark macros
3################################################################################
4
5is_bazel = not hasattr(native, "genmpm")
6
7def portable_select(select_dict, bazel_condition, default_condition):
8  """Replaces select() with a Bazel-friendly wrapper.
9
10  Args:
11    select_dict: Dictionary in the same format as select().
12  Returns:
13    If Blaze platform, returns select() using select_dict.
14    If Bazel platform, returns dependencies for condition
15        bazel_condition, or empty list if none specified.
16  """
17  if is_bazel:
18    return select_dict.get(bazel_condition, select_dict[default_condition])
19  else:
20    return select(select_dict)
21
22def skia_select(conditions, results):
23  """Replaces select() for conditions [UNIX, ANDROID, IOS]
24
25  Args:
26    conditions: [CONDITION_UNIX, CONDITION_ANDROID, CONDITION_IOS]
27    results: [RESULT_UNIX, RESULT_ANDROID, RESULT_IOS]
28  Returns:
29    The result matching the platform condition.
30  """
31  if len(conditions) != 3 or len(results) != 3:
32    fail("Must provide exactly 3 conditions and 3 results")
33
34  selector = {}
35  for i in range(3):
36    selector[conditions[i]] = results[i]
37  return portable_select(selector, conditions[2], conditions[0])
38
39def skia_glob(srcs):
40  """Replaces glob() with a version that accepts a struct.
41
42  Args:
43    srcs: struct(include=[], exclude=[])
44  Returns:
45    Equivalent of glob(srcs.include, exclude=srcs.exclude)
46  """
47  if hasattr(srcs, 'include'):
48    if hasattr(srcs, 'exclude'):
49      return native.glob(srcs.include, exclude=srcs.exclude)
50    else:
51      return native.glob(srcs.include)
52  return []
53
54################################################################################
55## BASE_SRCS
56################################################################################
57
58# All platform-independent SRCS.
59BASE_SRCS_ALL = struct(
60    include = [
61        "include/private/**/*.h",
62        "src/**/*.h",
63        "src/**/*.cpp",
64        "src/**/*.inc",
65        "src/jumper/SkJumper_generated.S",
66
67        # Third Party
68        "third_party/etc1/*.cpp",
69        "third_party/etc1/*.h",
70        "third_party/gif/*.cpp",
71        "third_party/gif/*.h",
72    ],
73    exclude = [
74        # Exclude platform-dependent files.
75        "src/android/*",
76        "src/codec/*",
77        "src/device/xps/*",  # Windows-only. Move to ports?
78        "src/doc/*_XPS.cpp",  # Windows-only. Move to ports?
79        "src/gpu/gl/android/*",
80        "src/gpu/gl/egl/*",
81        "src/gpu/gl/glfw/*",
82        "src/gpu/gl/glx/*",
83        "src/gpu/gl/iOS/*",
84        "src/gpu/gl/mac/*",
85        "src/gpu/gl/win/*",
86        "src/opts/**/*",
87        "src/ports/**/*",
88        "src/utils/android/**/*",
89        "src/utils/mac/**/*",
90        "src/utils/SkThreadUtils_win.cpp",  # Windows-only. Move to ports?
91        "src/utils/win/**/*",
92        "src/views/sdl/*",
93        "src/views/win/*",
94        "src/views/unix/*",
95
96        # Exclude multiple definitions.
97        # TODO(mtklein): Move to opts?
98        "src/pdf/SkDocument_PDF_None.cpp",  # We use src/pdf/SkPDFDocument.cpp.
99        "src/gpu/gl/GrGLCreateNativeInterface_none.cpp",
100        "src/gpu/gl/GrGLDefaultInterface_native.cpp",
101        "src/gpu/gl/GrGLDefaultInterface_none.cpp",
102
103        # Exclude files that don't compile with the current DEFINES.
104        "src/gpu/gl/mesa/*",  # Requires SK_MESA define.
105        "src/svg/**/*",  # Depends on XML.
106        "src/xml/**/*",
107
108        # Conflicting dependencies among Lua versions. See cl/107087297.
109        "src/utils/SkLua*",
110
111        # Not used.
112        "src/views/**/*",
113
114        # Currently exclude all vulkan specific files
115        "src/gpu/vk/*",
116
117        # Defines main.
118        "src/sksl/SkSLMain.cpp",
119
120        # Only pre-compiled into SkJumper_generated.S.
121        "src/jumper/SkJumper_stages_lowp.cpp",
122    ],
123)
124
125# Platform-dependent SRCS for google3-default platform.
126BASE_SRCS_UNIX = struct(
127    include = [
128        "src/android/*",
129        "src/codec/*",
130        "src/gpu/gl/GrGLDefaultInterface_none.cpp",
131        "src/opts/**/*.cpp",
132        "src/opts/**/*.h",
133        "src/ports/**/*.cpp",
134        "src/ports/**/*.h",
135    ],
136    exclude = [
137        "src/opts/opts_check_x86.cpp",
138        "src/opts/*arm*",
139        "src/opts/*mips*",
140        "src/opts/*NEON*",
141        "src/opts/*neon*",
142        # Included in :opts_sse2 library.
143        "src/opts/*SSE2*",
144        "src/opts/*sse2*",
145        # Included in :opts_ssse3 library.
146        "src/opts/*SSSE3*",
147        "src/opts/*ssse3*",
148        # Included in :opts_sse4 library.
149        "src/opts/*SSE4*",
150        "src/opts/*sse4*",
151        # Included in :opts_avx or :opts_hsw
152        "src/opts/*avx*",
153        "src/opts/*hsw*",
154        "src/opts/SkBitmapProcState_opts_none.cpp",
155        "src/opts/SkBlitMask_opts_none.cpp",
156        "src/opts/SkBlitRow_opts_none.cpp",
157        "src/ports/*CG*",
158        "src/ports/*WIC*",
159        "src/ports/*android*",
160        "src/ports/*chromium*",
161        "src/ports/*mac*",
162        "src/ports/*mozalloc*",
163        "src/ports/*nacl*",
164        "src/ports/*win*",
165        "src/ports/SkFontMgr_custom_directory_factory.cpp",
166        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
167        "src/ports/SkFontMgr_custom_empty_factory.cpp",
168        "src/ports/SkFontMgr_empty_factory.cpp",
169        "src/ports/SkFontMgr_fontconfig.cpp",
170        "src/ports/SkFontMgr_fontconfig_factory.cpp",
171        "src/ports/SkGlobalInitialization_none.cpp",
172        "src/ports/SkImageGenerator_none.cpp",
173        "src/ports/SkTLS_none.cpp",
174    ],
175)
176
177# Platform-dependent SRCS for google3-default Android.
178BASE_SRCS_ANDROID = struct(
179    include = [
180        "src/android/*",
181        "src/codec/*",
182        "src/gpu/gl/GrGLDefaultInterface_none.cpp",
183        # TODO(benjaminwagner): Figure out how to compile with EGL.
184        "src/opts/**/*.cpp",
185        "src/opts/**/*.h",
186        "src/ports/**/*.cpp",
187        "src/ports/**/*.h",
188    ],
189    exclude = [
190        "src/opts/*mips*",
191        "src/opts/*SSE2*",
192        "src/opts/*SSSE3*",
193        "src/opts/*ssse3*",
194        "src/opts/*SSE4*",
195        "src/opts/*sse4*",
196        "src/opts/*avx*",
197        "src/opts/*hsw*",
198        "src/opts/*x86*",
199        "src/opts/SkBlitMask_opts_none.cpp",
200        "src/opts/SkBlitRow_opts_none.cpp",
201        "src/ports/*CG*",
202        "src/ports/*FontConfig*",
203        "src/ports/*WIC*",
204        "src/ports/*chromium*",
205        "src/ports/*fontconfig*",
206        "src/ports/*mac*",
207        "src/ports/*mozalloc*",
208        "src/ports/*nacl*",
209        "src/ports/*win*",
210        "src/ports/SkDebug_stdio.cpp",
211        "src/ports/SkFontMgr_custom_directory_factory.cpp",
212        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
213        "src/ports/SkFontMgr_custom_empty_factory.cpp",
214        "src/ports/SkFontMgr_empty_factory.cpp",
215        "src/ports/SkGlobalInitialization_none.cpp",
216        "src/ports/SkImageGenerator_none.cpp",
217        "src/ports/SkTLS_none.cpp",
218    ],
219)
220
221# Platform-dependent SRCS for google3-default iOS.
222BASE_SRCS_IOS = struct(
223    include = [
224        "src/android/*",
225        "src/codec/*",
226        "src/gpu/gl/GrGLDefaultInterface_native.cpp",
227        "src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp",
228        "src/opts/**/*.cpp",
229        "src/opts/**/*.h",
230        "src/ports/**/*.cpp",
231        "src/ports/**/*.h",
232        "src/utils/mac/*.cpp",
233    ],
234    exclude = [
235        "src/codec/*Ico*.cpp",
236        "src/codec/*Webp*.cpp",
237        "src/codec/*Png*",
238        "src/codec/*Raw*.cpp",
239        "src/opts/*mips*",
240        "src/opts/*NEON*",
241        "src/opts/*neon*",
242        "src/opts/*SSE2*",
243        "src/opts/*SSSE3*",
244        "src/opts/*ssse3*",
245        "src/opts/*SSE4*",
246        "src/opts/*sse4*",
247        "src/opts/*avx*",
248        "src/opts/*hsw*",
249        "src/opts/*x86*",
250        "src/opts/SkBlitMask_opts_arm*.cpp",
251        "src/opts/SkBlitRow_opts_arm*.cpp",
252        "src/ports/*CG*",
253        "src/ports/*FontConfig*",
254        "src/ports/*FreeType*",
255        "src/ports/*WIC*",
256        "src/ports/*android*",
257        "src/ports/*chromium*",
258        "src/ports/*fontconfig*",
259        "src/ports/*mozalloc*",
260        "src/ports/*nacl*",
261        "src/ports/*win*",
262        "src/ports/SkFontMgr_custom.cpp",
263        "src/ports/SkFontMgr_custom_directory.cpp",
264        "src/ports/SkFontMgr_custom_embedded.cpp",
265        "src/ports/SkFontMgr_custom_empty.cpp",
266        "src/ports/SkFontMgr_custom_directory_factory.cpp",
267        "src/ports/SkFontMgr_custom_embedded_factory.cpp",
268        "src/ports/SkFontMgr_custom_empty_factory.cpp",
269        "src/ports/SkFontMgr_empty_factory.cpp",
270        "src/ports/SkGlobalInitialization_none.cpp",
271        "src/ports/SkImageGenerator_none.cpp",
272        "src/ports/SkTLS_none.cpp",
273    ],
274)
275
276################################################################################
277## skia_{all,public}_hdrs()
278################################################################################
279def skia_all_hdrs():
280  return native.glob(["src/**/*.h", "include/**/*.h"])
281
282def skia_public_hdrs():
283  return native.glob(["include/**/*.h"],
284                     exclude=[
285                         "include/private/**/*.h",
286                         "include/views/**/*",  # Not used.
287                     ])
288
289################################################################################
290## skia_opts_srcs()
291################################################################################
292# Intel
293SKIA_OPTS_SSE2 = "SSE2"
294
295SKIA_OPTS_SSSE3 = "SSSE3"
296
297SKIA_OPTS_SSE4 = "SSE4"
298
299SKIA_OPTS_AVX = "AVX"
300
301SKIA_OPTS_HSW = "HSW"
302
303# Arm
304SKIA_OPTS_ARMV7 = "ARMV7"
305
306SKIA_OPTS_NEON = "NEON"
307
308SKIA_OPTS_ARM64 = "ARM64"
309
310SKIA_OPTS_CRC32 = "CRC32"  # arm64
311
312# Other
313SKIA_OPTS_NONE = "NONE"  # not x86, arm, or arm64
314
315def skia_opts_srcs(opts):
316  if opts == SKIA_OPTS_SSE2:
317    return native.glob([
318        "src/opts/*SSE2*.cpp",
319        "src/opts/*sse2*.cpp",
320    ])
321  elif opts == SKIA_OPTS_SSSE3:
322    return native.glob([
323        "src/opts/*SSSE3*.cpp",
324        "src/opts/*ssse3*.cpp",
325    ])
326  elif opts == SKIA_OPTS_SSE4:
327    return native.glob([
328        "src/opts/*SSE4*.cpp",
329        "src/opts/*sse4*.cpp",
330    ])
331  elif opts == SKIA_OPTS_AVX:
332    return native.glob([
333        "src/opts/*_avx.cpp",
334    ])
335  elif opts == SKIA_OPTS_HSW:
336    return native.glob([
337        "src/opts/*_hsw.cpp",
338    ])
339  elif opts == SKIA_OPTS_ARMV7:
340    return native.glob([
341        "src/opts/*_arm.cpp",
342    ])
343  elif opts == SKIA_OPTS_NEON:
344    return native.glob([
345        "src/opts/*_neon.cpp",
346    ])
347  elif opts == SKIA_OPTS_CRC32:
348    return native.glob([
349        "src/opts/*_crc32.cpp",
350    ])
351  elif opts == SKIA_OPTS_NONE:
352    return native.glob([
353        "src/opts/*_none.cpp",
354    ])
355  else:
356    fail("skia_opts_srcs parameter 'opts' must be one of SKIA_OPTS_*.")
357
358def skia_opts_cflags(opts):
359  if opts == SKIA_OPTS_SSE2:
360    return ["-msse2"]
361  elif opts == SKIA_OPTS_SSSE3:
362    return ["-mssse3"]
363  elif opts == SKIA_OPTS_SSE4:
364    return ["-msse4"]
365  elif opts == SKIA_OPTS_AVX:
366    return ["-mavx"]
367  elif opts == SKIA_OPTS_HSW:
368    return ["-mavx2", "-mbmi", "-mbmi2", "-mf16c", "-mfma"]
369  elif opts == SKIA_OPTS_CRC32:
370    return ["-march=armv8-a+crc"]
371  else:
372    return []
373
374################################################################################
375## skia_srcs()
376################################################################################
377SKIA_OS_UNIX = "UNIX"
378
379SKIA_OS_ANDROID = "ANDROID"
380
381SKIA_OS_IOS = "IOS"
382
383SKIA_CPU_UNSPECIFIED = "UNSPECIFIED"
384
385SKIA_CPU_ARM = "ARM"
386
387SKIA_CPU_PPC = "PPC"
388
389def skia_srcs(os=SKIA_OS_UNIX, cpu=SKIA_CPU_UNSPECIFIED):
390  """Sources to be compiled into the skia library."""
391  srcs = skia_glob(BASE_SRCS_ALL)
392  if os == SKIA_OS_IOS:
393    if cpu != SKIA_CPU_UNSPECIFIED:
394      fail("Do not specify IOS and a cpu.")
395    srcs = srcs + skia_glob(BASE_SRCS_IOS)
396  elif os == SKIA_OS_ANDROID:
397    if cpu != SKIA_CPU_UNSPECIFIED:
398      fail("Do not specify ANDROID and a cpu.")
399    srcs = srcs + skia_glob(BASE_SRCS_ANDROID)
400  elif os == SKIA_OS_UNIX:
401    if cpu == SKIA_CPU_UNSPECIFIED:
402      srcs = srcs + ["src/opts/opts_check_x86.cpp"] + skia_glob(BASE_SRCS_UNIX)
403    elif cpu == SKIA_CPU_PPC or cpu == SKIA_CPU_ARM:
404      srcs = srcs + skia_glob(BASE_SRCS_UNIX)
405    else:
406      fail("cpu must be one of SKIA_CPU_*")
407  else:
408    fail("skia_srcs parameter 'os' must be one of SKIA_OS_{UNIX,ANDROID,IOS}.")
409  return srcs
410
411################################################################################
412## INCLUDES
413################################################################################
414
415# Includes needed by Skia implementation.  Not public includes.
416INCLUDES = [
417    "include/android",
418    "include/c",
419    "include/client/android",
420    "include/codec",
421    "include/config",
422    "include/core",
423    "include/effects",
424    "include/encode",
425    "include/gpu",
426    "include/images",
427    "include/pathops",
428    "include/pipe",
429    "include/ports",
430    "include/private",
431    "include/utils",
432    "include/utils/mac",
433    "include/utils/win",
434    "include/svg",
435    "include/xml",
436    "src/codec",
437    "src/core",
438    "src/gpu",
439    "src/image",
440    "src/lazy",
441    "src/opts",
442    "src/ports",
443    "src/pdf",
444    "src/sfnt",
445    "src/shaders",
446    "src/sksl",
447    "src/utils",
448    "third_party/etc1",
449    "third_party/gif",
450]
451
452################################################################################
453## DM_SRCS
454################################################################################
455
456DM_SRCS_ALL = struct(
457    include = [
458        "dm/*.cpp",
459        "dm/*.h",
460        "gm/*.c",
461        "gm/*.cpp",
462        "gm/*.h",
463        "tests/*.cpp",
464        "tests/*.h",
465        "tools/BigPathBench.inc",
466        "tools/CrashHandler.cpp",
467        "tools/CrashHandler.h",
468        "tools/ProcStats.cpp",
469        "tools/ProcStats.h",
470        "tools/Resources.cpp",
471        "tools/Resources.h",
472        "tools/SkJSONCPP.h",
473        "tools/UrlDataManager.cpp",
474        "tools/UrlDataManager.h",
475        "tools/debugger/*.cpp",
476        "tools/debugger/*.h",
477        "tools/flags/*.cpp",
478        "tools/flags/*.h",
479        "tools/gpu/**/*.cpp",
480        "tools/gpu/**/*.h",
481        "tools/picture_utils.cpp",
482        "tools/picture_utils.h",
483        "tools/random_parse_path.cpp",
484        "tools/random_parse_path.h",
485        "tools/sk_tool_utils.cpp",
486        "tools/sk_tool_utils.h",
487        "tools/sk_tool_utils_flags.h",
488        "tools/sk_tool_utils_font.cpp",
489        "tools/test_font_monospace.inc",
490        "tools/test_font_sans_serif.inc",
491        "tools/test_font_serif.inc",
492        "tools/test_font_index.inc",
493        "tools/timer/*.cpp",
494        "tools/timer/*.h",
495        "tools/trace/*.cpp",
496        "tools/trace/*.h",
497    ],
498    exclude = [
499        "tests/FontMgrAndroidParserTest.cpp",  # Android-only.
500        "tests/skia_test.cpp",  # Old main.
501        "tests/SkpSkGrTest.cpp",  # Alternate main.
502        "tests/SVGDeviceTest.cpp",
503        "tools/gpu/gl/angle/*",
504        "tools/gpu/gl/egl/*",
505        "tools/gpu/gl/glx/*",
506        "tools/gpu/gl/iOS/*",
507        "tools/gpu/gl/mac/*",
508        "tools/gpu/gl/mesa/*",
509        "tools/gpu/gl/win/*",
510        "tools/timer/SysTimer_mach.cpp",
511        "tools/timer/SysTimer_windows.cpp",
512    ],
513)
514
515################################################################################
516## dm_srcs()
517################################################################################
518# SKIA_OS_* definitions can be found above.
519
520def dm_srcs(os):
521  """Sources for the dm binary for the specified os."""
522  srcs = skia_glob(DM_SRCS_ALL)
523  # TODO(benjaminwagner): None of the CreatePlatformGLContext_*.cpp files exist.
524  # TODO(jwg): Remove the globs if possible, they only select single files.
525  if os == SKIA_OS_IOS:
526    srcs = srcs + native.glob(["tools/gpu/iOS/CreatePlatformGLContext_iOS.cpp"])
527  elif os == SKIA_OS_ANDROID:
528    srcs = srcs + native.glob([
529        "tests/FontMgrAndroidParserTest.cpp",
530        # TODO(benjaminwagner): Figure out how to compile with EGL.
531        "tools/gpu/gl/CreatePlatformGLContext_none.cpp",
532    ])
533  elif os == SKIA_OS_UNIX:
534    srcs = srcs + native.glob(["tools/gpu/gl/CreatePlatformGLContext_none.cpp"])
535  else:
536    fail("dm_srcs parameter 'os' must be one of SKIA_OS_{UNIX,ANDROID,IOS}.")
537  return srcs
538
539################################################################################
540## DM_INCLUDES
541################################################################################
542
543DM_INCLUDES = [
544    "dm",
545    "gm",
546    "experimental/svg/model",
547    "src/codec",
548    "src/core",
549    "src/effects",
550    "src/fonts",
551    "src/images",
552    "src/pathops",
553    "src/pipe/utils",
554    "src/ports",
555    "src/shaders",
556    "src/shaders/gradients",
557    "src/xml",
558    "tests",
559    "tools",
560    "tools/debugger",
561    "tools/flags",
562    "tools/gpu",
563    "tools/timer",
564    "tools/trace",
565]
566
567################################################################################
568## DM_ARGS
569################################################################################
570
571def DM_ARGS(asan):
572  source = ["tests", "gm", "image"]
573  # TODO(benjaminwagner): f16 and serialize-8888 fail.
574  config = ["565", "8888", "pdf", "srgb", "tiles_rt", "pic"]
575  # TODO(mtklein): maybe investigate why these fail?
576  match = [
577      "~Canvas",
578      "~Codec",
579      "~Codec_Dimensions",
580      "~Codec_stripes",
581      "~FontMgr",
582      "~PaintBreakText",
583      "~RecordDraw_TextBounds",
584      "~Scalar",
585      "~skps",
586      "~Stream",
587  ]
588  if asan:
589    # The ASAN we use with Bazel has some strict checks, so omit tests that
590    # trigger them.
591    match += [
592        "~bigrect",
593        "~clippedcubic2",
594        "~conicpaths",
595        "~^gradients",
596        "~Math",
597        "~Matrix",
598        "~PathBigCubic",
599        "~PathOpsCubic",
600        "~PathOpsFailOp",
601        "~PathOpsOpCubicsThreaded",
602        "~PathOpsOpLoopsThreaded",
603        "~PathOpsSimplify",
604        "~PathOpsTightBoundsQuads",
605        "~Point",
606        "~sk_linear_to_srgb",
607        "~small_color_stop",
608    ]
609  return ["--src"] + source + ["--config"] + config + ["--match"] + match
610
611################################################################################
612## COPTS
613################################################################################
614
615COPTS_UNIX = [
616    "-Wno-implicit-fallthrough",  # Some intentional fallthrough.
617    "-Wno-deprecated-declarations",  # Internal use of deprecated methods. :(
618]
619
620COPTS_ANDROID = [
621    "-mfpu=neon",
622    "-Wno-error=attributes",  # 'GrResourceCache' declared with greater visibility than the
623                              # type of its field 'GrResourceCache::fPurgeableQueue'... bogus.
624]
625
626COPTS_IOS = []
627
628COPTS_ALL = []
629
630################################################################################
631## DEFINES
632################################################################################
633
634DEFINES_UNIX = [
635    "PNG_SKIP_SETJMP_CHECK",
636    "SK_BUILD_FOR_UNIX",
637    "SK_SAMPLES_FOR_X",
638    "SK_PDF_USE_SFNTLY",
639    "SK_CODEC_DECODES_RAW",
640    "SK_HAS_JPEG_LIBRARY",
641    "SK_HAS_PNG_LIBRARY",
642    "SK_HAS_WEBP_LIBRARY",
643]
644
645DEFINES_ANDROID = [
646    "SK_BUILD_FOR_ANDROID",
647    "SK_CODEC_DECODES_RAW",
648    "SK_HAS_JPEG_LIBRARY",
649    "SK_HAS_PNG_LIBRARY",
650    "SK_HAS_WEBP_LIBRARY",
651]
652
653DEFINES_IOS = [
654    "SK_BUILD_FOR_IOS",
655    "SK_BUILD_NO_OPTS",
656    "SK_HAS_JPEG_LIBRARY",
657    "SKNX_NO_SIMD",
658]
659
660DEFINES_ALL = [
661    # Chrome DEFINES.
662    "SK_USE_FLOATBITS",
663    "SK_USE_FREETYPE_EMBOLDEN",
664    # Turn on a few Google3-specific build fixes.
665    "GOOGLE3",
666    # Required for building dm.
667    "GR_TEST_UTILS",
668    # Staging flags for API changes
669    # Should remove after we update golden images
670    "SK_WEBP_ENCODER_USE_DEFAULT_METHOD",
671    # Temporarily Disable analytic AA for Google3
672    "SK_NO_ANALYTIC_AA",
673    # Experiment to diagnose image diffs in Google3
674    "SK_DISABLE_SSSE3_RUNTIME_CHECK_FOR_LOWP_STAGES",
675    "SK_SUPPORT_LEGACY_MALLOC_PORTING_LAYER",
676]
677
678################################################################################
679## LINKOPTS
680################################################################################
681
682LINKOPTS_UNIX = []
683
684LINKOPTS_ANDROID = [
685    "-lEGL",
686]
687
688LINKOPTS_IOS = []
689
690LINKOPTS_ALL = [
691    "-ldl",
692]
693