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

config("config") {
  defines = [ "NO_LIBDEXFILE_SUPPORT" ]
  include_dirs = [
    "fuchsia",
    "include",
  ]
}

config("config_private") {
  defines = [ "FUCHSIA" ]

  if (is_mac) {
    include_dirs = [ target_gen_dir ]
  }
}

static_library("libunwindstack") {
  public_configs = [ ":config" ]
  configs += [ ":config_private" ]

  sources = [
    "ArmExidx.cpp",
    "DwarfCfa.cpp",
    "DwarfEhFrameWithHdr.cpp",
    "DwarfMemory.cpp",
    "DwarfOp.cpp",
    "DwarfSection.cpp",
    "Elf.cpp",
    "ElfInterface.cpp",
    "ElfInterfaceArm.cpp",
    "Global.cpp",
    "JitDebug.cpp",
    "MapInfo.cpp",
    "Symbols.cpp",
    "Unwinder.cpp",
    "fuchsia/LogFuchsia.cpp",
    "fuchsia/MapsFuchsia.cpp",

    # These files are Android-specific and aren't compiled for Fuchsia.
    #"DexFile.cpp",
    #"DexFiles.cpp",
    #"LocalUnwinder.cpp",
    #"Log.cpp",
    #"Maps.cpp",
  ]

  if (current_toolchain != host_toolchain) {
    # This project does some locking but doesn't annotate usage.
    configs -= [ "//build/config/fuchsia:thread_safety_annotations" ]

    sources += [ "fuchsia/MemoryFuchsia.cpp" ]

    if (target_cpu == "x64") {
      sources += [ "fuchsia/RegsFuchsiaX86_64.cpp" ]
    } else if (target_cpu == "arm64") {
      sources += [ "fuchsia/RegsFuchsiaArm64.cpp" ]
    }
  } else {
    sources += [
      "Memory.cpp",
      "Regs.cpp",
      "RegsArm.cpp",
      "RegsArm64.cpp",
      "RegsMips.cpp",
      "RegsMips64.cpp",
      "RegsX86.cpp",
      "RegsX86_64.cpp",
    ]
  }

  deps = [
    "//src/lib/fxl",
  ]
  if (is_mac) {
    deps += [ ":copy_elf_h" ]
  }
}

if (is_mac) {
  # libunwindstack needs elf.h which doesn't come on Mac. Copy the one out of
  # Zircon and use it in this build.
  copy("copy_elf_h") {
    sources = [
      "//zircon/third_party/ulib/musl/include/elf.h",
    ]
    outputs = [
      "$target_gen_dir/elf.h",
    ]
  }
}
