GN: more optional components: jpeg, pdf, png, xml
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2267343004
Review-Url: https://codereview.chromium.org/2267343004
diff --git a/BUILD.gn b/BUILD.gn
index cdc1cb9..49e3e50 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -4,8 +4,13 @@
# found in the LICENSE file.
declare_args() {
+ skia_use_expat = true
skia_use_giflib = !is_fuchsia
+ skia_use_libjpeg_turbo = true
+ skia_use_libpng = true
skia_use_libwebp = !is_fuchsia
+ skia_use_sfntly = !is_fuchsia
+ skia_use_zlib = true
}
skia_public_includes = [
@@ -60,15 +65,7 @@
"third_party/ktx",
]
- defines = [
- "SK_GAMMA_APPLY_TO_A8",
-
- "SK_HAS_JPEG_LIBRARY",
- "SK_HAS_PNG_LIBRARY",
-
- # TODO(halcanary): make this the default; this is the value Android uses.
- "SK_SFNTLY_SUBSETTER=\"sample/chromium/font_subsetter.h\"",
- ]
+ defines = [ "SK_GAMMA_APPLY_TO_A8" ]
if (is_linux) {
defines += [ "SK_SAMPLES_FOR_X" ]
}
@@ -219,6 +216,57 @@
]
}
+optional("jpeg") {
+ enabled = skia_use_libjpeg_turbo
+ public_defines = [ "SK_HAS_JPEG_LIBRARY" ]
+
+ configs += skia_library_configs
+ deps = [
+ "//third_party/libjpeg-turbo:libjpeg",
+ ]
+ sources = [
+ "src/codec/SkJpegCodec.cpp",
+ "src/codec/SkJpegDecoderMgr.cpp",
+ "src/codec/SkJpegUtility.cpp",
+ "src/images/SkJPEGImageEncoder.cpp",
+ "src/images/SkJPEGWriteUtility.cpp",
+ ]
+}
+
+optional("pdf") {
+ enabled = skia_use_zlib
+ public_defines = []
+
+ configs += skia_library_configs
+ deps = [
+ "//third_party/zlib",
+ ]
+ sources = pdf_gypi.sources
+
+ if (skia_use_sfntly) {
+ deps += [ "//third_party/sfntly" ]
+ public_defines += [
+ # TODO(halcanary): make this the default; this is the value Android uses.
+ "SK_SFNTLY_SUBSETTER=\"sample/chromium/font_subsetter.h\"",
+ ]
+ }
+}
+
+optional("png") {
+ enabled = skia_use_libpng
+ public_defines = [ "SK_HAS_PNG_LIBRARY" ]
+
+ configs += skia_library_configs
+ deps = [
+ "//third_party/libpng",
+ ]
+ sources = [
+ "src/codec/SkIcoCodec.cpp",
+ "src/codec/SkPngCodec.cpp",
+ "src/images/SkPNGImageEncoder.cpp",
+ ]
+}
+
optional("webp") {
enabled = skia_use_libwebp
public_defines = [ "SK_HAS_WEBP_LIBRARY" ]
@@ -234,18 +282,32 @@
]
}
+optional("xml") {
+ enabled = skia_use_expat
+ public_defines = []
+
+ configs += skia_library_configs
+ deps = [
+ "//third_party/expat",
+ ]
+ sources = [
+ "src/xml/SkDOM.cpp",
+ "src/xml/SkXMLParser.cpp",
+ "src/xml/SkXMLWriter.cpp",
+ ]
+}
+
component("skia") {
public_configs = [ ":skia_public" ]
configs += skia_library_configs
deps = [
":gif",
+ ":jpeg",
+ ":pdf",
+ ":png",
":webp",
- "//third_party/expat",
- "//third_party/libjpeg-turbo:libjpeg",
- "//third_party/libpng",
- "//third_party/sfntly",
- "//third_party/zlib",
+ ":xml",
]
if (is_x86) {
deps += [
@@ -267,7 +329,6 @@
sources += core_gypi.sources
sources += effects_gypi.sources
sources += gpu_gypi.skgpu_sources
- sources += pdf_gypi.sources
sources += utils_gypi.sources
sources += [
"src/android/SkBitmapRegionCodec.cpp",
@@ -279,13 +340,8 @@
"src/codec/SkBmpStandardCodec.cpp",
"src/codec/SkCodec.cpp",
"src/codec/SkCodecImageGenerator.cpp",
- "src/codec/SkIcoCodec.cpp",
- "src/codec/SkJpegCodec.cpp",
- "src/codec/SkJpegDecoderMgr.cpp",
- "src/codec/SkJpegUtility.cpp",
"src/codec/SkMaskSwizzler.cpp",
"src/codec/SkMasks.cpp",
- "src/codec/SkPngCodec.cpp",
"src/codec/SkSampledCodec.cpp",
"src/codec/SkSampler.cpp",
"src/codec/SkSwizzler.cpp",
@@ -293,10 +349,7 @@
"src/gpu/gl/GrGLDefaultInterface_native.cpp",
"src/images/SkImageEncoder.cpp",
"src/images/SkImageEncoder_Factory.cpp",
- "src/images/SkJPEGImageEncoder.cpp",
- "src/images/SkJPEGWriteUtility.cpp",
"src/images/SkKTXImageEncoder.cpp",
- "src/images/SkPNGImageEncoder.cpp",
"src/ports/SkDiscardableMemory_none.cpp",
"src/ports/SkGlobalInitialization_default.cpp",
"src/ports/SkImageGenerator_skia.cpp",
@@ -307,9 +360,6 @@
"src/svg/SkSVGCanvas.cpp",
"src/svg/SkSVGDevice.cpp",
"src/utils/mac/SkStream_mac.cpp",
- "src/xml/SkDOM.cpp",
- "src/xml/SkXMLParser.cpp",
- "src/xml/SkXMLWriter.cpp",
"third_party/etc1/etc1.cpp",
"third_party/ktx/ktx.cpp",
]
diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp
index 0d73ad0..7096933 100644
--- a/src/codec/SkPngCodec.cpp
+++ b/src/codec/SkPngCodec.cpp
@@ -20,6 +20,8 @@
#include "SkTemplates.h"
#include "SkUtils.h"
+#include "png.h"
+
// This warning triggers false postives way too often in here.
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic ignored "-Wclobbered"
diff --git a/src/codec/SkPngCodec.h b/src/codec/SkPngCodec.h
index aace7b1..7bb833d 100644
--- a/src/codec/SkPngCodec.h
+++ b/src/codec/SkPngCodec.h
@@ -14,7 +14,11 @@
#include "SkRefCnt.h"
#include "SkSwizzler.h"
-#include "png.h"
+// Instead of including png.h here, forward declare the few types we refer to.
+struct png_struct_def;
+struct png_info_def;
+typedef png_struct_def png_struct;
+typedef png_info_def png_info;
class SkStream;
@@ -47,11 +51,11 @@
int startRow) = 0;
SkPngCodec(const SkEncodedInfo&, const SkImageInfo&, SkStream*, SkPngChunkReader*,
- png_structp, png_infop, int, int);
+ png_struct*, png_info*, int, int);
SkAutoTUnref<SkPngChunkReader> fPngChunkReader;
- png_structp fPng_ptr;
- png_infop fInfo_ptr;
+ png_struct* fPng_ptr;
+ png_info* fInfo_ptr;
// These are stored here so they can be used both by normal decoding and scanline decoding.
SkAutoTUnref<SkColorTable> fColorTable; // May be unpremul.
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index 887f950..a05462c 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -142,9 +142,11 @@
return !SkToBool(metrics.fFlags & SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag);
}
+#ifdef SK_SFNTLY_SUBSETTER
static bool can_subset(const SkAdvancedTypefaceMetrics& metrics) {
return !SkToBool(metrics.fFlags & SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag);
}
+#endif
int SkPDFFont::glyphsToPDFFontEncoding(SkGlyphID* glyphIDs, int numGlyphs) const {
// A font with multibyte glyphs will support all glyph IDs in a single font.
@@ -415,7 +417,7 @@
return;
}
- #ifdef SK_SFNTLY_SUBSETTER
+ #ifdef SK_SFNTLY_SUBSETTER
if (can_subset(metrics)) {
// Generate glyph id array. in format needed by sfntly
SkTDArray<uint32_t> glyphIDs;
@@ -432,7 +434,7 @@
// If subsetting fails, fall back to original font data.
fontAsset.reset(face->openStream(&ttcIndex));
}
- #endif // SK_SFNTLY_SUBSETTER
+ #endif // SK_SFNTLY_SUBSETTER
auto fontStream = sk_make_sp<SkPDFSharedStream>(std::move(fontAsset));
fontStream->dict()->insertInt("Length1", fontSize);
descriptor->insertObjRef("FontFile2", std::move(fontStream));