diff options
Diffstat (limited to 'build/SConscript.main')
-rw-r--r-- | build/SConscript.main | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/build/SConscript.main b/build/SConscript.main new file mode 100644 index 0000000..3290b12 --- /dev/null +++ b/build/SConscript.main @@ -0,0 +1,334 @@ +# 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 os +import shutil +import sys + +#TODO(rspangler): extra imports for testing +#from SCons.Script.__init__ import * + + +p = ARGUMENTS.get('PROGRESS') +if p == 'spinner': + Progress(['/\r', '|\r', '\\\r', '-\r'], interval=5, file=open('con', 'w')) +elif p == 'name': + Progress('$TARGET\r', overwrite=True, file=open('con', 'w')) + + +SetOption('warn', ['no-missing-sconscript'] + GetOption('warn')) + +processors = int(os.environ.get('NUMBER_OF_PROCESSORS', 1)) +SetOption('num_jobs', processors + 1) + + +msvs_env = Environment(tools=['msvc', 'mslink', 'msvs'])['ENV'] + + +env = Environment( + BUILD_TYPE = ARGUMENTS.get('BUILD_TYPE', 'Hammer'), + TARGET_ROOT = '#/$BUILD_TYPE', + OBJ_ROOT = '$TARGET_ROOT', + + CSCRIPT = 'c:\\Windows\\System32\\cscript', + + PLATFORMSDK_VISTA_REL = '../third_party/platformsdk_vista_6_0', + PLATFORMSDK_VISTA = '#/$PLATFORMSDK_VISTA_REL', + VISUAL_STUDIO = 'C:/Program Files/Microsoft Visual Studio 8', + + BASE_DIR = '#/$BUILD_TYPE/base', + BREAKPAD_DIR = '#/$BUILD_TYPE/breakpad', + CHROME_DIR = '#/$BUILD_TYPE/chrome', + GEARS_DIR = '#/$BUILD_TYPE/gears', + GOOGLE_UPDATE_DIR = '#/$BUILD_TYPE/google_update', + + # Work around a limitation (bug?) in SCons in that, when we build + # from a different directory, it forces the build targets defined + # the SConscript.googleurl file to be relative to that file (i.e., + # here in the build/ directory with us), not relative to the + # the SConstruct directory from which SCons was launched. When + # we roll forward to a version of SCons that fixes this, we'll + # need to revert to the $BUILD_TYPE definition of GOOGLEURL_DIR. + #GOOGLEURL_DIR = '#/$BUILD_TYPE/googleurl', + GOOGLEURL_DIR = '#/../build/googleurl', + + NET_DIR = '#/$BUILD_TYPE/net', + RLZ_DIR = '#/$BUILD_TYPE/rlz', + SANDBOX_DIR = '#/$BUILD_TYPE/sandbox', + SKIA_DIR = '#/$BUILD_TYPE/skia', + TESTING_DIR = '#/$BUILD_TYPE/testing', + THIRD_PARTY_DIR = '#/$BUILD_TYPE/third_party', + V8_DIR = '#/$BUILD_TYPE/v8', + WEBKIT_DIR = '#/$BUILD_TYPE/webkit', + + GTEST_DIR = '$TESTING_DIR/gtest', + + BSDIFF_DIR = '$THIRD_PARTY_DIR/bsdiff', + BSPATCH_DIR = '$THIRD_PARTY_DIR/bspatch', + BZIP2_DIR = '$THIRD_PARTY_DIR/bzip2', + ICU38_DIR = '$THIRD_PARTY_DIR/icu38', + LIBJPEG_DIR = '$THIRD_PARTY_DIR/libjpeg', + LIBPNG_DIR = '$THIRD_PARTY_DIR/libpng', + LIBXML_DIR = '$THIRD_PARTY_DIR/libxml', + LIBXSLT_DIR = '$THIRD_PARTY_DIR/libxslt', + LZMA_SDK_DIR = '$THIRD_PARTY_DIR/lzma_sdk', + MODP_B64_DIR = '$THIRD_PARTY_DIR/modp_b64', + NPAPI_DIR = '$THIRD_PARTY_DIR/npapi', + ZLIB_DIR = '$THIRD_PARTY_DIR/zlib', + + THIRD_PARTY_WEBKIT_DIR = '$THIRD_PARTY_DIR/webkit', + + CYGWIN_DIR = Dir('#../third_party/cygwin'), + CYGWIN_BIN_DIR = '$CYGWIN_DIR/bin', + + PYTHON=sys.executable, + + PERL = '$CYGWIN_BIN_DIR/perl.exe', + PERL_INCLUDE_FLAG = '-I ', + PERL_INCLUDE_SUFFIX = '', + _PERL_INCLUDE_FLAGS = ('${_concat(PERL_INCLUDE_FLAG, ' + 'PERL_INCLUDE_PATH, ' + 'PERL_INCLUDE_SUFFIX,' + '__env__, RDirs, TARGET, SOURCE)}'), + + MSVS_ENV = msvs_env, + + YACC = '$CYGWIN_BIN_DIR/bison.exe', + + ARFLAGS = [ + '/nologo', + ], + + CCFLAGS = [ + '/Od', # no optimization + + '/RTC1', + '/MTd', # static link to crt, and debug version + '/Gy', + '/GR-', + + '/W3', + + '/Z7', + + '/nologo', + '/errorReport:prompt', + ], + + CPPDEFINES = [ + '_CRT_SECURE_NO_DEPRECATE', + '_CRT_NONSTDC_NO_WARNINGS', + '_CRT_NONSTDC_NO_DEPRECATE', + '_SCL_SECURE_NO_DEPRECATE', + + '_DEBUG', + + '_CRT_RAND_S', + ('_WIN32_WINNT', '0x0600'), + ('WINVER', '0x0600'), + 'WIN32', + '_WINDOWS', + ('_HAS_EXCEPTIONS', 0), + 'NOMINMAX', + '_UNICODE', + 'UNICODE', + ], + + CPPPATH = [ + '$PLATFORMSDK_VISTA/files/Include', + '$PLATFORMSDK_VISTA/files/VC/INCLUDE', + '$VISUAL_STUDIO/VC/atlmfc/include', + ], + + LIBPATH = [ + '$PLATFORMSDK_VISTA/files/Lib', + '$PLATFORMSDK_VISTA/files/VC/LIB', + 'c:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib', + ], + + LINKFLAGS = [ + '/DEBUG', + ], +) + +if ARGUMENTS.get('VERBOSE') in (None, '0'): + env['CCCOMSTR'] = 'Compiling $TARGET ...' + env['CXXCOMSTR'] = 'Compiling $TARGET ...' + env['ARCOMSTR'] = 'Archiving $TARGET ...' + env['LINKCOMSTR'] = 'Linking $TARGET ...' + + +# Place the .sconsign.dblite in the build directory. +target_dir = env.Dir('$TARGET_ROOT') +if not os.path.exists(target_dir.abspath): + Execute(Mkdir(target_dir)) +SConsignFile(target_dir.File('.sconsign').abspath) + + +# Add --clobber (for the buildbot). +# NOTE: seems to be crucial to do this before any builders are invoked. +AddOption('--clobber', action='store_true', dest='clobber', default=False, + help='Delete build directory before building.') +if GetOption('clobber'): + shutil.rmtree(env.Dir('$TARGET_ROOT').abspath, True) + + +# Force scons to handle long include lines correctly. +pchcom_fixed = env['PCHCOM'] +pchcom_fixed = pchcom_fixed.replace('${TARGETS[0]}', '$TARGET') +pchcom_fixed = pchcom_fixed.replace('${TARGETS[1]}', '$TARGETS1') +env.Replace( + CCCOM = "${TEMPFILE('%s')}" % env['CCCOM'], + CXXCOM = "${TEMPFILE('%s')}" % env['CXXCOM'], + SHCCCOM = "${TEMPFILE('%s')}" % env['SHCCCOM'], + SHCXXCOM = "${TEMPFILE('%s')}" % env['SHCXXCOM'], + PCHCOM = "${TEMPFILE('%s')}" % pchcom_fixed, + TARGETS1 = '${TARGETS[1]}', +) + +env['ENV']['PROGRAMFILES'] = os.environ['PROGRAMFILES'] +env['ENV']['SystemDrive'] = os.environ['SystemDrive'] +env['ENV']['USERPROFILE'] = os.environ['USERPROFILE'] + +# Use timestamps change, followed by MD5 for speed +env.Decider('MD5-timestamp') + +# Overlay things from a layer below. +env.Dir('$TARGET_ROOT').addRepository(Dir('..')) + + +load = ARGUMENTS.get('LOAD') +if load: + load = load.split(',') +else: + load = [] + +included = [c for c in load if not c.startswith('-')] +excluded = [c[1:] for c in load if c.startswith('-')] +if not included: + included = ['all'] + +components = ['all'] + +def LoadComponent(c): + components.append(c) + return (not GetOption('help') and + c in included or + ('all' in included and not c in excluded)) + +sconscripts = [] + +if LoadComponent('base'): + sconscripts.append('$BASE_DIR/SConscript') + +if LoadComponent('breakpad'): + sconscripts.append('$BREAKPAD_DIR/SConscript') + +if LoadComponent('chrome'): + sconscripts.append('$CHROME_DIR/SConscript') + +if LoadComponent('google_update'): + sconscripts.append('$GOOGLE_UPDATE_DIR/SConscript') + +if LoadComponent('googleurl'): + env.SConscript('SConscript.googleurl', + duplicate=0, + variant_dir='$GOOGLEURL_DIR', + src_dir='../googleurl', + exports=['env']) + +if LoadComponent('net'): + sconscripts.append('$NET_DIR/SConscript') + +if LoadComponent('rlz'): + sconscripts.append('$RLZ_DIR/SConscript') + +if LoadComponent('sandbox'): + sconscripts.append('$SANDBOX_DIR/src/SConscript') + +if LoadComponent('skia'): + sconscripts.append('$SKIA_DIR/SConscript') + +if LoadComponent('testing'): + sconscripts.append('$TESTING_DIR/SConscript.gtest') + +if LoadComponent('third_party'): + sconscripts.extend([ + '$BSDIFF_DIR/SConscript', + '$BSPATCH_DIR/SConscript', + '$BZIP2_DIR/SConscript', + '$ICU38_DIR/SConscript', + '$LIBJPEG_DIR/SConscript', + '$LIBPNG_DIR/SConscript', + '$LIBXML_DIR/SConscript', + '$LIBXSLT_DIR/SConscript', + '$LZMA_SDK_DIR/SConscript', + '$MODP_B64_DIR/SConscript', + '$ZLIB_DIR/SConscript', + ]) + +if LoadComponent('v8') and env.Dir('#/../v8').exists(): + env.SConscript('SConscript.v8', + exports=['env']) + +if LoadComponent('webkit'): + sconscripts.append('$WEBKIT_DIR/SConscript') + +env.SConscript(sconscripts, exports=['env']) + + +help_fmt = """ +Usage: hammer [SCONS_OPTIONS] [VARIABLES] [TARGET] ... + +Supported build variables: + + BUILD_TYPE=type Build type. Also used as the subdirectory name + in which the build occurs. + LOAD=[module,...] Comma-separated list of components to load in the + dependency graph ('-' prefix excludes): +%s + PROGRESS=type Display a progress indicator: + name: print each evaluated target name + spinner: print a spinner every 5 targets +""" + +if GetOption('help'): + import textwrap + tw = textwrap.TextWrapper( + width = 78, + initial_indent = ' '*32, + subsequent_indent = ' '*32, + ) + components = tw.fill(', '.join(components)) + + Help(help_fmt % components) + + +Import('build_component') +Default(build_component) |