diff options
author | michaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-20 20:35:01 +0000 |
---|---|---|
committer | michaelbai@google.com <michaelbai@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-20 20:35:01 +0000 |
commit | da1c8d69b77346f5f4dc1d34693c0a43e630cedc (patch) | |
tree | 70dd06e928565b94547fa1e15b460b088e3f8db0 /build | |
parent | 4eb0f75ebb5ed7d029700b6647a64a9917f1e7b4 (diff) | |
download | chromium_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.gypi | 350 |
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'], |