More compatibility changes.
authorerik.corry@gmail.com <erik.corry@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 20 Mar 2009 16:37:18 +0000 (16:37 +0000)
committererik.corry@gmail.com <erik.corry@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 20 Mar 2009 16:37:18 +0000 (16:37 +0000)
Review URL: http://codereview.chromium.org/47004

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1566 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

SConstruct
src/SConscript
src/execution.cc
src/platform-linux.cc
src/runtime.cc

index 05fe1e1..0688c69 100644 (file)
@@ -35,6 +35,37 @@ root_dir = dirname(File('SConstruct').rfile().abspath)
 sys.path.append(join(root_dir, 'tools'))
 import js2c, utils
 
+TOP = os.environ.get('TOP')
+if TOP is None:
+  TOP=""
+
+ANDROID_FLAGS = ['-march=armv5te',
+                 '-mtune=xscale',
+                 '-msoft-float',
+                 '-fpic',
+                 '-mthumb-interwork',
+                 '-funwind-tables',
+                 '-fstack-protector',
+                 '-fno-short-enums',
+                 '-fmessage-length=0',
+                 '-finline-functions',
+                 '-fno-inline-functions-called-once',
+                 '-fgcse-after-reload',
+                 '-frerun-cse-after-loop',
+                 '-frename-registers',
+                 '-fomit-frame-pointer',
+                 '-fno-strict-aliasing',
+                 '-finline-limit=64',
+                 '-MD']
+
+ANDROID_INCLUDES = [TOP + '/bionic/libc/arch-arm/include',
+                    TOP + '/bionic/libc/include',
+                    TOP + '/bionic/libstdc++/include',
+                    TOP + '/bionic/libc/kernel/common',
+                    TOP + '/bionic/libc/kernel/arch-arm',
+                    TOP + '/bionic/libm/include',
+                    TOP + '/bionic/libm/include/arch/arm',
+                    TOP + '/bionic/libthread_db/include']
 
 LIBRARY_FLAGS = {
   'all': {
@@ -65,6 +96,12 @@ LIBRARY_FLAGS = {
       'CCFLAGS':      ['-DWIN32'],
       'CXXFLAGS':     ['-DWIN32'],
     },
+    'os:android': {
+      'CPPDEFINES':   ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__', '__ARM_ARCH_5E__', '__ARM_ARCH_5TE__', 'SK_RELEASE', 'NDEBUG'],
+      'CCFLAGS':      ANDROID_FLAGS,
+      'WARNINGFLAGS': ['-Wall', '-Wno-unused', '-Werror=return-type', '-Wstrict-aliasing=2'],
+      'CPPPATH':      ANDROID_INCLUDES,
+    },
     'wordsize:64': {
       'CCFLAGS':      ['-m32'],
       'LINKFLAGS':    ['-m32']
@@ -114,14 +151,23 @@ V8_EXTRA_FLAGS = {
   'gcc': {
     'all': {
       'CXXFLAGS':     [], #['-fvisibility=hidden'],
-      'WARNINGFLAGS': ['-pedantic', '-Wall', '-Werror', '-W',
+      'WARNINGFLAGS': ['-Wall', '-Werror', '-W',
           '-Wno-unused-parameter']
     },
     'arch:arm': {
       'CPPDEFINES':   ['ARM']
     },
+    'arch:android': {
+      'CPPDEFINES':   ['ARM']
+    },
     'os:win32': {
-      'WARNINGFLAGS': ['-Wno-long-long']
+      'WARNINGFLAGS': ['-pedantic', '-Wno-long-long']
+    },
+    'os:linux': {
+      'WARNINGFLAGS': ['-pedantic']
+    },
+    'os:macos': {
+      'WARNINGFLAGS': ['-pedantic']
     },
     'disassembler:on': {
       'CPPDEFINES':   ['ENABLE_DISASSEMBLER']
@@ -174,7 +220,7 @@ MKSNAPSHOT_EXTRA_FLAGS = {
 DTOA_EXTRA_FLAGS = {
   'gcc': {
     'all': {
-      'WARNINGFLAGS': ['-Werror']
+      'WARNINGFLAGS': ['-Werror', '-Wno-uninitialized']
     }
   },
   'msvc': {
@@ -230,7 +276,8 @@ SAMPLE_FLAGS = {
   },
   'gcc': {
     'all': {
-      'LIBPATH': ['.']
+      'LIBPATH': ['.'],
+      'CCFLAGS': ['-fno-rtti', '-fno-exceptions']
     },
     'os:linux': {
       'LIBS':         ['pthread', 'rt'],
@@ -244,9 +291,13 @@ SAMPLE_FLAGS = {
     'os:win32': {
       'LIBS':         ['winmm', 'ws2_32']
     },
-    'wordsize:64': {
-      'CCFLAGS':      ['-m32'],
-      'LINKFLAGS':    ['-m32']
+    'os:android': {
+      'CPPDEFINES':   ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__', '__ARM_ARCH_5E__', '__ARM_ARCH_5TE__', 'SK_RELEASE', 'NDEBUG'],
+      'CCFLAGS':      ANDROID_FLAGS,
+      'CPPPATH':      ANDROID_INCLUDES,
+      'LIBPATH':     [TOP + '/out/target/product/generic/obj/lib'],
+      'LINKFLAGS':    ['-nostdlib', '-Bdynamic', '-Wl,-T,' + TOP + '/build/core/armelf.x', '-Wl,-dynamic-linker,/system/bin/linker', '-Wl,--gc-sections', '-Wl,-z,nocopyreloc', '-Wl,-rpath-link=' + TOP + '/out/target/product/generic/obj/lib', TOP + '/out/target/product/generic/obj/lib/crtbegin_dynamic.o', TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a', TOP + '/out/target/product/generic/obj/lib/crtend_android.o'],
+      'LIBS':         ['c', 'stdc++', 'm'],
     },
     'mode:release': {
       'CCFLAGS':      ['-O2']
@@ -355,7 +406,7 @@ SIMPLE_OPTIONS = {
     'help': 'the toolchain to use'
   },
   'os': {
-    'values': ['freebsd', 'linux', 'macos', 'win32'],
+    'values': ['freebsd', 'linux', 'macos', 'win32', 'android'],
     'default': OS_GUESS,
     'help': 'the os to build for'
   },
@@ -510,6 +561,8 @@ class BuildContext(object):
           options[key] = prefix + value
 
   def ConfigureObject(self, env, input, **kw):
+    if (kw.has_key('CPPPATH') and env.has_key('CPPPATH')):
+      kw['CPPPATH'] += env['CPPPATH']
     if self.options['library'] == 'static':
       return env.StaticObject(input, **kw)
     else:
index 67f7889..5371622 100644 (file)
@@ -68,6 +68,7 @@ SOURCES = {
   'simulator:arm': ['simulator-arm.cc'],
   'os:freebsd': ['platform-freebsd.cc'],
   'os:linux':   ['platform-linux.cc'],
+  'os:android': ['platform-linux.cc'],
   'os:macos':   ['platform-macos.cc'],
   'os:nullos':  ['platform-nullos.cc'],
   'os:win32':   ['platform-win32.cc'],
index c32a805..92c3a7a 100644 (file)
@@ -482,7 +482,8 @@ Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
                                               bool* exc) {
   if (data->property_list()->IsUndefined() &&
       !data->constructor()->IsUndefined()) {
-    Object* result;
+    // Initialization to make gcc happy.
+    Object* result = 0;
     {
       HandleScope scope;
       Handle<FunctionTemplateInfo> cons_template =
index d2a4f51..f618c6e 100644 (file)
@@ -44,7 +44,9 @@
 #include <sys/stat.h>   // open
 #include <fcntl.h>      // open
 #include <unistd.h>     // sysconf
+#ifdef __GLIBC__
 #include <execinfo.h>   // backtrace, backtrace_symbols
+#endif  // def __GLIBC__
 #include <strings.h>    // index
 #include <errno.h>
 #include <stdarg.h>
@@ -361,6 +363,8 @@ void OS::LogSharedLibraryAddresses() {
 
 
 int OS::StackWalk(OS::StackFrame* frames, int frames_size) {
+  // backtrace is a glibc extension.
+#ifdef __GLIBC__
   void** addresses = NewArray<void*>(frames_size);
 
   int frames_count = backtrace(addresses, frames_size);
@@ -387,6 +391,9 @@ int OS::StackWalk(OS::StackFrame* frames, int frames_size) {
   free(symbols);
 
   return frames_count;
+#else  // ndef __GLIBC__
+  return 0;
+#endif  // ndef __GLIBC__
 }
 
 
@@ -814,6 +821,8 @@ Socket* OS::CreateSocket() {
 static Sampler* active_sampler_ = NULL;
 
 static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
+  // Ucontext is a glibc extension - no profiling on Android at the moment.
+#ifdef __GLIBC__
   USE(info);
   if (signal != SIGPROF) return;
   if (active_sampler_ == NULL) return;
@@ -840,6 +849,7 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
   sample.state = Logger::state();
 
   active_sampler_->Tick(&sample);
+#endif
 }
 
 
index 3cf2439..d88d758 100644 (file)
@@ -1554,7 +1554,7 @@ static Object* StringReplaceRegExpWithString(String* subject,
   // Number of parts added by compiled replacement plus preceeding string
   // and possibly suffix after last match.
   const int parts_added_per_loop = compiled_replacement.parts() + 2;
-  bool matched;
+  bool matched = true;
   do {
     ASSERT(last_match_info_handle->HasFastElements());
     // Increase the capacity of the builder before entering local handle-scope,