# 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['PLATFORM'] == 'win32': 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') 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_dll = env.Clone() env_dll.ApplySConscript([ '$CHROME_SRC_DIR/build/using_v8.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', env_dll['ICU_LIBS'], # TODO(sgk): '$ICU_LIBS' when scons is fixed '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['PLATFORM'] == 'win32': 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', ], 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['PLATFORM'] == 'win32': 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('app/resources/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('app/resources/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('app/resources/fake_google_chrome_target', '$CHROME_SRC_DIR/chrome/app/google_chrome_strings.grd') grit_files.extend(google_chrome) # TODO(port) if env_dll['PLATFORM'] == 'win32': 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_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['PLATFORM'] == 'win32': 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_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_version.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['PLATFORM'] == 'win32': 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 = [] 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['PLATFORM'] == 'win32': sconscript_files.extend([ 'app/resources/SConscript', 'app/theme/SConscript', 'browser/views/SConscript', 'views/SConscript', ]) env.SConscript(sconscript_files, exports=['env', 'env_res', 'env_test']) # TODO(port) if env['PLATFORM'] == 'win32': 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['PLATFORM'] == 'win32': 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)