# 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(['env']) env_res = env.Clone() env_test = env.Clone() env = env.Clone() install_targets = [] env.Prepend( CPPPATH = [ 'app', '$CHROME_DIR/third_party/wtl/include', ], ) env_res.Append( CPPPATH = [ '.', '#/..', ], RCFLAGS = [ ['/l', '0x409'], ], ) browser_res = env_res.RES('browser/browser_resources.rc') chrome_dll_res = env_res.RES('app/chrome_dll.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') webkit_res = env_res.RES('$WEBKIT_DIR/glue/webkit_resources.rc') net_res = '$NET_DIR/net_resources.res' dll_resources = [ browser_res, chrome_dll_res, common_res, debugger_res, net_res, renderer_res, webkit_res, ] env_test['BROWSER_RES'] = browser_res[0] env_test['TEST_DATA_RES'] = test_data_res[0] env_dll = env.Clone() 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/include', '$BREAKPAD_DIR/src', ], LIBS = [ 'base', 'base_gfx', 'breakpad_handler', 'googleurl', 'net', 'skia', 'bzip2', 'icuuc', 'libjpeg', 'libpng', 'libxml', 'libxslt', 'modp_b64', 'zlib', 'activex_shim', 'WTF', 'V8Bindings', 'WebCore', 'default_plugin', 'Glue', 'JavaScriptCore_pcre', 'Port', ], ) env_dll.Append( LIBS = [ 'comctl32.lib', 'dwmapi.lib', 'rpcrt4.lib', 'shlwapi.lib', 'winmm.lib', 'wsock32.lib', ], 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', '/nxcompat', '/PDB:${TARGETS[1]}', '/IMPLIB:${TARGETS[2]}', ], ) input_files = [ 'app/chrome_dll_main.cc', ] libs = [ 'browser/browser.lib', 'browser/views/browser_views.lib', 'browser/debugger/debugger.lib', 'common/common.lib', 'installer/util/util.lib', 'libjscre.lib', 'plugin/plugin.lib', 'renderer/renderer.lib', 'third_party/hunspell/hunspell.lib', 'third_party/sqlite/sqlite.lib', 'views/views.lib', '$V8_DIR/v8.lib', '$V8_DIR/snapshot-empty.obj', ] if env['PLATFORM'] == 'win32': targets = [ 'chrome.dll', 'chrome_dll.pdb', 'chrome_dll.lib', ] else: targets = ['chrome'] dll_targets = env_dll.ChromeSharedLibrary(targets, dll_resources + input_files + libs) install_targets.extend(dll_targets) import os import sys sys.path.append(Dir('#/../tools/grit').abspath) env_grd = env.Clone() env_grd.Tool('scons', toolpath=['#/../tools/grit/grit']) # NOTE: generated_target is fake, to cause a different target. generated = env_grd.GRIT('app/resources/generated_target', '#/../chrome/app/generated_resources.grd') for g in [ g for g in generated if str(g).endswith('.rc') ]: env_res.RES(g) def chrome_version_emitter(target, source, env): source.append('$CHROME_SRC_DIR/VERSION') source.append('$CHROME_SRC_DIR/BRANDING') return target, source b = Builder(action = '$CHROME_VERSION_RC_COM', emitter = chrome_version_emitter) env['BUILDERS']['ChromeVersionRC'] = b env.Replace( CHROME_VERSION_RC_COM = '$VERSION_BAT $SOURCE $CHROME_SRC_DIR $PWD $TARGET', VERSION_BAT = File('#/../chrome/tools/build/win/version.bat'), CHROME_SRC_DIR = Dir('#/../chrome'), PWD = Dir('.'), ) 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', ) 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_exe = env.Clone() env_exe.Prepend( CPPPATH = [ '..', '$BREAKPAD_DIR/src', ], LIBS = [ 'base', 'breakpad_handler', 'icuuc', '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]}', ], ) if env['PLATFORM'] == 'win32': targets = [ 'chrome.exe', 'chrome_exe.pdb', 'chrome_exe_implib.lib', ] else: targets = ['chrome'] chrome_exe = env_exe.ChromeProgram( targets, [ env_res.RES('app/chrome_exe.rc'), 'app/breakpad.cc', 'app/chrome_exe_main.cc', 'app/google_update_client.cc', 'common/common.lib', '$CHROME_DIR/chrome_dll.lib', ] ) install_targets.extend(chrome_exe) env.Requires(chrome_exe[0], ['$TARGET_ROOT/chrome.dll', '$TARGET_ROOT/icudt38.dll', '$TARGET_ROOT/rlz.dll', '$TARGET_ROOT/First Run']) env.Command('$TARGET_ROOT/First Run', '$CHROME_DIR/app/FirstRun', Copy('$TARGET', '$SOURCE')) # 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_snapshot = env.Clone() env_snapshot.Prepend( CPPPATH = [ '$V8_DIR/src', '$V8_DIR/src/pcre/jscre', '..', ], CPPDEFINES = [ 'ENABLE_DISASSEMBLER', ], CCFLAGS = [ '/wd4099', '/wd4355', '/wd4800', ], ) env_snapshot.ChromeStaticLibrary('snapshotv8', 'snapshot.cc') env_snapshot.Command('snapshot.cc', '#/../v8/bin/debug/mksnapshot.exe', '$SOURCE $TARGET') env_flat = env.Clone( BROWSER_RESOURCES = Dir('browser_resources'), HTML_INLINE = File('#/../chrome/tools/build/win/html_inline.py'), FLATTEN_HTML_COM = '$PYTHON $HTML_INLINE $SOURCE $TARGET', ) flats = [ 'about_memory', 'about_version', 'incognito_tab', 'new_tab', 'safe_browsing_malware_block', 'safe_browsing_phishing_block', 'ssl_error', ] flats_out = [] for i in flats: flats_out += env_flat.Command( '$BROWSER_RESOURCES/' + i + '_flat.html', 'browser/resources/' + i + '.html', '$FLATTEN_HTML_COM') flats_out += env_flat.Command( '$BROWSER_RESOURCES/ssl_roadblock_flat.html', 'browser/security/resources/ssl_roadblock.html', '$FLATTEN_HTML_COM') env_flat.Depends(browser_res, flats_out) env_test.Object('test/test_file_util.cc', CPPPATH=['..'] + env['CPPPATH']) test_sconscript_files = [ 'SConscript.automated_ui_tests', 'SConscript.unit_tests', 'SConscript.ui_tests', ] env.SConscript(test_sconscript_files, exports=['env_test']) sconscript_files = [ 'app/resources/SConscript', 'app/theme/SConscript', 'browser/SConscript', 'browser/views/SConscript', 'common/SConscript', 'installer/mini_installer/SConscript', 'installer/setup/SConscript', 'installer/util/SConscript', 'plugin/SConscript', 'renderer/SConscript', 'test/activex_test_control/SConscript', 'test/automation/SConscript', 'test/chrome_plugin/SConscript', 'test/interactive_ui/SConscript', 'test/memory_test/SConscript', 'test/mini_installer_test/SConscript', 'test/page_cycler/SConscript', 'test/plugin/SConscript', 'test/reliability/SConscript', 'test/security_tests/SConscript', 'test/selenium/SConscript', 'test/startup/SConscript', 'test/tab_switching/SConscript', 'tools/crash_service/SConscript', 'tools/perf/flush_cache/SConscript', 'tools/test/image_diff/SConscript', 'third_party/hunspell/SConscript', 'third_party/sqlite/SConscript', 'views/SConscript', ] env.SConscript(sconscript_files, exports=['env', 'env_res', 'env_test']) env.InstallAs('libjscre.lib', '$WEBKIT_DIR/JavaScriptCore_pcre.lib') i = env.Install('$TARGET_ROOT', install_targets) env.Alias('chrome', i) gears_plugins = [ '$GEARS_DIR/binaries/gears.dll', '$GEARS_DIR/binaries/gears.pdb', ] i = env.Install('$TARGET_ROOT/plugins/gears', gears_plugins) env.Alias('chrome', i) i = env.Command('$TARGET_ROOT/resources/inspector', '#/../webkit/port/page/inspector', Copy('$TARGET', '$SOURCE'), source_scanner=DirScanner) env.Alias('chrome', i) env.Alias('chrome', env.Alias('webkit'))