| # 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', |
| |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/bmp', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/gif', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/ico', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/jpeg', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/png', |
| '$WEBKIT_DIR_PORT_INC/platform/image-decoders/xbm', |
| '$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/css', |
| '$WEBKIT_DIR_PORT_INC/dom', |
| '$WEBKIT_DIR_PORT_INC/history', |
| '$WEBKIT_DIR_PORT_INC/page/chromium', |
| '$WEBKIT_DIR_PORT_INC/platform', |
| '$WEBKIT_DIR_PORT_INC/platform/animation', |
| '$WEBKIT_DIR_PORT_INC/platform/chromium', |
| '$WEBKIT_DIR_PORT_INC/platform/graphics', |
| '$WEBKIT_DIR_PORT_INC/platform/graphics/chromium', |
| '$WEBKIT_DIR_PORT_INC/platform/graphics/skia', |
| '$WEBKIT_DIR_PORT_INC/platform/graphics/transforms', |
| '$WEBKIT_DIR_PORT_INC/platform/$WEBKIT_PLATFORM_SUBDIR', |
| '$WEBKIT_DIR_PORT_INC/platform/network/chromium', |
| '$WEBKIT_DIR_PORT_INC/rendering', |
| |
| '$JAVASCRIPTCORE_DIR', |
| '$JAVASCRIPTCORE_DIR/wtf', |
| |
| # 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/editing', |
| '$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/platform/graphics/opentype', |
| '$CHROME_SRC_DIR/third_party/WebKit/WebCore/platform/network', |
| '$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/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/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/localized_strings/SConscript', |
| bindings = 'build/port/SConscript', |
| V8Bindings = 'build/V8Bindings/SConscript', |
| WebCore = 'build/WebCore/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) |