# Copyright 2023 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.

import("//starboard/build/config/os_definitions.gni")

common_sources = [
  "src/AddressSpace.hpp",
  "src/CompactUnwinder.hpp",
  "src/DwarfInstructions.hpp",
  "src/DwarfParser.hpp",
  "src/EHHeaderParser.hpp",
  "src/FrameHeaderCache.hpp",
  "src/RWMutex.hpp",
  "src/Registers.hpp",
  "src/Unwind-EHABI.cpp",
  "src/Unwind-EHABI.h",
  "src/Unwind-seh.cpp",
  "src/Unwind-sjlj.c",
  "src/UnwindCursor.hpp",
  "src/UnwindLevel1-gcc-ext.c",
  "src/UnwindLevel1.c",
  "src/UnwindRegistersRestore.S",
  "src/UnwindRegistersSave.S",
  "src/assembly.h",
  "src/cet_unwind.h",
  "src/config.h",
  "src/dwarf2.h",
  "src/libunwind.cpp",
  "src/libunwind_ext.h",
]
if (is_apple) {
  common_sources += [ "src/Unwind_AppleExtras.cpp" ]
}

config("common_unwind_dependents_config") {
  include_dirs = [ "include" ]
  defines = [
    # Ensure that __external_threading is used for threading support.
    "_LIBCPP_HAS_THREAD_API_EXTERNAL",
    "LLVM_PATH=" +
        rebase_path("//third_party/llvm-project/llvm/", root_build_dir),
  ]
}

# TODO: this conditional is only to prevent gn check errors related to evergreen
# dependencies from spilling over to gn check when run for non-evergreen
# platforms (e.g., raspi-2_gn_devel). It can and should be removed once the gn
# check errors have been resolved for evergreen.
# TODO: b/295702296 Fix libunwind for modular  builds.
if (sb_is_evergreen || (sb_is_modular && is_host_win)) {
  config("unwind_config") {
    configs = [ ":common_unwind_dependents_config" ]

    cflags = [
      "-nostdinc",
      "-Wno-unused-command-line-argument",
    ]

    cflags_cc = [
      "-std=c++17",
      "-nostdinc++",
      "-fPIC",
      "-Werror=return-type",
      "-fvisibility-inlines-hidden",
      "-fms-compatibility-version=19.00",
      "-funwind-tables",
      "-Wall",
      "-Wextra",
      "-Wwrite-strings",
      "-Wshorten-64-to-32",
      "-Wno-error",
      "-Wno-unused-parameter",
    ]

    defines = [
      # Build libunwind with concurrency built upon Starboard mutexes and
      # condition variables.
      "_LIBUNWIND_HAS_STARBOARD_THREADS",
      "LIBUNWIND_PRINT_APIS",
      "LIBUNWIND_PRINT_DWARF",
      "LIBUNWIND_PRINT_UNWINDING",
    ]
  }

  static_library("unwind") {
    sources = common_sources

    configs += [ ":unwind_config" ]
    all_dependent_configs = [ ":common_unwind_dependents_config" ]

    deps = [
      "//starboard/common",
      "//third_party/musl:c",
    ]
  }
}

config("unwind_starboard_config") {
  configs = [
    ":common_unwind_dependents_config",
    "//starboard/build/config:starboard_implementation",
  ]

  cflags = [ "-Wno-unused-command-line-argument" ]
  cflags_cc = [
    "-std=c++17",
    "-fPIC",
    "-Werror=return-type",
    "-fvisibility-inlines-hidden",
    "-funwind-tables",
    "-Wall",
    "-Wextra",
    "-Wwrite-strings",
    "-Wno-error",
    "-Wno-unused-parameter",
  ]
  defines = [
    # Build libunwind with concurrency built upon Starboard mutexes and
    # condition variables.
    "_LIBUNWIND_HAS_STARBOARD_THREADS",
    "NDEBUG"
  ]
}

static_library("unwind_starboard") {
  sources = common_sources

  configs += [ ":unwind_starboard_config" ]
  all_dependent_configs = [ ":common_unwind_dependents_config" ]

  public_deps = [
    "//starboard/common",
    "//starboard/elf_loader:evergreen_info",
  ]
}
