# Copyright 2019 The Cobalt 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.

{
  'targets': [
    {
      'target_name': 'unwind_evergreen',
      'type': 'static_library',
      'include_dirs': [
        'include',
        '<(DEPTH)/third_party/llvm-project/libunwind/include',
      ],
      'dependencies': [
        '<(DEPTH)/starboard/common/common.gyp:common',
        '<(DEPTH)/third_party/musl/musl.gyp:c',
      ],
      'cflags': [
        '-nostdinc',
        '-Wno-unused-command-line-argument',
      ],
      'cflags_cc': [
        '-std=c++11',
        '-nostdinc++',
        '-fPIC',
        '-Werror=return-type',
        '-fvisibility-inlines-hidden',
        '-fms-compatibility-version=19.00',
        '-funwind-tables',
        '-W',
        '-Wall',
        '-Wextra',
        '-Wwrite-strings',
        '-Wshorten-64-to-32',
        '-Wno-error',
        '-Wno-unused-parameter',
      ],
      'defines': [
        # Ensure that __external_threading is used for threading support.
        '_LIBCPP_HAS_THREAD_API_EXTERNAL',
        # Build libunwind with concurrency built upon Starboard mutexes and
        # condition variables.
        '_LIBUNWIND_HAS_STARBOARD_THREADS',
        'LIBUNWIND_PRINT_APIS',
        'LIBUNWIND_PRINT_DWARF',
        'LIBUNWIND_PRINT_UNWINDING',
        'LLVM_PATH="<(DEPTH)/third_party/llvm-project/llvm/"',
      ],
      'sources': [
        'src/AddressSpace.hpp',
        'src/assembly.h',
        'src/CMakeLists.txt',
        'src/CompactUnwinder.hpp',
        'src/config.h',
        'src/dwarf2.h',
        'src/DwarfInstructions.hpp',
        'src/DwarfParser.hpp',
        'src/EHHeaderParser.hpp',
        'src/libunwind.cpp',
        'src/libunwind_ext.h',
        'src/Registers.hpp',
        'src/RWMutex.hpp',
        'src/UnwindCursor.hpp',
        'src/Unwind-EHABI.cpp',
        'src/Unwind-EHABI.h',
        'src/UnwindLevel1.c',
        'src/UnwindLevel1-gcc-ext.c',
        'src/UnwindRegistersRestore.S',
        'src/UnwindRegistersSave.S',
        'src/Unwind-sjlj.c',
      ],
      'all_dependent_settings': {
        'include_dirs': [
          '<(DEPTH)/third_party/llvm-project/libunwind/include',
        ],
        'defines': [
          # Ensure that __external_threading is used for threading support.
          '_LIBCPP_HAS_THREAD_API_EXTERNAL',
          'LLVM_PATH="<(DEPTH)/third_party/llvm-project/llvm/"',
        ],
      },
      'conditions': [
        ['target_os == "tvos"', {
          'sources': [
            'src/Unwind_AppleExtras.cpp',
          ],
        }],
      ],
    },
    {
      'target_name': 'unwind_starboard',
      'type': 'static_library',
      'include_dirs': [
        'include',
        '<(DEPTH)/third_party/llvm-project/libunwind/include',
      ],
      'dependencies': [
        '<(DEPTH)/starboard/common/common.gyp:common',
        '<(DEPTH)/starboard/elf_loader/evergreen_info.gyp:evergreen_info',
      ],
      'cflags': [
        '-Wno-unused-command-line-argument',
      ],
      'cflags_cc': [
        '-std=c++11',
        '-fPIC',
        '-Werror=return-type',
        '-fvisibility-inlines-hidden',
        '-funwind-tables',
        '-W',
        '-Wall',
        '-Wextra',
        '-Wwrite-strings',
        '-Wno-error',
        '-Wno-unused-parameter',
      ],
      'defines': [
        'STARBOARD_IMPLEMENTATION',
        # Ensure that __external_threading is used for threading support.
        '_LIBCPP_HAS_THREAD_API_EXTERNAL',
        # Build libunwind with concurrency built upon Starboard mutexes and
        # condition variables.
        '_LIBUNWIND_HAS_STARBOARD_THREADS',
        'LIBUNWIND_PRINT_APIS',
        'LIBUNWIND_PRINT_DWARF',
        'LIBUNWIND_PRINT_UNWINDING',
        'LLVM_PATH="<(DEPTH)/third_party/llvm-project/llvm/"',
      ],
      'sources': [
        'src/AddressSpace.hpp',
        'src/assembly.h',
        'src/CMakeLists.txt',
        'src/CompactUnwinder.hpp',
        'src/config.h',
        'src/dwarf2.h',
        'src/DwarfInstructions.hpp',
        'src/DwarfParser.hpp',
        'src/EHHeaderParser.hpp',
        'src/libunwind.cpp',
        'src/libunwind_ext.h',
        'src/Registers.hpp',
        'src/RWMutex.hpp',
        'src/UnwindCursor.hpp',
        'src/Unwind-EHABI.cpp',
        'src/Unwind-EHABI.h',
        'src/UnwindLevel1.c',
        'src/UnwindLevel1-gcc-ext.c',
        'src/UnwindRegistersRestore.S',
        'src/UnwindRegistersSave.S',
        'src/Unwind-sjlj.c',
      ],
      'all_dependent_settings': {
        'include_dirs': [
          '<(DEPTH)/third_party/llvm-project/libunwind/include',
        ],
        'defines': [
          # Ensure that __external_threading is used for threading support.
          '_LIBCPP_HAS_THREAD_API_EXTERNAL',
          'LLVM_PATH="<(DEPTH)/third_party/llvm-project/llvm/"',
        ],
      },
      'conditions': [
        ['target_os == "tvos"', {
          'sources': [
            'src/Unwind_AppleExtras.cpp',
          ],
        }],
      ],
    }
  ]
}
