skia2/public.bzl
Matt Sarett ebb1b5c297 Add new SkImageGenerator::getPixels() API, deprecate the old
This is fairly aggressive in that it will break any client
that is currently using SkImageGenerator with kIndex8.
I'm guessing that we don't have any clients doing that.

Bug: skia:6620
Change-Id: Ifd16f5232bb3a9f759c225315c57492d917ed9ca
Reviewed-on: https://skia-review.googlesource.com/16601
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
2017-05-12 16:48:17 +00:00

682 lines
19 KiB
Python

################################################################################
# Skylark macros
################################################################################
is_bazel = not hasattr(native, "genmpm")
def portable_select(select_dict, bazel_condition, default_condition):
"""Replaces select() with a Bazel-friendly wrapper.
Args:
select_dict: Dictionary in the same format as select().
Returns:
If Blaze platform, returns select() using select_dict.
If Bazel platform, returns dependencies for condition
bazel_condition, or empty list if none specified.
"""
if is_bazel:
return select_dict.get(bazel_condition, select_dict[default_condition])
else:
return select(select_dict)
def skia_select(conditions, results):
"""Replaces select() for conditions [UNIX, ANDROID, IOS]
Args:
conditions: [CONDITION_UNIX, CONDITION_ANDROID, CONDITION_IOS]
results: [RESULT_UNIX, RESULT_ANDROID, RESULT_IOS]
Returns:
The result matching the platform condition.
"""
if len(conditions) != 3 or len(results) != 3:
fail("Must provide exactly 3 conditions and 3 results")
selector = {}
for i in range(3):
selector[conditions[i]] = results[i]
return portable_select(selector, conditions[2], conditions[0])
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 []
################################################################################
## BASE_SRCS
################################################################################
# All platform-independent SRCS.
BASE_SRCS_ALL = struct(
include = [
"include/private/**/*.h",
"src/**/*.h",
"src/**/*.cpp",
"src/**/*.inc",
"src/jumper/SkJumper_generated.S",
# Third Party
"third_party/etc1/*.cpp",
"third_party/etc1/*.h",
"third_party/gif/*.cpp",
"third_party/gif/*.h",
],
exclude = [
# Exclude platform-dependent files.
"src/android/*",
"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/images/*",
"src/opts/**/*",
"src/ports/**/*",
"src/utils/android/**/*",
"src/utils/mac/**/*",
"src/utils/SkThreadUtils_win.cpp", # Windows-only. Move to ports?
"src/utils/win/**/*",
"src/views/sdl/*",
"src/views/win/*",
"src/views/unix/*",
# Exclude multiple definitions.
# TODO(mtklein): Move to opts?
"src/pdf/SkDocument_PDF_None.cpp", # We use src/pdf/SkPDFDocument.cpp.
"src/gpu/gl/GrGLCreateNativeInterface_none.cpp",
"src/gpu/gl/GrGLDefaultInterface_native.cpp",
"src/gpu/gl/GrGLDefaultInterface_none.cpp",
# Exclude files that don't compile with the current DEFINES.
"src/gpu/gl/mesa/*", # Requires SK_MESA define.
"src/svg/**/*", # Depends on XML.
"src/xml/**/*",
# Conflicting dependencies among Lua versions. See cl/107087297.
"src/utils/SkLua*",
# Not used.
"src/views/**/*",
# Currently exclude all vulkan specific files
"src/gpu/vk/*",
# Defines main.
"src/sksl/SkSLMain.cpp",
],
)
# Platform-dependent SRCS for google3-default platform.
BASE_SRCS_UNIX = struct(
include = [
"src/android/*",
"src/codec/*",
"src/gpu/gl/GrGLDefaultInterface_none.cpp",
"src/images/*",
"src/opts/**/*.cpp",
"src/opts/**/*.h",
"src/ports/**/*.cpp",
"src/ports/**/*.h",
],
exclude = [
"src/opts/opts_check_x86.cpp",
"src/opts/*arm*",
"src/opts/*mips*",
"src/opts/*NEON*",
"src/opts/*neon*",
# Included in :opts_sse2 library.
"src/opts/*SSE2*",
"src/opts/*sse2*",
# Included in :opts_ssse3 library.
"src/opts/*SSSE3*",
"src/opts/*ssse3*",
# Included in :opts_sse4 library.
"src/opts/*SSE4*",
"src/opts/*sse4*",
# Included in :opts_avx or :opts_hsw
"src/opts/*avx*",
"src/opts/*hsw*",
"src/opts/SkBitmapProcState_opts_none.cpp",
"src/opts/SkBlitMask_opts_none.cpp",
"src/opts/SkBlitRow_opts_none.cpp",
"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/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.cpp",
"src/ports/SkFontMgr_fontconfig_factory.cpp",
"src/ports/SkGlobalInitialization_none.cpp",
"src/ports/SkImageEncoder_none.cpp",
"src/ports/SkImageGenerator_none.cpp",
"src/ports/SkTLS_none.cpp",
],
)
# Platform-dependent SRCS for google3-default Android.
BASE_SRCS_ANDROID = struct(
include = [
"src/android/*",
"src/codec/*",
"src/gpu/gl/GrGLDefaultInterface_none.cpp",
"src/images/*",
# TODO(benjaminwagner): Figure out how to compile with EGL.
"src/opts/**/*.cpp",
"src/opts/**/*.h",
"src/ports/**/*.cpp",
"src/ports/**/*.h",
],
exclude = [
"src/opts/*mips*",
"src/opts/*SSE2*",
"src/opts/*SSSE3*",
"src/opts/*ssse3*",
"src/opts/*SSE4*",
"src/opts/*sse4*",
"src/opts/*avx*",
"src/opts/*hsw*",
"src/opts/*x86*",
"src/opts/SkBlitMask_opts_none.cpp",
"src/opts/SkBlitRow_opts_none.cpp",
"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/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/SkGlobalInitialization_none.cpp",
"src/ports/SkImageEncoder_none.cpp",
"src/ports/SkImageGenerator_none.cpp",
"src/ports/SkTLS_none.cpp",
],
)
# Platform-dependent SRCS for google3-default iOS.
BASE_SRCS_IOS = struct(
include = [
"src/android/*",
"src/codec/*",
"src/gpu/gl/GrGLDefaultInterface_native.cpp",
"src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp",
"src/opts/**/*.cpp",
"src/opts/**/*.h",
"src/ports/**/*.cpp",
"src/ports/**/*.h",
"src/utils/mac/*.cpp",
],
exclude = [
"src/codec/*Ico*.cpp",
"src/codec/*Webp*.cpp",
"src/codec/*Png*",
"src/codec/*Raw*.cpp",
"src/opts/*mips*",
"src/opts/*NEON*",
"src/opts/*neon*",
"src/opts/*SSE2*",
"src/opts/*SSSE3*",
"src/opts/*ssse3*",
"src/opts/*SSE4*",
"src/opts/*sse4*",
"src/opts/*avx*",
"src/opts/*hsw*",
"src/opts/*x86*",
"src/opts/SkBlitMask_opts_arm*.cpp",
"src/opts/SkBlitRow_opts_arm*.cpp",
"src/ports/*CG*",
"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/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/SkGlobalInitialization_none.cpp",
"src/ports/SkImageGenerator_none.cpp",
"src/ports/SkTLS_none.cpp",
],
)
################################################################################
## skia_{all,public}_hdrs()
################################################################################
def skia_all_hdrs():
return native.glob(["src/**/*.h", "include/**/*.h"])
def skia_public_hdrs():
return native.glob(["include/**/*.h"],
exclude=[
"include/private/**/*.h",
"include/views/**/*", # Not used.
])
################################################################################
## skia_opts_srcs()
################################################################################
# Intel
SKIA_OPTS_SSE2 = "SSE2"
SKIA_OPTS_SSSE3 = "SSSE3"
SKIA_OPTS_SSE4 = "SSE4"
SKIA_OPTS_AVX = "AVX"
SKIA_OPTS_HSW = "HSW"
# Arm
SKIA_OPTS_ARMV7 = "ARMV7"
SKIA_OPTS_NEON = "NEON"
SKIA_OPTS_ARM64 = "ARM64"
SKIA_OPTS_CRC32 = "CRC32" # arm64
# Other
SKIA_OPTS_NONE = "NONE" # not x86, arm, or arm64
def skia_opts_srcs(opts):
if opts == SKIA_OPTS_SSE2:
return native.glob([
"src/opts/*SSE2*.cpp",
"src/opts/*sse2*.cpp",
])
elif opts == SKIA_OPTS_SSSE3:
return native.glob([
"src/opts/*SSSE3*.cpp",
"src/opts/*ssse3*.cpp",
])
elif opts == SKIA_OPTS_SSE4:
return native.glob([
"src/opts/*SSE4*.cpp",
"src/opts/*sse4*.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_ARMV7:
return native.glob([
"src/opts/*_arm.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",
])
elif opts == SKIA_OPTS_NONE:
return native.glob([
"src/opts/*_none.cpp",
])
else:
fail("skia_opts_srcs parameter 'opts' must be one of SKIA_OPTS_*.")
def skia_opts_cflags(opts):
if opts == SKIA_OPTS_SSE2:
return ["-msse2"]
elif opts == SKIA_OPTS_SSSE3:
return ["-mssse3"]
elif opts == SKIA_OPTS_SSE4:
return ["-msse4"]
elif opts == SKIA_OPTS_AVX:
return ["-mavx"]
elif opts == SKIA_OPTS_HSW:
return ["-mavx2", "-mbmi", "-mbmi2", "-mf16c", "-mfma"]
elif opts == SKIA_OPTS_CRC32:
return ["-march=armv8-a+crc"]
else:
return []
################################################################################
## skia_srcs()
################################################################################
SKIA_OS_UNIX = "UNIX"
SKIA_OS_ANDROID = "ANDROID"
SKIA_OS_IOS = "IOS"
SKIA_CPU_UNSPECIFIED = "UNSPECIFIED"
SKIA_CPU_PPC = "PPC"
def skia_srcs(os=SKIA_OS_UNIX, cpu=SKIA_CPU_UNSPECIFIED):
"""Sources to be compiled into the skia library."""
srcs = skia_glob(BASE_SRCS_ALL)
if os == SKIA_OS_IOS:
if cpu != SKIA_CPU_UNSPECIFIED:
fail("Do not specify IOS and a cpu.")
srcs = srcs + skia_glob(BASE_SRCS_IOS)
elif os == SKIA_OS_ANDROID:
if cpu != SKIA_CPU_UNSPECIFIED:
fail("Do not specify ANDROID and a cpu.")
srcs = srcs + skia_glob(BASE_SRCS_ANDROID)
elif os == SKIA_OS_UNIX:
if cpu == SKIA_CPU_UNSPECIFIED:
srcs = srcs + ["src/opts/opts_check_x86.cpp"] + skia_glob(BASE_SRCS_UNIX)
elif cpu == SKIA_CPU_PPC:
srcs = srcs + skia_glob(BASE_SRCS_UNIX)
else:
fail("cpu must be one of SKIA_CPU_*")
else:
fail("skia_srcs parameter 'os' must be one of SKIA_OS_{UNIX,ANDROID,IOS}.")
return srcs
################################################################################
## INCLUDES
################################################################################
# Includes needed by Skia implementation. Not public includes.
INCLUDES = [
"include/android",
"include/c",
"include/client/android",
"include/codec",
"include/config",
"include/core",
"include/effects",
"include/encode",
"include/gpu",
"include/images",
"include/pathops",
"include/pipe",
"include/ports",
"include/private",
"include/utils",
"include/utils/mac",
"include/utils/win",
"include/svg",
"include/xml",
"src/codec",
"src/core",
"src/gpu",
"src/image",
"src/lazy",
"src/opts",
"src/ports",
"src/pdf",
"src/sfnt",
"src/sksl",
"src/utils",
"third_party/etc1",
"third_party/gif",
]
################################################################################
## DM_SRCS
################################################################################
DM_SRCS_ALL = struct(
include = [
"dm/*.cpp",
"dm/*.h",
"gm/*.c",
"gm/*.cpp",
"gm/*.h",
"tests/*.cpp",
"tests/*.h",
"tools/BigPathBench.inc",
"tools/CrashHandler.cpp",
"tools/CrashHandler.h",
"tools/ProcStats.cpp",
"tools/ProcStats.h",
"tools/Resources.cpp",
"tools/Resources.h",
"tools/SkJSONCPP.h",
"tools/UrlDataManager.cpp",
"tools/UrlDataManager.h",
"tools/debugger/*.cpp",
"tools/debugger/*.h",
"tools/flags/*.cpp",
"tools/flags/*.h",
"tools/gpu/**/*.cpp",
"tools/gpu/**/*.h",
"tools/picture_utils.cpp",
"tools/picture_utils.h",
"tools/random_parse_path.cpp",
"tools/random_parse_path.h",
"tools/sk_tool_utils.cpp",
"tools/sk_tool_utils.h",
"tools/sk_tool_utils_flags.h",
"tools/sk_tool_utils_font.cpp",
"tools/test_font_monospace.inc",
"tools/test_font_sans_serif.inc",
"tools/test_font_serif.inc",
"tools/test_font_index.inc",
"tools/timer/*.cpp",
"tools/timer/*.h",
],
exclude = [
"tests/FontMgrAndroidParserTest.cpp", # Android-only.
"tests/skia_test.cpp", # Old main.
"tests/SkpSkGrTest.cpp", # Alternate main.
"tests/SVGDeviceTest.cpp",
"tools/gpu/gl/angle/*",
"tools/gpu/gl/egl/*",
"tools/gpu/gl/glx/*",
"tools/gpu/gl/iOS/*",
"tools/gpu/gl/mac/*",
"tools/gpu/gl/mesa/*",
"tools/gpu/gl/win/*",
"tools/timer/SysTimer_mach.cpp",
"tools/timer/SysTimer_windows.cpp",
],
)
################################################################################
## dm_srcs()
################################################################################
# SKIA_OS_* definitions can be found above.
def dm_srcs(os):
"""Sources for the dm binary for the specified os."""
srcs = skia_glob(DM_SRCS_ALL)
# TODO(benjaminwagner): None of the CreatePlatformGLContext_*.cpp files exist.
# TODO(jwg): Remove the globs if possible, they only select single files.
if os == SKIA_OS_IOS:
srcs = srcs + native.glob(["tools/gpu/iOS/CreatePlatformGLContext_iOS.cpp"])
elif os == SKIA_OS_ANDROID:
srcs = srcs + native.glob([
"tests/FontMgrAndroidParserTest.cpp",
# TODO(benjaminwagner): Figure out how to compile with EGL.
"tools/gpu/gl/CreatePlatformGLContext_none.cpp",
])
elif os == SKIA_OS_UNIX:
srcs = srcs + native.glob(["tools/gpu/gl/CreatePlatformGLContext_none.cpp"])
else:
fail("dm_srcs parameter 'os' must be one of SKIA_OS_{UNIX,ANDROID,IOS}.")
return srcs
################################################################################
## DM_INCLUDES
################################################################################
DM_INCLUDES = [
"dm",
"gm",
"experimental/svg/model",
"src/codec",
"src/core",
"src/effects",
"src/effects/gradients",
"src/fonts",
"src/images",
"src/pathops",
"src/pipe/utils",
"src/ports",
"src/xml",
"tests",
"tools",
"tools/debugger",
"tools/flags",
"tools/gpu",
"tools/timer",
]
################################################################################
## DM_ARGS
################################################################################
def DM_ARGS(asan):
source = ["tests", "gm", "image"]
# TODO(benjaminwagner): f16 and serialize-8888 fail.
config = ["565", "8888", "pdf", "srgb", "tiles_rt", "pic"]
# TODO(mtklein): maybe investigate why these fail?
match = [
"~Canvas",
"~Codec",
"~Codec_Dimensions",
"~Codec_stripes",
"~FontMgr",
"~PaintBreakText",
"~RecordDraw_TextBounds",
"~Scalar",
"~skps",
"~Stream",
]
if asan:
# The ASAN we use with Bazel has some strict checks, so omit tests that
# trigger them.
match += [
"~bigrect",
"~clippedcubic2",
"~conicpaths",
"~^gradients",
"~Math",
"~Matrix",
"~PathBigCubic",
"~PathOpsCubic",
"~PathOpsFailOp",
"~PathOpsOpCubicsThreaded",
"~PathOpsOpLoopsThreaded",
"~PathOpsSimplify",
"~PathOpsTightBoundsQuads",
"~Point",
"~sk_linear_to_srgb",
"~small_color_stop",
]
return ["--src"] + source + ["--config"] + config + ["--match"] + match
################################################################################
## COPTS
################################################################################
COPTS_UNIX = [
"-Wno-implicit-fallthrough", # Some intentional fallthrough.
"-Wno-deprecated-declarations", # Internal use of deprecated methods. :(
]
COPTS_ANDROID = [
"-mfpu=neon",
"-Wno-error=attributes", # 'GrResourceCache' declared with greater visibility than the
# type of its field 'GrResourceCache::fPurgeableQueue'... bogus.
]
COPTS_IOS = []
COPTS_ALL = []
################################################################################
## DEFINES
################################################################################
DEFINES_UNIX = [
"PNG_SKIP_SETJMP_CHECK",
"SK_BUILD_FOR_UNIX",
"SK_SAMPLES_FOR_X",
"SK_PDF_USE_SFNTLY",
"SK_CODEC_DECODES_RAW",
"SK_HAS_JPEG_LIBRARY",
"SK_HAS_PNG_LIBRARY",
"SK_HAS_WEBP_LIBRARY",
]
DEFINES_ANDROID = [
"SK_BUILD_FOR_ANDROID",
"SK_CODEC_DECODES_RAW",
"SK_HAS_JPEG_LIBRARY",
"SK_HAS_PNG_LIBRARY",
"SK_HAS_WEBP_LIBRARY",
]
DEFINES_IOS = [
"SK_BUILD_FOR_IOS",
"SK_BUILD_NO_OPTS",
"SK_HAS_JPEG_LIBRARY",
"SKNX_NO_SIMD",
]
DEFINES_ALL = [
# Chrome DEFINES.
"SK_USE_FLOATBITS",
"SK_USE_FREETYPE_EMBOLDEN",
# Turn on a few Google3-specific build fixes.
"GOOGLE3",
# Staging flags for API changes
"SK_SUPPORT_LEGACY_IMGEN_API",
# Temporarily Disable analytic AA for Google3
"SK_NO_ANALYTIC_AA",
]
################################################################################
## LINKOPTS
################################################################################
LINKOPTS_UNIX = []
LINKOPTS_ANDROID = [
"-lEGL",
]
LINKOPTS_IOS = []
LINKOPTS_ALL = [
"-ldl",
]