blob: 29591af1a6c65bba5302ff18dd8d0be8b99dc332 [file] [log] [blame]
# 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(['env'])
env_res = env.Clone()
env_test = env.Clone()
env = env.Clone()
install_targets = []
grit_files = []
env.Prepend(
CPPPATH = [
'app',
'$CHROME_DIR/third_party/wtl/include',
],
)
# TODO(port)
if env_res.Bit('windows'):
env_res.Append(
CPPPATH = [
'.',
'$CHROME_SRC_DIR',
# For app/chrome_dll.res to #include installer_util_strings.rc.
'$CHROME_DIR/installer/util',
],
RCFLAGS = [
['/l', '0x409'],
],
)
browser_res = env_res.RES('browser/browser_resources.rc')
chrome_exe_res = env_res.RES('app/chrome_exe.rc'),
chrome_dll_res = env_res.RES('app/chrome_dll.rc')
env_res.Depends(chrome_dll_res, 'installer/util/installer_util_strings.rc')
common_res = env_res.RES('common/common_resources.rc')
debugger_res = env_res.RES('browser/debugger/resources/debugger_resources.rc')
renderer_res = env_res.RES('renderer/renderer_resources.rc')
test_data_res = env_res.RES('test/data/resource.rc')
net_res = '$TARGET_ROOT/grit_derived_sources/net_resources.res'
webkit_res = '$TARGET_ROOT/grit_derived_sources/webkit_resources.res'
dll_resources = [
browser_res,
chrome_dll_res,
common_res,
debugger_res,
net_res,
renderer_res,
webkit_res,
]
env_dll = env.Clone()
env_dll.ApplySConscript([
'$CHROME_SRC_DIR/build/using_v8.scons',
'$ICU38_DIR/using_icu38.scons',
])
env_dll.Prepend(
CPPPATH = [
"..",
],
CPPDEFINES = [
'U_STATIC_IMPLEMENTATION',
'PNG_USER_CONFIG',
'CHROME_PNG_WRITE_SUPPORT',
'LIBXSLT_STATIC',
'LIBXML_STATIC',
'_WINDLL',
'BROWSER_DLL',
'RENDERER_DLL',
'PLUGIN_DLL',
],
CCFLAGS = [
'/TP',
'/Wp64',
],
)
env_dll.Append(
CPPPATH = [
'$CHROME_DIR/app',
'$LIBPNG_DIR',
'$SKIA_DIR/include',
'$SKIA_DIR/include/corecg',
'$SKIA_DIR/platform',
'$LIBXSL_DIR',
'$LIBXML_DIR/DerivedSources/include',
'$LIBXML_DIR/include',
'$BREAKPAD_DIR/src',
],
LIBS = [
'base',
'base_gfx',
#'breakpad_handler',
'googleurl',
'net',
'skia',
'bzip2',
'libjpeg',
'libpng',
'libxml',
'libxslt',
'modp_b64',
'zlib',
'activex_shim',
'WTF',
'V8Bindings',
'WebCore',
'default_plugin',
'glue',
'JavaScriptCore_pcre',
'port',
'browser',
'browser_views',
'debugger',
'common',
'util',
#'jscre',
'plugin',
'renderer',
'hunspell',
# TODO(sgk): Windows doesn't use libevent, revisit when Linux gets here
#'libevent',
'sqlite',
'views',
'v8_snapshot',
],
)
if env_dll.Bit('windows'):
env_dll.Append(
LIBS = [
# TODO(sgk): to be ported to Mac and Linux
'sdch',
#'comctl32.lib',
#'dwmapi.lib',
#'rpcrt4.lib',
#'shlwapi.lib',
#'winmm.lib',
#'wsock32.lib',
'Urlmon',
],
LINKFLAGS = [
'/INCREMENTAL',
'/DEBUG',
'/DELAYLOAD:"comdlg32.dll"',
'/DELAYLOAD:"crypt32.dll"',
'/DELAYLOAD:"cryptui.dll"',
'/DELAYLOAD:"dwmapi.dll"',
'/DELAYLOAD:"imagehlp.dll"',
'/DELAYLOAD:"imm32.dll"',
'/DELAYLOAD:"oleacc.dll"',
'/DELAYLOAD:"oleaut32.dll"',
'/DELAYLOAD:"psapi.dll"',
'/DELAYLOAD:"urlmon.dll"',
'/DELAYLOAD:"uxtheme.dll"',
'/DELAYLOAD:"winhttp.dll"',
'/DELAYLOAD:"wininet.dll"',
'/DELAYLOAD:"winspool.drv"',
'/DELAYLOAD:"ws2_32.dll"',
'/DELAYLOAD:"wsock32.dll"',
'/SUBSYSTEM:WINDOWS',
'/BASE:"0x01000000"',
'/MACHINE:X86',
'/FIXED:No',
'/safeseh',
'/dynamicbase',
'/ignore:4199',
'/ignore:4221',
'/nxcompat',
'/PDB:${TARGETS[1]}',
],
)
input_files = []
if env_dll.Bit('windows'):
input_files.extend([
'app/chrome_dll_main.cc',
'$V8_DIR/snapshot-empty$OBJSUFFIX',
])
# TODO(sgk): make a pseudo-Builder for these
import sys
sys.path.append(env.Dir('$CHROME_SRC_DIR/tools/grit').abspath)
env_grd = env.Clone()
env_grd.Tool('scons', toolpath=[env_grd.Dir('$CHROME_SRC_DIR/tools/grit/grit')])
# NOTE: fake target gets replaced with real targets from reading .grd
generated = env_grd.GRIT(
'$TARGET_ROOT/grit_derived_sources/fake_generated_target',
'$CHROME_SRC_DIR/chrome/app/generated_resources.grd')
grit_files.extend(generated)
# NOTE: fake target gets replaced with real targets from reading .grd
chromium = env_grd.GRIT(
'$TARGET_ROOT/grit_derived_sources/fake_chromium_target',
'$CHROME_SRC_DIR/chrome/app/chromium_strings.grd')
grit_files.extend(chromium)
# NOTE: fake target gets replaced with real targets from reading .grd
google_chrome = env_grd.GRIT(
'$TARGET_ROOT/grit_derived_sources/fake_google_chrome_target',
'$CHROME_SRC_DIR/chrome/app/google_chrome_strings.grd')
grit_files.extend(google_chrome)
# TODO(port)
if env_dll.Bit('windows'):
dll_targets = env_dll.ChromeSharedLibrary('chrome_dll/chrome',
dll_resources + input_files,
PDB='chrome_dll.pdb')
install_targets.extend(dll_targets)
for g in [ g for g in grit_files if str(g).endswith('.rc') ]:
env_res.RES(g)
chrome_exe_version_rc = env.ChromeVersionRC(
'chrome_exe_version.rc',
'app/chrome_exe_version.rc.version'
)
chrome_dll_version_rc = env.ChromeVersionRC(
'chrome_dll_version.rc',
'app/chrome_dll_version.rc.version',
)
# TODO(sgk): explicit dependencies => scanned implicit dependencies
Depends(chrome_exe_res, chrome_exe_version_rc)
Depends(chrome_dll_res, chrome_dll_version_rc)
chrome_exe_version_res = env_res.RES(chrome_exe_version_rc)
chrome_dll_version_res = env_res.RES(chrome_dll_version_rc)
install_targets.extend(chrome_exe_version_rc)
install_targets.extend(chrome_exe_version_res)
install_targets.extend(chrome_dll_version_rc)
install_targets.extend(chrome_dll_version_res)
env.ChromeMSVSProject('$CHROME_DIR/app/chrome_dll.vcproj',
dependencies = [
'$BASE_DIR/build/base.vcproj',
'$WEBKIT_DIR/build/WebCore/WebCore.vcproj',
'$CHROME_DIR/plugin/plugin.vcproj',
'$LIBJPEG_DIR/libjpeg.vcproj',
'$BZIP2_DIR/bzip2.vcproj',
'$NET_DIR/build/net.vcproj',
('$WEBKIT_DIR/build/JavaScriptCore/' +
'JavaScriptCore_pcre.vcproj'),
'$WEBKIT_DIR/build/port/port.vcproj',
'$CHROME_DIR/browser/debugger/debugger.vcproj',
'$WEBKIT_DIR/default_plugin/default_plugin.vcproj',
'$CHROME_DIR/browser/browser.vcproj',
'$WEBKIT_DIR/build/V8Bindings/V8Bindings.vcproj',
'$SQLITE_DIR/sqlite.vcproj',
'$CHROME_DIR/views/views.vcproj',
'$MODP_B64_DIR/modp_b64.vcproj',
'$ZLIB_DIR/zlib.vcproj',
'$CHROME_DIR/common/common.vcproj',
'$ICU38_DIR/build/icu.vcproj',
'$CHROME_DIR/renderer/renderer.vcproj',
'$BASE_DIR/build/base_gfx.vcproj',
'$WEBKIT_DIR/build/JavaScriptCore/WTF.vcproj',
'$CHROME_DIR/browser/resources/browser_resources.vcproj',
'$V8_DIR/tools/visual_studio/v8_snapshot.vcproj',
'$LIBPNG_DIR/libpng.vcproj',
'$WEBKIT_DIR/build/glue/glue.vcproj',
'$SKIA_DIR/skia.vcproj',
'$CHROME_DIR/third_party/hunspell/hunspell.vcproj',
'$GEARS_DIR/gears.vcproj',
'$GOOGLEURL_DIR/build/googleurl.vcproj',
'$CHROME_DIR/installer/util/util.vcproj',
'$WEBKIT_DIR/activex_shim/activex_shim.vcproj',
'$SDCH_DIR/sdch.vcproj',
'$CHROME_DIR/browser/views/browser_views.vcproj',
'$LIBXSLT_DIR/build/libxslt.vcproj',
],
guid='{C0A7EE2C-2A6D-45BE-BA78-6D006FDF52D9}')
env_exe = env.Clone()
env_exe.Prepend(
CPPPATH = [
'..',
'$BREAKPAD_DIR/src',
],
LIBS = [
'base',
'breakpad_handler',
'chrome',
'common',
'icu',
'sandbox',
'util',
],
)
env_exe.Append(
LINKFLAGS = [
'/INCREMENTAL',
'/DELAYLOAD:"dwmapi.dll"',
'/DELAYLOAD:"uxtheme.dll"',
'/SUBSYSTEM:WINDOWS',
'/MACHINE:X86',
'/FIXED:No',
'/safeseh',
'/dynamicbase',
'/ignore:4199',
'/nxcompat',
'/PDB:${TARGETS[1]}',
#'/IMPLIB:${TARGETS[2]}',
],
)
# TODO(port)
if env.Bit('windows'):
chrome_exe = env_exe.ChromeProgram(
'chrome_exe/chrome',
[
chrome_exe_res,
'app/breakpad.cc',
'app/chrome_exe_main.cc',
'app/client_util.cc',
'app/google_update_client.cc',
]
)
install_targets.append(chrome_exe[0])
env.Requires('$DESTINATION_ROOT/chrome.exe',
['$DESTINATION_ROOT/chrome.dll',
'$DESTINATION_ROOT/icudt38.dll',
'$DESTINATION_ROOT/rlz.dll',
'$DESTINATION_ROOT/First Run',
'$DESTINATION_ROOT/themes',
Alias('chrome_locales'),
Alias('chrome_Dictionaries'),
])
env.Install('$DESTINATION_ROOT', '$CHROME_DIR/app/FirstRun')
# For release we want to run dependencies.py, may look something like:
#env.AddPostAction('$TARGET_ROOT/chrome.exe',
# ('$PYTHON tools/build/win/dependencies.py ' +
# '$(TargetPath) chrome.exe.deps'))
env.ChromeMSVSProject('$CHROME_DIR/app/chrome_exe.vcproj',
dependencies = [
'$BASE_DIR/build/base.vcproj',
'$SANDBOX_DIR/src/sandbox.vcproj',
'$CHROME_DIR/tools/crash_service/crash_service.vcproj',
'$BREAKPAD_DIR/breakpad_handler.vcproj',
'$CHROME_DIR/app/chrome_dll.vcproj',
'$CHROME_DIR/app/locales/en-US.vcproj',
'$CHROME_DIR/installer/util/util.vcproj',
'$CHROME_DIR/app/theme/theme_dll.vcproj',
],
guid='{7B219FAA-E360-43C8-B341-804A94EEFFAC}')
env_flat = env.Clone(
BROWSER_RESOURCES = Dir('browser_resources'),
HTML_INLINE = env.File(
'$CHROME_SRC_DIR/chrome/tools/build/win/html_inline.py'),
FLATTEN_HTML_COM = '$PYTHON $HTML_INLINE $SOURCE $TARGET',
)
def FlatHtmlEmitter(target, source, env):
# When we get the target, it will have the "_flat.html" suffix,
# but will be next to the sourcefile. Replace it with a
# string that puts it in the $BROWSER_RESOURCES directory.
target = [env.File('$BROWSER_RESOURCES/' + target[0].name)]
return target, source
env_flat['BUILDERS']['FlatHtml'] = Builder(action='$FLATTEN_HTML_COM',
suffix='_flat.html',
source_suffix='.html',
emitter=FlatHtmlEmitter)
flats = [
'browser/resources/about_credits.html',
'browser/resources/about_memory.html',
'browser/resources/about_stats.html',
'browser/resources/about_version.html',
'browser/resources/history.html',
'browser/resources/incognito_tab.html',
'browser/resources/new_tab.html',
'browser/resources/safe_browsing_malware_block.html',
'browser/resources/safe_browsing_phishing_block.html',
'browser/security/resources/ssl_error.html',
'browser/security/resources/ssl_roadblock.html',
]
# TODO(port)
if env_flat.Bit('windows'):
flats_out = []
for i in flats:
flats_out.extend(env_flat.FlatHtml(i))
# TODO(sgk): Remove when we upgrade to SCons 1.1.0, which
# determines implicit dependencies from .rc files.
env_flat.Depends(browser_res, flats_out)
sconscript_files = [
'views/SConscript',
]
if not env.WantSystemLib('hunspell'):
sconscript_files.append('third_party/hunspell/SConscript')
if not env.WantSystemLib('sqlite'):
sconscript_files.append('$THIRD_PARTY_DIR/sqlite/SConscript')
# TODO(port)
if env.Bit('windows'):
sconscript_files.extend([
'app/resources/SConscript',
'app/theme/SConscript',
'browser/views/SConscript',
])
env.SConscript(sconscript_files, exports=['env', 'env_res', 'env_test'])
# TODO(port)
if env.Bit('windows'):
env.InstallAs('$LIBS_DIR/${LIBPREFIX}jscre${LIBSUFFIX}',
'$WEBKIT_DIR/JavaScriptCore_pcre.lib')
env.Install('$DESTINATION_ROOT', install_targets)
gears_plugins = [
'$GEARS_DIR/binaries/gears.dll',
'$GEARS_DIR/binaries/gears.pdb',
]
# TODO(port)
if env.Bit('windows'):
env.Install('$DESTINATION_ROOT/plugins/gears', gears_plugins)
env.Command('$DESTINATION_ROOT/resources/inspector',
'$CHROME_SRC_DIR/third_party/WebKit/WebCore/inspector/front-end',
Copy('$TARGET', '$SOURCE'),
source_scanner=DirScanner)