| Index: build/SConscript.main
|
| ===================================================================
|
| --- build/SConscript.main (revision 12583)
|
| +++ build/SConscript.main (working copy)
|
| @@ -1,900 +0,0 @@
|
| -# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import os
|
| -import shutil
|
| -import sys
|
| -
|
| -
|
| -if sys.platform == 'win32':
|
| - console = 'con'
|
| -else:
|
| - console = '/dev/tty'
|
| -p = ARGUMENTS.get('PROGRESS')
|
| -if p == 'spinner':
|
| - Progress(['/\r', '|\r', '\\\r', '-\r'], interval=5, file=open(console, 'w'))
|
| -elif p == 'name':
|
| - Progress('$TARGET\r', overwrite=True, file=open(console, 'w'))
|
| -
|
| -
|
| -default_warnings = ['no-missing-sconscript', 'no-no-parallel-support']
|
| -default_warnings = ['no-no-parallel-support']
|
| -SetOption('warn', default_warnings + GetOption('warn'))
|
| -
|
| -
|
| -# Variables for controlling the build.
|
| -#
|
| -# The following variables can be set either on the command line
|
| -# or in the external environment when executing SCons, with the
|
| -# command line overriding any environment setting.
|
| -#
|
| -# BUILD_TARGET_DIR
|
| -# Specifies the target subdirectory name in which we'll
|
| -# build everything. This is intended to mimic the Visual
|
| -# Visual Studio "Debug\" and "Release\" subdirectories.
|
| -# The default value is "Hammer."
|
| -#
|
| -#
|
| -# CHROME_BUILD_TYPE
|
| -# When set, applies settings from the file
|
| -# build\internal\release_impl${CHROME_BUILD_TYPE}.scons
|
| -# to be applied to the construction environment.
|
| -#
|
| -# CHROMIUM_BUILD
|
| -# When set, applies settings from the file
|
| -# build\internal\chromium_build${CHROMIUM_BUILD}.scons
|
| -# to be applied to the construction environment.
|
| -#
|
| -# INCREMENTAL
|
| -# Controls whether or not libraries and executable programs are
|
| -# linked incrementally. When set to any True value (1, T, y, True),
|
| -# uses the /INCREMENTAL flag to the Microsoft linker. An
|
| -# explicit False value (0, f, N, false) uses the /INCREMENTAL:NO.
|
| -# When not set, the default is to link debug (developer) builds
|
| -# incrementally, but release builds use full links.
|
| -#
|
| -clvars = Variables('scons.opts', ARGUMENTS)
|
| -clvars.AddVariables(
|
| - ('BUILD_TARGET_DIR', '', 'Hammer'),
|
| - ('CHROME_BUILD_TYPE', '', os.environ.get('CHROME_BUILD_TYPE', '')),
|
| - ('CHROMIUM_BUILD', '', os.environ.get('CHROMIUM_BUILD', '')),
|
| - BoolVariable('INCREMENTAL', '', os.environ.get('INCREMENTAL')),
|
| -)
|
| -
|
| -
|
| -if ARGUMENTS.get('_GYP'):
|
| - tool_list = ['chromium_builders']
|
| -else:
|
| - tool_list = ['component_setup',
|
| - 'chromium_builders',
|
| - 'chromium_load_component',
|
| - 'MSVSNew']
|
| -
|
| -
|
| -root_env = Environment(
|
| - # MSVSNew in the base environment? Yes, the point is we can (and
|
| - # want to) generate Visual Studio project and solution files from
|
| - # any platform.
|
| - tools = tool_list,
|
| - variables = clvars,
|
| -
|
| - # Requested list of system (shared) libraries, from the comma separated
|
| - # SYSTEM_LIBS command-line argument
|
| - req_system_libs = [],
|
| - # All supported system libraries, for the help message
|
| - all_system_libs = [],
|
| -
|
| - CHROME_SRC_DIR = '$MAIN_DIR/..',
|
| - SRC_DIR = '$MAIN_DIR/..',
|
| - DESTINATION_ROOT = '$MAIN_DIR/$BUILD_TARGET_DIR',
|
| -
|
| - # Where ComponentTestProgram() will build test executables.
|
| - TESTS_DIR = '$DESTINATION_ROOT',
|
| -
|
| - # Where ComponentProgram() will build program executables.
|
| - STAGING_DIR = '$DESTINATION_ROOT',
|
| -
|
| - # TODO(hammer): when Hammer supports this...
|
| - # Have Hammer prefix all Library aliases with lib_ (to avoid
|
| - # collisions with the component names themselves).
|
| - #COMPONENT_LIBRARY_ALIAS = 'lib_$LIBNAME',
|
| -
|
| - # Disable running of tests thru scons for now.
|
| - COMPONENT_TEST_RUNNABLE = False,
|
| -
|
| - BASE_DIR = '$OBJ_ROOT/base',
|
| - BREAKPAD_DIR = '$OBJ_ROOT/breakpad',
|
| - CHROME_DIR = '$OBJ_ROOT/chrome',
|
| - GEARS_DIR = '$OBJ_ROOT/gears',
|
| - GOOGLE_UPDATE_DIR = '$OBJ_ROOT/google_update',
|
| - GOOGLEURL_DIR = '$OBJ_ROOT/googleurl',
|
| - MEDIA_DIR = '$OBJ_ROOT/media',
|
| - NET_DIR = '$OBJ_ROOT/net',
|
| - PRINTING_DIR = '$OBJ_ROOT/printing',
|
| - RLZ_DIR = '$OBJ_ROOT/rlz',
|
| - SANDBOX_DIR = '$OBJ_ROOT/sandbox',
|
| - SDCH_DIR = '$OBJ_ROOT/sdch',
|
| - SKIA_DIR = '$OBJ_ROOT/skia',
|
| - TESTING_DIR = '$OBJ_ROOT/testing',
|
| - THIRD_PARTY_DIR = '$OBJ_ROOT/third_party',
|
| - TOOLS_DIR = '$OBJ_ROOT/tools',
|
| - V8_DIR = '$OBJ_ROOT/v8',
|
| - WEBKIT_DIR = '$OBJ_ROOT/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',
|
| - LIBEVENT_DIR = '$THIRD_PARTY_DIR/libevent',
|
| - 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',
|
| - SQLITE_DIR = '$THIRD_PARTY_DIR/sqlite',
|
| - ZLIB_DIR = '$THIRD_PARTY_DIR/zlib',
|
| -
|
| - THIRD_PARTY_WEBKIT_DIR = '$THIRD_PARTY_DIR/WebKit',
|
| -
|
| - GTK_CLIP_DUMP_DIR = '$TOOLS_DIR/gtk_clipboard_dump',
|
| - GRIT_DIR = '$TOOLS_DIR/grit',
|
| -
|
| - PYTHON=sys.executable,
|
| -
|
| - PERL = 'perl',
|
| - PERL_INCLUDE_FLAG = '-I ',
|
| - PERL_INCLUDE_SUFFIX = '',
|
| - _PERL_INCLUDE_FLAGS = ('${_concat(PERL_INCLUDE_FLAG, '
|
| - 'PERL_INCLUDE_PATH, '
|
| - 'PERL_INCLUDE_SUFFIX,'
|
| - '__env__, RDirs, TARGET, SOURCE)}'),
|
| -)
|
| -
|
| -root_env['req_system_libs'] = ARGUMENTS.get('SYSTEM_LIBS', '').split(',')
|
| -root_env['_GYP'] = ARGUMENTS.get('GYP') and '_gyp' or ''
|
| -
|
| -def WantSystemLib(env, lib):
|
| - """
|
| - Return true if lib has been requested as a system library in SYSTEM_LIBS.
|
| - """
|
| - if lib not in env['all_system_libs']:
|
| - env['all_system_libs'].append(lib)
|
| - return (lib in env['req_system_libs'])
|
| -root_env.AddMethod(WantSystemLib, "WantSystemLib")
|
| -
|
| -
|
| -# TODO(bradnelson): pull this functionality into hammer.
|
| -# Auto select the number of processors
|
| -if root_env['PLATFORM'] in ['win32', 'cygwin']:
|
| - cpus = int(os.environ.get('NUMBER_OF_PROCESSORS', 1))
|
| -elif root_env['PLATFORM'] in ['linux', 'linux2', 'posix']:
|
| - # TODO(evanm): this is Linux-specific, not posix.
|
| - # Parse /proc/cpuinfo for processor count.
|
| - cpus = len([l for l in open('/proc/cpuinfo') if l.startswith('processor\t')])
|
| -else:
|
| - cpus = 1
|
| -SetOption('num_jobs', cpus + 1)
|
| -
|
| -
|
| -# Use timestamps change, followed by MD5 for speed
|
| -root_env.Decider('MD5-timestamp')
|
| -
|
| -# Incorporate settings that should apply globally (primarily to provide
|
| -# an obvious place for developmental experimentation).
|
| -root_env.ApplySConscript(['$CHROME_SRC_DIR/build/common.scons'])
|
| -
|
| -# The list of all leaf (fully described) environments.
|
| -environment_list = []
|
| -components = []
|
| -
|
| -# Figure out what SConscript files to load based on the user's request.
|
| -# Default is to load all SConscript files for a full-tree build.
|
| -# The keyword arguments in the call below (base, breakpad, etc.) can be
|
| -# specified in the LOAD= argument to cut down on the build.
|
| -
|
| -Default(None) # Reset default target to empty.
|
| -if root_env.get('_GYP'):
|
| - webkit_sconscript = '$WEBKIT_DIR/tools/test_shell/test_shell_main${_GYP}.scons'
|
| -else:
|
| - webkit_sconscript = '$WEBKIT_DIR/webkit_main${_GYP}.scons'
|
| -
|
| -sconscript_map = dict(
|
| - base = '$BASE_DIR/base_main${_GYP}.scons',
|
| - breakpad = '$BREAKPAD_DIR/SConscript',
|
| - chrome = '$CHROME_DIR/chrome_main${_GYP}.scons',
|
| - gears = '$GEARS_DIR/SConscript',
|
| - google_update = '$GOOGLE_UPDATE_DIR/SConscript',
|
| - googleurl = '$GOOGLEURL_DIR/googleurl.scons',
|
| - media = '$MEDIA_DIR/media.scons',
|
| - net = '$NET_DIR/net_main${_GYP}.scons',
|
| - printing = '$PRINTING_DIR/printing.scons',
|
| - rlz = '$RLZ_DIR/SConscript',
|
| - sandbox = '$SANDBOX_DIR/sandbox.scons',
|
| - sdch = '$SDCH_DIR/SConscript',
|
| - skia = '$SKIA_DIR/SConscript',
|
| - testing = '$TESTING_DIR/SConscript.gtest',
|
| - third_party = [
|
| - '$BSDIFF_DIR/bsdiff.scons',
|
| - '$BSPATCH_DIR/bspatch.scons',
|
| - '$BZIP2_DIR/bzip2.scons',
|
| - '$ICU38_DIR/icu38_main${_GYP}.scons',
|
| - '$LIBJPEG_DIR/libjpeg${_GYP}.scons',
|
| - '$LIBPNG_DIR/libpng${_GYP}.scons',
|
| - '$LIBXML_DIR/libxml.scons',
|
| - '$LIBXSLT_DIR/libxslt.scons',
|
| - '$LZMA_SDK_DIR/lzma_sdk.scons',
|
| - '$MODP_B64_DIR/modp_b64.scons',
|
| - '$ZLIB_DIR/zlib${_GYP}.scons',
|
| - ],
|
| - tools = '$GTK_CLIP_DUMP_DIR/gcd.scons',
|
| - v8 = '$OBJ_ROOT/build/SConscript.v8',
|
| - webkit = webkit_sconscript,
|
| -)
|
| -
|
| -if root_env.get('_GYP'):
|
| - Import('build_component')
|
| - sconscripts = [sconscript_map[build_component]]
|
| - components = [build_component]
|
| -else:
|
| - sconscripts = root_env.ChromiumLoadComponentSConscripts(**sconscript_map)
|
| -
|
| -# Add the final list into the root environment to be build in BuildComponents.
|
| -root_env.Append(BUILD_SCONSCRIPTS = sconscripts)
|
| -
|
| -if not root_env.WantSystemLib('sqlite') and not root_env.get('_GYP'):
|
| - root_env.Append(BUILD_SCONSCRIPTS = ['$SQLITE_DIR/SConscript'])
|
| -
|
| -
|
| -# --------------------------------------------------------------------------
|
| -# Windows specific
|
| -
|
| -windows_env = root_env.Clone()
|
| -
|
| -# TODO(siggi) Remove this code once SCons plays well when the
|
| -# Platform SDK 6.1 is installed with VS2005 but not VS2008.
|
| -if root_env['PLATFORM'] in ['win32', 'cygwin']:
|
| - windows_env['MSVS_VERSION'] = '8.0'
|
| -
|
| -windows_env.Tool('target_platform_windows')
|
| -windows_env.Tool('component_targets_msvs') # Per target project support.
|
| -
|
| -# Hammer's target_platform_windows module added the stock SCons
|
| -# MSVSProject() and MSVSSolution() Builders, which we're going to
|
| -# replace with our newer, more flexible implementation. Wipe out the
|
| -# older ones so they don't interfere with our initialization and so
|
| -# SCons doesn't propagate them to cloned construction environments.
|
| -del windows_env['BUILDERS']['MSVSProject']
|
| -del windows_env['BUILDERS']['MSVSSolution']
|
| -windows_env.Tool('MSVSNew')
|
| -
|
| -windows_env.Tool('midl')
|
| -
|
| -# TODO(bradnelson): target_platform_windows defines a whole bunch of
|
| -# flags that we don't care about, including defining OS_WINDOWS in a
|
| -# way that we don't want, and (most especially) adding *_DEBUG and
|
| -# *_OPTIMIZED constructionv variables that add magic values to
|
| -# CCFLAGS. We override the normal variables (CPPDEFINES, CCFLAGS,
|
| -# LINKFLAGS, ARFLAGS) below, but get rid of the special Hammer ones
|
| -# here, until Hammer can be made a little nicer about htis.
|
| -
|
| -del windows_env['CCFLAGS_DEBUG']
|
| -del windows_env['LINKFLAGS_DEBUG']
|
| -del windows_env['CCFLAGS_OPTIMIZED']
|
| -
|
| -windows_env['PDB'] = '${TARGET.base}.pdb'
|
| -windows_env['MSVC_BATCH'] = True
|
| -
|
| -# TODO(bradnelson): this should not need to be gated on host platform.
|
| -if root_env['PLATFORM'] in ['win32', 'cygwin']:
|
| - msvs_env = Environment(tools=['msvc', 'mslink'])['ENV']
|
| - msvs_drive = msvs_env['PATH'][0]
|
| -else:
|
| - msvs_env = {'PATH': '', 'INCLUDE': '', 'LIB': ''}
|
| - msvs_drive = 'C'
|
| -
|
| -# Use the absolute path for MSVC because it might not be on the same drive
|
| -# as our source checkout.
|
| -visual_studio_path = msvs_drive + ':/Program Files/Microsoft Visual Studio 8'
|
| -
|
| -# If side-by-side platform sdk is not available try local copy.
|
| -platform_sdk_path = '$CHROME_SRC_DIR/third_party/platformsdk_win2008_6_1/files'
|
| -if (root_env['PLATFORM'] in ['win32', 'cygwin'] and
|
| - not os.path.exists(windows_env.subst(platform_sdk_path))):
|
| - platform_sdk_path = (
|
| - msvs_drive + ':\\Program Files\\Microsoft SDKs\\Windows\\v6.1')
|
| -
|
| -windows_env.Replace(
|
| - CSCRIPT = 'c:\\Windows\\System32\\cscript',
|
| -
|
| - PLATFORMSDK_6_1 = platform_sdk_path,
|
| - VISUAL_STUDIO = visual_studio_path,
|
| -
|
| - CYGWIN_DIR = windows_env.Dir('$CHROME_SRC_DIR/third_party/cygwin'),
|
| - CYGWIN_BIN_DIR = '$CYGWIN_DIR/bin',
|
| -
|
| - PERL = '$CYGWIN_BIN_DIR/perl.exe',
|
| -
|
| - MSVS_ENV = msvs_env,
|
| -
|
| - YACC = '$CYGWIN_BIN_DIR/bison.exe',
|
| -
|
| - ARFLAGS = [
|
| - '/nologo',
|
| - ],
|
| -
|
| - CCFLAGS = [
|
| - '/nologo',
|
| - '/errorReport:prompt',
|
| - ],
|
| -
|
| - CPPDEFINES = [
|
| - '_UNICODE',
|
| - 'UNICODE',
|
| - ],
|
| -
|
| -
|
| - LIBS = [
|
| - 'advapi32.lib',
|
| - 'comdlg32.lib',
|
| - 'gdi32.lib',
|
| - 'kernel32.lib',
|
| - 'odbc32.lib',
|
| - 'odbccp32.lib',
|
| - 'ole32.lib',
|
| - 'oleaut32.lib',
|
| - 'shell32.lib',
|
| - 'user32.lib',
|
| - 'uuid.lib',
|
| - 'winspool.lib',
|
| -
|
| - 'DelayImp.lib',
|
| - ],
|
| -
|
| - LINKFLAGS = [
|
| - '/nologo',
|
| - ],
|
| -
|
| - ICU_LIBS = ['icu'],
|
| -)
|
| -
|
| -# Force scons to handle long include lines correctly.
|
| -pchcom_fixed = windows_env['PCHCOM']
|
| -pchcom_fixed = pchcom_fixed.replace('${TARGETS[0]}', '$TARGET')
|
| -pchcom_fixed = pchcom_fixed.replace('${TARGETS[1]}', '$TARGETS1')
|
| -
|
| -# Below, we'll redefine $CXXFLAGS so its expansion doesn't include
|
| -# $CCFLAGS. Modify $PCHCOM, which was relying on this fact, so
|
| -# that $CCFLAGS still shows up in precompiled header compilations.
|
| -pchcom_fixed = pchcom_fixed.replace('$CXXFLAGS', '$CXXFLAGS $CCFLAGS')
|
| -
|
| -windows_env.Replace(
|
| - CCCOM = "${TEMPFILE('%s')}" % windows_env['CCCOM'],
|
| - CXXCOM = "${TEMPFILE('%s')}" % windows_env['CXXCOM'],
|
| - SHCCCOM = "${TEMPFILE('%s')}" % windows_env['SHCCCOM'],
|
| - SHCXXCOM = "${TEMPFILE('%s')}" % windows_env['SHCXXCOM'],
|
| - PCHCOM = "${TEMPFILE('%s')}" % pchcom_fixed,
|
| - TARGETS1 = '${TARGETS[1]}',
|
| -
|
| - # The SCons default for $CXXFLAGS contains $CCFLAGS, which is
|
| - # also on the $CCCOM command line string separately. Redefine
|
| - # $CXXFLAGS to avoid the duplication
|
| - CXXFLAGS = '$( /TP $)',
|
| -)
|
| -
|
| -windows_env['ENV']['PROGRAMFILES'] = os.environ.get('PROGRAMFILES', '')
|
| -windows_env['ENV']['SystemDrive'] = os.environ.get('SystemDrive', '')
|
| -windows_env['ENV']['USERPROFILE'] = os.environ.get('USERPROFILE', '')
|
| -
|
| -windows_env.AppendENVPath('PATH', ';C:\\WINDOWS\\system32')
|
| -
|
| -windows_dbg = windows_env.Clone()
|
| -environment_list.append(windows_dbg)
|
| -windows_dbg.Replace(
|
| - BUILD_TYPE = 'dbg',
|
| - BUILD_TYPE_DESCRIPTION = 'Windows debug build',
|
| -)
|
| -windows_dbg.Tool('target_debug')
|
| -windows_dbg.ApplySConscript(['$CHROME_SRC_DIR/build/debug.scons'])
|
| -windows_dbg.Append(BUILD_GROUPS = ['default'])
|
| -
|
| -windows_opt = windows_env.Clone()
|
| -environment_list.append(windows_opt)
|
| -windows_opt.Replace(
|
| - BUILD_TYPE = 'opt',
|
| - BUILD_TYPE_DESCRIPTION = 'Windows optimized build',
|
| -)
|
| -windows_opt.Tool('target_optimized')
|
| -windows_opt.ApplySConscript(['$CHROME_SRC_DIR/build/release.scons'])
|
| -
|
| -# --------------------------------------------------------------------------
|
| -# Platform-independent "msvs" mode for generating Visual Studio
|
| -# project and solution files from any platform.
|
| -
|
| -DeclareBit('msvs', 'Generate Visual Studio files')
|
| -
|
| -msvs_env = windows_env.Clone()
|
| -
|
| -msvs_env.Tool('target_platform_windows')
|
| -msvs_env.Tool('component_targets_msvs') # Per target project support.
|
| -
|
| -del msvs_env['BUILDERS']['MSVSProject']
|
| -del msvs_env['BUILDERS']['MSVSSolution']
|
| -msvs_env.Tool('MSVSNew')
|
| -
|
| -msvs_env.Tool('midl')
|
| -
|
| -environment_list.append(msvs_env)
|
| -msvs_env.Replace(
|
| - BUILD_TYPE = 'msvs',
|
| - BUILD_TYPE_DESCRIPTION = 'Generate Visual Studio files',
|
| - HOST_PLATFORMS = ['*'],
|
| - ICU_LIBS = [],
|
| -)
|
| -msvs_env.SetBits('windows', 'msvs')
|
| -# TODO(sgk): turn into separate debug + release env adding
|
| -# to a common .sln file
|
| -msvs_env.Tool('target_debug')
|
| -
|
| -# --------------------------------------------------------------------------
|
| -# Linux specific
|
| -
|
| -linux_env = root_env.Clone()
|
| -linux_env.Tool('target_platform_linux')
|
| -linux_env.Tool('yacc')
|
| -
|
| -# By default scons will depend on the first path element for any command line.
|
| -# For example, it will resolve 'gcc' with $PATH and depend on that for any
|
| -# action which runs gcc. This disables this behaviour:
|
| -linux_env['IMPLICIT_COMMAND_DEPENDENCIES'] = False
|
| -
|
| -# TODO(bradnelson): this is needed for now because target_platform_linux has
|
| -# OS_LINUX defined in a weird way.
|
| -linux_env.FilterOut(CPPDEFINES = ['OS_LINUX=OS_LINUX'])
|
| -
|
| -# Copy some environment variables from the outer environment to the
|
| -# SCons.Environment if they exist.
|
| -for envvar in ('CC', 'CXX', 'LINK'):
|
| - if envvar in os.environ:
|
| - linux_env[envvar] = os.environ[envvar]
|
| - linux_env['ENV'][envvar] = os.environ[envvar]
|
| -# Copy these environment variables from the outer environment to the
|
| -# environment that the build commands run in.
|
| -# $HOME is needed by distcc so it can find its lock file.
|
| -for envvar in ('HOME', 'DISTCC_DIR', 'DISTCC_HOSTS', 'CCACHE_DIR',
|
| - 'INTERCEPTOR_SOCKET', 'ENFORGE_DIGEST_CACHE',
|
| - 'CHROME_BUILD_TYPE', 'CHROMIUM_BUILD',
|
| - 'ENFORGE_CACHE_HOST', 'ENFORGE_CACHE_PORT'):
|
| - if envvar in os.environ:
|
| - linux_env['ENV'][envvar] = os.environ[envvar]
|
| -
|
| -excluded_warnings = [
|
| - # TODO: Clean up uses of ext/hash_map and remove this.
|
| - # (see unordered_map and base/hash_tables.h)
|
| - '-Wno-deprecated', # Needed for using ext/hash_map on GCC 4.3
|
| -]
|
| -if not root_env.get('_GYP'):
|
| - linux_env.Append(
|
| - BUILD_SCONSCRIPTS = [
|
| - '$LIBEVENT_DIR/libevent${_GYP}.scons',
|
| - ],
|
| - )
|
| -linux_env.Append(
|
| - ASFLAGS = ['-32'],
|
| - CCFLAGS = ['-m32', '-pthread', '-march=pentium4', '-fno-exceptions',
|
| - # All floating-point computations on x87 happens in 80-bit precision.
|
| - # Because the C and C++ language standards allow the compiler to keep the
|
| - # floating-point values in higher precision than what's specified in the
|
| - # source and doing so is more efficient than constantly rounding up to
|
| - # 64-bit or 32-bit precision as specified in the source, the compiler,
|
| - # especially in the optimized mode, tries very hard to keep values in x87
|
| - # floating-point stack (in 80-bit precision) as long as possible. This has
|
| - # important side effects, that the real value used in computation may
|
| - # change depending on how the compiler did the optimization - that is, the
|
| - # value kept in 80-bit is different than the value rounded down to 64-bit
|
| - # or 32-bit. There are possible compiler options to make this behavior
|
| - # consistent (e.g. -ffloat-store would keep all floating-values in the
|
| - # memory, thus force them to be rounded to its original precision) but they
|
| - # have significant runtime performance penalty.
|
| - #
|
| - # -mfpmath=sse -msse2 makes the compiler use SSE instructions which keep
|
| - # floating-point values in SSE registers in its native precision (32-bit
|
| - # for single precision, and 64-bit for double precision values). This means
|
| - # the floating-point value used during computation does not change
|
| - # depending on how the compiler optimized the code, since the value is
|
| - # always kept in its specified precision.
|
| - '-msse2', '-mfpmath=sse'],
|
| - # GCC will generate ident directives with the GCC version. Accumulate
|
| - # these all up and you end up with ~80K repeated in a .comment section.
|
| - CCFLAGS_OPTIMIZED = ['-fno-ident'],
|
| - CXXFLAGS = ['-Wall', '-Werror', '-march=i686'] + excluded_warnings,
|
| - LINKFLAGS = ['-m32', '-pthread'],
|
| -)
|
| -
|
| -linux_env.Replace(
|
| - # Linking of large files uses lots of RAM, so serialize links
|
| - # using the handy flock command from util-linux.
|
| - LINK = 'flock $TARGET_ROOT/linker.lock ' + linux_env['LINK'],
|
| -
|
| - # We have several cases where archives depend on each other in a cyclic
|
| - # fashion. (V8Bindings, libport and WebCore being the most significant
|
| - # example.) Since the GNU linker does only a single pass over the archives
|
| - # we need some extra trickery to deal with these unavoidable cycles. That
|
| - # trickery is --start-group and --end-group (aka -( and -) ). That causes ld
|
| - # to loop over the group until no more undefined symbols are found. In an
|
| - # ideal world we would only make groups from those libraries which we knew
|
| - # to be in cycles. However, that's tough with SCons, so we bodge it by
|
| - # making all the archives a group by redefining the linking command here.
|
| - SHLINKCOM = ('$SHLINK -o $TARGET $SHLINKFLAGS $SOURCES '
|
| - '$_LIBDIRFLAGS '
|
| - '-Wl,--start-group $_LIBFLAGS -Wl,--end-group'),
|
| - LINKCOM = ('$LINK -o $TARGET $LINKFLAGS $SOURCES '
|
| - '$_LIBDIRFLAGS '
|
| - '-Wl,--start-group $_LIBFLAGS -Wl,--end-group'),
|
| -)
|
| -
|
| -linux_env.Replace(
|
| - PERL = '/usr/bin/perl',
|
| - PERL_INCLUDE_FLAG = '-I ',
|
| - PERL_INCLUDE_SUFFIX = '',
|
| - _PERL_INCLUDE_FLAGS = ('${_concat(PERL_INCLUDE_FLAG, '
|
| - 'PERL_INCLUDE_PATH, '
|
| - 'PERL_INCLUDE_SUFFIX,'
|
| - '__env__, RDirs, TARGET, SOURCE)}'),
|
| -)
|
| -
|
| -linux_env.FilterOut(
|
| - BUILD_SCONSCRIPTS = [
|
| - '$BSPATCH_DIR/bspatch.scons',
|
| - '$BSDIFF_DIR/bsdiff.scons',
|
| - '$GOOGLE_UPDATE_DIR/SConscript',
|
| - '$RLZ_DIR/SConscript',
|
| - '$SANDBOX_DIR/sandbox.scons',
|
| - ],
|
| -)
|
| -
|
| -linux_env.Append(
|
| - # We need rt for clock_gettime.
|
| - LIBS = ['rt'],
|
| -
|
| - ICU_LIBS = ['icu'],
|
| -)
|
| -
|
| -# Build an "official" build (DCHECKs completely compiled out, etc).
|
| -if ARGUMENTS.get('OFFICIAL') == '1':
|
| - linux_env.Append(CPPDEFINES=['OFFICIAL_BUILD'])
|
| - # Make sure units of code and data go in their own section, and then GC them
|
| - # in the linker to remove unreferenced data and code. Currently gold doesn't
|
| - # support --gc-sections, so you'll have to build with the original GNU ld.
|
| - linux_env.Append(CCFLAGS_OPTIMIZED=['-ffunction-sections', '-fdata-sections'])
|
| - linux_env.Append(LINKFLAGS_OPTIMIZED=['-Wl,--gc-sections'])
|
| -
|
| -# Build with support for gcov when COVERAGE=1.
|
| -if ARGUMENTS.get('COVERAGE') == '1':
|
| - linux_env.Append(CCFLAGS=['-fprofile-arcs', '-ftest-coverage'])
|
| - linux_env.Append(LINKFLAGS=['-fprofile-arcs'])
|
| -
|
| -# Build with support for gprof when PROFILE=1.
|
| -if ARGUMENTS.get('PROFILE') == '1':
|
| - linux_env.Append(CCFLAGS=['-pg', '-g'])
|
| - linux_env.Append(LINKFLAGS=['-pg'])
|
| -
|
| -# Build with symbols (useful for opt builds, for example) when SYMBOLS=1.
|
| -if ARGUMENTS.get('SYMBOLS') == '1':
|
| - linux_env.Append(CCFLAGS=['-g'])
|
| -
|
| -# Build shared libraries (useful for fast links) when SHARED=1.
|
| -if ARGUMENTS.get('SHARED') == '1':
|
| - linux_env.Replace(COMPONENT_STATIC=False)
|
| -
|
| -# Build with system-provided NSS and GTK.
|
| -if root_env['PLATFORM'] in ['linux', 'linux2', 'posix']:
|
| - try:
|
| - linux_env.ParseConfig('pkg-config --cflags --libs nss')
|
| - linux_env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
|
| - linux_env.ParseConfig('pkg-config --cflags --libs pangoft2')
|
| - except OSError, e:
|
| - print ('\n'
|
| - 'Failed to find a package dependency. Please install all the\n'
|
| - 'packages listed at\n'
|
| - 'http://code.google.com/p/chromium/wiki/LinuxBuildInstructions'
|
| - '#Software_Requirements')
|
| -
|
| - sys.exit(1)
|
| -
|
| - # TODO: Factor the code here into aits own function.
|
| - if root_env.WantSystemLib('libxml'):
|
| - try:
|
| - linux_env.ParseConfig('pkg-config --cflags --libs libxml-2.0')
|
| - except OSError, e:
|
| - print ('\n'
|
| - 'libxml requested in SYSTEM_LIBS but not found\n')
|
| - sys.exit(1)
|
| - if root_env.WantSystemLib('libxslt'):
|
| - try:
|
| - linux_env.ParseConfig('pkg-config --cflags --libs libxslt')
|
| - except OSError, e:
|
| - print ('\n'
|
| - 'libxslt requested in SYSTEM_LIBS but not found\n')
|
| - sys.exit(1)
|
| - if root_env.WantSystemLib('sqlite'):
|
| - try:
|
| - linux_env.ParseConfig('pkg-config --cflags --libs sqlite')
|
| - except OSError, e:
|
| - print ('\n'
|
| - 'sqlite requested in SYSTEM_LIBS but not found\n')
|
| - sys.exit(1)
|
| -
|
| -linux_dbg = linux_env.Clone()
|
| -environment_list.append(linux_dbg)
|
| -linux_dbg.Replace(
|
| - BUILD_TYPE = 'dbg',
|
| - BUILD_TYPE_DESCRIPTION = 'Linux debug build',
|
| -)
|
| -linux_dbg.Tool('target_debug')
|
| -linux_dbg.ApplySConscript(['$CHROME_SRC_DIR/build/debug.scons'])
|
| -linux_dbg.Append(BUILD_GROUPS = ['default'])
|
| -
|
| -linux_opt = linux_env.Clone()
|
| -environment_list.append(linux_opt)
|
| -# Disable rpath for faster startup.
|
| -linux_opt.Append(RPATH = [])
|
| -linux_opt.Replace(
|
| - BUILD_TYPE = 'opt',
|
| - BUILD_TYPE_DESCRIPTION = 'Linux optimized build',
|
| -)
|
| -linux_opt.Tool('target_optimized')
|
| -linux_opt.ApplySConscript(['$CHROME_SRC_DIR/build/release.scons'])
|
| -
|
| -# --------------------------------------------------------------------------
|
| -# Mac specific
|
| -
|
| -mac_env = root_env.Clone()
|
| -environment_list.append(mac_env)
|
| -mac_env.Tool('target_platform_mac')
|
| -mac_env.Tool('target_debug')
|
| -mac_env.ApplySConscript(['$CHROME_SRC_DIR/build/debug.scons'])
|
| -mac_env.Replace(
|
| - BUILD_TYPE = 'debug-mac',
|
| - BUILD_TYPE_DESCRIPTION = 'Mac debug build',
|
| -)
|
| -mac_env.Append(BUILD_GROUPS = ['default'])
|
| -
|
| -mac_env.Replace(
|
| - # Reproduce XCode's behavior of using gcc even to link C++,
|
| - # and distinguishing it the -x c++ option.
|
| - CC = 'gcc-4.2',
|
| - CXX = 'g++-4.2',
|
| - LINK = '$CXX',
|
| -)
|
| -mac_env.FilterOut(SHCCFLAGS = ['-fPIC'])
|
| -mac_env.FilterOut(SHLINKFLAGS = ['-fPIC'])
|
| -
|
| -mac_env.FilterOut(
|
| - BUILD_SCONSCRIPTS = [
|
| - '$BREAKPAD_DIR/SConscript',
|
| - '$BSDIFF_DIR/bsdiff.scons',
|
| - '$BSPATCH_DIR/bspatch.scons',
|
| - '$CHROME_DIR/chrome_main${_GYP}.scons',
|
| - '$GOOGLE_UPDATE_DIR/SConscript',
|
| - '$LIBJPEG_DIR/libjpeg.scons',
|
| - '$LIBXML_DIR/libxml.scons',
|
| - '$LIBXSLT_DIR/libxslt.scons',
|
| - '$RLZ_DIR/SConscript',
|
| - '$SANDBOX_DIR/sandbox.scons',
|
| - '$WEBKIT_DIR/SConscript',
|
| - 'build/SConscript.v8',
|
| - ],
|
| -)
|
| -# TODO(bradnelson): this is needed for now because target_platform_mac has
|
| -# OS_MACOSX defined in a weird way.
|
| -mac_env.FilterOut(CPPDEFINES = ['OS_MACOSX=OS_MACOSX'])
|
| -
|
| -if not root_env.WantSystemLib('libevent') and not root_env.get('_GYP'):
|
| - mac_env.Append(
|
| - BUILD_SCONSCRIPTS = [
|
| - '$LIBEVENT_DIR/libevent${_GYP}.scons',
|
| - ],
|
| - )
|
| -mac_env.Append(
|
| - CFLAGS = [
|
| - '-std=c99',
|
| - ],
|
| - CXXFLAGS = [
|
| - '-fvisibility-inlines-hidden',
|
| - '${str(SOURCE).endswith(".mm") and "-fobjc-gc" or ""}',
|
| - ],
|
| - CCFLAGS = [
|
| - '-fmessage-length=0',
|
| - '-pipe',
|
| - '-O0',
|
| - '-mdynamic-no-pic',
|
| - '-Werror',
|
| - '-Wnewline-eof',
|
| - '-fvisibility=hidden',
|
| - '-gdwarf-2',
|
| - '-Wall',
|
| - '-Wendif-labels',
|
| - '-fstack-protector',
|
| - '-fstack-protector-all',
|
| - ],
|
| - CPPDEFINES = [
|
| - 'DEBUG',
|
| - ],
|
| -
|
| - FRAMEWORKPATH = [
|
| - mac_env.Dir('${TARGET_ROOT}'),
|
| - '/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks',
|
| - ],
|
| - FRAMEWORKS = [
|
| - 'AppKit',
|
| - 'ApplicationServices',
|
| - 'Foundation',
|
| - ],
|
| -
|
| - ICU_LIBS = ['icui18n', 'icuuc', 'icudata'],
|
| -)
|
| -
|
| -
|
| -# --------------------------------------------------------------------------
|
| -# Platform-independent "xcode" mode for generating XCode files
|
| -# from any platform.
|
| -
|
| -DeclareBit('xcode', 'Generate XCode files')
|
| -
|
| -# TODO(sgk): remove this after we update Hammer modules.
|
| -DeclareBit('mac', 'Target platform is mac.')
|
| -
|
| -xcode_env = mac_env.Clone()
|
| -# TODO(sgk): uncomment when xcode generation becomes real.
|
| -#environment_list.append(xcode_env)
|
| -xcode_env.Replace(
|
| - BUILD_TYPE = 'xcode',
|
| - BUILD_TYPE_DESCRIPTION = 'Generate XCode files',
|
| - HOST_PLATFORMS = ['*'],
|
| - ICU_LIBS = [],
|
| -)
|
| -xcode_env.SetBits('mac', 'xcode')
|
| -# TODO(sgk): turn into separate debug + release env adding
|
| -# to a common .sln file
|
| -xcode_env.Tool('target_debug')
|
| -
|
| -
|
| -# -------------------------------------------------------------------------
|
| -
|
| -
|
| -# Overlay things from a layer below.
|
| -for env in environment_list:
|
| - env.Dir('$OBJ_ROOT').addRepository(env.Dir('$CHROME_SRC_DIR'))
|
| - env.Dir('$OBJ_ROOT/googleurl').addRepository(env.Dir('$CHROME_SRC_DIR/build'))
|
| -
|
| - # We pre-resolve some common targets. We end up spending lots of time
|
| - # resolving these over and over again.
|
| - env.Replace(
|
| - CHROME_SRC_DIR = str(env.Dir('$CHROME_SRC_DIR')),
|
| - SRC_DIR = str(env.Dir('$SRC_DIR')),
|
| - DESTINATION_ROOT = str(env.Dir('$DESTINATION_ROOT')),
|
| - TARGET_ROOT = str(env.Dir('$TARGET_ROOT')),
|
| - OBJ_ROOT = str(env.Dir('$OBJ_ROOT')),
|
| - WEBKIT_DIR = str(env.Dir('$WEBKIT_DIR')),
|
| - )
|
| -
|
| -
|
| -help_fmt = """
|
| -Usage: hammer [SCONS_OPTIONS] [VARIABLES] [TARGET] ...
|
| -
|
| -Supported build variables:
|
| - LOAD=[module,...] Comma-separated list of components to load in the
|
| - dependency graph ('-' prefix excludes):
|
| -%s
|
| - SYSTEM_LIBS=[lib,...] Comma-separated list of system libraries to link
|
| - dynamically (by default they are built in from
|
| - included sources):
|
| -%s
|
| - PROGRESS=type Display a progress indicator:
|
| - name: print each evaluated target name
|
| - spinner: print a spinner every 5 targets
|
| - GYP=1 Any non-null value uses GYP-generated files
|
| - (*_gyp.scons).
|
| -"""
|
| -
|
| -if GetOption('help'):
|
| - import textwrap
|
| - tw = textwrap.TextWrapper(
|
| - width = 78,
|
| - initial_indent = ' '*32,
|
| - subsequent_indent = ' '*32,
|
| - )
|
| - components = tw.fill(', '.join(components))
|
| - all_system_libs = tw.fill(', '.join(env['all_system_libs']))
|
| -
|
| - Help(help_fmt % (components, all_system_libs))
|
| -
|
| -# -------------------------------------------------------------------------
|
| -
|
| -# Invoke all the SConscripts in each of the environments that make sense on
|
| -# this host-platform.
|
| -BuildComponents(environment_list)
|
| -
|
| -# -------------------------------------------------------------------------
|
| -
|
| -if not root_env.get('_GYP'):
|
| - modes = GetTargetModes().keys()
|
| -
|
| - if set(modes) - set(['msvs', 'xcode']):
|
| - # There's at least one mode being built besides the platform-
|
| - # independent 'msvs' or 'xcode' modes. Build the current
|
| - # build_component's Alias as default--that is, "base" when we're
|
| - # in the base/ subdirectory, "chrome" under chrome/, etc.
|
| - Import('build_component')
|
| - Default(Alias(build_component)) # Set default target based on where built.
|
| -
|
| - if 'msvs' in modes:
|
| - # We're in --mode=msvs, so add its Alias(es) to the default targets.
|
| - Default(Alias('msvs'))
|
| -
|
| -# -------------------------------------------------------------------------
|
| -
|
| -# This must occur after BuildComponents so that the dependency graph
|
| -# will be populated.
|
| -vs_env = windows_env.Clone()
|
| -vs_env.Append(COMPONENT_VS_SOURCE_SUFFIXES = [
|
| - '.def',
|
| - '.ini',
|
| - '.txt',
|
| - '.ui',
|
| - '.xml',
|
| -])
|
| -# Source project
|
| -p = vs_env.ComponentVSDirProject(
|
| - 'chrome_src',
|
| - [
|
| - # TODO(bradnelson): need to make sure we can use $CHROME_SRC_DIR here
|
| - '$CHROME_SRC_DIR/base',
|
| - '$CHROME_SRC_DIR/breakpad',
|
| - '$CHROME_SRC_DIR/build',
|
| -# '$CHROME_SRC_DIR/chrome',
|
| - '.',
|
| - '$CHROME_SRC_DIR/data',
|
| - '$CHROME_SRC_DIR/gears',
|
| - '$CHROME_SRC_DIR/google_update',
|
| - '$CHROME_SRC_DIR/googleurl',
|
| - '$CHROME_SRC_DIR/net',
|
| - '$CHROME_SRC_DIR/rlz',
|
| - '$CHROME_SRC_DIR/sandbox',
|
| - '$CHROME_SRC_DIR/sdhc',
|
| - '$CHROME_SRC_DIR/site_scons',
|
| - '$CHROME_SRC_DIR/skia',
|
| - '$CHROME_SRC_DIR/testing',
|
| - '$CHROME_SRC_DIR/third_party',
|
| - '$CHROME_SRC_DIR/tools',
|
| - '$CHROME_SRC_DIR/v8',
|
| - '$CHROME_SRC_DIR/webkit',
|
| - ],
|
| - COMPONENT_VS_SOURCE_FOLDERS = [
|
| - (None, '$DESTINATION_ROOT'),
|
| - ('src', '$CHROME_SRC_DIR'),
|
| - ],
|
| - COMPONENT_VS_PROJECT_DIR = '$MAIN_DIR',
|
| -)
|
| -
|
| -# Always try to (re)build the project files when requested.
|
| -vs_env.AlwaysBuild(p)
|
| -
|
| -vs_env.ComponentVSSolution(
|
| - 'chrome_solution',
|
| - [
|
| - 'all_libraries',
|
| - 'all_languages',
|
| - 'all_programs',
|
| - 'all_test_programs',
|
| - ], projects = [p],
|
| - COMPONENT_VS_PROJECT_SCRIPT_PATH=(
|
| - 'cd $$(ProjectDir)/$VS_PROJECT_TO_MAIN_DIR && hammer.bat'),
|
| -)
|
| -
|
| -# -------------------------------------------------------------------------
|
|
|