diff options
Diffstat (limited to 'WebCore/WebCore.gyp')
-rw-r--r-- | WebCore/WebCore.gyp/WebCore.gyp | 171 | ||||
-rw-r--r-- | WebCore/WebCore.gyp/scripts/action_derivedsourcesallinone.py | 201 |
2 files changed, 323 insertions, 49 deletions
diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp index 0c8d035..c564aff 100644 --- a/WebCore/WebCore.gyp/WebCore.gyp +++ b/WebCore/WebCore.gyp/WebCore.gyp @@ -1,10 +1,10 @@ # # Copyright (C) 2009 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 @@ -14,7 +14,7 @@ # * 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 @@ -101,7 +101,11 @@ # If set to 1, doesn't compile debug symbols into webcore reducing the # size of the binary and increasing the speed of gdb. gcc only. 'remove_webcore_debug_symbols%': 0, - + + # If set to 0, doesn't build SVG support, reducing the size of the + # binary and increasing the speed of gdb. + 'enable_svg%': 1, + 'webcore_include_dirs': [ '../', '../accessibility', @@ -165,7 +169,48 @@ '../workers', '../xml', ], + + 'bindings_idl_files': [ + '<@(webcore_bindings_idl_files)', + ], + + 'bindings_idl_files!': [ + # Custom bindings in bindings/v8/custom exist for these. + '../dom/EventListener.idl', + '../dom/EventTarget.idl', + '../html/VoidCallback.idl', + + # Bindings with custom Objective-C implementations. + '../page/AbstractView.idl', + + # FIXME: I don't know why all of these are excluded. + # Extra SVG bindings to exclude. + '../svg/ElementTimeControl.idl', + '../svg/SVGAnimatedPathData.idl', + '../svg/SVGExternalResourcesRequired.idl', + '../svg/SVGFilterPrimitiveStandardAttributes.idl', + '../svg/SVGFitToViewBox.idl', + + '../svg/SVGHKernElement.idl', + '../svg/SVGLangSpace.idl', + '../svg/SVGLocatable.idl', + '../svg/SVGStylable.idl', + '../svg/SVGTests.idl', + '../svg/SVGTransformable.idl', + '../svg/SVGViewSpec.idl', + '../svg/SVGZoomAndPan.idl', + + # FIXME: I don't know why these are excluded, either. + # Someone (me?) should figure it out and add appropriate comments. + '../css/CSSUnknownRule.idl', + ], + 'conditions': [ + ['enable_svg!=0', { + 'bindings_idl_files': [ + '<@(webcore_svg_bindings_idl_files)', + ], + }], ['OS=="mac"', { 'webcore_include_dirs+': [ # platform/graphics/cg and mac needs to come before @@ -177,8 +222,8 @@ # FIXME: Eliminate dependency on platform/graphics/mac and # related directories. # platform/graphics/cg may need to stick around, though. - '../platform/graphics/cg', '../platform/graphics/mac', + '../platform/graphics/cg', ], 'webcore_include_dirs': [ # FIXME: Eliminate dependency on platform/mac and related @@ -199,6 +244,23 @@ '../platform/win', ], }], + ['OS=="win" and buildtype=="Official"', { + # On windows official release builds, we try to preserve symbol space. + 'derived_sources_aggregate_files': [ + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSourcesAll.cpp', + ], + },{ + 'derived_sources_aggregate_files': [ + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources1.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources2.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources3.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources4.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources5.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources6.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources7.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/V8DerivedSources8.cpp', + ], + }] ], }, 'targets': [ @@ -216,40 +278,8 @@ '../html/HTMLEntityNames.gperf', '../platform/ColorData.gperf', - # idl rule - '<@(webcore_bindings_idl_files)', - ], - 'sources!': [ - # Custom bindings in bindings/v8/custom exist for these. - '../dom/EventListener.idl', - '../dom/EventTarget.idl', - '../html/VoidCallback.idl', - - # JSC-only. - '../inspector/JavaScriptCallFrame.idl', - - # Bindings with custom Objective-C implementations. - '../page/AbstractView.idl', - - # FIXME: I don't know why all of these are excluded. - # Extra SVG bindings to exclude. - '../svg/ElementTimeControl.idl', - '../svg/SVGAnimatedPathData.idl', - '../svg/SVGExternalResourcesRequired.idl', - '../svg/SVGFitToViewBox.idl', - '../svg/SVGHKernElement.idl', - '../svg/SVGLangSpace.idl', - '../svg/SVGLocatable.idl', - '../svg/SVGStylable.idl', - '../svg/SVGTests.idl', - '../svg/SVGTransformable.idl', - '../svg/SVGViewSpec.idl', - '../svg/SVGZoomAndPan.idl', - - # FIXME: I don't know why these are excluded, either. - # Someone (me?) should figure it out and add appropriate comments. - '../css/CSSUnknownRule.idl', - + # idl rules + '<@(bindings_idl_files)', ], 'actions': [ # Actions to build derived sources. @@ -447,6 +477,29 @@ '<@(_inputs)' ], }, + { + 'action_name': 'derived_sources_all_in_one', + 'variables': { + # Write sources into a file, so that the action command line won't + # exceed OS limites. + 'idls_list_temp_file': '<|(idls_list_temp_file.tmp <@(bindings_idl_files))', + }, + 'inputs': [ + 'scripts/action_derivedsourcesallinone.py', + '<(idls_list_temp_file)', + '<!@(cat <(idls_list_temp_file))', + ], + 'outputs': [ + '<@(derived_sources_aggregate_files)', + ], + 'action': [ + 'python', + 'scripts/action_derivedsourcesallinone.py', + '<(idls_list_temp_file)', + '--', + '<@(derived_sources_aggregate_files)', + ], + }, ], 'rules': [ # Rules to build derived sources. @@ -576,18 +629,15 @@ ], }, 'sources': [ - # This file includes all the .cpp files generated from the .idl files + # These files include all the .cpp files generated from the .idl files # in webcore_files. - '../bindings/v8/DerivedSourcesAllInOne.cpp', + '<@(derived_sources_aggregate_files)', # Additional .cpp files from webcore_bindings_sources actions. '<(SHARED_INTERMEDIATE_DIR)/webkit/HTMLElementFactory.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/HTMLNames.cpp', - '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGElementFactory.cpp', - '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/UserAgentStyleSheetsData.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/V8HTMLElementWrapperFactory.cpp', - '<(SHARED_INTERMEDIATE_DIR)/webkit/V8SVGElementWrapperFactory.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XLinkNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNSNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNames.cpp', @@ -602,6 +652,13 @@ '<(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8', ], }], + ['enable_svg!=0', { + 'sources': [ + '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGElementFactory.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/V8SVGElementWrapperFactory.cpp', + ], + }], ['OS=="mac"', { 'include_dirs': [ '../../WebKitLibraries', @@ -650,7 +707,7 @@ '<(chromium_src_dir)/third_party/sqlite/sqlite.gyp:sqlite', ], 'defines': [ - 'WEBCORE_NAVIGATOR_VENDOR="Google Inc."', + 'WEBCORE_NAVIGATOR_VENDOR="Google Inc."', ], 'include_dirs': [ '<(INTERMEDIATE_DIR)', @@ -674,10 +731,6 @@ ['exclude', '(android|cairo|cf|cg|curl|gtk|haiku|linux|mac|opentype|posix|qt|soup|symbian|win|wx)/'], ['exclude', '(?<!Chromium)(Android|Cairo|CF|CG|Curl|Gtk|Linux|Mac|OpenType|POSIX|Posix|Qt|Safari|Soup|Symbian|Win|Wx)\\.(cpp|mm?)$'], ['include', 'platform/graphics/opentype/OpenTypeSanitizer\\.cpp$'], - # Exclude everything in svg/ directly but not in subdirectories. - # Everything in svg/*.cpp is included in svg/SVGAllInOne.cpp. - ['exclude', 'svg/[^/]+\\.cpp$'], - ['include', 'svg/SVGAllInOne\\.cpp$'], # JSC-only. ['exclude', 'inspector/JavaScript[^/]*\\.cpp$'], @@ -706,6 +759,9 @@ # Don't build StorageEventDispatcher. We have our own implementation. '../storage/StorageEventDispatcher.cpp', + # Don't build IndexedDatabase. We have our own implementation. + '../storage/IndexedDatabase.cpp', + # Use history/BackForwardListChromium.cpp instead. '../history/BackForwardList.cpp', @@ -818,6 +874,20 @@ '<(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8', ], }], + ['enable_svg!=0', { + 'sources/': [ + ['exclude', 'svg/[^/]+\\.cpp$'], + ['include', 'svg/SVGAllInOne\\.cpp$'], + ], + }, { # svg disabled + 'sources/': [ + ['exclude', 'svg/'], + ['exclude', 'css/svg/'], + ['exclude', 'rendering/style/SVG'], + ['exclude', 'rendering/RenderSVG'], + ['exclude', 'rendering/SVG'], + ], + }], ['OS=="linux" or OS=="freebsd"', { 'dependencies': [ '<(chromium_src_dir)/build/linux/system.gyp:fontconfig', @@ -991,6 +1061,9 @@ '../platform/image-decoders/skia/ImageDecoderSkia.cpp', '../platform/image-decoders/xbm/XBMImageDecoder.cpp', '../platform/image-decoders/xbm/XBMImageDecoder.h', + + # Again, Skia is not used on Mac. + '../platform/chromium/DragImageChromiumSkia.cpp', ], 'direct_dependent_settings': { 'include_dirs': [ diff --git a/WebCore/WebCore.gyp/scripts/action_derivedsourcesallinone.py b/WebCore/WebCore.gyp/scripts/action_derivedsourcesallinone.py new file mode 100644 index 0000000..6a11414 --- /dev/null +++ b/WebCore/WebCore.gyp/scripts/action_derivedsourcesallinone.py @@ -0,0 +1,201 @@ +#!/usr/bin/python +# +# Copyright (C) 2009 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. +# +# Copyright (c) 2009 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. + +# action_derivedsourceslist.py generates a single cpp file that includes +# all v8 bindings cpp files generated from idls. Files can be assigned into +# multiple output files, to reduce maximum compilation unit size and allow +# parallel compilation. +# +# usage: action_derivedsourceslist.py IDL_FILES_LIST -- OUTPUT_FILE1 OUTPUT_FILE2 ... +# +# Note that IDL_FILES_LIST is a text file containing the IDL file paths. + +import errno +import os +import os.path +import re +import subprocess +import sys + +# A regexp for finding Conditional attributes in interface definitions. +conditionalPattern = re.compile('interface[\s]*\[[^\]]*Conditional=([\_0-9a-zA-Z&]*)') + +copyrightTemplate = """/* + * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT. + * + * This file was generated by the make_jni_lists.py script. + * + * Copyright (C) 2009 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: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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. + */ +""" + + +# Wraps conditional with ENABLE() and && if more than one conditional is specified. +def formatConditional(conditional): + def wrapWithEnable(s): + return 'ENABLE(' + s + ')' + return ' && '.join(map(wrapWithEnable, conditional)) + + +# Find the conditional interface attribute. +def extractConditional(idlFilePath): + conditional = None + + # Read file and look for "interface [ Conditional=XXX ]". + idlFile = open(idlFilePath) + idlContents = idlFile.read().replace('\n', '') + idlFile.close() + + match = conditionalPattern.search(idlContents) + if match: + conditional = match.group(1) + conditional = conditional.split('&') + + return conditional + +# Extracts conditional and interface name from each IDL file. +def extractMetaData(filePaths): + metaDataList = [] + + for f in filePaths: + metaData = {} + if len(f) == 0: + continue + if not os.path.exists(f): + print 'WARNING: file not found: "%s"' % f + continue + + # Extract type name from file name + (parentPath, fileName) = os.path.split(f) + (interfaceName, ext) = os.path.splitext(fileName) + + if not ext == '.idl': + continue + + metaData = { + 'conditional': extractConditional(f), + 'name': interfaceName, + } + + metaDataList.append(metaData) + + return metaDataList + + +def generateContent(filesMetaData, partition, totalPartitions): + # Sort files by conditionals. + filesMetaData.sort() + + output = [] + + # Add fixed content. + output.append(copyrightTemplate) + output.append('#define NO_IMPLICIT_ATOMICSTRING\n\n') + + # List all includes segmented by if and endif. + prevConditional = None + for metaData in filesMetaData: + name = metaData['name'] + if (hash(name) % totalPartitions) != partition: + continue + conditional = metaData['conditional'] + + if prevConditional and prevConditional != conditional: + output.append('#endif\n') + if conditional and prevConditional != conditional: + output.append('\n#if %s\n' % formatConditional(conditional)) + + output.append('#include "bindings/V8%s.cpp"\n' % name) + + prevConditional = conditional + + if prevConditional: + output.append('#endif\n') + + return ''.join(output) + + +def writeContent(content, outputFileName): + (parentPath, fileName) = os.path.split(outputFileName) + if not os.path.exists(parentPath): + print parentPath + os.mkdir(parentPath) + f = open(outputFileName, 'w') + f.write(content) + f.close() + + +def main(args): + assert(len(args) > 3) + inOutBreakIndex = args.index('--') + inputFileName = args[1] + outputFileNames = args[inOutBreakIndex+1:] + + inputFile = open(inputFileName, 'r') + idlFileNames = inputFile.read().split('\n') + inputFile.close() + + filesMetaData = extractMetaData(idlFileNames) + for fileName in outputFileNames: + print 'Generating derived sources list into %s...' % fileName + partition = outputFileNames.index(fileName) + fileContents = generateContent(filesMetaData, partition, len(outputFileNames)) + writeContent(fileContents, fileName) + + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) |