diff options
-rw-r--r-- | DEPS | 2 | ||||
-rwxr-xr-x | build/scan_sources.py | 236 | ||||
-rw-r--r-- | chrome/nacl.gypi | 82 | ||||
-rw-r--r-- | ppapi/native_client/native_client.gyp | 59 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp | 94 | ||||
-rw-r--r-- | ppapi/ppapi_tests.gypi | 76 |
6 files changed, 311 insertions, 238 deletions
@@ -8,7 +8,7 @@ vars = { "webkit_revision": "99142", "chromium_git": "http://git.chromium.org/git", "swig_revision": "69281", - "nacl_revision": "7085", + "nacl_revision": "6965", # After changing nacl_revision, run 'glient sync' and check native_client/DEPS # to update other nacl_*_revision's. # TODO(brettw) We should use the "From" syntax to avoid hardcoding the diff --git a/build/scan_sources.py b/build/scan_sources.py new file mode 100755 index 0000000..60febef --- /dev/null +++ b/build/scan_sources.py @@ -0,0 +1,236 @@ +#!/usr/bin/python +# Copyright (c) 2011 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. + +from optparse import OptionParser +import os +import re +import sys + +"""Header Scanner. + +This module will scan a set of input sources for include dependencies. Use +the command-line switch -Ixxxx to add include paths. All filenames and paths +are expected and returned with POSIX separators. +""" + + +debug = False + + +def DebugPrint(txt): + if debug: print txt + + +class PathConverter(object): + """PathConverter does path manipulates using Posix style pathnames. + + Regardless of the native path type, all inputs and outputs to the path + functions are with POSIX style separators. + """ + def ToNativePath(self, pathname): + return os.path.sep.join(pathname.split('/')) + + def ToPosixPath(self, pathname): + return '/'.join(pathname.split(os.path.sep)) + + def exists(self, pathname): + ospath = self.ToNativePath(pathname) + return os.path.exists(ospath) + + def getcwd(self): + return self.ToPosixPath(os.getcwd()) + + def isabs(self, pathname): + ospath = self.ToNativePath(pathname) + return os.path.isabs(ospath) + + def isdir(self, pathname): + ospath = self.ToNativePath(pathname) + return os.path.isdir(ospath) + + def open(self, pathname): + ospath = self.ToNativePath(pathname) + return open(ospath) + + def realpath(self, pathname): + ospath = self.ToNativePath(pathname) + ospath = os.path.realpath(ospath) + return self.ToPosixPath(ospath) + + +class Resolver(object): + """Resolver finds and generates relative paths for include files. + + The Resolver object provides a mechanism to to find and convert a source or + include filename into a relative path based on provided search paths. All + paths use POSIX style separator. + """ + def __init__(self, pathobj=PathConverter()): + self.search_dirs = [] + self.pathobj = pathobj + self.cwd = self.pathobj.getcwd() + self.offs = len(self.cwd) + + def AddOneDirectory(self, pathname): + """Add an include search path.""" + pathname = self.pathobj.realpath(pathname) + DebugPrint('Adding DIR: %s' % pathname) + if pathname not in self.search_dirs: + if self.pathobj.isdir(pathname): + self.search_dirs.append(pathname) + else: + sys.stderr.write('Not a directory: %s\n' % pathname) + return False + return True + + def AddDirectories(self, pathlist): + """Add list of space separated directories.""" + failed = False + dirlist = ' '.join(pathlist) + for dirname in dirlist.split(' '): + if not self.AddOneDirectory(dirname): + failed = True + return not failed + + def GetDirectories(self): + return self.search_dirs + + def RealToRelative(self, filepath, basepath): + """Returns a relative path from an absolute basepath and filepath.""" + path_parts = filepath.split('/') + base_parts = basepath.split('/') + while path_parts and base_parts and path_parts[0] == base_parts[0]: + path_parts = path_parts[1:] + base_parts = base_parts[1:] + rel_parts = ['..'] * len(base_parts) + path_parts + return '/'.join(rel_parts) + + def FilenameToRelative(self, filepath): + """Returns a relative path from CWD to filepath.""" + filepath = self.pathobj.realpath(filepath) + basepath = self.cwd + return self.RealToRelative(filepath, basepath) + + def FindFile(self, filename): + """Search for <filename> across the search directories, if the path is not + absolute. Return the filepath relative to the CWD or None. """ + if self.pathobj.isabs(filename): + if self.pathobj.exists(filename): + return self.FilenameToRelative(filename) + return None + for pathname in self.search_dirs: + fullname = '%s/%s' % (pathname, filename) + if self.pathobj.exists(fullname): + return self.FilenameToRelative(fullname) + return None + + +def LoadFile(filename): + # Catch cases where the file does not exist + try: + fd = PathConverter().open(filename) + except IOError: + DebugPrint('Exception on file: %s' % filename) + return '' + # Go ahead and throw if you fail to read + return fd.read() + + +class Scanner(object): + """Scanner searches for '#include' to find dependencies.""" + + def __init__(self, loader=None): + regex = r'\#[ \t]*include[ \t]*[<"]([^>^"]+)[>"]' + self.parser = re.compile(regex) + self.loader = loader + if not loader: + self.loader = LoadFile + + def ScanData(self, data): + """Generate a list of includes from this text block.""" + return self.parser.findall(data) + + def ScanFile(self, filename): + """Generate a list of includes from this filename.""" + includes = self.ScanData(self.loader(filename)) + DebugPrint('Source %s contains:\n\t%s' % (filename, '\n\t'.join(includes))) + return includes + + +class WorkQueue(object): + """WorkQueue contains the list of files to be scanned. + + WorkQueue contains provides a queue of files to be processed. The scanner + will attempt to push new items into the queue, which will be ignored if the + item is already in the queue. If the item is new, it will be added to the + work list, which is drained by the scanner. + """ + def __init__(self, resolver, scanner=Scanner()): + self.added_set = set() + self.todo_list = list() + self.scanner = scanner + self.resolver = resolver + + def PushIfNew(self, filename): + """Add this dependency to the list of not already there.""" + DebugPrint('Adding %s' % filename) + resolved_name = self.resolver.FindFile(filename) + if not resolved_name: + DebugPrint('Failed to resolve %s' % filename) + return + DebugPrint('Resolvd as %s' % resolved_name) + if resolved_name in self.added_set: + return + self.todo_list.append(resolved_name) + self.added_set.add(resolved_name) + + def PopIfAvail(self): + """Fetch the next dependency to search.""" + if not self.todo_list: + return None + return self.todo_list.pop() + + def Run(self): + """Search through the available dependencies until the list becomes empty. + The list must be primed with one or more source files to search.""" + scan_name = self.PopIfAvail() + while scan_name: + includes = self.scanner.ScanFile(scan_name) + for include_file in includes: + self.PushIfNew(include_file) + scan_name = self.PopIfAvail() + return sorted(self.added_set) + + +def Main(argv): + global debug + parser = OptionParser() + parser.add_option('-I', dest='includes', action='append', + help='Set include path.') + parser.add_option('-D', dest='debug', action='store_true', + help='Enable debugging output.', default=False) + (options, files) = parser.parse_args(argv[1:]) + + if options.debug: + debug = Trueglobal_var_name, + + resolver = Resolver() + if options.includes: + if not resolver.AddDirectories(options.includes): + return -1 + + workQ = WorkQueue(resolver) + for filename in files: + workQ.PushIfNew(filename) + + sorted_list = workQ.Run() + for pathname in sorted_list: + sys.stderr.write(pathname + '\n') + return 0 + + +if __name__ == '__main__': + sys.exit(Main(sys.argv)) + diff --git a/chrome/nacl.gypi b/chrome/nacl.gypi index 025de62..0e717b8 100644 --- a/chrome/nacl.gypi +++ b/chrome/nacl.gypi @@ -3,9 +3,6 @@ # found in the LICENSE file. { - 'includes': [ - '../native_client/build/untrusted.gypi', - ], 'target_defaults': { 'variables': { 'nacl_target': 0, @@ -65,15 +62,16 @@ 'type': 'static_library', 'variables': { 'nacl_target': 1, - }, + 'irt_build_cmd': [ + 'python', 'build_nacl_irt.py', '--outdir', '<(PRODUCT_DIR)', + ], + 'irt_inputs_cmd': + 'python build_nacl_irt.py --inputs', + }, 'dependencies': [ - # TODO(gregoryd): chrome_resources and chrome_strings could be - # shared with the 64-bit target, but it does not work due to a gyp - # issue 'chrome_resources', 'chrome_strings', 'common', - '../ppapi/native_client/native_client.gyp:nacl_irt', '../webkit/support/webkit_support.gyp:glue', '../ppapi/native_client/src/trusted/plugin/plugin.gyp:ppGoogleNaClPluginChrome', '../native_client/src/trusted/service_runtime/service_runtime.gyp:sel', @@ -86,6 +84,74 @@ '<@(nacl_defines)', ], }, + 'conditions': [ + ['OS=="win"', { + # Windows needs both the x86-32 and x86-64 IRT. + 'actions': [ + { + 'action_name': 'nacl_irt', + 'message': 'Building NaCl IRT', + 'inputs': [ + '<!@(<(irt_inputs_cmd) --platform=x86-32 --platform=x86-64)', + ], + 'outputs': ['<(PRODUCT_DIR)/nacl_irt_x86_32.nexe', + '<(PRODUCT_DIR)/nacl_irt_x86_64.nexe'], + 'action': [ + '<@(irt_build_cmd)', + '--platform', 'x86-32', + '--platform', 'x86-64', + ], + }, + ], + }], + ['OS!="win" and target_arch=="ia32"', { + # Linux-x86-32 and OSX need only the x86-32 IRT. + 'actions': [ + { + 'action_name': 'nacl_irt', + 'message': 'Building NaCl IRT', + 'inputs': [ + '<!@(<(irt_inputs_cmd) --platform=x86-32)', + ], + 'outputs': ['<(PRODUCT_DIR)/nacl_irt_x86_32.nexe'], + 'action': [ + '<@(irt_build_cmd)', '--platform', 'x86-32', + ], + }, + ], + }], + ['OS!="win" and target_arch=="x64"', { + # Linux-x86-64 needs only the x86-64 IRT. + 'actions': [ + { + 'action_name': 'nacl_irt', + 'message': 'Building NaCl IRT', + 'inputs': [ + '<!@(<(irt_inputs_cmd) --platform=x86-64)', + ], + 'outputs': ['<(PRODUCT_DIR)/nacl_irt_x86_64.nexe'], + 'action': [ + '<@(irt_build_cmd)', '--platform', 'x86-64', + ], + }, + ], + }], + ['OS!="win" and target_arch=="arm"', { + 'actions': [ + { + 'action_name': 'nacl_irt', + 'message': 'Building NaCl IRT', + 'inputs': [ + '<!@(<(irt_inputs_cmd) --platform=arm)', + ], + 'outputs': ['<(PRODUCT_DIR)/nacl_irt_arm.nexe'], + 'action': [ + '<@(irt_build_cmd)', '--platform', 'arm', + ], + }, + ], + }], + ], }, ], 'conditions': [ diff --git a/ppapi/native_client/native_client.gyp b/ppapi/native_client/native_client.gyp deleted file mode 100644 index fa51ee2..0000000 --- a/ppapi/native_client/native_client.gyp +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (c) 2011 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. - -{ - 'includes': [ - '../../native_client/build/untrusted.gypi', - ], - 'conditions': [ - ['disable_nacl!=1', { - 'targets': [ - { - 'target_name': 'nacl_irt', - 'type': 'none', - 'variables': { - 'nexe_target': 'nacl_irt', - 'out64': '<(PRODUCT_DIR)/nacl_irt_x86_64.nexe', - 'out32': '<(PRODUCT_DIR)/nacl_irt_x86_32.nexe', - 'build_glibc': 0, - 'build_newlib': 1, - 'include_dirs': [ - 'lib/gl/include', - '..', - ], - 'link_flags': [ - '-lirt_browser', - '-lppruntime', - '-lsrpc', - '-limc_syscalls', - '-lplatform', - '-lgio', - '-lm', - ], - 'sources': [ - ], - }, - 'conditions': [ - ['target_arch=="x64" or target_arch == "ia32"', { - 'variables': { - 'link_flags': [ - '-Wl,--section-start,.rodata=0x3ef00000', - '-Wl,-Ttext-segment=0x0fc00000', - ], - }, - }], - ], - 'dependencies': [ - 'src/shared/ppapi_proxy/ppapi_proxy.gyp:ppruntime_lib', - '../../native_client/src/untrusted/irt/irt.gyp:irt_browser_lib', - '../../native_client/src/shared/srpc/srpc.gyp:srpc_lib', - '../../native_client/src/shared/platform/platform.gyp:platform_lib', - '../../native_client/src/untrusted/nacl/nacl.gyp:imc_syscalls_lib', - '../../native_client/src/shared/gio/gio.gyp:gio_lib', - ], - }, - ], - }], - ], -} diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp index 26ff85e..b071b0a 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy.gyp @@ -68,99 +68,5 @@ '<(DEPTH)/ppapi/ppapi.gyp:ppapi_c', ], }, - { - 'target_name': 'ppruntime_lib', - 'type': 'none', - 'dependencies': [ - '<(DEPTH)/native_client/tools.gyp:prep_toolchain' - ], - 'variables': { - 'nlib_target': 'libppruntime.a', - 'build_glibc': 0, - 'build_newlib': 1, - 'include_dirs': [ - '<(DEPTH)/gpu', - '<(DEPTH)/ppapi/native_client/src/shared/ppapi_proxy/untrusted', - ], - 'sources': [ - '<(DEPTH)/gpu/command_buffer/common/cmd_buffer_common.cc', - '<(DEPTH)/gpu/command_buffer/common/gles2_cmd_format.cc', - '<(DEPTH)/gpu/command_buffer/common/gles2_cmd_utils.cc', - '<(DEPTH)/gpu/command_buffer/common/logging.cc', - - '<(DEPTH)/gpu/command_buffer/client/cmd_buffer_helper.cc', - '<(DEPTH)/gpu/command_buffer/client/fenced_allocator.cc', - '<(DEPTH)/gpu/command_buffer/client/gles2_c_lib.cc', - '<(DEPTH)/gpu/command_buffer/client/gles2_cmd_helper.cc', - '<(DEPTH)/gpu/command_buffer/client/gles2_implementation.cc', - '<(DEPTH)/gpu/command_buffer/client/program_info_manager.cc', - '<(DEPTH)/gpu/command_buffer/client/gles2_lib.cc', - '<(DEPTH)/gpu/command_buffer/client/mapped_memory.cc', - '<(DEPTH)/gpu/command_buffer/client/ring_buffer.cc', - '<(DEPTH)/gpu/command_buffer/common/id_allocator.cc', - - 'command_buffer_nacl.cc', - 'input_event_data.cc', - 'object_serialize.cc', - 'plugin_callback.cc', - 'plugin_globals.cc', - 'plugin_instance_data.cc', - 'plugin_main.cc', - 'plugin_nacl_file.cc', - 'plugin_opengles.cc', - 'plugin_ppb.cc', - 'plugin_ppb_audio.cc', - 'plugin_ppb_audio_config.cc', - 'plugin_ppb_buffer.cc', - 'plugin_ppb_core.cc', - 'plugin_ppb_cursor_control.cc', - 'plugin_ppb_file_io.cc', - 'plugin_ppb_file_system.cc', - 'plugin_ppb_file_ref.cc', - 'plugin_ppb_find.cc', - 'plugin_ppb_font.cc', - 'plugin_ppb_fullscreen.cc', - 'plugin_ppb_graphics_2d.cc', - 'plugin_ppb_graphics_3d.cc', - 'plugin_ppb_image_data.cc', - 'plugin_ppb_input_event.cc', - 'plugin_ppb_instance.cc', - 'plugin_ppb_memory.cc', - 'plugin_ppb_messaging.cc', - 'plugin_ppb_mouse_lock.cc', - 'plugin_ppb_pdf.cc', - 'plugin_ppb_scrollbar.cc', - 'plugin_ppb_testing.cc', - 'plugin_ppb_url_loader.cc', - 'plugin_ppb_url_request_info.cc', - 'plugin_ppb_url_response_info.cc', - 'plugin_ppb_var.cc', - 'plugin_ppb_widget.cc', - 'plugin_ppb_zoom.cc', - 'plugin_ppp_find_rpc_server.cc', - 'plugin_ppp_input_event_rpc_server.cc', - 'plugin_ppp_instance_rpc_server.cc', - 'plugin_ppp_messaging_rpc_server.cc', - 'plugin_ppp_mouse_lock_rpc_server.cc', - 'plugin_ppp_printing_rpc_server.cc', - 'plugin_ppp_scrollbar_rpc_server.cc', - 'plugin_ppp_selection_rpc_server.cc', - 'plugin_ppp_widget_rpc_server.cc', - 'plugin_ppp_zoom_rpc_server.cc', - 'plugin_ppp_rpc_server.cc', - 'plugin_resource.cc', - 'plugin_resource_tracker.cc', - 'plugin_threading.cc', - 'plugin_upcall.cc', - 'proxy_var.cc', - 'proxy_var_cache.cc', - 'utility.cc', - # Autogenerated files - 'ppp_rpc_server.cc', - 'ppb_rpc_client.cc', - 'upcall_client.cc' - ], - }, - }, ], } diff --git a/ppapi/ppapi_tests.gypi b/ppapi/ppapi_tests.gypi index c2de235..352cfd1 100644 --- a/ppapi/ppapi_tests.gypi +++ b/ppapi/ppapi_tests.gypi @@ -261,82 +261,6 @@ ], 'conditions': [ - ['disable_nacl!=1', { - 'targets': [ - { - 'target_name': 'ppapi_nacl_tests', - 'type': 'none', - 'dependencies': [ - 'native_client/native_client.gyp:nacl_irt', - ], - 'variables': { - 'nexe_target': 'ppapi_nacl_tests', - 'build_glibc': 0, - 'build_newlib': 1, - 'include_dirs': [ - 'lib/gl/include', - '..', - ], - 'sources': [ - # Common test files - 'tests/test_case.cc', - 'tests/test_utils.cc', - 'tests/testing_instance.cc', - - # Compile-time tests - 'tests/test_c_includes.c', - 'tests/test_cpp_includes.cc', - 'tests/test_struct_sizes.c', - - # Test cases (PLEASE KEEP THIS SECTION IN ALPHABETICAL ORDER) - # Add/uncomment PPAPI interfaces below when they get proxied. - # Not yet proxied. - #'test_broker.cc', - # Not yet proxied. - #'test_buffer.cc', - # Not yet proxied. - #'test_char_set.cc', - 'tests/test_cursor_control.cc', - # Fails in DeleteDirectoryRecursively. - # BUG: http://code.google.com/p/nativeclient/issues/detail?id=2107 - #'test_directory_reader.cc', - 'tests/test_file_io.cc', - 'tests/test_file_ref.cc', - 'tests/test_file_system.cc', - 'tests/test_memory.cc', - 'tests/test_graphics_2d.cc', - 'tests/test_image_data.cc', - 'tests/test_paint_aggregator.cc', - # test_post_message.cc relies on synchronous scripting, which is not - # available for untrusted tests. - # Does not compile under nacl (uses private interface ExecuteScript). - #'test_post_message.cc', - 'tests/test_scrollbar.cc', - # Not yet proxied. - #'tests/test_transport.cc', - # Not yet proxied. - #'tests/test_uma.cc', - # Activating the URL loader test requires a test httpd that - # understands HTTP POST, which our current httpd.py doesn't. - # It also requires deactivating the tests that use FileIOTrusted - # when running in NaCl. - #'tests/test_url_loader.cc', - # Does not compile under nacl (uses VarPrivate). - #'test_url_util.cc', - # Not yet proxied. - #'test_video_decoder.cc', - 'tests/test_var.cc', - - # Deprecated test cases. - #'tests/test_instance_deprecated.cc', - # Var_deprecated fails in TestPassReference, and we probably won't - # fix it. - #'tests/test_var_deprecated.cc' - ], - }, - }, - ], - }], # NOTE: the PPAPI examples fail to build on mac & windows. # http://code.google.com/p/chromium/issues/detail?id=54005 tracks mac. ['OS!="mac"', { |