Initial export.

git-svn-id: http://v8.googlecode.com/svn/trunk@2 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/SConstruct b/SConstruct
new file mode 100644
index 0000000..81f2bf0
--- /dev/null
+++ b/SConstruct
@@ -0,0 +1,127 @@
+# Copyright 2008 Google Inc.  All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import platform
+import sys
+from os.path import join, dirname, abspath
+root_dir = dirname(File('SConstruct').rfile().abspath)
+sys.path.append(join(root_dir, 'tools'))
+import js2c
+
+
+def Abort(message):
+  print message
+  sys.exit(1)
+
+
+def GuessOS():
+  id = platform.system()
+  if id == 'Linux':
+    return 'linux'
+  elif id == 'Darwin':
+    return 'macos'
+  elif id == 'Windows':
+    return 'win32'
+  else:
+    Abort("Don't know how to build v8 for OS '%s'." % id)
+
+
+def GuessProcessor():
+  id = platform.machine()
+  if id.startswith('arm'):
+    return 'arm'
+  elif (not id) or id.startswith('x86'):
+    return 'ia32'
+  else:
+    Abort("Don't know how to build v8 for processor '%s'." %  id)
+
+
+def GuessToolchain(os):
+  tools = Environment()['TOOLS']
+  if 'gcc' in tools:
+    if os == 'macos' and 'Kernel Version 8' in platform.version():
+      return 'gcc-darwin'
+    else:
+      return 'gcc'
+  elif 'msvc' in tools:
+    return 'msvc'
+  else:
+    tools = ', '.join(tools)
+    Abort("Don't know how to build v8 using these tools: %s" % tools)
+
+
+def GetOptions():
+  result = Options()
+  os_guess = GuessOS()
+  toolchain_guess = GuessToolchain(os_guess)
+  processor_guess = GuessProcessor()
+  result.Add('mode', 'debug or release', 'release')
+  result.Add('toolchain', 'the toolchain to use (gcc, gcc-darwin or msvc)', toolchain_guess)
+  result.Add('os', 'the os to build for (linux, macos or win32)', os_guess)
+  result.Add('processor', 'the processor to build for (arm or ia32)', processor_guess)
+  result.Add('snapshot', 'build using snapshots for faster start-up (on, off)', 'off')
+  result.Add('library', 'which type of library to produce (static, shared, default)', 'default')
+  return result
+
+
+def VerifyOptions(env):
+  if not env['mode'] in ['debug', 'release']:
+    Abort("Unknown build mode '%s'." % env['mode'])
+  if not env['toolchain'] in ['gcc', 'gcc-darwin', 'msvc']:
+    Abort("Unknown toolchain '%s'." % env['toolchain'])
+  if not env['os'] in ['linux', 'macos', 'win32']:
+    Abort("Unknown os '%s'." % env['os'])
+  if not env['processor'] in ['arm', 'ia32']:
+    Abort("Unknown processor '%s'." % env['processor'])
+  if not env['snapshot'] in ['on', 'off']:
+    Abort("Illegal value for option snapshot: '%s'." % env['snapshot'])
+  if not env['library'] in ['static', 'shared', 'default']:
+    Abort("Illegal value for option library: '%s'." % env['library'])
+
+
+def Start():
+  opts = GetOptions()
+  env = Environment(options=opts)
+  Help(opts.GenerateHelpText(env))
+  VerifyOptions(env)
+
+  os = env['os']
+  arch = env['processor']
+  toolchain = env['toolchain']
+  mode = env['mode']
+  use_snapshot = (env['snapshot'] == 'on')
+  library_type = env['library']
+
+  env.SConscript(
+    join('src', 'SConscript'),
+    build_dir=mode,
+    exports='toolchain arch os mode use_snapshot library_type',
+    duplicate=False
+  )
+
+
+Start()