# 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++20",
      "-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",
    ]
    configs -= [ "//starboard/build/config:default_cpp_standard" ]
  }
}

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",
  ]
}
