diff options
Diffstat (limited to 'o3d/plugin')
-rw-r--r-- | o3d/plugin/cross/main.h | 8 | ||||
-rw-r--r-- | o3d/plugin/idl/codegen.py | 2 | ||||
-rw-r--r-- | o3d/plugin/idl/idl.gyp | 21 | ||||
-rw-r--r-- | o3d/plugin/plugin.gyp | 251 | ||||
-rw-r--r-- | o3d/plugin/version_info.py | 2 |
5 files changed, 225 insertions, 59 deletions
diff --git a/o3d/plugin/cross/main.h b/o3d/plugin/cross/main.h index 049c688..5d77d59 100644 --- a/o3d/plugin/cross/main.h +++ b/o3d/plugin/cross/main.h @@ -55,16 +55,16 @@ #include "third_party/nixysa/static_glue/npapi/common.h" #include "third_party/nixysa/static_glue/npapi/npn_api.h" -#if defined(O3D_INTERNAL_PLUGIN) -#define HANDLE_CRASHES void(0) -#else // O3D_INTERNAL_PLUGIN - #if defined(OS_LINUX) #define EXPORT_SYMBOL __attribute__((visibility ("default"))) #else #define EXPORT_SYMBOL #endif +#if defined(O3D_INTERNAL_PLUGIN) +#define HANDLE_CRASHES void(0) +#else // O3D_INTERNAL_PLUGIN + extern ExceptionManager *g_exception_manager; // BreakpadEnabler is a simple class to keep track of whether or not diff --git a/o3d/plugin/idl/codegen.py b/o3d/plugin/idl/codegen.py index 7494c21..d82d7ab 100644 --- a/o3d/plugin/idl/codegen.py +++ b/o3d/plugin/idl/codegen.py @@ -22,7 +22,7 @@ import os script_dir = os.path.join(os.path.dirname(__file__)) third_party = os.path.normpath( - os.path.join(script_dir, '..', '..', '..', 'third_party')) + os.path.join(script_dir, '..', '..', 'third_party')) pythonpath = os.pathsep.join([os.path.join(third_party, 'gflags', 'python'), os.path.join(third_party, 'ply')]) diff --git a/o3d/plugin/idl/idl.gyp b/o3d/plugin/idl/idl.gyp index 7a393ae..1e710c1 100644 --- a/o3d/plugin/idl/idl.gyp +++ b/o3d/plugin/idl/idl.gyp @@ -9,7 +9,7 @@ 'variables': { 'chromium_code': 0, 'idl_out_path': '<(SHARED_INTERMEDIATE_DIR)/idl_glue', - 'static_glue_dir': '../../../third_party/nixysa/static_glue/npapi', + 'static_glue_dir': '../../../<(nixysadir)/static_glue/npapi', 'idl_files': [ 'archive_request.idl', 'bitmap.idl', @@ -117,6 +117,18 @@ }, 'targets': [ { + # This target is only used when we're not built as part of Chrome, + # since chrome has its own implementation of the NPAPI from webkit. + 'target_name': 'o3dNpnApi', + 'type': 'static_library', + 'include_dirs': [ + '../../../<(npapidir)/include', + ], + 'sources': [ + '<(static_glue_dir)/npn_api.cc', + ], + }, + { 'target_name': 'o3dPluginIdl', 'type': 'static_library', 'dependencies': [ @@ -136,14 +148,10 @@ 'action_name': 'generate_idl', 'process_outputs_as_sources': 1, 'inputs': [ - '../../../<(nixysadir)/codegen.py', - 'codegen.py', '<@(idl_files)', ], 'outputs': [ - # TODO(bradnelson): fix gyp to be able to handle outputs without - # and extension on linux. - #'<(idl_out_path)/hash', + '<(idl_out_path)/hash', '<(idl_out_path)/globals_glue.cc', '<(idl_out_path)/globals_glue.h', '<!@(python idl_filenames.py \'<(idl_out_path)\' <@(idl_files))', @@ -165,7 +173,6 @@ '../cross/o3d_glue.cc', '../cross/o3d_glue.h', '<(static_glue_dir)/common.cc', - '<(static_glue_dir)/npn_api.cc', '<(static_glue_dir)/static_object.cc', ], }, diff --git a/o3d/plugin/plugin.gyp b/o3d/plugin/plugin.gyp index 3c0effb..495e8b8 100644 --- a/o3d/plugin/plugin.gyp +++ b/o3d/plugin/plugin.gyp @@ -2,9 +2,59 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +# PLEASE NOTE: This file contains the targets for generating the +# plugin two different ways -- once as a shared library, and once as a +# static library. The static library is only built if we are inside +# of a Chrome tree, and it gets built with different defined symbols, +# and without the packaging code on the Mac. The shared library gets +# built in an o3d tree, or in a chrome tree when built by an o3d +# developer (someone who has added the .gclient stanza to include +# DEPS_chrome). This results in having two targets in this file which +# are largely identical, but still significantly different. +# +# Please be sure and synchronize these two targets so that we can +# continue to build both the standalone plugin and the Chrome-embedded +# plugin. + { 'variables': { 'chromium_code': 1, + 'plugin_sources': [ + 'cross/async_loading.cc', + 'cross/async_loading.h', + 'cross/blacklist.cc', + 'cross/config.h', + 'cross/config_common.cc', + 'cross/download_stream.h', + 'cross/main.cc', + 'cross/main.h', + 'cross/main_thread_task_poster.cc', + 'cross/main_thread_task_poster.h', + 'cross/marshaling_utils.h', + 'cross/np_v8_bridge.cc', + 'cross/np_v8_bridge.h', + 'cross/out_of_memory.cc', + 'cross/out_of_memory.h', + 'cross/plugin_logging.h', + 'cross/plugin_main.h', + 'cross/stream_manager.cc', + 'cross/stream_manager.h', + 'cross/texture_static_glue.cc', + ], + 'plugin_depends': [ + '../../<(jpegdir)/libjpeg.gyp:libjpeg', + '../../<(pngdir)/libpng.gyp:libpng', + '../../<(zlibdir)/zlib.gyp:zlib', + '../../base/base.gyp:base', + '../../skia/skia.gyp:skia', + '../../v8/tools/gyp/v8.gyp:v8', + '../core/core.gyp:o3dCore', + '../core/core.gyp:o3dCorePlatform', + '../import/archive.gyp:o3dArchive', + '../utils/utils.gyp:o3dUtils', + '../../native_client/src/shared/imc/imc.gyp:google_nacl_imc', + 'idl/idl.gyp:o3dPluginIdl', + ], }, 'includes': [ '../build/common.gypi', @@ -24,43 +74,15 @@ }, 'targets': [ { + # This is the shared library version of the plugin. 'target_name': 'npo3dautoplugin', - 'type': '<(o3d_main_lib_type)', + 'type': 'loadable_module', 'dependencies': [ - '../../<(jpegdir)/libjpeg.gyp:libjpeg', - '../../<(pngdir)/libpng.gyp:libpng', - '../../<(zlibdir)/zlib.gyp:zlib', - '../../base/base.gyp:base', - '../../skia/skia.gyp:skia', - '../../v8/tools/gyp/v8.gyp:v8', - '../core/core.gyp:o3dCore', - '../core/core.gyp:o3dCorePlatform', - '../import/archive.gyp:o3dArchive', - '../utils/utils.gyp:o3dUtils', - '../../native_client/src/shared/imc/imc.gyp:google_nacl_imc', - 'idl/idl.gyp:o3dPluginIdl', + '<@(plugin_depends)', + 'idl/idl.gyp:o3dNpnApi', ], 'sources': [ - 'cross/async_loading.cc', - 'cross/async_loading.h', - 'cross/blacklist.cc', - 'cross/config.h', - 'cross/config_common.cc', - 'cross/download_stream.h', - 'cross/main.cc', - 'cross/main.h', - 'cross/main_thread_task_poster.cc', - 'cross/main_thread_task_poster.h', - 'cross/marshaling_utils.h', - 'cross/np_v8_bridge.cc', - 'cross/np_v8_bridge.h', - 'cross/out_of_memory.cc', - 'cross/out_of_memory.h', - 'cross/plugin_logging.h', - 'cross/plugin_main.h', - 'cross/stream_manager.cc', - 'cross/stream_manager.h', - 'cross/texture_static_glue.cc', + '<@(plugin_sources)', ], 'conditions' : [ ['OS != "linux"', @@ -239,19 +261,156 @@ 'conditions': [ ['o3d_in_chrome == "True"', { - 'variables': { - 'o3d_main_lib_type': 'static_library', - }, - 'target_defaults': { - 'defines': [ - 'O3D_INTERNAL_PLUGIN=1', - ], - }, - }, - { - 'variables': { - 'o3d_main_lib_type': 'loadable_module', - }, + # Only use the "static_library" plugin target if we're + # building in a chrome tree, since we don't need it in an O3D + # tree. + 'targets': [ + { + 'target_name': 'o3dPlugin', + 'type': 'static_library', + 'dependencies': [ + '<@(plugin_depends)', + ], + 'sources': [ + '<@(plugin_sources)', + ], + 'defines':['O3D_INTERNAL_PLUGIN=1'], + 'conditions' : [ + ['OS != "linux"', + { + 'dependencies': [ + '../statsreport/statsreport.gyp:o3dStatsReport', + 'add_version', + 'o3dPluginLogging', + ], + }, + ], + ['renderer == "gl"', + { + 'dependencies': [ + '../build/libs.gyp:gl_libs', + '../build/libs.gyp:cg_libs', + ], + }, + ], + ['OS == "mac"', + { + 'mac_bundle': 1, + 'product_extension': 'plugin', + 'product_name': 'O3D', + 'dependencies': [ + '../../breakpad/breakpad.gyp:breakpad', + ], + 'xcode_settings': { + 'INFOPLIST_FILE': '<(SHARED_INTERMEDIATE_DIR)/plugin/Info.plist', + }, + 'mac_bundle_resources': [ + 'mac/Resources/English.lproj', + ], + 'sources': [ + 'mac/config_mac.mm', + 'mac/main_mac.mm', + 'mac/o3d_plugin.r', + 'mac/plugin_logging-mac.mm', + 'mac/plugin_mac.h', + 'mac/plugin_mac.mm', + 'mac/graphics_utils_mac.mm', + ], + 'mac_framework_dirs': [ + '../../<(cgdir)', + ], + 'include_dirs': [ + '../../breakpad/src/client/mac/Framework', + ], + 'defines': [ + 'XP_MACOSX=1', + ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Cocoa.framework', + '$(SDKROOT)/System/Library/Frameworks/Carbon.framework', + '$(SDKROOT)/System/Library/Frameworks/AGL.framework', + '$(SDKROOT)/System/Library/Frameworks/Foundation.framework', + '$(SDKROOT)/System/Library/Frameworks/IOKit.framework', + '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework', + '$(SDKROOT)/System/Library/Frameworks/QuickTime.framework', + 'libbreakpad.a', + 'libbreakpad_utilities.a', + '../../third_party/cg/files/mac/Cg.framework', + '../../third_party/glew/files/lib/libMacStaticGLEW.a', + ], + }, + }, + ], + ['OS == "linux"', + { + 'sources': [ + 'linux/main_linux.cc', + 'linux/config.cc', + ], + 'link_settings': { + 'libraries': [ + '-lGL', + ], + }, + # On Linux, shared library targets aren't copied to the + # product dir automatically. Filed GYP issue #74 to address this. + # TODO(gspencer): Remove when issue #74 is resolved. + 'copies': [ + { + 'destination': '<(PRODUCT_DIR)', + 'files': [ + '<(PRODUCT_DIR)/obj/o3d/plugin/<(LIBRARY_PREFIX)<(_target_name)<(SHARED_LIB_SUFFIX)', + ], + }, + ], + }, + ], + ['OS == "win"', + { + 'dependencies': [ + '../breakpad/breakpad.gyp:o3dBreakpad', + ], + 'sources': [ + 'win/config.cc', + 'win/logger_main.cc', + 'win/main_win.cc', + 'win/o3dPlugin.def', + 'win/o3dPlugin.rc', + 'win/plugin_logging-win32.cc', + 'win/resource.h', + 'win/update_lock.cc', + 'win/update_lock.h', + ], + 'link_settings': { + 'libraries': [ + '-lrpcrt4.lib', + ], + }, + }, + ], + ['OS == "win" and renderer == "d3d9"', + { + 'link_settings': { + 'libraries': [ + '"$(DXSDK_DIR)/Lib/x86/d3dx9.lib"', + '-ld3d9.lib', + ], + }, + }, + ], + ['OS == "win" and (renderer == "d3d9" or cb_service == "d3d9")', + { + 'link_settings': { + 'libraries': [ + '"$(DXSDK_DIR)/Lib/x86/DxErr.lib"', + ], + }, + }, + ], + ], + }, + ], }, ], ['OS != "linux"', diff --git a/o3d/plugin/version_info.py b/o3d/plugin/version_info.py index 5424cf4..cf908ce 100644 --- a/o3d/plugin/version_info.py +++ b/o3d/plugin/version_info.py @@ -22,7 +22,7 @@ import sys script_dir = os.path.join(os.path.dirname(sys.argv[0])) gflags_dir = os.path.normpath( - os.path.join(script_dir, '..', '..', 'third_party', 'gflags', 'python')) + os.path.join(script_dir, '..', 'third_party', 'gflags', 'python')) sys.path.append(gflags_dir) import gflags |