pulsar/atom.gyp
Adam Roben a3c48df25b Move all code and resources into Atom.framework
All our native code now gets built into Atom.framework. Atom.app and
Atom Helper.app both link against this framework. All resources other
than a couple of main-bundle-only ones (e.g., atom.icns) go into
Atom.framework.

Note that this means that there's no compile- or link-time separation
between main process code and helper process code. We could introduce a
compile-time separation by building main process and helper process code
into separate static libraries with mutually exclusive include paths, if
we want.

Atom.framework exports a single symbol: AtomMain(). Atom.app and Atom
Helper.app contain a single source file: main.cpp. main() just calls
AtomMain().

All frameworks are placed in Atom.app/Contents/Frameworks. We now link
against all frameworks using @rpath-based install names, which allows
Atom.app and Atom Helper.app to find them automatically based on their
own LD_RUNPATH_SEARCH_PATH settings. We use install_name_tool at build
time on each of our three binaries (Atom.app, Atom Helper.app,
Atom.framework) to set the install names.

By reducing duplication of code and resources between Atom.app and Atom
Helper.app (and the EH/NP copies of Atom Helper.app), this reduces the
size of the total installed Atom.app bundle from 145MB to 82MB. By
compiling .coffee and .cson files only once, clean build time drops from
114 seconds to 79 seconds on my MacBook Pro.
2013-03-01 16:35:42 -05:00

376 lines
12 KiB
Python

