blob: bf205bc2f843a7ff1e28124c7f194ad5e4a4f41e [file] [log] [blame]
# This file will be copied into //third_party/externals/libpng via the new_local_repository
# rule in WORKSPACE.bazel, so all files should be relative to that path.
# We define this here because the emscripten toolchain calls the cpu wasm, whereas the
# bazelbuild/platforms call it wasm32. https://github.com/emscripten-core/emsdk/issues/919
config_setting(
name = "cpu_wasm",
values = {
"cpu": "wasm",
},
)
LIBPNG_SRCS = [
"png.c",
"pngconf.h",
"pngdebug.h",
"pngerror.c",
"pngget.c",
"pnginfo.h",
"pngmem.c",
"pngpread.c",
"pngpriv.h",
"pngread.c",
"pngrio.c",
"pngrtran.c",
"pngrutil.c",
"pngset.c",
"pngstruct.h",
"pngtrans.c",
"pngwio.c",
"pngwrite.c",
"pngwtran.c",
"pngwutil.c",
"pnglibconf.h",
] + select({
"@platforms//cpu:x86_64": [
"intel/filter_sse2_intrinsics.c",
"intel/intel_init.c",
],
"@platforms//cpu:arm64": [
"arm/arm_init.c",
"arm/filter_neon_intrinsics.c",
"arm/palette_neon_intrinsics.c",
],
# No SIMD support in wasm for now
":cpu_wasm": [],
# The default is to avoid using SIMD
"//conditions:default": [],
})
PNG_DEFINES = ["PNG_SET_OPTION_SUPPORTED"] + select({
"@platforms//cpu:x86_64": ["PNG_INTEL_SSE"],
"//conditions:default": [],
})
cc_library(
name = "libpng",
srcs = LIBPNG_SRCS,
hdrs = [
"png.h",
],
copts = [
"-Wno-unused-but-set-variable",
"-Wno-macro-redefined",
],
includes = [
# This allows #include <png.h> to work
".",
],
local_defines = PNG_DEFINES,
# This is included by pnglibconf.h, but because it is not a .h
# file, we must tell Bazel to explicitly bring it in as an "includable".
textual_hdrs = ["scripts/pnglibconf.h.prebuilt"],
visibility = ["//visibility:public"],
deps = ["@zlib_skia//:zlib"],
)
# Creates a file called pnglibconf.h that includes the default png settings with one
# modification, undefining PNG_READ_OPT_PLTE_SUPPORTED.
genrule(
name = "create_skia_pnglibconf.h",
outs = ["pnglibconf.h"],
cmd = "echo '#include \"scripts/pnglibconf.h.prebuilt\"\n#undef PNG_READ_OPT_PLTE_SUPPORTED' > $@",
)