# 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 = env.Clone() env_res = env.Clone() # We use the SCons addRepository() call (an internal API that will # at some point be made public) to "back" the build directory # hierarchy with the source directory hierarchies in which we want to # find the source .cpp and .h files. Think of this kind of like # Make's VPATH, but applied to entire directory hierarchies. The # upshot is that when searching for any file (source or target), # SCons will search the subdirectory hierarchies under the following # paths: # # webkit/Hammer/port/ # webkit/port/ # third_party/WebKit/WebCore/ # # SCons will replicate the compiler and linker -I and -L options so # that the tools will find the right .h and library files. This comes # at the cost of tripling the number of -I or -L options on a command # line, but with the benefit that the build should "just work" # regardless of which tree the file lives in, and regardless of whether # or not the file involved is a generated file or checked-in source. # # (Note that because the build/SConscript.main file also calls # addRepository() for the entire $OBJ_ROOT tree, that adds an # extra -I or -L option for the webkit/port/ subdirectory, after the # third_party/WebKit/WebCore/ in the above list. We'd like to # eliminate that in the future, but that will require some # deeper magic, and maybe a SCons modification.) port_dir = env.Dir('$WEBKIT_DIR/port') port_dir.addRepository(env.Dir('$CHROME_SRC_DIR/webkit/port')) port_dir.addRepository(env.Dir('$CHROME_SRC_DIR/third_party/WebKit/WebCore')) if env.Bit('windows'): env['WEBKIT_PLATFORM_SUBDIR'] = 'win' elif env.Bit('mac'): env['WEBKIT_PLATFORM_SUBDIR'] = 'mac' env.Append( CCFLAGS = [ '-Wno-reorder', '-Wno-unused', ], ) env.Prepend( CPPPATH = [env.subst(x) for x in [ '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics/cg', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/loader/archive/cf', ]] ) elif env.Bit('linux'): env.Append( CPPDEFINES = [ # We want webkit to use pthreads rather than gthread. 'WTF_USE_PTHREADS=1', ], ) if env.Bit('posix'): env.Append( CCFLAGS = [ '-Wno-parentheses', ], ) env.Append( WEBCORE_DIR = '$THIRD_PARTY_WEBKIT_DIR/WebCore', PENDING_DIR = "$WEBKIT_DIR/pending", PORT_DIR = "$WEBKIT_DIR/port", JAVASCRIPTCORE_DIR = "$THIRD_PARTY_WEBKIT_DIR/JavaScriptCore", WTF_DIR = "$JAVASCRIPTCORE_DIR/wtf", KJS_DIR = "$JAVASCRIPTCORE_DIR/kjs", PCRE_DIR = "$JAVASCRIPTCORE_DIR/pcre", V8BINDINGS_DIR = "$WEBKIT_DIR/V8Bindings", DERIVED_DIR = env.Dir("$WEBKIT_DIR/V8Bindings/DerivedSources"), SHARED_DIR = env.Dir("$WEBKIT_DIR/V8Bindings/SharedSources"), WEBKIT_DIR_PORT_INC = env.Dir("$CHROME_SRC_DIR/webkit/port"), ) env.Prepend( CPPPATH = [env.subst(x) for x in [ # We put our grit generated headers in a common place. This matches # what we do in Visual Studios. '$TARGET_ROOT/grit_derived_sources', '$WEBKIT_DIR/build/JSConfig/WebCore', # TODO(sgk): This directory was at this point in the /I list # in the Visual Studio build of the merged webkit. It breaks # the Linux build because of the pthread.h file there. # Leaving it out doesn't obviously break the Windows build, # but for now I'm leaving it commented out here in case it # introduced any hidden problems. #'$WEBKIT_DIR/build/JavaScriptCore', '$ZLIB_DIR', '$LIBPNG_DIR', '$LIBJPEG_DIR', '$LIBXSLT_DIR', '$LIBXML_DIR/include', '$LIBXML_DIR/DerivedSources/include', '$ICU38_DIR/public/common', '$ICU38_DIR/public/i18n', '$SKIA_DIR/include', '$SKIA_DIR/include/corecg', '$SKIA_DIR/ext', '$SKIA_DIR/platform', '$NPAPI_DIR', '$V8_DIR/include', '$WEBKIT_DIR/V8Bindings/DerivedSources', '$WEBKIT_DIR/V8Bindings/SharedSources', '$WEBKIT_DIR/pending', '$WEBKIT_DIR_PORT_INC/bindings/v8', '$WEBKIT_DIR_PORT_INC/platform', '$WEBKIT_DIR_PORT_INC/platform/$WEBKIT_PLATFORM_SUBDIR', '$JAVASCRIPTCORE_DIR', '$JAVASCRIPTCORE_DIR/wtf', '$JAVASCRIPTCORE_DIR/wtf/chromium', # Directories in third_party/WebKit/Webcore that we pull headers # from. We don't have to list directories that are listed in the # $WEBKIT_DIR_PORT_INC section above because they automatically fall # back to third_party/WebKit/Webcore. '$CHROME_SRC_DIR/third_party/WebKit/WebCore/css', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/dom', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/editing', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/history', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/html', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/inspector', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/loader', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/loader/appcache', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/loader/archive', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/loader/icon', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/page', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/page/animation', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/page/chromium', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/animation', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/chromium', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics/chromium', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics/skia', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics/opentype', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/graphics/transforms', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/image-decoders/skia', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/image-encoders/skia', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/network', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/network/chromium', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/sql', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/text', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/plugins', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/rendering', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/rendering/style', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/storage', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/style', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/svg', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/svg/animation', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/svg/graphics', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/workers', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/xml', '$CHROME_SRC_DIR', ]], ) env.Append( CPPDEFINES = [ 'U_STATIC_IMPLEMENTATION', '_SCL_SECURE_NO_DEPRECATE', '_SCL_SECURE_NO_WARNINGS', ['ENABLE_DASHBOARD_SUPPORT', '0'], ['ENABLE_JAVASCRIPT_DEBUGGER', '0'], ['ENABLE_JSC_MULTIPLE_THREADS', '0'], ['ENABLE_ICONDATABASE', '0'], ['ENABLE_DATABASE', '1'], ['ENABLE_XSLT', '1'], ['ENABLE_XPATH', '1'], ['ENABLE_SVG', '1'], ['ENABLE_SVG_ANIMATION', '1'], ['ENABLE_SVG_AS_IMAGE', '1'], ['ENABLE_SVG_USE', '1'], ['ENABLE_SVG_FOREIGN_OBJECT', '1'], ['ENABLE_SVG_FONTS', '1'], ['WEBCORE_NAVIGATOR_PLATFORM', '"\\"Win32\\""'], 'USE_GOOGLE_URL_LIBRARY', ['BUILDING_CHROMIUM__', '1'], 'CHROMIUM_BUILD', '_SECURE_ATL', 'LIBXSLT_STATIC', 'LIBXML_STATIC', 'PNG_USER_CONFIG', 'CHROME_PNG_WRITE_SUPPORT', ['__PRETTY_FUNCTION__', '__FUNCTION__'], 'DISABLE_ACTIVEX_TYPE_CONVERSION_MPLAYER2', '__STD_C', ['USE_SYSTEM_MALLOC', '1'], ], ) # This addRepository call causes our webkit/port include paths to include both # webkit/port and third_party/WebKit/WebCore. webkit_port_inc = env.Dir("$WEBKIT_DIR_PORT_INC") webkit_port_inc.addRepository( env.Dir('$CHROME_SRC_DIR/third_party/WebKit/WebCore')) # This list is the SConscripts that work on Windows and Linux. sconscript_dirs = env.ChromiumLoadComponentSConscripts( LOAD_NAMES = ['webkit'], port = 'SConscript.port', JavaScriptCore_pcre = 'SConscript.javascriptcore_pcre', WebCore_config_h = 'build/JSConfig/SConscript', JavaScriptCore = 'build/JavaScriptCore/SConscript', webkit_resources = 'build/webkit_resources/SConscript', webkit_strings = 'build/webkit_strings/SConscript', bindings = 'build/port/SConscript', V8Bindings = 'build/V8Bindings/SConscript', WebCore = 'build/WebCore/SConscript', WebKit = 'build/WebKit/SConscript', default_plugin = 'default_plugin/SConscript', glue = 'glue/SConscript', npapi_test_plugin = 'glue/plugins/test/SConscript', npapi_layout_test_plugin = 'tools/npapi_layout_test_plugin/SConscript', test_shell = 'tools/test_shell/SConscript', ) if env.Bit('windows'): # These extra dirs aren't win32-specific, they're just the dirs that # haven't yet been made portable. sconscript_dirs.extend(env.ChromiumLoadComponentSConscripts( LOAD_NAMES = ['webkit'], activex_shim = 'activex_shim/SConscript', npaxshim = 'activex_shim_dll/SConscript', )) env.Append( CPPDEFINES = [ '_CRT_SECURE_NO_DEPRECATE', '_CRT_NONSTDC_NO_WARNINGS', '_CRT_NONSTDC_NO_DEPRECATE', ['CRASH', '__debugbreak'], ]) env.Prepend( CPPPATH = [ # Windows precompiled headers are here '$WEBKIT_DIR/build', '$JAVASCRIPTCORE_DIR/os-win32', ]) else: env.Append( CXXFLAGS = ['-Wno-multichar'], ) env.SConscript(sconscript_dirs, exports=['env', 'env_res']) # Setup alias for all webkit related targets. # We'd like to do this as follows, but it leads to out-of-memory # errors when SCons tries to use the entire contents of the # directory tree as a huge content-signature string. # Instead we're going to let all the subsidiary SConscript files # add their own individual targets to the 'webkit' Alias. #env.Alias('webkit', ['.', '$DESTINATION_ROOT/icudt38.dll']) if env.Bit('windows'): env.Alias('webkit', ['$DESTINATION_ROOT/icudt38.dll']) version = env.Command('$WEBKIT_DIR/build/WebCore/webkit_version.h', ['$WEBCORE_DIR/Configurations/Version.xcconfig', '$CHROME_SRC_DIR/webkit/build/webkit_version.py'], "$PYTHON ${SOURCES[1]} ${SOURCES[0]} ${TARGET.dir}") env.AlwaysBuild(version)