Index: gears/SConscript |
diff --git a/gears/SConscript b/gears/SConscript |
deleted file mode 100644 |
index 3d16d3e08eece7c77273591995711272a8b12872..0000000000000000000000000000000000000000 |
--- a/gears/SConscript |
+++ /dev/null |
@@ -1,992 +0,0 @@ |
-# Copyright (c) 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. |
- |
-# Notes: |
-# This is the main Gears SConscript file. From here, we include sub-scripts |
-# that handle building various targets (third party libs, common exes, the |
-# browser plugins themselves, and installers). Some sub-scripts return a |
-# dictionary of variables to be appended to the environment, so other |
-# sub-scripts can use them. |
-# |
-# To check out the Gears sources, you need to make sure this directory is in |
-# your .gclient file, so its DEPS get processed. Example: |
-# { "name" : "src/gears", |
-# "url" : "svn://chrome-svn/chrome/trunk/src/gears", |
-# }, |
-# |
-# This is a work-in-progress conversion of the current Gears set of Makefiles. |
-# A lot of the stuff doesn't translate to SCons-land well, and I'm not sure |
-# how faithful we want to be to the original. |
-# |
-# Questions: |
-# Should we flatten the output directory into |
-# Hammer/gears/platform/browser/*.obj like Gears does now? If so, how? |
- |
-# Notes to self: |
-# - os.path.abspath('.') (the CWD) is variant_dir if it exists, else it's the |
-# toplevel_dir (which contains the SConstruct). |
-# - env.Entry('.') is the entry representing the variant_dir. |
-# - env.Entry('#') is the entry representing the toplevel_dir. |
-# - str(entry) gives the path relative to variant_dir, or abspath if the entry |
-# is outside the variant_dir. |
-# - entry.path gives the path relative to toplevel_dir. |
-# - entry.abspath gives the absolute path. |
- |
-import os |
- |
-Import('env') |
- |
-env = env.Clone( |
- OPEN_DIR = "gears", |
- PRIVATE_DIR = "gears_internal", |
- THIRD_PARTY_DIR = "third_party", |
- PRIVATE_THIRD_PARTY_DIR = "third_party_internal", |
-) |
- |
-if not os.path.exists(env.Dir('#/$OPEN_DIR').abspath): |
- print 'Skipping Gears build: no perforce tree checked out.' |
- Return() |
- |
-# Argument switches |
- |
-# TODO: how do we detect linux vs osx? |
-os_guess = env['PLATFORM'] |
-if os_guess == 'posix': |
- os_guess = 'linux' |
-elif os_guess == 'darwin': |
- os_guess = 'osx' |
- |
-# Map of OS -> valid browser targets for that OS. |
-os_browsers_map = { |
- 'win32': ['IE', 'FF2', 'FF3', 'NPAPI'], |
- 'wince': ['IE'], |
- 'linux': ['FF2', 'FF3'], |
- 'osx': ['SF', 'FF2', 'FF3'], |
- 'android': ['NPAPI'], |
- 'symbian': ['NPAPI'], |
-} |
- |
-vars = Variables(None, ARGUMENTS) |
-vars.AddVariables( |
- EnumVariable('OS', |
- 'Which OS is the target', os_guess, os_browsers_map.keys()), |
- EnumVariable('MODE', |
- 'Type of binary to generate', 'dbg', ['dbg', 'opt']), |
- BoolVariable('OFFICIAL_BUILD', |
- 'Create a binary suitable for public release', 0), |
- BoolVariable('GEARS_STATIC_LIB', |
- 'Create a static library for linking with Chrome', 0), |
-) |
-vars.Update(env) |
- |
-env['VALID_BROWSERS'] = os_browsers_map[env['OS']] |
- |
-# Add BROWSER last, since its valid inputs depend on $OS. |
-vars.Add( |
- EnumVariable('BROWSER', |
- 'Which browser we want to build the plugin for. "all" builds all ' |
- 'browsers for this OS.', |
- 'all', env['VALID_BROWSERS'] + ['all'])) |
-vars.Update(env) |
- |
-env.Replace( |
- USING_CCTESTS = (env['MODE'] == 'dbg' or not env['OFFICIAL_BUILD']) |
-) |
- |
-# Version |
-env.Replace( |
- MAJOR = '0', |
- MINOR = '5', |
- BUILD = '7', |
- PATCH = '0', |
- VERSION = '${MAJOR}.${MINOR}.${BUILD}.${PATCH}', |
- |
- FRIENDLY_NAME = 'Google Gears', |
- SHORT_NAME = 'gears', |
-) |
- |
-# Platform |
-# TODO: Symbian builds will override this value. |
-# For other platforms we set just one value. |
-if env['OS'] in ['wince', 'android']: |
- env.Replace(ARCH = 'arm') |
-elif env['OS'] == 'osx': |
- # On OSX we build a fat binary. |
- env.Replace(ARCH = 'i386+ppc') |
-else: |
- env.Replace(ARCH = 'i386') |
- |
-# Output dirs |
-env.Replace( |
- BASE_OUTDIR = '$GEARS_DIR/$OS-$ARCH-$MODE', |
- COMMON_OUTDIR = '$BASE_OUTDIR/common', |
- BROWSER_OUTDIR = '$BASE_OUTDIR/${BROWSER.lower()}', |
- IE_OUTDIR = '$BASE_OUTDIR/ie', |
- FF2_OUTDIR = '$BASE_OUTDIR/ff2', |
- FF3_OUTDIR = '$BASE_OUTDIR/ff3', |
- NPAPI_OUTDIR = '$BASE_OUTDIR/npapi', |
- SF_OUTDIR = '$BASE_OUTDIR/sf', |
- |
- GENFILES_DIR = "$BROWSER_OUTDIR/genfiles", |
- COMMON_GENFILES_DIR = "$COMMON_OUTDIR/genfiles", |
- |
- INSTALLER_OUTDIR = '$BASE_OUTDIR/installers', |
-) |
- |
-# Outputs |
-env.Replace( |
- INSTALLER_BASENAME = 'gears-${OS}-${MODE}-${VERSION}', |
- |
- FF_XPI = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.xpi', |
- WIN32_INSTALLER_MSI = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.msi', |
- WINCE_INSTALLER_CAB = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.cab', |
- # Keyston SF Metapackage installer, bundled with Keystone as part of a |
- # DMG. |
- SF_KEYSTONE_INSTALLER_DMG = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.dmg', |
- SF_KEYSTONE_INSTALLER_MPKG = '$INSTALLER_OUTDIR/Safari/${FRIENDLY_NAME}.mpkg', |
- |
- SF_INSTALLER_PLUGIN_BUNDLE = '$INSTALLER_OUTDIR/Safari/StatsPane.bundle', |
- SF_PLUGIN_BUNDLE = '$INSTALLER_OUTDIR/Safari/Gears.bundle', |
- SF_PLUGIN_PROXY_BUNDLE = '$INSTALLER_OUTDIR/Safari/Gears.plugin', |
- SF_INPUTMANAGER_BUNDLE = '$INSTALLER_OUTDIR/Safari/GearsEnabler', |
- SF_INSTALLER_PKG = '$INSTALLER_OUTDIR/Safari/Gears.pkg', |
-) |
- |
-# Library flags |
-env.Replace( |
- MOZJS_INCLUDE_PATHS = [ |
- '$MOZJS_DIR', |
- '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include', |
- '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include/private', |
- '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include/obsolete', |
- '$OSX_SDK_ROOT/Developer/Headers/FlatCarbon/', |
- ], |
- MOZJS_DIR = '$THIRD_PARTY_DIR/spidermonkey', |
-) |
- |
-# Add our tools to the PATH. |
-if env['OS'] in ['win32', 'wince']: |
- if os.path.exists(env.Dir('#/$PRIVATE_THIRD_PARTY_DIR').abspath): |
- # Clear out our environment so we don't accidentally use the system's |
- # libs. |
- env['ENV']['PATH'] = '' |
- env['ENV']['LIB'] = '' |
- env['ENV']['INCLUDE'] = '' |
- |
- paths = [] |
- |
- # Keep system32 for 'xcopy'. |
- paths += [env.subst('${ENV["SYSTEMROOT"]}/system32')] |
- if env['OS'] == 'win32': |
- env.Append( |
- VC80 = env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/vc_80/files').abspath) |
- paths += [ |
- env.subst('$VC80/common7/ide'), |
- env.subst('$VC80/vc/bin'), |
- env.subst('$VC80/common7/tools'), |
- env.subst('$VC80/common7/tools/bin'), |
- env.subst('$VC80/team_tools/performance_tools'), |
- ] |
- else: # wince |
- env.Append( |
- VC80 = env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files').abspath) |
- paths += [ |
- env.subst('$VC80/bin/x86_arm'), |
- env.subst('$VC80/common7/ide'), |
- env.subst('$VC80/common7/tools'), |
- env.subst('$VC80/common7/tools/bin'), |
- env.subst('$VC80/vc/bin'), |
- env.subst('$VC80/smartdevices/sdktools'), |
- ] |
- |
- paths += [ |
- env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/wix/v3_0_2925/files').abspath] |
- |
- paths += [env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/gnu/files').abspath] |
- paths += [env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/python_24').abspath] |
- |
- # Prepend them so our tools come first. |
- for each in reversed(paths): |
- env.PrependENVPath('PATH', each) |
- else: |
- # If we don't have a private third_party dir, we expect the system |
- # environment to be set up correctly to point to tool paths. |
- env['ENV']['PATH'] = os.environ['PATH'] |
- env['ENV']['LIB'] = os.environ['LIB'] |
- env['ENV']['INCLUDE'] = os.environ['INCLUDE'] |
- |
- mtcom = 'echo Manifest creation disabled, since it breaks a lot.' |
- env['MANIFEST_COM'] = mtcom |
- env['SHMANIFEST_COM'] = mtcom |
- |
-# Building M4 files |
-env.Tool('m4') |
- |
-env.Append( |
- M4ARCH = (env['ARCH'] == 'i386' and 'x86' or '$ARCH'), |
- M4FLAGS = [ |
- '--prefix-builtins', |
- '-DPRODUCT_VERSION=$VERSION', |
- '-DPRODUCT_VERSION_MAJOR=$MAJOR', |
- '-DPRODUCT_VERSION_MINOR=$MINOR', |
- '-DPRODUCT_VERSION_BUILD=$BUILD', |
- '-DPRODUCT_VERSION_PATCH=$PATCH', |
- '-DPRODUCT_OS=$OS', |
- '-DPRODUCT_ARCH="$M4ARCH"', |
- '-DPRODUCT_GCC_VERSION="gcc3"', |
- '-DPRODUCT_MAINTAINER="google"', |
- '-DPRODUCT_FRIENDLY_NAME_UQ="$FRIENDLY_NAME"', |
- '-DPRODUCT_SHORT_NAME_UQ="$SHORT_NAME"', |
- '-DI18N_LANGUAGES="(${",".join(I18N_LANGS)})"', |
- ], |
- M4PATH = [ |
- '$OPEN_DIR', |
- '.', |
- ], |
-) |
- |
-# SCons magic to make M4PATH work. |
-env.Replace( |
- M4INCPREFIX = '-I', |
- M4INCSUFFIX = '', |
- _M4INCFLAGS = ('${_concat(M4INCPREFIX, M4PATH, M4INCSUFFIX, ' |
- '__env__, RDirs, TARGET, SOURCE)}'), |
- M4COM = '$M4 $M4FLAGS ${_M4INCFLAGS} $SOURCE > $TARGET', |
-) |
- |
-# TODO: Dependency scanner for m4 files - doesn't work. It can't detect files |
-# that don't exist! |
-#m4_include_re = re.compile(r'm4_include\((.*)\)', re.M) |
-#def m4_scan(node, env, path): |
-# contents = node.get_contents() |
-# includes = m4_include_re.findall(contents) |
-# ret_includes = [] |
-# for include in includes: |
-# for dir in path: |
-# file = os.path.join(dir, include) |
-# if os.path.exists(file): |
-# ret_includes.append(file) |
-# break |
-# return ret_includes |
-# |
-#m4_scanner = Scanner(function = m4_scan, skeys = ['.m4', '.html_m4']) |
-#env.Append(SCANNERS = m4_scanner) |
- |
- |
-# OS X Iceberg package builder |
- |
-env.Replace(ICEBERG = '/usr/local/bin/freeze') |
-if env.WhereIs('$ICEBERG'): |
- env.Replace(ICEBERGCOM = '"$ICEBERG" -v $SOURCE') |
-else: |
- env.Replace(ICEBERGCOM = |
- 'echo To create a Safari installer for Gears, you must install Iceberg' |
- ' from http://s.sudre.free.fr/Software/Iceberg.html. You can install' |
- ' the Safari version manually by running the' |
- ' $OPEN_DIR/tools/osx/install_gears.sh script.') |
- |
-iceberg_builder = Builder(action = '$ICEBERGCOM', |
- suffix = '.pkg', src_suffix = '.packproj') |
-env.Append(BUILDERS = {'Iceberg': iceberg_builder}) |
- |
- |
-# C++ build flags. |
- |
-# Clear out the inherited defines from Chrome's build. I want to match Gears' |
-# current build as closely as possible until we switch everyone to SCons, then |
-# gradually integrate. |
-env.Replace( |
- CPPPATH = [ |
- '$OPEN_DIR', |
- '$OPEN_DIR/..', |
- '$THIRD_PARTY_DIR', |
- '$THIRD_PARTY_DIR/googleurl', |
- '$THIRD_PARTY_DIR/npapi', |
- '$THIRD_PARTY_DIR/zlib', |
- '$THIRD_PARTY_DIR/v8/bindings_local', |
- '.', |
- '$COMMON_OUTDIR', |
- ], |
- CFLAGS = [], |
- CCFLAGS = [], |
- CXXFLAGS = [], |
- CCPDBFLAGS = [], |
- CPPDEFINES = [ |
- # SpiderMonkey (the Firefox JS engine)'s JS_GET_CLASS macro in jsapi.h needs |
- # this defined to work with the gecko SDK that we've built. |
- # The definition of JS_THREADSAFE must be kept in sync with MOZJS_CPPFLAGS. |
- 'JS_THREADSAFE' |
- ], |
- FRAMEWORKPATH = [], |
- FRAMEWORKS = [], |
- LIBS = [], |
- LIBPATH = ['$COMPONENT_LIBRARY_DIR'], |
- COMMON_LINKFLAGS = [], # for both executables and shared libs |
- LINKFLAGS = ['$COMMON_LINKFLAGS'], # for executables |
- SHLINKFLAGS = ['$COMMON_LINKFLAGS'], # for shared libs |
- COMPONENT_LIBRARY_DIR = '$COMMON_OUTDIR/lib', |
-) |
- |
-if env['MODE'] == 'dbg': |
- env.Append( |
- CPPDEFINES = [ |
- 'DEBUG=1', |
- '_DEBUG=1', |
- ], |
- M4FLAGS = '-DDEBUG=1', |
- ) |
-else: |
- env.Append( |
- CPPDEFINES = 'NDEBUG=1', |
- M4FLAGS = '-DNDEBUG=1', |
- ) |
-if env['USING_CCTESTS']: |
- env.Append( |
- CPPDEFINES = 'USING_CCTESTS=1', |
- M4FLAGS = '-DUSING_CCTESTS=1', |
- ) |
-if env['OFFICIAL_BUILD']: |
- env.Append( |
- CPPDEFINES = 'OFFICIAL_BUILD=1', |
- M4FLAGS = '-DOFFICIAL_BUILD=1', |
- ) |
-if env['GEARS_STATIC_LIB']: |
- env.Append( |
- CPPDEFINES = 'GEARS_STATIC_LIB=1', |
- ) |
- |
-# TODO: if USING_LIBPNG |
-env.Append( |
- CPPDEFINES = [ |
- 'PNG_USER_CONFIG', |
- 'CHROME_PNG_WRITE_SUPPORT', |
- ] |
-) |
-if not env['GEARS_STATIC_LIB']: |
- # If we're not linking with Chrome, don't prefix all the symbols with |
- # webkit_. |
- env.Append(CPPDEFINES = ['GEARS_PNG_BUILD']) |
- |
- |
-# TODO: if USING_ZLIB |
-env.Append( |
- CPPDEFINES = [ |
- 'NO_GZIP', |
- 'NO_GZCOMPRESS', |
- ] |
-) |
-if env['OS'] == 'wince': |
- env.Append(CPPDEFINES = 'NO_ERRNO_H') |
- |
-# Languages |
- |
-env['I18N_LANGS'] = [ |
- 'en-US', |
- 'ar', |
- 'bg', |
- 'ca', |
- 'cs', |
- 'da', |
- 'de', |
- 'el', |
- 'en-GB', |
- 'es', |
- 'et', |
- 'fa', |
- 'fi', |
- 'fil', |
- 'fr', |
- 'he', |
- 'hi', |
- 'hr', |
- 'hu', |
- 'id', |
- 'is', |
- 'it', |
- 'ja', |
- 'ko', |
- 'lt', |
- 'lv', |
- 'ms', |
- 'nl', |
- 'no', |
- 'pl', |
- 'pt-BR', |
- 'pt-PT', |
- 'ro', |
- 'ru', |
- 'sk', |
- 'sl', |
- 'sr', |
- 'sv', |
- 'th', |
- 'tr', |
- 'uk', |
- 'ur', |
- 'vi', |
- 'zh-CN', |
- 'zh-TW', |
- 'ml', |
- 'te', |
- 'gu', |
- 'kn', |
- 'or', |
- 'bn', |
- 'ta', |
- 'mr', |
-] |
- |
-# Platform-specific flags follow. |
- |
-if env['OS'] in ['win32', 'wince']: |
- env.Replace(ARFLAGS = []) |
- env.Append( |
- CPPDEFINES = [ |
- 'STRICT', |
- '_UNICODE', |
- 'UNICODE', |
- '_USRDLL', |
- 'WIN32', |
- '_WINDLL', |
- '_CRT_SECURE_NO_DEPRECATE', |
- 'NOMINMAX', |
- |
-# In VC8, the way to disable exceptions is to remove all /EH* flags, and to |
-# define _HAS_EXCEPTIONS=0 (for C++ headers) and _ATL_NO_EXCEPTIONS (for ATL). |
- '_HAS_EXCEPTIONS=0', |
- '_ATL_NO_EXCEPTIONS', |
-# Do not export UTF functions. |
- 'U_STATIC_IMPLEMENTATION', |
- ], |
-# Static lib flags. |
- ARFLAGS = [ |
- '/NOLOGO', |
- ], |
-# Shared lib and exe flags. |
- COMMON_LINKFLAGS = [ |
- '/NOLOGO', |
- '/DEBUG', |
- '/RELEASE', |
- '/PDB:${TARGET.base}.pdb', |
- ], |
- SHLINKFLAGS = [ |
- '/DLL', |
-# Set the preferred base address. This value was chosen because (a) it's near |
-# the top of the valid address range, and (b) it doesn't conflict with other |
-# DLLs loaded by Chrome in either the browser or plugin process. |
- '/BASE:0x65000000', |
- ], |
- CPPFLAGS = [ |
- '/nologo', |
- '/c', |
- '/W3', |
- '/WX', |
- '/GR-', |
- '/Fd"${TARGET.base}.pdb"', |
- ], |
- CXXFLAGS = [ |
- '/TP', |
- '/J', |
- ], |
- CPPPATH = [ |
- '$VC80_CPPPATH', |
- '$THIRD_PARTY_DIR/breakpad/src', |
- ], |
- CCPDBFLAGS = [ |
- '/Zi', # TODO: Chrome defines /Z7, no idea what these are. |
- ], |
- LIBPATH = [ |
- '$VC80_LIBPATH', |
- ], |
- ) |
- if env['OS'] == 'win32': |
- env.Append( |
- CPPDEFINES = [ |
-# We require APPVER=5.0 for things like HWND_MESSAGE. |
-# When APPVER=5.0, win32.mak in the Platform SDK sets: |
-# C defines: WINVER=0x0500 |
-# _WIN32_WINNT=0x0500 |
-# _WIN32_IE=0x0500 |
-# _RICHEDIT_VER=0x0010 |
-# RC defines: WINVER=0x0500 |
-# MIDL flags: /target NT50 |
-# Note: _WIN32_WINDOWS was replaced by _WIN32_WINNT for post-Win95 builds. |
-# Note: XP_WIN is only used by Firefox headers |
- '_WINDOWS', |
- 'WINVER=0x0500', |
- '_WIN32_WINNT=0x0500', |
- '_WIN32_IE=0x0500', |
- '_RICHEDIT_VER=0x0010', |
- '_MERGE_PROXYSTUB', |
- 'BREAKPAD_AVOID_STREAMS', |
- 'XP_WIN', |
- ], |
- ARFLAGS = [ |
- '/MACHINE:X86', |
- ], |
- COMMON_LINKFLAGS = [ |
- '/MACHINE:X86', |
- '/NODEFAULTLIB:msvcrt', |
-# Flags for security hardening (only available for win32, not wince). |
- '/DYNAMICBASE', |
- '/SAFESEH', |
- ], |
- SHLINKFLAGS = [ |
-# We only use /SUBSYSTEM on DLLs. For EXEs we omit the flag, and |
-# the presence of main() or WinMain() determines the subsystem. |
- '/SUBSYSTEM:WINDOWS', |
- ], |
- VC80_CPPPATH = [ |
-# TODO: switch over to Chrome's SDK. |
-# Note: these must come after $THIRD_PARTY_DIR/npapi because we want our own |
-# npapi.h to take precedence. |
- '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80/files/include', |
- '$PRIVATE_THIRD_PARTY_DIR/platformsdk_vc80/files/include', |
- '$PRIVATE_THIRD_PARTY_DIR/vc_80/files/vc/include', |
- ], |
- VC80_LIBPATH = [ |
- '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80/files/lib', |
- '$PRIVATE_THIRD_PARTY_DIR/platformsdk_vc80/files/lib', |
- '$PRIVATE_THIRD_PARTY_DIR/vc_80/files/vc/lib', |
- ], |
- ) |
- else: # OS=wince |
- env.Append( |
- CPPDEFINES = [ |
-# For Windows Mobile we need: |
-# C defines: _WIN32_WCE=0x0501 |
-# _UNDER_CE=0x0501 |
- '_WIN32_WCE=0x501', |
- 'WINVER=_WIN32_WCE', |
- 'UNDER_CE=0x501', |
- 'OS_WINCE', |
- 'WIN32_PLATFORM_PSPC', |
- 'ARM', |
- '_ARM_', |
- 'POCKETPC2003_UI_MODEL', |
- '_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA', |
- '_CE_CRT_ALLOW_WIN_MINMAX', |
- ], |
- ARFLAGS = [ |
- '/MACHINE:THUMB', |
- ], |
- COMMON_LINKFLAGS = [ |
- '/MACHINE:THUMB', |
- '/NODEFAULTLIB:secchk.lib', |
- '/NODEFAULTLIB:oldnames.lib', |
- ], |
- SHLINKFLAGS = [ |
- '/SUBSYSTEM:WINDOWSCE,5.01', |
- ], |
- VC80_CPPPATH = [ |
- '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80ce/files/include', |
- '$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files/include', |
-# Visual Studio must be setup before the PocketPC SDK. |
- '$PRIVATE_THIRD_PARTY_DIR/pocketpc_sdk_ce_50/files/include/armv4i', |
- ], |
- VC80_LIBPATH = [ |
- '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80ce/files/lib/armv4i', |
- '$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files/lib/armv4i', |
- '$PRIVATE_THIRD_PARTY_DIR/pocketpc_sdk_ce_50/files/lib/armv4i', |
- ], |
- ) |
- |
- if env['MODE'] == 'dbg': |
- env.Append( |
- CPPFLAGS = [ |
- '/MTd', |
- ], |
- ) |
- else: # MODE=opt |
- env.Append( |
- CPPFLAGS = [ |
- '/MT', |
- '/O2', |
- ], |
- COMMON_LINKFLAGS = [ |
- '/INCREMENTAL:NO', |
- '/OPT:REF', |
- '/OPT:ICF', |
- ], |
- ) |
- if not env['GEARS_STATIC_LIB']: |
- # Build with 2-byte wchar_t's only if we're building a DLL. To link with |
- # Chrome, we need 4-byte wchar_t. |
- env.Append( |
- CPPFLAGS = [ |
- '/Zc:wchar_t-', |
- ], |
- ) |
- |
-#--------------------------- LINUX --------------------------- |
-elif env['OS'] == 'linux': |
- env.Append( |
- CPPDEFINES = [ |
- 'LINUX', |
- ], |
- CPPPATH = [ |
- '$THIRD_PARTY_DIR/gtk/include/gtk-2.0', |
- '$THIRD_PARTY_DIR/gtk/include/atk-1.0', |
- '$THIRD_PARTY_DIR/gtk/include/glib-2.0', |
- '$THIRD_PARTY_DIR/gtk/include/pango-1.0', |
- '$THIRD_PARTY_DIR/gtk/include/cairo', |
- '$THIRD_PARTY_DIR/gtk/lib/gtk-2.0/include', |
- '$THIRD_PARTY_DIR/gtk/lib/glib-2.0/include', |
- ], |
- CCFLAGS = [ |
- '-fPIC', |
- '-fmessage-length=0', |
- '-Wall', |
- '-Werror', |
-# NS_LITERAL_STRING does not work properly without this compiler option |
- '-fshort-wchar', |
-# Additions to compile on hardy |
- '-Wno-unused-variable', |
- '-Wno-missing-braces', |
- '-Wno-address', |
- '-m32', |
- ], |
- CXXFLAGS = [ |
- '-fno-exceptions', |
- '-fno-rtti', |
- '-Wno-non-virtual-dtor', |
- '-Wno-ctor-dtor-privacy', |
- '-funsigned-char', |
- '-Wno-char-subscripts', |
- ], |
- COMMON_LINKFLAGS = [ |
- '-fPIC', |
- '-Bsymbolic', |
- '-pthread', |
- ], |
- SHLINKFLAGS = [ |
- '-shared', |
- '-Wl,--version-script', |
- '-Wl,$OPEN_DIR/tools/xpcom-ld-script', |
-# Additions to compile on hardy |
- '-m32', |
- ], |
- ) |
- if env['MODE'] == 'dbg': |
- env.Append( |
- CPPFLAGS = [ |
- '-g', |
- '-O0', |
- ], |
- ) |
- else: # MODE=opt |
- env.Append( |
- CPPFLAGS = [ |
- '-O2', |
- ], |
- ) |
-#--------------------------- OSX --------------------------- |
-elif env['OS'] == 'osx': |
-# Gears uses the 10.4 SDK, so we need to build with g++-4.0. |
-# Chrome uses g++-4.2 so we override this here. |
- env['CC'] = 'gcc-4.0' |
- env['CXX'] = 'g++-4.0' |
-# Compile assembly files with the same command line as C files. |
- env['ASCOM'] = '$CCCOM' |
- |
- env.Append(OSX_SDK_ROOT = '/Developer/SDKs/MacOSX10.4u.sdk') |
- |
- env.Append( |
- CPPDEFINES = [ |
- 'OSX', |
- 'OS_MACOSX', |
-# for breakpad |
- 'USE_PROTECTED_ALLOCATIONS=1', |
- ], |
- CPPPATH = [ |
-# Breakpad assumes it is in the include path |
- '$THIRD_PARTY_DIR/breakpad_osx/src', |
- ], |
- CCFLAGS = [ |
- '-mmacosx-version-min=10.4', |
- ('-arch', 'ppc'), |
- ('-arch', 'i386'), |
- '-fPIC', |
- '-fmessage-length=0', |
-# TODO |
-# '-Wall', |
-# NS_LITERAL_STRING does not work properly without this compiler option |
- '-fshort-wchar', |
- '-fvisibility=hidden', |
-# Breakpad on OSX needs debug symbols to use the STABS format, rather than the |
-# default DWARF debug symbols format. Note that we enable gstabs for debug & |
-# opt; we strip them later in opt. |
- '-gstabs+', |
- ], |
- CXXFLAGS = [ |
- '-fvisibility-inlines-hidden', |
- '-fno-exceptions', |
- '-fno-rtti', |
- ('-Wall', |
- '-Wno-non-virtual-dtor', |
- '-Wno-ctor-dtor-privacy', |
- '-Wno-char-subscripts', |
-# When a function is deprecated in gcc, it stupidly warns about all functions |
-# and member functions that have the same name, regardless of signature. |
-# Example: Standard osx headers deprecate 'SetPort', which causes a warning for |
-# url_canon::Replacements::SetPort(). |
- '-Wno-deprecated-declarations', |
- ), |
- '-funsigned-char', |
- ('-include', env.File('#/$OPEN_DIR/base/safari/prefix_header.h').abspath), |
- ('-isysroot', '$OSX_SDK_ROOT') |
- ], |
- COMMON_LINKFLAGS = [ |
- '-mmacosx-version-min=10.4', |
- '-fPIC', |
- '-Bsymbolic', |
- ('-arch', 'ppc'), |
- ('-arch', 'i386'), |
- ('-isysroot', '$OSX_SDK_ROOT'), |
- '-Wl,-dead_strip', |
- ], |
- SHLINKFLAGS = [ |
- '-bundle', # DLLFLAGS |
- ], |
- FRAMEWORKS = [ |
- 'Carbon', |
- 'CoreServices', |
- 'Cocoa', |
- 'WebKit', |
- ], |
- M4FLAGS = [ |
- '-DGEARS_ENABLER_PATH="$SF_INPUTMANAGER_BUNDLE"', |
- '-DGEARS_PLUGIN_PATH="$SF_PLUGIN_PROXY_BUNDLE"', |
- '-DGEARS_INSTALLER_OUT_DIR="$INSTALLER_OUTDIR/Safari"', |
- |
- # Keystone |
- '-DKEYSTONE_BASE_DIR="$MAIN_DIR/$PRIVATE_THIRD_PARTY_DIR/googlemac/Releases/Keystone/"', |
- '-DGEARS_INSTALLER_PACKAGE="$SF_INSTALLER_PKG"', |
- '-DGEARS_GENFILES_DIR="$SF_OUTDIR/genfiles"', |
- '-DGEARS_TOOLS_DIR="$MAIN_DIR/$PRIVATE_DIR/tools"', |
- ], |
- ) |
- if env['MODE'] == 'dbg': |
- env.Append( |
- CPPFLAGS = [ |
- '-g', |
- '-O0', |
- ], |
- ) |
- else: # MODE=opt |
- env.Append( |
- CPPFLAGS = [ |
- '-O2', |
- ], |
- ) |
-#--------------------------- ANDROID --------------------------- |
-elif env['OS'] == 'android': |
- if not os.environ['ANDROID_BUILD_TOP']: |
- print ("Please set ANDROID_BUILD_TOP to the top" |
- " level of your Android source.") |
- Return() |
- |
- if not os.environ['ANDROID_TOOLCHAIN']: |
- print ("Cannot determine location of the target toolchain." |
- " Please set ANDROID_TOOLCHAIN manually.") |
- Return() |
- |
- env['ANDROID_BUILD_TOP'] = os.environ['ANDROID_BUILD_TOP'] |
- |
- # Figure out the cross-compile prefix by finding the *-gcc executable |
- # and taking the '*' as the prefix for the rest. |
- cross_prefix_command = os.popen( |
- r"ls %s/*-gcc | sed 's|\(.*/.*\-\)gcc|\1|g'" % |
- os.environ['ANDROID_TOOLCHAIN']) |
- cross_prefix = cross_prefix_command.read().strip() |
- if cross_prefix_command.close() != None: |
- Return() |
- |
- # Find the output directory. Assume the only target output directory. |
- product_out_command = os.popen("ls %s/out/target/product/*" % |
- os.environ['ANDROID_BUILD_TOP']) |
- product_out = product_out_command.read().strip() |
- if product_out_command.close() != None: |
- Return() |
- |
- env['CC'] = cross_prefix + 'gcc' |
- env['CXX'] = cross_prefix + 'g++' |
- |
- env.Append( |
- CPPPATH = [ |
- '$OPEN_DIR/base/android', |
- '$THIRD_PARTY_DIR/stlport/stlport', |
- '$THIRD_PARTY_DIR/stlport/stlport/stl', |
- '$THIRD_PARTY_DIR/stlport/stlport/stl/config', |
- '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include', |
- '$ANDROID_BUILD_TOP/include', |
- '$ANDROID_BUILD_TOP/include/nativehelper', |
- '$ANDROID_BUILD_TOP/system', |
- '$ANDROID_BUILD_TOP/system/bionic/include', |
- '$ANDROID_BUILD_TOP/system/bionic/arch-arm/include', |
- '$ANDROID_BUILD_TOP/system/kernel_headers', |
- '$ANDROID_BUILD_TOP/system/bionic/kernel/arch-arm', |
- '$ANDROID_BUILD_TOP/system/bionic/kernel/common', |
- '$ANDROID_BUILD_TOP/system/libm/include ', |
- '$ANDROID_BUILD_TOP/bionic', |
- '$ANDROID_BUILD_TOP/bionic/libc/include', |
- '$ANDROID_BUILD_TOP/bionic/libc/arch-arm', |
- '$ANDROID_BUILD_TOP/bionic/libc/arch-arm/include', |
- '$ANDROID_BUILD_TOP/bionic/libc/kernel/arch-arm', |
- '$ANDROID_BUILD_TOP/bionic/libc/kernel/common', |
- '$ANDROID_BUILD_TOP/bionic/libm/include', |
- '$ANDROID_BUILD_TOP/dalvik/libnativehelper/include', |
- '$ANDROID_BUILD_TOP/extlibs', |
- '$ANDROID_BUILD_TOP/extlibs/icu4c-3.8/common', |
- '$ANDROID_BUILD_TOP/extlibs/icu4c-3.8/i18n', |
- '$ANDROID_BUILD_TOP/extlibs/jpeg-6b', |
- '$ANDROID_BUILD_TOP/extlibs/sqlite', |
- '$ANDROID_BUILD_TOP/extlibs/zlib-1.2.3', |
- '$ANDROID_BUILD_TOP/external', |
- '$ANDROID_BUILD_TOP/external/icu4c/common', |
- '$ANDROID_BUILD_TOP/external/icu4c/i18n', |
- '$ANDROID_BUILD_TOP/external/jpeg', |
- '$ANDROID_BUILD_TOP/external/sqlite/dist', |
- '$ANDROID_BUILD_TOP/external/zlib', |
- '$ANDROID_BUILD_TOP/frameworks/base/include', |
- '$ANDROID_BUILD_TOP/system/core/include', |
- ], |
- CPPFLAGS = [ |
- '-g', |
- '-c', |
- '-fPIC', |
- '-fmessage-length=0', |
- '-Wall', |
- '-fvisibility=hidden', |
-# NS_LITERAL_STRING does not work properly without this compiler option |
- '-fshort-wchar', |
- '-funsigned-char', |
- '-march=armv5te', |
- '-mtune=xscale', |
- '-mthumb-interwork', |
- '-ffunction-sections', |
- '-fdata-sections', |
- '-fno-exceptions', |
- ], |
- CXXFLAGS = [ |
- '-fno-rtti', |
- '-fvisibility-inlines-hidden', |
- '-Wno-non-virtual-dtor', |
- '-Wno-ctor-dtor-privacy', |
- ], |
- CPPDEFINES = [ |
- 'OS_ANDROID', |
- 'ANDROID', |
- 'TARGET_OS=android', |
- 'BUILD_OSNAME=android', |
- 'OSNAME=android', |
- 'COMPILER_NAME=gcc', |
- '__SGI_STL_INTERNAL_PAIR_H', |
- '_CPP_UTILITY', |
- '_LITTLE_ENDIAN=1234', |
- '_BIG_ENDIAN=4321', |
- '_PDP_ENDIAN=3412', |
- '_BYTE_ORDER=_LITTLE_ENDIAN', |
- ], |
- COMMON_LINKFLAGS = [ |
- '-g', |
- '-fPIC', |
- '-Bsymbolic', |
- '-nostdlib', |
- ], |
- SHLINKFLAGS = [ |
- '-shared', |
- '-Wl,--gc-sections', |
- '-L$ANDROID_PRODUCT_OUT/system/lib', |
-# Workaround for the Android C library not implementing |
-# __aeabi_atexit, which is used to destruct static C++ objects. This |
-# causes all calls to be rewritten by the linker to |
-# __wrap___aeabi_atexit, which we then implement. |
- '-Wl,--wrap,__aeabi_atexit', |
- ], |
- ) |
- if env['MODE'] == 'dbg': |
- env.Append( |
- CPPFLAGS = [ |
- '-g', |
- '-O', |
- '-funwind-tables', |
- '-mapcs-frame', |
- ], |
- ) |
- else: # MODE=opt |
- env.Append( |
- CPPFLAGS = [ |
- '-O2', |
- '-mthumb', |
- '-fomit-frame-pointer', |
- ], |
- ) |
- |
-# Custom builder to work around a scons and/or hammer bug. ComponentLibrary |
-# tries to install the library to COMPONENT_LIBRARY_DIR, but since we overrode |
-# that value, scons gets confused. I'm not sure who is at fault here. |
-# See http://code.google.com/p/chromium/issues/detail?id=4177. |
-def GearsStaticLibrary(env, *args, **kw): |
- lib = env.ChromeLibrary(*args, **kw) |
- env.Install('$COMPONENT_LIBRARY_DIR', lib[0]) |
- return lib |
-env.AddMethod(GearsStaticLibrary) |
- |
-# Load all the components |
- |
-sconscripts = [ |
- 'SConscript.googleurl', |
- 'SConscript.libjpeg', |
- 'SConscript.libpng', |
- 'SConscript.libmozjs', |
- 'SConscript.sqlite', |
- 'SConscript.zlib', |
- 'SConscript.libbreakpad_osx', |
- 'SConscript.libgd', |
-] |
- |
-for each in sconscripts: |
- env.SConscript(each, |
- exports=['env'], |
- variant_dir='$COMMON_OUTDIR', |
- duplicate=0) |
- |
-# Order of execution is important here. Each sub-script adds to the |
-# environment, for use by later scripts. |
-env = env.SConscript('SConscript.inputs', exports=['env']) |
- |
-outputs = env.SConscript('SConscript.common', |
- exports=['env'], |
- variant_dir='$COMMON_OUTDIR', |
- duplicate=0) |
-env.Append(**outputs) |
- |
-browsers = [env['BROWSER']] |
-if browsers[0] == 'all': |
- browsers = env['VALID_BROWSERS'] |
-print 'Building:', browsers |
- |
-# We run the browser script once for each browser target we want to build. |
-# Each script adds variables to the environment in the form of |
-# '${BROWSER}_foo = bar' for use by the installers script. |
-for each in browsers: |
- env.Replace(BROWSER = each) |
- outputs = env.SConscript('SConscript.browser', |
- exports=['env'], |
- variant_dir='$BROWSER_OUTDIR', |
- duplicate=0) |
- browser_outputs = {} |
- for key, value in outputs.iteritems(): |
- browser_outputs[each + '_' + key] = value |
- env.Append(**browser_outputs) |
- |
-# Note: even though the installers write to $INSTALLER_OUTDIR, they need to |
-# read files from other dirs, so we give them a variant_dir at the toplevel. |
-env.SConscript('SConscript.installers', |
- exports=['env'], |
- variant_dir='$BASE_OUTDIR', |
- duplicate=0) |
- |
-env.Alias('gears-installers', 'gears') |