# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("$zx_build/public/gn/config/levels.gni")

zx_library("ngunwind") {
  # This library is very crufty and should not be used in general.  It's
  # used as an implementation detail of the inspector library, which
  # statically links it into its shared library.
  visibility = [
    ":*",
    "$zx/system/ulib/inspector/*",
  ]

  # Unfortunately ngunwind is used directly by
  # //src/developer/debug/debug_agent.
  # TODO(mcgrathr): Give inspector an API debug_agent can use instead.
  visibility += [ "$zx/third_party/ulib" ]
  sdk = "static"
  sdk_headers = [
    "ngunwind/private/compiler.h",
    "ngunwind/private/config.h",
    "ngunwind/private/dwarf-config.h",
    "ngunwind/private/dwarf_i.h",
    "ngunwind/private/elf32.h",
    "ngunwind/private/elf64.h",
    "ngunwind/private/elfxx.h",
    "ngunwind/private/fuchsia_i.h",
    "ngunwind/private/libunwind-common.h",
    "ngunwind/private/libunwind-dynamic.h",
    "ngunwind/private/libunwind_i.h",
    "ngunwind/private/mempool.h",
    "ngunwind/private/remote.h",
    "ngunwind/private/tgt-aarch64.h",
    "ngunwind/private/tgt-arm.h",
    "ngunwind/private/tgt-x86_64.h",
    "ngunwind/private/tgt_i-aarch64.h",
    "ngunwind/private/tgt_i-arm.h",
    "ngunwind/private/tgt_i-x86_64.h",
    "ngunwind/dwarf-eh.h",
    "ngunwind/dwarf.h",
    "ngunwind/fuchsia.h",
    "ngunwind/libunwind.h",
  ]

  configs += [ ":private_config" ]
  deps = [ "$zx/system/ulib/zircon" ]
  sources = [
    "src/dwarf/Gexpr.c",
    "src/dwarf/Gfde.c",
    "src/dwarf/Gfind_proc_info-lsb.c",
    "src/dwarf/Gfind_unwind_table.c",
    "src/dwarf/Gparser.c",
    "src/dwarf/Gpe.c",
    "src/dwarf/Gstep.c",
    "src/dwarf/global.c",
    "src/fuchsia.c",
    "src/mi/Gdestroy_addr_space.c",
    "src/mi/Gdyn-extract.c",
    "src/mi/Gdyn-remote.c",
    "src/mi/Gfind_dynamic_proc_info.c",
    "src/mi/Gget_accessors.c",
    "src/mi/Gget_fpreg.c",
    "src/mi/Gget_proc_info_by_ip.c",
    "src/mi/Gget_proc_name.c",
    "src/mi/Gget_reg.c",
    "src/mi/Gput_dynamic_unwind_info.c",
    "src/mi/Gset_caching_policy.c",
    "src/mi/Gset_fpreg.c",
    "src/mi/Gset_reg.c",
    "src/mi/common.c",
    "src/mi/flush_cache.c",
    "src/mi/init.c",
    "src/mi/mempool.c",
    "src/mi/strerror.c",
  ]
  if (current_cpu == "arm64") {
    sources += [
      "src/aarch64/Gcreate_addr_space.c",
      "src/aarch64/Gget_proc_info.c",
      "src/aarch64/Gget_save_loc.c",
      "src/aarch64/Gglobal.c",
      "src/aarch64/Ginit.c",
      "src/aarch64/Ginit_local.c",
      "src/aarch64/Ginit_remote.c",
      "src/aarch64/Gregs.c",
      "src/aarch64/Gsignal_frame.c",
      "src/aarch64/Gstash_frame.c",
      "src/aarch64/Gstep.c",
      "src/aarch64/fuchsia.c",
      "src/aarch64/regname.c",
      "src/elf64.c",
    ]
  } else if (current_cpu == "x64") {
    sources += [
      "src/elf64.c",
      "src/x86_64/Gcreate_addr_space.c",
      "src/x86_64/Gget_proc_info.c",
      "src/x86_64/Gget_save_loc.c",
      "src/x86_64/Gglobal.c",
      "src/x86_64/Ginit.c",
      "src/x86_64/Ginit_local.c",
      "src/x86_64/Ginit_remote.c",
      "src/x86_64/Gregs.c",
      "src/x86_64/Gsignal_frame.c",
      "src/x86_64/Gstash_frame.c",
      "src/x86_64/Gstep.c",
      "src/x86_64/fuchsia.c",
      "src/x86_64/regname.c",
    ]
  }

  # Compile this with frame pointers so that if we crash
  # the simplistic unwinder will work.
  if (configs + [ "$zx_build/public/gn/config:default_frame_pointers" ] -
      [ "$zx_build/public/gn/config:default_frame_pointers" ] != configs) {
    configs -= [ "$zx_build/public/gn/config:default_frame_pointers" ]
    configs += [ "$zx_build/public/gn/config:frame_pointers" ]
  }

  if (optimize == "none" || optimize == "debug") {
    # Force -O2 since the library doesn't build with -Og.
    configs -= [ "$zx_build/public/gn/config:default_optimize" ]
    configs += [ "$zx_build/public/gn/config:optimize_regular" ]
  }
}

config("private_config") {
  visibility = [ ":*" ]

  defines = [ "DEBUG" ]
  include_dirs = [
    "include/ngunwind",
    "include/ngunwind/private",
  ]

  # cflags has to go in a config rather than directly in the target because
  # the target's cflags comes before the standard configs that include the
  # positive -W* switches, but -Wno-* switches must come afterwards.
  if (!is_gcc) {
    cflags = [ "-Wno-absolute-value" ]
  }
}