{
'variables': {
'pkg-config': 'pkg-config',
'chromium_code': 1,
'use_aura%': 0,
'conditions': [
['OS=="win"', {
'os_posix': 0,
}, {
'os_posix': 1,
}],
# Set toolkit_uses_gtk for the Chromium browser on Linux.
['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris") and use_aura==0', {
'toolkit_uses_gtk%': 1,
}, {
'toolkit_uses_gtk%': 0,
}],
],
'fix_framework_link_command': [
'install_name_tool',
'-change',
'@executable_path/libcef.dylib',
'@rpath/Chromium Embedded Framework.framework/Libraries/libcef.dylib',
'-change',
'@executable_path/../Frameworks/CocoaOniguruma.framework/Versions/A/CocoaOniguruma',
'@rpath/CocoaOniguruma.framework/Versions/A/CocoaOniguruma',
'-change',
'@loader_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle',
'@rpath/Sparkle.framework/Versions/A/Sparkle',
'-change',
'@executable_path/libgit2.0.17.0.dylib',
'@rpath/libgit2.framework/Libraries/libgit2.0.17.0.dylib',
'${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}'
],
},
'includes': [
'cef/cef_paths2.gypi',
'git2/libgit2.gypi',
],
'target_defaults': {
'default_configuration': 'Debug',
'configurations': {
'Debug': {
'defines': ['DEBUG=1'],
'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL' : '0' },
},
'Release': {
},
},
'xcode_settings': {
'CLANG_CXX_LANGUAGE_STANDARD' : 'c++0x',
'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0',
'COMBINE_HIDPI_IMAGES': 'YES', # Removes 'Validate Project Settings' warning
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES' # Removes 'Reference to global weak symbol vtable' warning
},
},
'targets': [
{
'target_name': 'Atom',
'type': 'executable',
'mac_bundle': 1,
'msvs_guid': 'D22C6F51-AA2D-457C-B579-6C97A96C724D',
'dependencies': [
'atom_framework',
],
'mac_framework_dirs': [ 'native/frameworks' ],
'sources': [
'native/main.cpp',
],
'mac_bundle_resources': [
'native/mac/atom.icns',
'native/mac/file.icns',
'native/mac/speakeasy.pem',
],
'xcode_settings': {
'INFOPLIST_FILE': 'native/mac/info.plist',
'LD_RUNPATH_SEARCH_PATHS': '@executable_path/../Frameworks',
},
'conditions': [
['CODE_SIGN' , {
'xcode_settings': {'CODE_SIGN_IDENTITY': "<(CODE_SIGN)"},
}],
['OS=="win" and win_use_allocator_shim==1', {
'dependencies': [
'<(DEPTH)/base/allocator/allocator.gyp:allocator',
],
}],
['OS=="win"', {
'configurations': {
'Debug_Base': {
'msvs_settings': {
'VCLinkerTool': {
'LinkIncremental': '<(msvs_large_module_debug_link_mode)',
},
},
},
},
'msvs_settings': {
'VCLinkerTool': {
# Set /SUBSYSTEM:WINDOWS.
'SubSystem': '2',
'EntryPointSymbol' : 'wWinMainCRTStartup',
},
},
'link_settings': {
'libraries': [
'-lcomctl32.lib',
'-lshlwapi.lib',
'-lrpcrt4.lib',
],
},
'sources': [
'<@(includes_win)',
],
}],
['OS == "win" or (toolkit_uses_gtk == 1 and selinux == 0)', {
'dependencies': [
'<(DEPTH)/sandbox/sandbox.gyp:sandbox',
],
}],
['toolkit_uses_gtk == 1', {
'dependencies': [
'<(DEPTH)/build/linux/system.gyp:gtk',
],
}],
[ 'OS=="mac"', {
'product_name': 'Atom',
'dependencies': [
'AtomHelperApp',
],
'copies': [
{
'destination': '<(PRODUCT_DIR)/Atom.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/',
'files': [
'cef/Release/libcef.dylib',
'cef/Release/ffmpegsumo.so',
],
},
{
'destination': '<(PRODUCT_DIR)/Atom.app/Contents/Frameworks',
'files': [
'<(PRODUCT_DIR)/Atom.framework',
'native/frameworks/CocoaOniguruma.framework',
'native/frameworks/Sparkle.framework',
],
},
{
'destination': '<(PRODUCT_DIR)/Atom.app/Contents/Frameworks/libgit2.framework/Libraries',
'files': [
'git2/frameworks/libgit2.0.17.0.dylib',
],
},
],
'postbuilds': [
{
'postbuild_name': 'Copy Helper App',
'action': [
'cp',
'-r',
'${BUILT_PRODUCTS_DIR}/Atom Helper.app',
'${BUILT_PRODUCTS_DIR}/Atom.app/Contents/Frameworks',
],
},
{
'postbuild_name': 'Fix Framework Link',
'action': [
'<@(fix_framework_link_command)',
],
},
{
'postbuild_name': 'Copy Framework Resources Directory',
'action': [
'cp',
'-r',
'cef/Resources',
'${BUILT_PRODUCTS_DIR}/Atom.app/Contents/Frameworks/Chromium Embedded Framework.framework/'
],
},
{
# This postbuid step is responsible for creating the following
# helpers:
#
# Atom Helper EH.app and Atom Helper NP.app are created
# from Atom Helper.app.
#
# The EH helper is marked for an executable heap. The NP helper
# is marked for no PIE (ASLR).
'postbuild_name': 'Make More Helpers',
'action': [
'tools/mac/make_more_helpers.sh',
'Frameworks',
'Atom',
],
},
],
'link_settings': {
'libraries': [
'$(SDKROOT)/System/Library/Frameworks/AppKit.framework',
],
},
'sources': [
'cef/include/cef_application_mac.h',
'cef/include/internal/cef_mac.h',
'cef/include/internal/cef_types_mac.h',
],
}],
[ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', {
'sources': [
'<@(includes_linux)',
],
'copies': [
{
'destination': '<(PRODUCT_DIR)/files',
'files': [
'<@(cefclient_bundle_resources_linux)',
],
},
],
}],
],
},
{
'target_name': 'atom_framework',
'product_name': 'Atom',
'type': 'shared_library',
'mac_bundle': 1,
'dependencies': [
'libcef_dll_wrapper',
],
'defines': [
'USING_CEF_SHARED',
],
'xcode_settings': {
'INFOPLIST_FILE': 'native/mac/framework-info.plist',
'LD_DYLIB_INSTALL_NAME': '@rpath/Atom.framework/Atom',
},
'include_dirs': [ '.', 'cef', 'git2' ],
'mac_framework_dirs': [ 'native/frameworks' ],
'sources': [
'<@(includes_common)',
'<@(includes_wrapper)',
'native/atom_application.h',
'native/atom_application.mm',
'native/atom_cef_app.h',
'native/atom_cef_app.h',
'native/atom_cef_client.cpp',
'native/atom_cef_client.h',
'native/atom_cef_client_mac.mm',
'native/atom_cef_render_process_handler.h',
'native/atom_cef_render_process_handler.mm',
'native/atom_window_controller.h',
'native/atom_window_controller.mm',
'native/atom_main.h',
'native/atom_main_mac.mm',
'native/message_translation.cpp',
'native/message_translation.cpp',
'native/message_translation.h',
'native/message_translation.h',
'native/path_watcher.h',
'native/path_watcher.mm',
'native/v8_extensions/atom.h',
'native/v8_extensions/atom.mm',
'native/v8_extensions/git.h',
'native/v8_extensions/git.mm',
'native/v8_extensions/native.h',
'native/v8_extensions/native.mm',
'native/v8_extensions/onig_reg_exp.h',
'native/v8_extensions/onig_reg_exp.mm',
'native/v8_extensions/onig_scanner.h',
'native/v8_extensions/onig_scanner.mm',
'native/v8_extensions/readtags.c',
'native/v8_extensions/readtags.h',
'native/v8_extensions/tags.h',
'native/v8_extensions/tags.mm',
],
'link_settings': {
'libraries': [
'$(SDKROOT)/System/Library/Frameworks/AppKit.framework',
'git2/frameworks/libgit2.0.17.0.dylib',
'native/frameworks/CocoaOniguruma.framework',
'native/frameworks/Sparkle.framework',
],
},
'mac_bundle_resources': [
'native/mac/English.lproj/AtomWindow.xib',
'native/mac/English.lproj/MainMenu.xib',
],
'postbuilds': [
{
'postbuild_name': 'Copy and Compile Static Files',
'action': [
'script/copy-files-to-bundle'
],
},
{
'postbuild_name': 'Fix Framework Link',
'action': [
'<@(fix_framework_link_command)',
],
},
],
},
{
'target_name': 'libcef_dll_wrapper',
'type': 'static_library',
'msvs_guid': 'A9D6DC71-C0DC-4549-AEA0-3B15B44E86A9',
'dependencies': [
],
'defines': [
'USING_CEF_SHARED',
],
'include_dirs': [ '.', 'cef' ],
'sources': [
'<@(includes_common)',
'<@(includes_capi)',
'<@(includes_wrapper)',
'<@(libcef_dll_wrapper_sources_common)',
],
'link_settings': {
'libraries': [
'cef/Release/libcef.dylib',
],
}
},
],
'conditions': [
['os_posix==1 and OS!="mac" and OS!="android" and gcc_version==46', {
'target_defaults': {
# Disable warnings about c++0x compatibility, as some names (such
# as nullptr) conflict with upcoming c++0x types.
'cflags_cc': ['-Wno-c++0x-compat'],
},
}],
['OS=="mac"', {
'targets': [
{
'target_name': 'AtomHelperApp',
'type': 'executable',
'variables': { 'enable_wexit_time_destructors': 1, },
'product_name': 'Atom Helper',
'mac_bundle': 1,
'dependencies': [
'atom_framework',
],
'defines': [
'USING_CEF_SHARED',
'PROCESS_HELPER_APP',
],
'mac_framework_dirs': [ 'native/frameworks' ],
'sources': [
'native/main.cpp',
],
# TODO(mark): For now, don't put any resources into this app. Its
# resources directory will be a symbolic link to the browser app's
# resources directory.
'mac_bundle_resources/': [
['exclude', '.*'],
],
'xcode_settings': {
'INFOPLIST_FILE': 'native/mac/helper-info.plist',
'LD_RUNPATH_SEARCH_PATHS': '@executable_path/../../..',
},
'postbuilds': [
{
'postbuild_name': 'Fix Framework Link',
'action': [
'<@(fix_framework_link_command)',
],
},
],
}, # target cefclient_helper_app
],
}], # OS=="mac"
],
}