Land patch to add Solaris platform support.
Patch by Erich Ocean and Ryan Dahl. Review URL: http://codereview.chromium.org/545125 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3688 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
f88e7e82b7
commit
cd51fcd35f
1
AUTHORS
1
AUTHORS
@ -10,6 +10,7 @@ Alexandre Vassalotti <avassalotti@gmail.com>
|
|||||||
Craig Schlenter <craig.schlenter@gmail.com>
|
Craig Schlenter <craig.schlenter@gmail.com>
|
||||||
Daniel Andersson <kodandersson@gmail.com>
|
Daniel Andersson <kodandersson@gmail.com>
|
||||||
Daniel James <dnljms@gmail.com>
|
Daniel James <dnljms@gmail.com>
|
||||||
|
Erich Ocean <erich.ocean@me.com>
|
||||||
Jan de Mooij <jandemooij@gmail.com>
|
Jan de Mooij <jandemooij@gmail.com>
|
||||||
Jay Freeman <saurik@saurik.com>
|
Jay Freeman <saurik@saurik.com>
|
||||||
Joel Stanley <joel.stan@gmail.com>
|
Joel Stanley <joel.stan@gmail.com>
|
||||||
|
26
SConstruct
26
SConstruct
@ -35,7 +35,6 @@ root_dir = dirname(File('SConstruct').rfile().abspath)
|
|||||||
sys.path.append(join(root_dir, 'tools'))
|
sys.path.append(join(root_dir, 'tools'))
|
||||||
import js2c, utils
|
import js2c, utils
|
||||||
|
|
||||||
|
|
||||||
# ANDROID_TOP is the top of the Android checkout, fetched from the environment
|
# ANDROID_TOP is the top of the Android checkout, fetched from the environment
|
||||||
# variable 'TOP'. You will also need to set the CXX, CC, AR and RANLIB
|
# variable 'TOP'. You will also need to set the CXX, CC, AR and RANLIB
|
||||||
# environment variables to the cross-compiling tools.
|
# environment variables to the cross-compiling tools.
|
||||||
@ -157,6 +156,11 @@ LIBRARY_FLAGS = {
|
|||||||
'LIBPATH' : ['/usr/local/lib'],
|
'LIBPATH' : ['/usr/local/lib'],
|
||||||
'CCFLAGS': ['-ansi'],
|
'CCFLAGS': ['-ansi'],
|
||||||
},
|
},
|
||||||
|
'os:solaris': {
|
||||||
|
'CPPPATH' : ['/usr/local/include'],
|
||||||
|
'LIBPATH' : ['/usr/local/lib'],
|
||||||
|
'CCFLAGS': ['-ansi'],
|
||||||
|
},
|
||||||
'os:win32': {
|
'os:win32': {
|
||||||
'CCFLAGS': ['-DWIN32'],
|
'CCFLAGS': ['-DWIN32'],
|
||||||
'CXXFLAGS': ['-DWIN32'],
|
'CXXFLAGS': ['-DWIN32'],
|
||||||
@ -313,6 +317,10 @@ MKSNAPSHOT_EXTRA_FLAGS = {
|
|||||||
'os:freebsd': {
|
'os:freebsd': {
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
},
|
},
|
||||||
|
'os:solaris': {
|
||||||
|
'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
|
||||||
|
'LINKFLAGS': ['-mt']
|
||||||
|
},
|
||||||
'os:openbsd': {
|
'os:openbsd': {
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
},
|
},
|
||||||
@ -362,6 +370,10 @@ CCTEST_EXTRA_FLAGS = {
|
|||||||
'os:freebsd': {
|
'os:freebsd': {
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
},
|
},
|
||||||
|
'os:solaris': {
|
||||||
|
'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
|
||||||
|
'LINKFLAGS': ['-mt']
|
||||||
|
},
|
||||||
'os:openbsd': {
|
'os:openbsd': {
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
},
|
},
|
||||||
@ -420,6 +432,11 @@ SAMPLE_FLAGS = {
|
|||||||
'LIBPATH' : ['/usr/local/lib'],
|
'LIBPATH' : ['/usr/local/lib'],
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
},
|
},
|
||||||
|
'os:solaris': {
|
||||||
|
'LIBPATH' : ['/usr/local/lib'],
|
||||||
|
'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
|
||||||
|
'LINKFLAGS': ['-mt']
|
||||||
|
},
|
||||||
'os:openbsd': {
|
'os:openbsd': {
|
||||||
'LIBPATH' : ['/usr/local/lib'],
|
'LIBPATH' : ['/usr/local/lib'],
|
||||||
'LIBS': ['execinfo', 'pthread']
|
'LIBS': ['execinfo', 'pthread']
|
||||||
@ -529,6 +546,10 @@ D8_FLAGS = {
|
|||||||
'os:freebsd': {
|
'os:freebsd': {
|
||||||
'LIBS': ['pthread'],
|
'LIBS': ['pthread'],
|
||||||
},
|
},
|
||||||
|
'os:solaris': {
|
||||||
|
'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
|
||||||
|
'LINKFLAGS': ['-mt']
|
||||||
|
},
|
||||||
'os:openbsd': {
|
'os:openbsd': {
|
||||||
'LIBS': ['pthread'],
|
'LIBS': ['pthread'],
|
||||||
},
|
},
|
||||||
@ -582,7 +603,7 @@ SIMPLE_OPTIONS = {
|
|||||||
'help': 'the toolchain to use (' + TOOLCHAIN_GUESS + ')'
|
'help': 'the toolchain to use (' + TOOLCHAIN_GUESS + ')'
|
||||||
},
|
},
|
||||||
'os': {
|
'os': {
|
||||||
'values': ['freebsd', 'linux', 'macos', 'win32', 'android', 'openbsd'],
|
'values': ['freebsd', 'linux', 'macos', 'win32', 'android', 'openbsd', 'solaris'],
|
||||||
'default': OS_GUESS,
|
'default': OS_GUESS,
|
||||||
'help': 'the os to build for (' + OS_GUESS + ')'
|
'help': 'the os to build for (' + OS_GUESS + ')'
|
||||||
},
|
},
|
||||||
@ -936,6 +957,7 @@ def BuildSpecific(env, mode, env_overrides):
|
|||||||
|
|
||||||
# Link the object files into a library.
|
# Link the object files into a library.
|
||||||
env.Replace(**context.flags['v8'])
|
env.Replace(**context.flags['v8'])
|
||||||
|
|
||||||
context.ApplyEnvOverrides(env)
|
context.ApplyEnvOverrides(env)
|
||||||
if context.options['library'] == 'static':
|
if context.options['library'] == 'static':
|
||||||
library = env.StaticLibrary(library_name, object_files)
|
library = env.StaticLibrary(library_name, object_files)
|
||||||
|
@ -168,6 +168,7 @@ SOURCES = {
|
|||||||
'os:linux': ['platform-linux.cc', 'platform-posix.cc'],
|
'os:linux': ['platform-linux.cc', 'platform-posix.cc'],
|
||||||
'os:android': ['platform-linux.cc', 'platform-posix.cc'],
|
'os:android': ['platform-linux.cc', 'platform-posix.cc'],
|
||||||
'os:macos': ['platform-macos.cc', 'platform-posix.cc'],
|
'os:macos': ['platform-macos.cc', 'platform-posix.cc'],
|
||||||
|
'os:solaris': ['platform-solaris.cc', 'platform-posix.cc'],
|
||||||
'os:nullos': ['platform-nullos.cc'],
|
'os:nullos': ['platform-nullos.cc'],
|
||||||
'os:win32': ['platform-win32.cc'],
|
'os:win32': ['platform-win32.cc'],
|
||||||
'mode:release': [],
|
'mode:release': [],
|
||||||
@ -196,6 +197,9 @@ D8_FILES = {
|
|||||||
'os:openbsd': [
|
'os:openbsd': [
|
||||||
'd8-posix.cc'
|
'd8-posix.cc'
|
||||||
],
|
],
|
||||||
|
'os:solaris': [
|
||||||
|
'd8-posix.cc'
|
||||||
|
],
|
||||||
'os:win32': [
|
'os:win32': [
|
||||||
'd8-windows.cc'
|
'd8-windows.cc'
|
||||||
],
|
],
|
||||||
|
@ -38,7 +38,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if !(defined(__APPLE__) && defined(__MACH__)) && \
|
#if !(defined(__APPLE__) && defined(__MACH__)) && \
|
||||||
!defined(WIN32) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
!defined(WIN32) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
|
||||||
|
!defined(__sun)
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
#endif
|
#endif
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -47,7 +48,7 @@
|
|||||||
/* The floating point word order on ARM is big endian when floating point
|
/* The floating point word order on ARM is big endian when floating point
|
||||||
* emulation is used, even if the byte order is little endian */
|
* emulation is used, even if the byte order is little endian */
|
||||||
#if !(defined(__APPLE__) && defined(__MACH__)) && !defined(WIN32) && \
|
#if !(defined(__APPLE__) && defined(__MACH__)) && !defined(WIN32) && \
|
||||||
!defined(__FreeBSD__) && !defined(__OpenBSD__) && \
|
!defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__sun) && \
|
||||||
__FLOAT_WORD_ORDER == __BIG_ENDIAN
|
__FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||||
#define IEEE_MC68k
|
#define IEEE_MC68k
|
||||||
#else
|
#else
|
||||||
@ -56,7 +57,7 @@
|
|||||||
|
|
||||||
#define __MATH_H__
|
#define __MATH_H__
|
||||||
#if defined(__APPLE__) && defined(__MACH__) || defined(__FreeBSD__) || \
|
#if defined(__APPLE__) && defined(__MACH__) || defined(__FreeBSD__) || \
|
||||||
defined(__OpenBSD__)
|
defined(__OpenBSD__) || defined(__sun)
|
||||||
/* stdlib.h on FreeBSD and Apple's 10.5 and later SDKs will mangle the
|
/* stdlib.h on FreeBSD and Apple's 10.5 and later SDKs will mangle the
|
||||||
* name of strtod. If it's included after strtod is redefined as
|
* name of strtod. If it's included after strtod is redefined as
|
||||||
* gay_strtod, it will mangle the name of gay_strtod, which is
|
* gay_strtod, it will mangle the name of gay_strtod, which is
|
||||||
|
@ -95,6 +95,24 @@ int OS::ActivationFrameAlignment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* OS::LocalTimezone(double time) {
|
||||||
|
if (isnan(time)) return "";
|
||||||
|
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
if (NULL == t) return "";
|
||||||
|
return t->tm_zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double OS::LocalTimeOffset() {
|
||||||
|
time_t tv = time(NULL);
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
// tm_gmtoff includes any daylight savings offset, so subtract it.
|
||||||
|
return static_cast<double>(t->tm_gmtoff * msPerSecond -
|
||||||
|
(t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// We keep the lowest and highest addresses mapped as a quick way of
|
// We keep the lowest and highest addresses mapped as a quick way of
|
||||||
// determining that pointers are outside the heap (used mostly in assertions
|
// determining that pointers are outside the heap (used mostly in assertions
|
||||||
// and verification). The estimate is conservative, ie, not all addresses in
|
// and verification). The estimate is conservative, ie, not all addresses in
|
||||||
|
@ -159,6 +159,24 @@ int OS::ActivationFrameAlignment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* OS::LocalTimezone(double time) {
|
||||||
|
if (isnan(time)) return "";
|
||||||
|
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
if (NULL == t) return "";
|
||||||
|
return t->tm_zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double OS::LocalTimeOffset() {
|
||||||
|
time_t tv = time(NULL);
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
// tm_gmtoff includes any daylight savings offset, so subtract it.
|
||||||
|
return static_cast<double>(t->tm_gmtoff * msPerSecond -
|
||||||
|
(t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// We keep the lowest and highest addresses mapped as a quick way of
|
// We keep the lowest and highest addresses mapped as a quick way of
|
||||||
// determining that pointers are outside the heap (used mostly in assertions
|
// determining that pointers are outside the heap (used mostly in assertions
|
||||||
// and verification). The estimate is conservative, ie, not all addresses in
|
// and verification). The estimate is conservative, ie, not all addresses in
|
||||||
|
@ -259,6 +259,24 @@ int OS::ActivationFrameAlignment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* OS::LocalTimezone(double time) {
|
||||||
|
if (isnan(time)) return "";
|
||||||
|
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
if (NULL == t) return "";
|
||||||
|
return t->tm_zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double OS::LocalTimeOffset() {
|
||||||
|
time_t tv = time(NULL);
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
// tm_gmtoff includes any daylight savings offset, so subtract it.
|
||||||
|
return static_cast<double>(t->tm_gmtoff * msPerSecond -
|
||||||
|
(t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int OS::StackWalk(Vector<StackFrame> frames) {
|
int OS::StackWalk(Vector<StackFrame> frames) {
|
||||||
// If weak link to execinfo lib has failed, ie because we are on 10.4, abort.
|
// If weak link to execinfo lib has failed, ie because we are on 10.4, abort.
|
||||||
if (backtrace == NULL)
|
if (backtrace == NULL)
|
||||||
|
@ -94,6 +94,24 @@ int OS::ActivationFrameAlignment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* OS::LocalTimezone(double time) {
|
||||||
|
if (isnan(time)) return "";
|
||||||
|
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
if (NULL == t) return "";
|
||||||
|
return t->tm_zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double OS::LocalTimeOffset() {
|
||||||
|
time_t tv = time(NULL);
|
||||||
|
struct tm* t = localtime(&tv);
|
||||||
|
// tm_gmtoff includes any daylight savings offset, so subtract it.
|
||||||
|
return static_cast<double>(t->tm_gmtoff * msPerSecond -
|
||||||
|
(t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// We keep the lowest and highest addresses mapped as a quick way of
|
// We keep the lowest and highest addresses mapped as a quick way of
|
||||||
// determining that pointers are outside the heap (used mostly in assertions
|
// determining that pointers are outside the heap (used mostly in assertions
|
||||||
// and verification). The estimate is conservative, ie, not all addresses in
|
// and verification). The estimate is conservative, ie, not all addresses in
|
||||||
|
@ -99,15 +99,6 @@ int64_t OS::Ticks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* OS::LocalTimezone(double time) {
|
|
||||||
if (isnan(time)) return "";
|
|
||||||
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
|
||||||
struct tm* t = localtime(&tv);
|
|
||||||
if (NULL == t) return "";
|
|
||||||
return t->tm_zone;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
double OS::DaylightSavingsOffset(double time) {
|
double OS::DaylightSavingsOffset(double time) {
|
||||||
if (isnan(time)) return nan_value();
|
if (isnan(time)) return nan_value();
|
||||||
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
time_t tv = static_cast<time_t>(floor(time/msPerSecond));
|
||||||
@ -117,15 +108,6 @@ double OS::DaylightSavingsOffset(double time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double OS::LocalTimeOffset() {
|
|
||||||
time_t tv = time(NULL);
|
|
||||||
struct tm* t = localtime(&tv);
|
|
||||||
// tm_gmtoff includes any daylight savings offset, so subtract it.
|
|
||||||
return static_cast<double>(t->tm_gmtoff * msPerSecond -
|
|
||||||
(t->tm_isdst > 0 ? 3600 * msPerSecond : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// POSIX stdio support.
|
// POSIX stdio support.
|
||||||
//
|
//
|
||||||
|
@ -44,6 +44,12 @@
|
|||||||
#ifndef V8_PLATFORM_H_
|
#ifndef V8_PLATFORM_H_
|
||||||
#define V8_PLATFORM_H_
|
#define V8_PLATFORM_H_
|
||||||
|
|
||||||
|
#ifdef __sun
|
||||||
|
// On Solaris, to get isinf, INFINITY, fpclassify and other macros one needs
|
||||||
|
// to define this symbol
|
||||||
|
#define __C99FEATURES__ 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#define V8_INFINITY INFINITY
|
#define V8_INFINITY INFINITY
|
||||||
|
|
||||||
// Windows specific stuff.
|
// Windows specific stuff.
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <wchar.h> // wint_t
|
||||||
|
|
||||||
#include "v8.h"
|
#include "v8.h"
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ v8::Handle<v8::Value> PrintExtension::Print(const v8::Arguments& args) {
|
|||||||
uint16_t* string = NewArray<uint16_t>(length + 1);
|
uint16_t* string = NewArray<uint16_t>(length + 1);
|
||||||
string_obj->Write(string);
|
string_obj->Write(string);
|
||||||
for (int j = 0; j < length; j++)
|
for (int j = 0; j < length; j++)
|
||||||
printf("%lc", string[j]);
|
printf("%lc", static_cast<wint_t>(string[j]));
|
||||||
DeleteArray(string);
|
DeleteArray(string);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
@ -57,6 +57,8 @@ def GuessOS():
|
|||||||
return 'freebsd'
|
return 'freebsd'
|
||||||
elif id == 'OpenBSD':
|
elif id == 'OpenBSD':
|
||||||
return 'openbsd'
|
return 'openbsd'
|
||||||
|
elif id == 'SunOS':
|
||||||
|
return 'solaris'
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -67,6 +69,8 @@ def GuessArchitecture():
|
|||||||
return 'arm'
|
return 'arm'
|
||||||
elif (not id) or (not re.match('(x|i[3-6])86', id) is None):
|
elif (not id) or (not re.match('(x|i[3-6])86', id) is None):
|
||||||
return 'ia32'
|
return 'ia32'
|
||||||
|
elif id == 'i86pc':
|
||||||
|
return 'ia32'
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user