1 # Copyright 2012 the V8 project authors. All rights reserved. 2 # Redistribution and use in source and binary forms, with or without 3 # modification, are permitted provided that the following conditions are 4 # met: 5 # 6 # * Redistributions of source code must retain the above copyright 7 # notice, this list of conditions and the following disclaimer. 8 # * Redistributions in binary form must reproduce the above 9 # copyright notice, this list of conditions and the following 10 # disclaimer in the documentation and/or other materials provided 11 # with the distribution. 12 # * Neither the name of Google Inc. nor the names of its 13 # contributors may be used to endorse or promote products derived 14 # from this software without specific prior written permission. 15 # 16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 # Definitions for building standalone V8 binaries to run on Android. 29 # This is mostly excerpted from: 30 # http://src.chromium.org/viewvc/chrome/trunk/src/build/common.gypi 31 32 { 33 'variables': { 34 # Location of Android NDK. 35 'variables': { 36 'android_ndk_root%': '<!(/bin/echo -n $ANDROID_NDK_ROOT)', 37 'android_toolchain%': '<!(/bin/echo -n $ANDROID_TOOLCHAIN)', 38 # This is set when building the Android WebView inside the Android build 39 # system, using the 'android' gyp backend. 40 'android_webview_build%': 0, 41 }, 42 'conditions': [ 43 ['android_ndk_root==""', { 44 'variables': { 45 'android_sysroot': '<(android_toolchain)/sysroot/', 46 'android_stlport': '<(android_toolchain)/sources/cxx-stl/stlport/', 47 }, 48 'android_include': '<(android_sysroot)/usr/include', 49 'android_lib': '<(android_sysroot)/usr/lib', 50 'android_stlport_include': '<(android_stlport)/stlport', 51 'android_stlport_libs': '<(android_stlport)/libs', 52 }, { 53 'variables': { 54 'android_sysroot': '<(android_ndk_root)/platforms/android-<(android_target_platform)/arch-<(android_target_arch)', 55 'android_stlport': '<(android_ndk_root)/sources/cxx-stl/stlport/', 56 }, 57 'android_include': '<(android_sysroot)/usr/include', 58 'android_lib': '<(android_sysroot)/usr/lib', 59 'android_stlport_include': '<(android_stlport)/stlport', 60 'android_stlport_libs': '<(android_stlport)/libs', 61 }], 62 ], 63 # Enable to use the system stlport, otherwise statically 64 # link the NDK one? 65 'use_system_stlport%': '<(android_webview_build)', 66 'android_stlport_library': 'stlport_static', 67 # Copy it out one scope. 68 'android_webview_build%': '<(android_webview_build)', 69 'OS': 'android', 70 }, # variables 71 'target_defaults': { 72 'defines': [ 73 'ANDROID', 74 'V8_ANDROID_LOG_STDOUT', 75 ], 76 'configurations': { 77 'Release': { 78 'cflags': [ 79 '-fomit-frame-pointer', 80 ], 81 }, # Release 82 }, # configurations 83 'cflags': [ '-Wno-abi', '-Wall', '-W', '-Wno-unused-parameter', 84 '-Wnon-virtual-dtor', '-fno-rtti', '-fno-exceptions', ], 85 'target_conditions': [ 86 ['_toolset=="target"', { 87 'cflags!': [ 88 '-pthread', # Not supported by Android toolchain. 89 ], 90 'cflags': [ 91 '-U__linux__', # Don't allow toolchain to claim -D__linux__ 92 '-ffunction-sections', 93 '-funwind-tables', 94 '-fstack-protector', 95 '-fno-short-enums', 96 '-finline-limit=64', 97 '-Wa,--noexecstack', 98 '-Wno-error=non-virtual-dtor', # TODO(michaelbai): Fix warnings. 99 # Note: This include is in cflags to ensure that it comes after 100 # all of the includes. 101 '-I<(android_include)', 102 ], 103 'defines': [ 104 'ANDROID', 105 #'__GNU_SOURCE=1', # Necessary for clone() 106 'USE_STLPORT=1', 107 '_STLP_USE_PTR_SPECIALIZATIONS=1', 108 'HAVE_OFF64_T', 109 'HAVE_SYS_UIO_H', 110 'ANDROID_BINSIZE_HACK', # Enable temporary hacks to reduce binsize. 111 ], 112 'ldflags!': [ 113 '-pthread', # Not supported by Android toolchain. 114 ], 115 'ldflags': [ 116 '-nostdlib', 117 '-Wl,--no-undefined', 118 ], 119 'libraries!': [ 120 '-lrt', # librt is built into Bionic. 121 # Not supported by Android toolchain. 122 # Where do these come from? Can't find references in 123 # any Chromium gyp or gypi file. Maybe they come from 124 # gyp itself? 125 '-lpthread', '-lnss3', '-lnssutil3', '-lsmime3', '-lplds4', '-lplc4', '-lnspr4', 126 ], 127 'libraries': [ 128 '-l<(android_stlport_library)', 129 # Manually link the libgcc.a that the cross compiler uses. 130 '<!($CC -print-libgcc-file-name)', 131 '-lc', 132 '-ldl', 133 '-lstdc++', 134 '-lm', 135 ], 136 'conditions': [ 137 ['android_webview_build==0', { 138 'ldflags': [ 139 '-Wl,-rpath-link=<(android_lib)', 140 '-L<(android_lib)', 141 ], 142 }], 143 ['target_arch == "arm"', { 144 'ldflags': [ 145 # Enable identical code folding to reduce size. 146 '-Wl,--icf=safe', 147 ], 148 }], 149 ['target_arch=="arm" and arm_version==7', { 150 'cflags': [ 151 '-march=armv7-a', 152 '-mtune=cortex-a8', 153 '-mfpu=vfp3', 154 ], 155 }], 156 # NOTE: The stlport header include paths below are specified in 157 # cflags rather than include_dirs because they need to come 158 # after include_dirs. Think of them like system headers, but 159 # don't use '-isystem' because the arm-linux-androideabi-4.4.3 160 # toolchain (circa Gingerbread) will exhibit strange errors. 161 # The include ordering here is important; change with caution. 162 ['use_system_stlport==0', { 163 'cflags': [ 164 '-I<(android_stlport_include)', 165 ], 166 'conditions': [ 167 ['target_arch=="arm" and arm_version==7', { 168 'ldflags': [ 169 '-L<(android_stlport_libs)/armeabi-v7a', 170 ], 171 }], 172 ['target_arch=="arm" and arm_version < 7', { 173 'ldflags': [ 174 '-L<(android_stlport_libs)/armeabi', 175 ], 176 }], 177 ['target_arch=="mipsel"', { 178 'ldflags': [ 179 '-L<(android_stlport_libs)/mips', 180 ], 181 }], 182 ['target_arch=="ia32" or target_arch=="x87"', { 183 'ldflags': [ 184 '-L<(android_stlport_libs)/x86', 185 ], 186 }], 187 ['target_arch=="x64"', { 188 'ldflags': [ 189 '-L<(android_stlport_libs)/x86_64', 190 ], 191 }], 192 ['target_arch=="arm64"', { 193 'ldflags': [ 194 '-L<(android_stlport_libs)/arm64-v8a', 195 ], 196 }], 197 ], 198 }], 199 ['target_arch=="ia32" or target_arch=="x87"', { 200 # The x86 toolchain currently has problems with stack-protector. 201 'cflags!': [ 202 '-fstack-protector', 203 ], 204 'cflags': [ 205 '-fno-stack-protector', 206 ], 207 }], 208 ['target_arch=="mipsel"', { 209 # The mips toolchain currently has problems with stack-protector. 210 'cflags!': [ 211 '-fstack-protector', 212 '-U__linux__' 213 ], 214 'cflags': [ 215 '-fno-stack-protector', 216 ], 217 }], 218 ['target_arch=="arm64" or target_arch=="x64"', { 219 # TODO(ulan): Enable PIE for other architectures (crbug.com/373219). 220 'cflags': [ 221 '-fPIE', 222 ], 223 'ldflags': [ 224 '-pie', 225 ], 226 }], 227 ], 228 'target_conditions': [ 229 ['_type=="executable"', { 230 'conditions': [ 231 ['target_arch=="arm64"', { 232 'ldflags': [ 233 '-Wl,-dynamic-linker,/system/bin/linker64', 234 ], 235 }, { 236 'ldflags': [ 237 '-Wl,-dynamic-linker,/system/bin/linker', 238 ], 239 }] 240 ], 241 'ldflags': [ 242 '-Bdynamic', 243 '-Wl,-z,nocopyreloc', 244 # crtbegin_dynamic.o should be the last item in ldflags. 245 '<(android_lib)/crtbegin_dynamic.o', 246 ], 247 'libraries': [ 248 # crtend_android.o needs to be the last item in libraries. 249 # Do not add any libraries after this! 250 '<(android_lib)/crtend_android.o', 251 ], 252 }], 253 ['_type=="shared_library"', { 254 'ldflags': [ 255 '-Wl,-shared,-Bsymbolic', 256 '<(android_lib)/crtbegin_so.o', 257 ], 258 }], 259 ['_type=="static_library"', { 260 'ldflags': [ 261 # Don't export symbols from statically linked libraries. 262 '-Wl,--exclude-libs=ALL', 263 ], 264 }], 265 ], 266 }], # _toolset=="target" 267 # Settings for building host targets using the system toolchain. 268 ['_toolset=="host"', { 269 'conditions': [ 270 ['target_arch=="x64"', { 271 'cflags': [ '-m64', '-pthread' ], 272 'ldflags': [ '-m64', '-pthread' ], 273 }, { 274 'cflags': [ '-m32', '-pthread' ], 275 'ldflags': [ '-m32', '-pthread' ], 276 }], 277 ], 278 'ldflags!': [ 279 '-Wl,-z,noexecstack', 280 '-Wl,--gc-sections', 281 '-Wl,-O1', 282 '-Wl,--as-needed', 283 ], 284 }], 285 ], # target_conditions 286 }, # target_defaults 287 } 288