Author: [EMAIL PROTECTED]
Date: Fri Nov 21 03:19:01 2008
New Revision: 817
Modified:
branches/bleeding_edge/SConstruct
branches/bleeding_edge/src/dtoa-config.c
Log:
Added support for building V8 on Windows with either the shared or static
version of MSVCRT. The selection of the MSVCRT version is through the new
SCons flag msvcrt which can have values static or shared with static being
the default.
Review URL: http://codereview.chromium.org/11564
Modified: branches/bleeding_edge/SConstruct
==============================================================================
--- branches/bleeding_edge/SConstruct (original)
+++ branches/bleeding_edge/SConstruct Fri Nov 21 03:19:01 2008
@@ -74,15 +74,27 @@
'CCPDBFLAGS': ['/Zi']
},
'mode:debug': {
- 'CCFLAGS': ['/Od', '/Gm', '/MTd'],
+ 'CCFLAGS': ['/Od', '/Gm'],
'CPPDEFINES': ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'],
- 'LINKFLAGS': ['/DEBUG']
+ 'LINKFLAGS': ['/DEBUG'],
+ 'msvcrt:static': {
+ 'CCFLAGS': ['/MTd']
+ },
+ 'msvcrt:shared': {
+ 'CCFLAGS': ['/MDd']
+ }
},
'mode:release': {
- 'CCFLAGS': ['/O2', '/MT', '/GL'],
+ 'CCFLAGS': ['/O2', '/GL'],
'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG'],
- 'ARFLAGS': ['/LTCG']
- }
+ 'ARFLAGS': ['/LTCG'],
+ 'msvcrt:static': {
+ 'CCFLAGS': ['/MT']
+ },
+ 'msvcrt:shared': {
+ 'CCFLAGS': ['/MD']
+ }
+ },
}
}
@@ -215,12 +227,24 @@
'LINKFLAGS': ['/MAP']
},
'mode:release': {
- 'CCFLAGS': ['/O2', '/MT'],
- 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG']
+ 'CCFLAGS': ['/O2'],
+ 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG'],
+ 'msvcrt:static': {
+ 'CCFLAGS': ['/MT']
+ },
+ 'msvcrt:shared': {
+ 'CCFLAGS': ['/MD']
+ }
},
'mode:debug': {
- 'CCFLAGS': ['/Od', '/MTd'],
- 'LINKFLAGS': ['/DEBUG']
+ 'CCFLAGS': ['/Od'],
+ 'LINKFLAGS': ['/DEBUG'],
+ 'msvcrt:static': {
+ 'CCFLAGS': ['/MTd']
+ },
+ 'msvcrt:shared': {
+ 'CCFLAGS': ['/MDd']
+ }
}
}
}
@@ -232,7 +256,6 @@
'LIBS': ['readline']
}
},
- 'msvc': { }
}
@@ -294,6 +317,11 @@
'default': 'static',
'help': 'the type of library to produce'
},
+ 'msvcrt': {
+ 'values': ['static', 'shared'],
+ 'default': 'static',
+ 'help': 'the type of MSVCRT library to use'
+ },
'wordsize': {
'values': ['64', '32'],
'default': WORDSIZE_GUESS,
@@ -381,11 +409,18 @@
result = initial.copy()
self.AppendFlags(result, flags.get('all'))
toolchain = self.options['toolchain']
- self.AppendFlags(result, flags[toolchain].get('all'))
+ if toolchain in flags:
+ self.AppendFlags(result, flags[toolchain].get('all'))
+ for option in sorted(self.options.keys()):
+ value = self.options[option]
+ self.AppendFlags(result, flags[toolchain].get(option + ':' +
value))
+ return result
+
+ def AddRelevantSubFlags(self, options, flags):
+ self.AppendFlags(options, flags.get('all'))
for option in sorted(self.options.keys()):
value = self.options[option]
- self.AppendFlags(result, flags[toolchain].get(option + ':' + value))
- return result
+ self.AppendFlags(options, flags.get(option + ':' + value))
def GetRelevantSources(self, source):
result = []
@@ -398,12 +433,15 @@
if not added:
return
for (key, value) in added.iteritems():
- if not key in options:
- options[key] = value
+ if key.find(':') != -1:
+ self.AddRelevantSubFlags(options, { key: value })
else:
- prefix = options[key]
- if isinstance(prefix, StringTypes): prefix = prefix.split()
- options[key] = prefix + value
+ if not key in options:
+ options[key] = value
+ else:
+ prefix = options[key]
+ if isinstance(prefix, StringTypes): prefix = prefix.split()
+ options[key] = prefix + value
def ConfigureObject(self, env, input, **kw):
if self.options['library'] == 'static':
Modified: branches/bleeding_edge/src/dtoa-config.c
==============================================================================
--- branches/bleeding_edge/src/dtoa-config.c (original)
+++ branches/bleeding_edge/src/dtoa-config.c Fri Nov 21 03:19:01 2008
@@ -60,7 +60,18 @@
* gay_strtod, it will mangle the name of gay_strtod, which is
* unwanted. */
#include <stdlib.h>
+
#endif
+/* stdlib.h on Windows adds __declspec(dllimport) to all functions when
using
+ * the DLL version of the CRT (compiling with /MD or /MDd). If stdlib.h is
+ * included after strtod is redefined as gay_strtod, it will add
+ * __declspec(dllimport) to gay_strtod, which causes the compilation of
+ * gay_strtod in dtoa.c to fail.
+*/
+#if defined(WIN32) && defined(_DLL)
+#include "stdlib.h"
+#endif
+
/* Make sure we use the David M. Gay version of strtod(). On Linux, we
* cannot use the same name (maybe the function does not have weak
* linkage?). */
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---