summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authormichaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-20 20:35:01 +0000
committermichaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-20 20:35:01 +0000
commitda1c8d69b77346f5f4dc1d34693c0a43e630cedc (patch)
tree70dd06e928565b94547fa1e15b460b088e3f8db0 /build
parent4eb0f75ebb5ed7d029700b6647a64a9917f1e7b4 (diff)
downloadchromium_src-da1c8d69b77346f5f4dc1d34693c0a43e630cedc.zip
chromium_src-da1c8d69b77346f5f4dc1d34693c0a43e630cedc.tar.gz
chromium_src-da1c8d69b77346f5f4dc1d34693c0a43e630cedc.tar.bz2
Upstream: The Common.gypi change for Android.
BUG= TEST= Review URL: http://codereview.chromium.org/7941007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102007 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build')
-rw-r--r--build/common.gypi350
1 files changed, 344 insertions, 6 deletions
diff --git a/build/common.gypi b/build/common.gypi
index dab183e..aebb3c5 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -233,7 +233,7 @@
}],
# Flags to use Gtk and X11 on non-Mac POSIX platforms
- ['OS=="win" or OS=="mac"', {
+ ['OS=="win" or OS=="mac" or OS=="android"', {
'use_glib%': 0,
'toolkit_uses_gtk%': 0,
'use_x11%': 0,
@@ -287,6 +287,11 @@
'webui_task_manager%': 0,
}],
+ ['OS=="android"', {
+ 'proprietary_codecs%': 1,
+ 'enable_webrtc%': 0,
+ }],
+
# Enable smooth scrolling for Mac, Win, Linux and ChromeOS
['OS=="linux" or OS=="mac" or OS=="win"', {
'enable_smooth_scrolling%': 1,
@@ -444,6 +449,9 @@
'clang_load%': '',
'clang_add_plugin%': '',
+ # The default type of gtest.
+ 'gtest_target_type%': 'executable',
+
# Enable sampling based profiler.
# See http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html
'profiling%': '0',
@@ -550,7 +558,7 @@
'icu_src_dir': '../third_party/icu',
'conditions': [
- ['os_posix==1 and OS!="mac"', {
+ ['os_posix==1 and OS!="mac" and OS!="android"', {
# This will set gcc_version to XY if you are running gcc X.Y.*.
# This is used to tweak build flags for gcc 4.4.
'gcc_version%': '<!(python <(DEPTH)/build/compiler_version.py)',
@@ -566,8 +574,73 @@
'linux_dump_symbols%': 1,
}],
],
- }], # os_posix==1 and OS!="mac"
+ }], # os_posix==1 and OS!="mac" and OS!="android"
+ ['OS=="android"', {
+ # Location of Android NDK.
+ 'variables': {
+ 'variables': {
+ 'android_ndk_root%': '<!(/bin/echo -n $ANDROID_NDK_ROOT)',
+ 'android_target_arch%': 'arm', # target_arch in android terms.
+
+ # Switch between different build types, currently only '0' is
+ # supported.
+ 'android_build_type%': 0,
+ },
+ 'android_ndk_root%': '<(android_ndk_root)',
+ 'android_ndk_sysroot': '<(android_ndk_root)/platforms/android-9/arch-<(android_target_arch)',
+ 'android_build_type%': '<(android_build_type)',
+ },
+ 'android_ndk_root%': '<(android_ndk_root)',
+ 'android_ndk_sysroot': '<(android_ndk_sysroot)',
+ 'android_ndk_include': '<(android_ndk_sysroot)/usr/include',
+ 'android_ndk_lib': '<(android_ndk_sysroot)/usr/lib',
+
+ # Uses Android's crash report system
+ 'linux_breakpad%': 0,
+
+ # Always uses openssl.
+ 'use_openssl%': 1,
+
+ 'proprietary_codecs%': '<(proprietary_codecs)',
+ 'safe_browsing%': 0,
+ 'configuration_policy%': 0,
+
+ # Builds the gtest targets as a shared_library.
+ # TODO(michaelbai): Use the fixed value 'shared_library' once it
+ # is fully supported.
+ 'gtest_target_type%': '<(gtest_target_type)',
+
+ # Uses system APIs for decoding audio and video.
+ 'use_libffmpeg%': '0',
+
+ # Always use the chromium skia. The use_system_harfbuzz needs to
+ # match use_system_skia.
+ 'use_system_skia%': '0',
+ 'use_system_harfbuzz%': '0',
+
+ # Use the system icu.
+ 'use_system_icu%': 1,
+ # Choose static link by build type.
+ 'conditions': [
+ ['android_build_type==0', {
+ 'static_link_system_icu%': 1,
+ }, {
+ 'static_link_system_icu%': 0,
+ }],
+ ],
+ # Enable to use system sqlite.
+ 'use_system_sqlite%': '<(android_build_type)',
+ # Enable to use system libjpeg.
+ 'use_system_libjpeg%': '<(android_build_type)',
+ # Enable to use the system libexpat.
+ 'use_system_libexpat%': '<(android_build_type)',
+ # Enable to use the system stlport, otherwise statically
+ # link the NDK one?
+ 'use_system_stlport%': '<(android_build_type)',
+ # Copy it out one scope.
+ 'android_build_type%': '<(android_build_type)',
+ }], # OS=="android"
['OS=="mac"', {
# Enable clang on mac by default!
'clang%': 1,
@@ -701,7 +774,9 @@
'ka', 'ku', 'kw', 'ms', 'ug'
],
}],
-
+ ['OS=="android"', {
+ 'grit_defines': ['-D', 'android'],
+ }],
['clang_use_chrome_plugins==1', {
'clang_chrome_plugins_flags':
'<!(<(DEPTH)/tools/clang/scripts/plugin_flags.sh)',
@@ -910,7 +985,7 @@
}],
],
}],
- ['OS=="linux"', {
+ ['OS=="linux" or OS=="android"', {
'cflags': [ '-ftest-coverage',
'-fprofile-arcs' ],
'link_settings': { 'libraries': [ '-lgcov' ] },
@@ -1351,6 +1426,29 @@
'-O>(debug_optimize)',
'-g',
],
+ 'conditions' : [
+ ['OS=="android"', {
+ 'cflags': [
+ '-fno-omit-frame-pointer',
+ ],
+ }],
+ ],
+ 'target_conditions' : [
+ ['_toolset=="target"', {
+ 'conditions': [
+ ['OS=="android" and debug_optimize==0', {
+ 'cflags': [
+ '-mlong-calls', # Needed when compiling with -O0
+ ],
+ }],
+ ['arm_thumb==1', {
+ 'cflags': [
+ '-marm',
+ ],
+ }],
+ ],
+ }],
+ ],
},
'Release_Base': {
'variables': {
@@ -1389,6 +1487,11 @@
'-Wl,--gc-sections',
],
}],
+ ['OS=="android"', {
+ 'cflags': [
+ '-fomit-frame-pointer',
+ ],
+ }],
['clang==1', {
'cflags!': [
'-fno-ident',
@@ -1517,7 +1620,7 @@
'-Wno-abi',
],
'conditions': [
- ['arm_thumb == 1', {
+ ['arm_thumb==1', {
'cflags': [
'-mthumb',
]
@@ -1536,6 +1639,30 @@
}]
],
}],
+ ['OS=="android"', {
+ # The following flags are derived from what Android uses
+ # by default when building for arm.
+ 'cflags': [ '-Wno-psabi', ],
+ 'conditions': [
+ ['arm_thumb == 1', {
+ # Android toolchain doesn't support -mimplicit-it=thumb
+ 'cflags!': [ '-Wa,-mimplicit-it=thumb', ],
+ 'cflags': [ '-mthumb-interwork', ],
+ }],
+ ['armv7==0', {
+ # Flags suitable for Android emulator
+ 'cflags': [
+ '-march=armv5te',
+ '-mtune=xscale',
+ '-msoft-float',
+ '-D__ARM_ARCH_5__',
+ '-D__ARM_ARCH_5T__',
+ '-D__ARM_ARCH_5E__',
+ '-D__ARM_ARCH_5TE__',
+ ],
+ }],
+ ],
+ }],
],
}],
],
@@ -1630,6 +1757,217 @@
],
},
}],
+ # Android-specific options; note that most are set above with Linux.
+ ['OS=="android"', {
+ 'variables': {
+ 'android_target_arch%': 'arm', # target_arch in android terms.
+ 'conditions': [
+ # Android uses x86 instead of ia32 for their target_arch designation.
+ ['target_arch=="ia32"', {
+ 'android_target_arch%': 'x86',
+ }],
+ # Use shared stlport library when system one used.
+ # Figure this out early since it needs symbols from libgcc.a, so it
+ # has to be before that in the set of libraries.
+ ['use_system_stlport==1', {
+ 'android_stlport_library': 'stlport',
+ }, {
+ 'android_stlport_library': 'stlport_static',
+ }],
+ ],
+
+ # Placing this variable here prevents from forking libvpx, used
+ # by remoting. Remoting is off, so it needn't built,
+ # so forking it's deps seems like overkill.
+ # But this variable need defined to properly run gyp.
+ # A proper solution is to have an OS==android conditional
+ # in third_party/libvpx/libvpx.gyp to define it.
+ 'libvpx_path': 'lib/linux/arm',
+ },
+ 'target_defaults': {
+ # Build a Release build by default to match Android build behavior.
+ # This is typical with Android because Debug builds tend to be much
+ # larger and run very slowly on constrained devices. It is still
+ # possible to do a Debug build by specifying BUILDTYPE=Debug on the
+ # 'make' command line.
+ 'default_configuration': 'Release',
+
+ 'variables': {
+ 'release_extra_cflags%': '',
+ },
+
+ 'target_conditions': [
+ # Settings for building device targets using Android's toolchain.
+ # These are based on the setup.mk file from the Android NDK.
+ #
+ # The NDK Android executable link step looks as follows:
+ # $LDFLAGS
+ # $(TARGET_CRTBEGIN_DYNAMIC_O) <-- crtbegin.o
+ # $(PRIVATE_OBJECTS) <-- The .o that we built
+ # $(PRIVATE_STATIC_LIBRARIES) <-- The .a that we built
+ # $(TARGET_LIBGCC) <-- libgcc.a
+ # $(PRIVATE_SHARED_LIBRARIES) <-- The .so that we built
+ # $(PRIVATE_LDLIBS) <-- System .so
+ # $(TARGET_CRTEND_O) <-- crtend.o
+ #
+ # For now the above are approximated for executables by adding
+ # crtbegin.o to the end of the ldflags and 'crtend.o' to the end
+ # of 'libraries'.
+ #
+ # The NDK Android shared library link step looks as follows:
+ # $LDFLAGS
+ # $(PRIVATE_OBJECTS) <-- The .o that we built
+ # -l,--whole-archive
+ # $(PRIVATE_WHOLE_STATIC_LIBRARIES)
+ # -l,--no-whole-archive
+ # $(PRIVATE_STATIC_LIBRARIES) <-- The .a that we built
+ # $(TARGET_LIBGCC) <-- libgcc.a
+ # $(PRIVATE_SHARED_LIBRARIES) <-- The .so that we built
+ # $(PRIVATE_LDLIBS) <-- System .so
+ #
+ # For now, assume not need any whole static libs.
+ #
+ # For both executables and shared libraries, add the proper
+ # libgcc.a to the start of libraries which puts it in the
+ # proper spot after .o and .a files get linked in.
+ #
+ # TODO: The proper thing to do longer-tem would be proper gyp
+ # support for a custom link command line.
+ ['_toolset=="target"', {
+ 'cflags!': [
+ '-pthread', # Not supported by Android toolchain.
+ ],
+ 'cflags': [
+ '-U__linux__', # Don't allow toolchain to claim -D__linux__
+ '-ffunction-sections',
+ '-funwind-tables',
+ '-g',
+ '-fstack-protector',
+ '-fno-short-enums',
+ '-finline-limit=64',
+ '-Wa,--noexecstack',
+ '-Wno-error=non-virtual-dtor', # TODO(michaelbai): Fix warnings.
+ '<@(release_extra_cflags)',
+ # Note: This include is in cflags to ensure that it comes after
+ # all of the includes.
+ '-I<(android_ndk_include)',
+ ],
+ 'defines': [
+ 'ANDROID',
+ '__GNU_SOURCE=1', # Necessary for clone()
+ 'USE_STLPORT=1',
+ '_STLP_USE_PTR_SPECIALIZATIONS=1',
+ 'HAVE_OFF64_T',
+ 'HAVE_SYS_UIO_H',
+ 'ANDROID_BINSIZE_HACK', # Enable temporary hacks to reduce binsize.
+ ],
+ 'ldflags!': [
+ '-pthread', # Not supported by Android toolchain.
+ ],
+ 'ldflags': [
+ '-nostdlib',
+ '-Wl,--no-undefined',
+ '-Wl,--icf=safe', # Enable identical code folding to reduce size
+ # Don't export symbols from statically linked libraries.
+ '-Wl,--exclude-libs=ALL',
+ ],
+ 'libraries!': [
+ '-lrt', # librt is built into Bionic.
+ # Not supported by Android toolchain.
+ # Where do these come from? Can't find references in
+ # any Chromium gyp or gypi file. Maybe they come from
+ # gyp itself?
+ '-lpthread', '-lnss3', '-lnssutil3', '-lsmime3', '-lplds4', '-lplc4', '-lnspr4',
+ ],
+ 'libraries': [
+ '-l<(android_stlport_library)',
+ # Manually link the libgcc.a that the cross compiler uses.
+ '<!($CROSS_CC -print-libgcc-file-name)',
+ '-lc',
+ '-ldl',
+ '-lstdc++',
+ '-lm',
+ ],
+ 'conditions': [
+ ['android_build_type==0', {
+ 'ldflags': [
+ '-Wl,-rpath-link=<(android_ndk_lib)',
+ '-L<(android_ndk_lib)',
+ ],
+ }],
+ # NOTE: The stlport header include paths below are specified in
+ # cflags rather than include_dirs because they need to come
+ # after include_dirs. Think of them like system headers, but
+ # don't use '-isystem' because the arm-linux-androideabi-4.4.3
+ # toolchain (circa Gingerbread) will exhibit strange errors.
+ # The include ordering here is important; change with caution.
+ ['use_system_stlport==0', {
+ 'cflags': [
+ '-I<(android_ndk_root)/sources/cxx-stl/stlport/stlport',
+ ],
+ 'conditions': [
+ ['target_arch=="arm" and armv7==1', {
+ 'ldflags': [
+ '-L<(android_ndk_root)/sources/cxx-stl/stlport/libs/armeabi-v7a',
+ ],
+ }],
+ ['target_arch=="arm" and armv7==0', {
+ 'ldflags': [
+ '-L<(android_ndk_root)/sources/cxx-stl/stlport/libs/armeabi',
+ ],
+ }],
+ ['target_arch=="ia32"', {
+ 'ldflags': [
+ '-L<(android_ndk_root)/sources/cxx-stl/stlport/libs/x86',
+ ],
+ }],
+ ],
+ }],
+ ['target_arch=="ia32"', {
+ # The x86 toolchain currently has problems with stack-protector.
+ 'cflags!': [
+ '-fstack-protector',
+ ],
+ 'cflags': [
+ '-fno-stack-protector',
+ ],
+ }],
+ ],
+ 'target_conditions': [
+ ['_type=="executable"', {
+ 'ldflags': [
+ '-Bdynamic',
+ '-Wl,-dynamic-linker,/system/bin/linker',
+ '-Wl,--gc-sections',
+ '-Wl,-z,nocopyreloc',
+ # crtbegin_dynamic.o should be the last item in ldflags.
+ '<(android_ndk_lib)/crtbegin_dynamic.o',
+ ],
+ 'libraries': [
+ # crtend_android.o needs to be the last item in libraries.
+ # Do not add any libraries after this!
+ '<(android_ndk_lib)/crtend_android.o',
+ ],
+ }],
+ ['_type=="shared_library"', {
+ 'ldflags': [
+ '-Wl,-shared,-Bsymbolic',
+ ],
+ }],
+ ],
+ }],
+ # Settings for building host targets using the system toolchain.
+ ['_toolset=="host"', {
+ 'ldflags!': [
+ '-Wl,-z,noexecstack',
+ '-Wl,--gc-sections',
+ '-Wl,-O1',
+ '-Wl,--as-needed',
+ ],
+ }],
+ ],
+ },
+ }],
['OS=="solaris"', {
'cflags!': ['-fvisibility=hidden'],
'cflags_cc!': ['-fvisibility-inlines-hidden'],