skia2/gyp/common_variables.gypi

239 lines
9.1 KiB
Plaintext
Raw Normal View History

# Copyright 2012 The Android Open Source Project
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
{
# Get ready for the ugly...
#
# - We have to nest our variables dictionaries multiple levels deep, so that
# this and other gyp files can rely on previously-set variable values in
# their 'variables': { 'conditions': [] } clauses.
#
# Example 1:
# Within this file, we use the value of variable 'skia_os' to set the
# value of variable 'os_posix', so 'skia_os' must be defined within a
# "more inner" (enclosed) scope than 'os_posix'.
#
# Example 2:
# http://src.chromium.org/viewvc/chrome/trunk/src/third_party/libjpeg/libjpeg.gyp?revision=102306 ,
# which we currently import into our build, uses the value of 'os_posix'
# within the 'conditions' list in its 'variables' dict.
# In order for that to work, it needs the value of 'os_posix' to have been
# set within a "more inner" (enclosed) scope than its own 'variables' dict.
#
# - On the other hand, key/value pairs of a given 'variable' dict are only
# inherited by:
# 1. directly enclosing 'variable' dicts, and
# 2. "sibling" 'variable' dicts (which, I guess, are combined into a single
# 'variable' dict during gyp processing)
# and NOT inherited by "uncles" (siblings of directly enclosing 'variable'
# dicts), so we have to re-define every variable at every enclosure level
# within our ridiculous matryoshka doll of 'variable' dicts. That's why
# we have variable definitions like this: 'skia_os%': '<(skia_os)',
#
# See http://src.chromium.org/viewvc/chrome/trunk/src/build/common.gypi?revision=127004 ,
# which deals with these same constraints in a similar manner.
#
'variables': { # level 1
'variables': { # level 2
# Variables needed by conditions list within the level-2 variables dict.
'variables': { # level 3
'variables': { # level 4
# We use 'skia_os' instead of 'OS' throughout our gyp files, to allow
# for cross-compilation (e.g. building for either MacOS or iOS on Mac).
# 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_os%': '<(skia_os)',
'skia_android_framework%': 0,
'conditions' : [
[ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "mac"]', {
'skia_arch_type%': 'x86_64',
}, {
'skia_arch_type%': 'x86',
}],
],
'arm_version%': 0,
'arm_neon%': 0,
'skia_egl%': 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 will depend on skia_android_framework.)
'skia_android_framework%': '<(skia_android_framework)',
ARM Skia NEON patches - 35 - First AArch64 support Aarch64 support This change contains the necessary modifications to have Skia build and run properly on an ARMv8 processor in aarch64 execution state. Here's a list of the changes: - add an arm64 target to the build system + SK_CPU_ARM64 flag - MatrixTest was failing when built in Release mode. Fused MAC instructions were generated which made some intermediate results more accurate. As the test relies on result comparison, the more precise results when compared to others led to a gap bigger than what was tolerated. As I don't know if some actual skia code relies on results being comparable, I've disabled fused MAC instruction with -ffp-contract=off for arm64. - Modify include/core/SkOnce.h to have barriers work. - SK_CPU_ARM64 implies SK_ARM_NEON_MODE_ALWAYS. - use existing Xfermode optimisations with modifications that can be removed in the future when toolchains are ready. Also save a few instructions is two Xfermodes (will apply to ARM too). - use existing SkBoxBlur and SkMorphology optimisations. - use existing SkBlitMask optimisations - use existing BitmapProcState and Convolution optimisations. Future changes will include: - Blitters (only partialy merged upstream) - SkUtils (there's little value in sending asm optimisations without having them benchmarked on real hardware). Signed-off-by: Kevin PETIT <kevin.petit@arm.com> BUG=skia: Committed: http://code.google.com/p/skia/source/detail?r=13980 R=djsollen@google.com, reed@google.com, mtklein@google.com, halcanary@google.com Author: kevin.petit@arm.com Review URL: https://codereview.chromium.org/143423004 git-svn-id: http://skia.googlecode.com/svn/trunk@14025 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-04-02 15:03:56 +00:00
'skia_arch_type%': '<(skia_arch_type)',
'arm_version%': '<(arm_version)',
'arm_neon%': '<(arm_neon)',
'skia_egl%': '<(skia_egl)',
'conditions': [
[ 'skia_android_framework == 1', {
'skia_os%': 'android',
'skia_chrome_utils%': 0,
'skia_use_system_json%': 1,
}, {
'skia_os%': '<(skia_os)',
'skia_chrome_utils%': 1,
'skia_use_system_json%': 0,
}],
[ 'skia_os == "win"', {
'os_posix%': 0,
}, {
'os_posix%': 1,
}],
['"64" in skia_arch_type', {
'skia_arch_width%': 64,
}, {
'skia_arch_width%': 32,
}],
[ 'skia_os == "android"', {
'skia_static_initializers%': 0,
'skia_egl%': 1,
}, {
'skia_static_initializers%': 1,
}],
[ 'skia_os == "ios"', {
'skia_arch_type%': 'arm',
'arm_version%': 7,
'arm_neon%': 0, # neon asm files known not to work with the ios build
}],
[ 'skia_os == "android" and not skia_android_framework',
Build Skia for a bare-bones embedded Linux system. Motivation: I have downloaded a barebones Linux system built for 64-bit ARM from linaro.org and a ARMv8 Foundation Model from arm.com to run it on. This will let us build and test Skia on ARM64 before we aquire hardware to allow that. This CL introduces the changes to the build files necessary to build Skia on a barebones embedded Linux system. I tested it with the aarch64 GCC compiler provided by linaro.org. Changes: Add a "barelinux" target_os for the DEPS file. Add an optional git download of zlib. Changes to gyp files: these changes abstract out libpng, libz, and giflib so that images.gyp doesn't know whether they are static or dynamically linked. I also add the variables skia_giflib_static, skia_libpng_static, skia_zlib_static, and skia_freetype_static, all of which default to false but when set to true will override the behavior of the giflib, libpng, zlib, and freetype build targets to require them to build statically. Also, the skia_no_fontconfig variable turns off use of the fontconfig service. Scripts in platform_tools/barelinux/bin: arm64_download - this script downloads the Linaro's ARMv8 Aarch64 toolchain and minimal embedded Linux system as well as ARM's foundation model. The required files are mirrored on Google Cloud. The script then starts a emulated Arm64 Linux system in the background. After the boot is complete, you can SSH into the system at port 8022 via user@localhost. The SSH key will be downloaded into the working directery as well. download_deps - Uses gclient to download Skia's dependencies for a bare Linux system (the normal dependecies plus giflib, libpng, and zlib.) barelinux_make - this script builds a version of skia that does not depend on external libraries, perfect for putting in an embedded system running Linux. Assumes you have run download_deps first. To test: To build a barelinux target, use the barelinux_make script. To build for a armv8 system: skia_arch_type=arm arm_neon=0 armv7=1 armv8=1 arm_thumb=0 skia_arch_width=64 and set the CC and CXX variables to point at the cross-compiler downloaded by arm64_download. R=djsollen@google.com, scroggo@google.com, borenet@google.com Author: halcanary@google.com Review URL: https://codereview.chromium.org/152513007 git-svn-id: http://skia.googlecode.com/svn/trunk@13570 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-02-24 20:22:34 +00:00
# skia_freetype_static - on OS variants that normally would
# dynamically link the system FreeType library, don't do
# that; instead statically link to the version in
# third_party/freetype and third_party/externals/freetype.
{
'skia_freetype_static%': '1',
}, {
'skia_freetype_static%': '0',
}
],
],
Build Skia for a bare-bones embedded Linux system. Motivation: I have downloaded a barebones Linux system built for 64-bit ARM from linaro.org and a ARMv8 Foundation Model from arm.com to run it on. This will let us build and test Skia on ARM64 before we aquire hardware to allow that. This CL introduces the changes to the build files necessary to build Skia on a barebones embedded Linux system. I tested it with the aarch64 GCC compiler provided by linaro.org. Changes: Add a "barelinux" target_os for the DEPS file. Add an optional git download of zlib. Changes to gyp files: these changes abstract out libpng, libz, and giflib so that images.gyp doesn't know whether they are static or dynamically linked. I also add the variables skia_giflib_static, skia_libpng_static, skia_zlib_static, and skia_freetype_static, all of which default to false but when set to true will override the behavior of the giflib, libpng, zlib, and freetype build targets to require them to build statically. Also, the skia_no_fontconfig variable turns off use of the fontconfig service. Scripts in platform_tools/barelinux/bin: arm64_download - this script downloads the Linaro's ARMv8 Aarch64 toolchain and minimal embedded Linux system as well as ARM's foundation model. The required files are mirrored on Google Cloud. The script then starts a emulated Arm64 Linux system in the background. After the boot is complete, you can SSH into the system at port 8022 via user@localhost. The SSH key will be downloaded into the working directery as well. download_deps - Uses gclient to download Skia's dependencies for a bare Linux system (the normal dependecies plus giflib, libpng, and zlib.) barelinux_make - this script builds a version of skia that does not depend on external libraries, perfect for putting in an embedded system running Linux. Assumes you have run download_deps first. To test: To build a barelinux target, use the barelinux_make script. To build for a armv8 system: skia_arch_type=arm arm_neon=0 armv7=1 armv8=1 arm_thumb=0 skia_arch_width=64 and set the CC and CXX variables to point at the cross-compiler downloaded by arm64_download. R=djsollen@google.com, scroggo@google.com, borenet@google.com Author: halcanary@google.com Review URL: https://codereview.chromium.org/152513007 git-svn-id: http://skia.googlecode.com/svn/trunk@13570 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-02-24 20:22:34 +00:00
# skia_no_fontconfig - On POSIX systems that would normally use the
# SkFontHost_fontconfig interface; use the SkFontHost_linux
# version instead.
'skia_no_fontconfig%': '0',
'skia_embedded_fonts%': '0',
Build Skia for a bare-bones embedded Linux system. Motivation: I have downloaded a barebones Linux system built for 64-bit ARM from linaro.org and a ARMv8 Foundation Model from arm.com to run it on. This will let us build and test Skia on ARM64 before we aquire hardware to allow that. This CL introduces the changes to the build files necessary to build Skia on a barebones embedded Linux system. I tested it with the aarch64 GCC compiler provided by linaro.org. Changes: Add a "barelinux" target_os for the DEPS file. Add an optional git download of zlib. Changes to gyp files: these changes abstract out libpng, libz, and giflib so that images.gyp doesn't know whether they are static or dynamically linked. I also add the variables skia_giflib_static, skia_libpng_static, skia_zlib_static, and skia_freetype_static, all of which default to false but when set to true will override the behavior of the giflib, libpng, zlib, and freetype build targets to require them to build statically. Also, the skia_no_fontconfig variable turns off use of the fontconfig service. Scripts in platform_tools/barelinux/bin: arm64_download - this script downloads the Linaro's ARMv8 Aarch64 toolchain and minimal embedded Linux system as well as ARM's foundation model. The required files are mirrored on Google Cloud. The script then starts a emulated Arm64 Linux system in the background. After the boot is complete, you can SSH into the system at port 8022 via user@localhost. The SSH key will be downloaded into the working directery as well. download_deps - Uses gclient to download Skia's dependencies for a bare Linux system (the normal dependecies plus giflib, libpng, and zlib.) barelinux_make - this script builds a version of skia that does not depend on external libraries, perfect for putting in an embedded system running Linux. Assumes you have run download_deps first. To test: To build a barelinux target, use the barelinux_make script. To build for a armv8 system: skia_arch_type=arm arm_neon=0 armv7=1 armv8=1 arm_thumb=0 skia_arch_width=64 and set the CC and CXX variables to point at the cross-compiler downloaded by arm64_download. R=djsollen@google.com, scroggo@google.com, borenet@google.com Author: halcanary@google.com Review URL: https://codereview.chromium.org/152513007 git-svn-id: http://skia.googlecode.com/svn/trunk@13570 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-02-24 20:22:34 +00:00
'skia_sanitizer%': '',
'skia_scalar%': 'float',
'skia_mesa%': 0,
'skia_gpu_extra_dependency_path%': '',
'skia_stroke_path_rendering%': 0,
'skia_android_path_rendering%': 0,
'skia_resource_cache_mb_limit%': 0,
'skia_resource_cache_count_limit%': 0,
'skia_angle%': 0,
'skia_gdi%': 0,
'skia_gpu%': 1,
'skia_osx_deployment_target%': '',
'skia_profile_enabled%': 0,
'skia_win_debuggers_path%': '',
'skia_shared_lib%': 0,
'skia_opencl%': 0,
'skia_force_distance_field_text%': 0,
# These variables determine the default optimization level for different
# compilers.
'skia_default_vs_optimization_level': 3, # full (/Ox)
'skia_default_gcc_optimization_level': 3, # -O3
},
'conditions': [
[ 'skia_os in ["mac", "linux", "freebsd", "openbsd", "solaris", "android", "win"] '
'and skia_android_framework == 0', {
'skia_warnings_as_errors%': 1,
}, {
'skia_warnings_as_errors%': 0,
}],
# This variable allows the user to customize the optimization level used
# by the compiler. The user should be aware that this has different
# meanings for different compilers and should exercise caution when
# overriding it.
[ 'skia_os == "win"', {
'skia_release_optimization_level%': '<(skia_default_vs_optimization_level)',
}, {
'skia_release_optimization_level%': '<(skia_default_gcc_optimization_level)',
}],
[ 'skia_sanitizer', {
'skia_clang_build': 1,
'skia_keep_frame_pointer': 1,
}, {
'skia_clang_build%': 0,
'skia_keep_frame_pointer%': 0,
}],
[ 'skia_shared_lib or skia_sanitizer or skia_os == "android"', {
'skia_pic%' : 1,
}, {
'skia_pic%' : 0,
}
],
],
# Re-define all variables defined within the level-2 'variables' dict,
# so that siblings of the level-1 'variables' dict can see them.
'arm_version%': '<(arm_version)',
'arm_neon%': '<(arm_neon)',
'arm_neon_optional%': 0,
'mips_arch_variant%': 'mips32',
'mips_dsp%': 0,
'skia_os%': '<(skia_os)',
'os_posix%': '<(os_posix)',
Build Skia for a bare-bones embedded Linux system. Motivation: I have downloaded a barebones Linux system built for 64-bit ARM from linaro.org and a ARMv8 Foundation Model from arm.com to run it on. This will let us build and test Skia on ARM64 before we aquire hardware to allow that. This CL introduces the changes to the build files necessary to build Skia on a barebones embedded Linux system. I tested it with the aarch64 GCC compiler provided by linaro.org. Changes: Add a "barelinux" target_os for the DEPS file. Add an optional git download of zlib. Changes to gyp files: these changes abstract out libpng, libz, and giflib so that images.gyp doesn't know whether they are static or dynamically linked. I also add the variables skia_giflib_static, skia_libpng_static, skia_zlib_static, and skia_freetype_static, all of which default to false but when set to true will override the behavior of the giflib, libpng, zlib, and freetype build targets to require them to build statically. Also, the skia_no_fontconfig variable turns off use of the fontconfig service. Scripts in platform_tools/barelinux/bin: arm64_download - this script downloads the Linaro's ARMv8 Aarch64 toolchain and minimal embedded Linux system as well as ARM's foundation model. The required files are mirrored on Google Cloud. The script then starts a emulated Arm64 Linux system in the background. After the boot is complete, you can SSH into the system at port 8022 via user@localhost. The SSH key will be downloaded into the working directery as well. download_deps - Uses gclient to download Skia's dependencies for a bare Linux system (the normal dependecies plus giflib, libpng, and zlib.) barelinux_make - this script builds a version of skia that does not depend on external libraries, perfect for putting in an embedded system running Linux. Assumes you have run download_deps first. To test: To build a barelinux target, use the barelinux_make script. To build for a armv8 system: skia_arch_type=arm arm_neon=0 armv7=1 armv8=1 arm_thumb=0 skia_arch_width=64 and set the CC and CXX variables to point at the cross-compiler downloaded by arm64_download. R=djsollen@google.com, scroggo@google.com, borenet@google.com Author: halcanary@google.com Review URL: https://codereview.chromium.org/152513007 git-svn-id: http://skia.googlecode.com/svn/trunk@13570 2bbb7eff-a529-9590-31e7-b0007b416f81
2014-02-24 20:22:34 +00:00
'skia_freetype_static%': '<(skia_freetype_static)',
'skia_no_fontconfig%': '<(skia_no_fontconfig)',
'skia_embedded_fonts%': '<(skia_embedded_fonts)',
'skia_sanitizer%': '<(skia_sanitizer)',
'skia_scalar%': '<(skia_scalar)',
'skia_mesa%': '<(skia_mesa)',
'skia_gpu_extra_dependency_path%': '<(skia_gpu_extra_dependency_path)',
'skia_stroke_path_rendering%': '<(skia_stroke_path_rendering)',
'skia_android_framework%': '<(skia_android_framework)',
'skia_use_system_json%': '<(skia_use_system_json)',
'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)',
'skia_angle%': '<(skia_angle)',
'skia_arch_width%': '<(skia_arch_width)',
'skia_arch_type%': '<(skia_arch_type)',
'skia_chrome_utils%': '<(skia_chrome_utils)',
'skia_gdi%': '<(skia_gdi)',
'skia_gpu%': '<(skia_gpu)',
'skia_win_exceptions%': 0,
'skia_win_ltcg%': 1,
'skia_osx_deployment_target%': '<(skia_osx_deployment_target)',
'skia_profile_enabled%': '<(skia_profile_enabled)',
'skia_shared_lib%': '<(skia_shared_lib)',
'skia_opencl%': '<(skia_opencl)',
'skia_force_distance_field_text%': '<(skia_force_distance_field_text)',
'skia_static_initializers%': '<(skia_static_initializers)',
'ios_sdk_version%': '6.0',
'skia_win_debuggers_path%': '<(skia_win_debuggers_path)',
'skia_run_pdfviewer_in_gm%': 0,
'skia_disable_inlining%': 0,
'skia_moz2d%': 0,
'skia_is_bot%': '<!(python -c "import os; print os.environ.get(\'CHROME_HEADLESS\', 0)")',
'skia_egl%': '<(skia_egl)',
'skia_fast%': 0,
'skia_fast_flags': [
'-O3', # Even for Debug builds.
'-march=native', # Use all features of and optimize for THIS machine.
'-fomit-frame-pointer', # Sometimes an extra register is nice, and cuts a push/pop.
'-ffast-math', # Optimize float math even when it breaks IEEE compliance.
#'-flto' # Enable link-time optimization.
],
# These are referenced by our .gypi files that list files (e.g. core.gypi)
#
'skia_src_path%': '../src',
'skia_include_path%': '../include',
},
}