# Copyright 2014 The Crashpad Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

{
  'includes': [
    '../build/crashpad.gypi',
  ],
  'targets': [
    {
      # This target exists so that the crashpad_handler can be embedded into
      # another binary.
      'target_name': 'crashpad_handler_lib',
      'type': 'static_library',
      'dependencies': [
        '../client/client.gyp:crashpad_client',
        '../compat/compat.gyp:crashpad_compat',
        '../minidump/minidump.gyp:crashpad_minidump',
        '../snapshot/snapshot.gyp:crashpad_snapshot',
        '../third_party/mini_chromium/mini_chromium.gyp:base',
        '../third_party/zlib/zlib.gyp:zlib',
        '../tools/tools.gyp:crashpad_tool_support',
        '../util/util.gyp:crashpad_util',
        '<(DEPTH)/third_party/boringssl/boringssl.gyp:crypto_full',
        '<(DEPTH)/starboard/starboard.gyp:starboard',
      ],
      'include_dirs': [
        '..',
      ],
      'defines': [
        'CRASHPAD_USE_BORINGSSL',
      ],
      'sources': [
        '../util/net/http_transport_socket.cc',
        'crash_report_upload_thread.cc',
        'crash_report_upload_thread.h',
        'handler_main.cc',
        'handler_main.h',
        'linux/capture_snapshot.cc',
        'linux/capture_snapshot.h',
        'linux/crash_report_exception_handler.cc',
        'linux/crash_report_exception_handler.h',
        'linux/exception_handler_server.cc',
        'linux/exception_handler_server.h',
        'mac/crash_report_exception_handler.cc',
        'mac/crash_report_exception_handler.h',
        'mac/exception_handler_server.cc',
        'mac/exception_handler_server.h',
        'mac/file_limit_annotation.cc',
        'mac/file_limit_annotation.h',
        'minidump_to_upload_parameters.cc',
        'minidump_to_upload_parameters.h',
        'prune_crash_reports_thread.cc',
        'prune_crash_reports_thread.h',
        'user_stream_data_source.cc',
        'user_stream_data_source.h',
        'win/crash_report_exception_handler.cc',
        'win/crash_report_exception_handler.h',
      ],
      'target_conditions': [
        ['OS=="android"', {
          'sources/': [
            ['include', '^linux/'],
          ],
        }],
      ],
    },
    {
      'target_name': 'crashpad_handler',
      'type': 'executable',
      'dependencies': [
        '../third_party/mini_chromium/mini_chromium.gyp:base',
        '../tools/tools.gyp:crashpad_tool_support',
        'crashpad_handler_lib',
      ],
      'include_dirs': [
        '..',
      ],
      'sources': [
        'main.cc',
      ],
      'conditions': [
        # Help platforms cross compiled on linux to reduce
        # the memory footprint of crashpad_handler by eliminating
        # unused code and unused shared libraries.
        # The flags assume gcc/clang toolchain.
        ['host_os=="linux"',  {
          'cflags': [
            '-ffunction-sections',
            '-fdata-sections',
          ],
          'ldflags': [
            '-Wl,--as-needed',
            '-Wl,-gc-sections',
          ],
        }],
        ['OS=="win"',  {
          'msvs_settings': {
            'VCLinkerTool': {
              'SubSystem': '2',  # /SUBSYSTEM:WINDOWS
            },
          },
        }],
      ],
    },
    {
      'target_name': 'crashpad_handler_deploy',
      'type': 'none',
      'dependencies': [
        'crashpad_handler',
      ],
      'variables': {
        'executable_name': 'crashpad_handler',
      },
      'includes': ['<(DEPTH)/starboard/build/deploy.gypi'],
    },
  ],
  'conditions': [
    ['OS=="win"', {
      'targets': [
        {
          # Duplicates crashpad_handler.exe to crashpad_handler.com and makes it
          # a console app.
          'target_name': 'crashpad_handler_console',
          'type': 'none',
          'dependencies': [
            '../third_party/mini_chromium/mini_chromium.gyp:base',
            '../tools/tools.gyp:crashpad_tool_support',
            'crashpad_handler',
          ],
          'actions': [
            {
              'action_name': 'copy handler exe to com',
              'inputs': [
                '<(PRODUCT_DIR)/crashpad_handler.exe',
              ],
              'outputs': [
                '<(PRODUCT_DIR)/crashpad_handler.com',
              ],
              'action': [
                'copy <(PRODUCT_DIR)\crashpad_handler.exe '
                    '<(PRODUCT_DIR)\crashpad_handler.com >nul && '
                'editbin -nologo -subsystem:console '
                    '<(PRODUCT_DIR)\crashpad_handler.com >nul',
              ],
              'msvs_cygwin_shell': '0',
              'quote_cmd': '0',
            },
          ],
        },
      ],
    }],
  ],
}
