Reland "Gyp file changes for the android framework."
Relands https://codereview.chromium.org/153093003/, which was reverted
with https://skia.googlesource.com/skia.git/+/eb6295044b97db05ec40625dcebc2459b2a38a98
This reverts commit 6b32be1402eb6c549d5ba1db71860e24f9de2991.
BUG=skia:1975
R=djsollen@google.com
Review URL: https://codereview.chromium.org/154053002
git-svn-id: http://skia.googlecode.com/svn/trunk@13321 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gyp/android_deps.gyp b/gyp/android_deps.gyp
index cd5b1b0..1669b2b 100644
--- a/gyp/android_deps.gyp
+++ b/gyp/android_deps.gyp
@@ -14,7 +14,68 @@
# This is due to the fact that we cannot use variables in an includes as the
# variable expansion step for gyp happens after the includes are processed.
{
- 'includes': [
- '../platform_tools/android/gyp/dependencies.gypi',
+ 'conditions': [
+ [ 'skia_android_framework == 0',
+ {
+ 'includes': [
+ '../platform_tools/android/gyp/dependencies.gypi',
+ ],
+ }, { # else skia_android_framework
+ 'cflags': [
+ '-Wno-error'
+ ],
+ 'targets': [
+ {
+ 'target_name': 'expat',
+ 'type': 'none',
+ 'direct_dependent_settings': {
+ 'libraries' : [
+ '-lexpat',
+ ],
+ },
+ },
+ {
+ 'target_name': 'gif',
+ 'type': 'none',
+ 'direct_dependent_settings': {
+ 'libraries' : [
+ 'libgif.a',
+ ],
+ 'include_dirs': [
+ 'external/giflib',
+ ],
+ },
+ },
+ {
+ 'target_name': 'png',
+ 'type': 'none',
+ 'direct_dependent_settings': {
+ 'libraries' : [
+ '-lpng',
+ ],
+ 'include_dirs': [
+ 'external/libpng',
+ ],
+ },
+ },
+ {
+ 'target_name': 'jpeg',
+ 'type': 'none',
+ 'direct_dependent_settings': {
+ 'libraries' : [
+ '-ljpeg',
+ ],
+ 'include_dirs': [
+ 'external/jpeg',
+ ],
+ },
+ },
+ {
+ 'target_name': 'cpu_features',
+ 'type': 'none',
+ },
+ ],
+ }
+ ],
],
}
diff --git a/gyp/android_framework_lib.gyp b/gyp/android_framework_lib.gyp
new file mode 100644
index 0000000..2b05598
--- /dev/null
+++ b/gyp/android_framework_lib.gyp
@@ -0,0 +1,20 @@
+# Copyright 2014 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'targets': [
+ {
+ 'target_name': 'libskia',
+ 'type': 'shared_library',
+ 'dependencies': [
+ 'core.gyp:core',
+ 'effects.gyp:effects',
+ 'images.gyp:images',
+ 'opts.gyp:opts',
+ 'pdf.gyp:pdf',
+ 'ports.gyp:ports',
+ ],
+ },
+ ],
+}
diff --git a/gyp/common.gypi b/gyp/common.gypi
index 48b9a6d..2a5bbd4 100644
--- a/gyp/common.gypi
+++ b/gyp/common.gypi
@@ -88,25 +88,30 @@
],
},
],
+ [ 'skia_android_framework==0', {
+ # These defines are not used for skia_android_framework, where we build
+ # one makefile and allow someone to add SK_DEBUG etc for their own
+ # debugging purposes.
+ 'configurations': {
+ 'Debug': {
+ 'defines': [
+ 'SK_DEBUG',
+ 'SK_DEVELOPER=1',
+ ],
+ },
+ 'Release': {
+ 'defines': [
+ 'SK_RELEASE',
+ ],
+ },
+ 'Release_Developer': {
+ 'inherit_from': ['Release'],
+ 'defines': [
+ 'SK_DEVELOPER=1',
+ ],
+ },
+ },
+ }],
],
- 'configurations': {
- 'Debug': {
- 'defines': [
- 'SK_DEBUG',
- 'SK_DEVELOPER=1',
- ],
- },
- 'Release': {
- 'defines': [
- 'SK_RELEASE',
- ],
- },
- 'Release_Developer': {
- 'inherit_from': ['Release'],
- 'defines': [
- 'SK_DEVELOPER=1',
- ],
- },
- },
}, # end 'target_defaults'
}
diff --git a/gyp/common_conditions.gypi b/gyp/common_conditions.gypi
index 4db0a40..bbf3097 100644
--- a/gyp/common_conditions.gypi
+++ b/gyp/common_conditions.gypi
@@ -193,6 +193,28 @@
},
],
+ ['skia_android_framework', {
+ 'cflags': [
+ # Skia does not enforce this usage pattern so we disable it here to avoid
+ # unecessary log spew when building
+ '-Wno-unused-parameter',
+
+ # Android's -D_FORTIFY_SOURCE=2 extensions are incompatibile with SkString.
+ # Revert to -D_FORTIFY_SOURCE=1
+ '-U_FORTIFY_SOURCE',
+ '-D_FORTIFY_SOURCE=1',
+ ],
+ 'defines': [
+ 'DCT_IFAST_SUPPORTED',
+ # using freetype's embolden allows us to adjust fake bold settings at
+ # draw-time, at which point we know which SkTypeface is being drawn
+ 'SK_USE_FREETYPE_EMBOLDEN',
+ # Android provides at least FreeType 2.4.0 at runtime.
+ 'SK_FONTHOST_FREETYPE_RUNTIME_VERSION=0x020400',
+ # Skia should not use dlopen on Android.
+ 'SK_CAN_USE_DLOPEN=0',
+ ],
+ }],
[ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "nacl", "chromeos"]',
{
@@ -452,6 +474,12 @@
'-fuse-ld=gold',
],
'conditions': [
+ [ 'skia_android_framework', {
+ 'libraries!': [
+ '-lstdc++',
+ '-lm',
+ ],
+ }],
[ 'skia_shared_lib', {
'cflags': [
'-fPIC',
diff --git a/gyp/common_variables.gypi b/gyp/common_variables.gypi
index c06666d..26b9961 100644
--- a/gyp/common_variables.gypi
+++ b/gyp/common_variables.gypi
@@ -45,13 +45,21 @@
# We set it automatically based on 'OS' (the host OS), but allow the
# user to override it via GYP_DEFINES if they like.
'skia_os%': '<(OS)',
+
+ 'skia_android_framework%': 0,
},
# Re-define all variables defined within the level-3 'variables' dict,
# so that siblings of the level-2 'variables' dict can see them.
- 'skia_os%': '<(skia_os)',
+ # (skia_os will depend on skia_android_framework.)
+ 'skia_android_framework%': '<(skia_android_framework)',
'conditions': [
+ [ 'skia_android_framework == 1', {
+ 'skia_os%': 'android',
+ }, {
+ 'skia_os%': '<(skia_os)',
+ }],
[ 'skia_os == "win"', {
'os_posix%': 0,
}, {
@@ -109,7 +117,8 @@
'conditions': [
[ 'skia_os == "win" and skia_arch_width == 32 or '
- 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "android"] or '
+ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "android"] '
+ 'and skia_android_framework == 0 or '
'skia_os == "mac" and skia_arch_width == 32', {
'skia_warnings_as_errors%': 1,
}, {
@@ -145,6 +154,7 @@
'skia_scalar%': '<(skia_scalar)',
'skia_mesa%': '<(skia_mesa)',
'skia_stroke_path_rendering%': '<(skia_stroke_path_rendering)',
+ 'skia_android_framework%': '<(skia_android_framework)',
'skia_android_path_rendering%': '<(skia_android_path_rendering)',
'skia_resource_cache_mb_limit%': '<(skia_resource_cache_mb_limit)',
'skia_resource_cache_count_limit%': '<(skia_resource_cache_count_limit)',
diff --git a/gyp/core.gyp b/gyp/core.gyp
index 8c5270e..187c02b 100644
--- a/gyp/core.gyp
+++ b/gyp/core.gyp
@@ -80,6 +80,12 @@
'android_deps.gyp:cpu_features',
],
}],
+ [ 'skia_android_framework', {
+ 'libraries': [
+ # Required for SkAtomics_android.h
+ '-lcutils',
+ ],
+ }],
[ 'skia_arch_type == "arm"', {
# The code in SkUtilsArm.cpp can be used on an ARM-based Linux system, not only Android.
'sources': [
diff --git a/gyp/freetype.gyp b/gyp/freetype.gyp
index b0957d0..6717c78 100644
--- a/gyp/freetype.gyp
+++ b/gyp/freetype.gyp
@@ -37,6 +37,22 @@
],
},
}],
+ [ 'skia_android_framework', {
+ 'include_dirs': [
+ 'external/expat/lib',
+ 'external/freetype/include',
+ ],
+ 'libraries': [
+ '-lft2',
+ ],
+ # Remove these, and use the system's freetype instead.
+ 'dependencies!': [
+ 'freetype_static',
+ ],
+ 'export_dependent_settings!': [
+ 'freetype_static',
+ ]
+ }],
],
},
{
diff --git a/gyp/images.gyp b/gyp/images.gyp
index dedea51..fdbf2a0 100644
--- a/gyp/images.gyp
+++ b/gyp/images.gyp
@@ -12,8 +12,12 @@
'libwebp.gyp:libwebp',
'utils.gyp:utils',
],
- 'export_dependent_settings': [
- 'libjpeg.gyp:*',
+ 'conditions': [
+ [ 'skia_android_framework == 0', {
+ 'export_dependent_settings': [
+ 'libjpeg.gyp:*',
+ ],
+ }],
],
'include_dirs': [
'../include/images',
@@ -42,16 +46,26 @@
'../src/images/SkImageDecoder.cpp',
'../src/images/SkImageDecoder_FactoryDefault.cpp',
'../src/images/SkImageDecoder_FactoryRegistrar.cpp',
+
# If decoders are added/removed to/from (all/individual)
# platform(s), be sure to update SkForceLinking.cpp
# so the right decoders will be forced to link.
+
+ # IMPORTANT: The build order of the SkImageDecoder_*.cpp files
+ # defines the order image decoders are tested when decoding a
+ # stream. The last decoder is the first one tested, so the .cpp
+ # files should be in listed in order from the least likely to be
+ # used, to the most likely (jpeg and png should be the last two
+ # for instance.) As a result, they are deliberately not in
+ # alphabetical order.
+ '../src/images/SkImageDecoder_wbmp.cpp',
'../src/images/SkImageDecoder_libbmp.cpp',
'../src/images/SkImageDecoder_libgif.cpp',
'../src/images/SkImageDecoder_libico.cpp',
+ '../src/images/SkImageDecoder_libwebp.cpp',
'../src/images/SkImageDecoder_libjpeg.cpp',
'../src/images/SkImageDecoder_libpng.cpp',
- '../src/images/SkImageDecoder_libwebp.cpp',
- '../src/images/SkImageDecoder_wbmp.cpp',
+
'../src/images/SkImageEncoder.cpp',
'../src/images/SkImageEncoder_Factory.cpp',
'../src/images/SkImageEncoder_argb.cpp',
@@ -140,8 +154,12 @@
'android_deps.gyp:gif',
'android_deps.gyp:png',
],
- 'export_dependent_settings': [
- 'android_deps.gyp:png'
+ 'conditions': [
+ [ 'skia_android_framework == 0', {
+ 'export_dependent_settings': [
+ 'android_deps.gyp:png'
+ ],
+ }],
],
},{ #else if skia_os != android
'sources!': [
diff --git a/gyp/libwebp.gyp b/gyp/libwebp.gyp
index 1f8689a..cacfab6 100644
--- a/gyp/libwebp.gyp
+++ b/gyp/libwebp.gyp
@@ -4,7 +4,13 @@
{
'variables': {
- 'use_system_libwebp%': 0,
+ 'conditions':[
+ ['skia_android_framework == 1', {
+ 'use_system_libwebp': 1,
+ }, {
+ 'use_system_libwebp%': 0,
+ }],
+ ],
},
'conditions': [
['use_system_libwebp==0', {
@@ -156,20 +162,36 @@
},
],
}, {
+ # use_system_libwep == 1
'targets': [
{
'target_name': 'libwebp',
'type': 'none',
- 'direct_dependent_settings': {
- 'defines': [
- 'ENABLE_WEBP',
+ 'conditions': [
+ [ 'skia_android_framework', {
+ 'direct_dependent_settings': {
+ 'libraries': [
+ 'libwebp-decode.a',
+ 'libwebp-encode.a',
+ ],
+ 'include_dirs': [
+ 'external/webp/include',
+ ],
+ },
+ }, { # skia_android_framework == 0
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'ENABLE_WEBP',
+ ],
+ },
+ 'link_settings': {
+ 'libraries': [
+ '-lwebp',
+ ],
+ },
+ },
],
- },
- 'link_settings': {
- 'libraries': [
- '-lwebp',
- ],
- },
+ ],
}
],
}],
diff --git a/gyp/opts.gyp b/gyp/opts.gyp
index 83dfe14..9fe4023 100644
--- a/gyp/opts.gyp
+++ b/gyp/opts.gyp
@@ -1,3 +1,4 @@
+# Gyp file for opts projects
{
'targets': [
# Due to an unfortunate intersection of lameness between gcc and gyp,
@@ -98,7 +99,9 @@
}],
],
}],
- [ '(skia_arch_type == "mips") or (skia_arch_type == "arm" and arm_version < 7) or (skia_os == "ios")', {
+ [ '(skia_arch_type == "mips") or (skia_arch_type == "arm" and arm_version < 7) \
+ or (skia_os == "ios") \
+ or (skia_os == "android" and skia_arch_type not in ["x86", "arm", "mips"])', {
'sources': [
'../src/opts/SkBitmapProcState_opts_none.cpp',
'../src/opts/SkBlitMask_opts_none.cpp',
diff --git a/gyp/pdf.gyp b/gyp/pdf.gyp
index 8281732..145dc5b 100644
--- a/gyp/pdf.gyp
+++ b/gyp/pdf.gyp
@@ -1,3 +1,4 @@
+# This file builds the PDF backend.
{
'targets': [
{
@@ -23,6 +24,20 @@
'../src/doc/SkDocument_PDF.cpp', # Chromium does use this file
],
+ 'conditions': [
+ [ 'skia_android_framework', {
+ # Add SFTNLY support for PDF (which in turns depends on ICU)
+ 'include_dirs': [
+ 'external/sfntly/cpp/src',
+ ],
+ 'libraries': [
+ 'libsfntly.a',
+ '-licuuc',
+ '-licui18n',
+ ],
+ }
+ ],
+ ],
# This section makes all targets that depend on this target
# #define SK_SUPPORT_PDF and have access to the pdf header files.
'direct_dependent_settings': {
diff --git a/gyp/zlib.gyp b/gyp/zlib.gyp
index eaa44c5..b26053e 100644
--- a/gyp/zlib.gyp
+++ b/gyp/zlib.gyp
@@ -1,3 +1,4 @@
+# Target for including zlib.
{
'targets': [
{
@@ -30,7 +31,16 @@
}],
[ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "android", "nacl"]', {
'link_settings': { 'libraries': [ '-lz', ], },
- 'defines': [ 'SK_ZLIB_INCLUDE=<zlib.h>', ],
+ 'conditions': [
+ [ 'skia_android_framework==0', {
+ 'defines': [ 'SK_ZLIB_INCLUDE=<zlib.h>', ],
+ }],
+ ],
+ }],
+ [ 'skia_android_framework', {
+ 'include_dirs': [
+ 'external/zlib',
+ ],
}],
],
},