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

# Please keep this file in sync with unittests.gyp.

import("../../gni/v8.gni")

v8_executable("unittests") {
  testonly = true

  sources = [
    "base/atomic-utils-unittest.cc",
    "base/bits-unittest.cc",
    "base/cpu-unittest.cc",
    "base/division-by-constant-unittest.cc",
    "base/flags-unittest.cc",
    "base/functional-unittest.cc",
    "base/ieee754-unittest.cc",
    "base/iterator-unittest.cc",
    "base/logging-unittest.cc",
    "base/platform/condition-variable-unittest.cc",
    "base/platform/mutex-unittest.cc",
    "base/platform/platform-unittest.cc",
    "base/platform/semaphore-unittest.cc",
    "base/platform/time-unittest.cc",
    "base/sys-info-unittest.cc",
    "base/utils/random-number-generator-unittest.cc",
    "cancelable-tasks-unittest.cc",
    "char-predicates-unittest.cc",
    "compiler/branch-elimination-unittest.cc",
    "compiler/checkpoint-elimination-unittest.cc",
    "compiler/common-operator-reducer-unittest.cc",
    "compiler/common-operator-unittest.cc",
    "compiler/compiler-test-utils.h",
    "compiler/control-equivalence-unittest.cc",
    "compiler/control-flow-optimizer-unittest.cc",
    "compiler/dead-code-elimination-unittest.cc",
    "compiler/diamond-unittest.cc",
    "compiler/effect-control-linearizer-unittest.cc",
    "compiler/escape-analysis-unittest.cc",
    "compiler/graph-reducer-unittest.cc",
    "compiler/graph-reducer-unittest.h",
    "compiler/graph-trimmer-unittest.cc",
    "compiler/graph-unittest.cc",
    "compiler/graph-unittest.h",
    "compiler/instruction-selector-unittest.cc",
    "compiler/instruction-selector-unittest.h",
    "compiler/instruction-sequence-unittest.cc",
    "compiler/instruction-sequence-unittest.h",
    "compiler/int64-lowering-unittest.cc",
    "compiler/js-builtin-reducer-unittest.cc",
    "compiler/js-create-lowering-unittest.cc",
    "compiler/js-intrinsic-lowering-unittest.cc",
    "compiler/js-operator-unittest.cc",
    "compiler/js-typed-lowering-unittest.cc",
    "compiler/linkage-tail-call-unittest.cc",
    "compiler/live-range-unittest.cc",
    "compiler/liveness-analyzer-unittest.cc",
    "compiler/load-elimination-unittest.cc",
    "compiler/loop-peeling-unittest.cc",
    "compiler/machine-operator-reducer-unittest.cc",
    "compiler/machine-operator-unittest.cc",
    "compiler/move-optimizer-unittest.cc",
    "compiler/node-cache-unittest.cc",
    "compiler/node-matchers-unittest.cc",
    "compiler/node-properties-unittest.cc",
    "compiler/node-test-utils.cc",
    "compiler/node-test-utils.h",
    "compiler/node-unittest.cc",
    "compiler/opcodes-unittest.cc",
    "compiler/register-allocator-unittest.cc",
    "compiler/schedule-unittest.cc",
    "compiler/scheduler-rpo-unittest.cc",
    "compiler/scheduler-unittest.cc",
    "compiler/simplified-operator-reducer-unittest.cc",
    "compiler/simplified-operator-unittest.cc",
    "compiler/state-values-utils-unittest.cc",
    "compiler/tail-call-optimization-unittest.cc",
    "compiler/typer-unittest.cc",
    "compiler/value-numbering-reducer-unittest.cc",
    "compiler/zone-pool-unittest.cc",
    "counters-unittest.cc",
    "heap/bitmap-unittest.cc",
    "heap/gc-idle-time-handler-unittest.cc",
    "heap/gc-tracer-unittest.cc",
    "heap/heap-unittest.cc",
    "heap/memory-reducer-unittest.cc",
    "heap/scavenge-job-unittest.cc",
    "heap/slot-set-unittest.cc",
    "interpreter/bytecode-array-builder-unittest.cc",
    "interpreter/bytecode-array-iterator-unittest.cc",
    "interpreter/bytecode-array-writer-unittest.cc",
    "interpreter/bytecode-dead-code-optimizer-unittest.cc",
    "interpreter/bytecode-peephole-optimizer-unittest.cc",
    "interpreter/bytecode-pipeline-unittest.cc",
    "interpreter/bytecode-register-allocator-unittest.cc",
    "interpreter/bytecode-register-optimizer-unittest.cc",
    "interpreter/bytecodes-unittest.cc",
    "interpreter/constant-array-builder-unittest.cc",
    "interpreter/interpreter-assembler-unittest.cc",
    "interpreter/interpreter-assembler-unittest.h",
    "interpreter/source-position-table-unittest.cc",
    "libplatform/default-platform-unittest.cc",
    "libplatform/task-queue-unittest.cc",
    "libplatform/worker-thread-unittest.cc",
    "locked-queue-unittest.cc",
    "register-configuration-unittest.cc",
    "run-all-unittests.cc",
    "test-utils.cc",
    "test-utils.h",
    "wasm/asm-types-unittest.cc",
    "wasm/ast-decoder-unittest.cc",
    "wasm/control-transfer-unittest.cc",
    "wasm/decoder-unittest.cc",
    "wasm/encoder-unittest.cc",
    "wasm/leb-helper-unittest.cc",
    "wasm/loop-assignment-analysis-unittest.cc",
    "wasm/module-decoder-unittest.cc",
    "wasm/switch-logic-unittest.cc",
    "wasm/wasm-macro-gen-unittest.cc",
  ]

  if (v8_target_cpu == "arm") {
    sources += [ "compiler/arm/instruction-selector-arm-unittest.cc" ]
  } else if (v8_target_cpu == "arm64") {
    sources += [ "compiler/arm64/instruction-selector-arm64-unittest.cc" ]
  } else if (v8_target_cpu == "x86") {
    sources += [ "compiler/ia32/instruction-selector-ia32-unittest.cc" ]
  } else if (v8_target_cpu == "mips" || v8_target_cpu == "mipsel") {
    sources += [ "compiler/mips/instruction-selector-mips-unittest.cc" ]
  } else if (v8_target_cpu == "mips64" || v8_target_cpu == "mips64el") {
    sources += [ "compiler/mips64/instruction-selector-mips64-unittest.cc" ]
  } else if (v8_target_cpu == "x64") {
    sources += [ "compiler/x64/instruction-selector-x64-unittest.cc" ]
  } else if (v8_target_cpu == "ppc" || v8_target_cpu == "ppc64") {
    sources += [ "compiler/ppc/instruction-selector-ppc-unittest.cc" ]
  } else if (v8_target_cpu == "s390" || v8_target_cpu == "s390x") {
    sources += [ "compiler/s390/instruction-selector-s390-unittest.cc" ]
  }

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
  ]

  # TODO(machenbach): Translate from gyp.
  #['OS=="aix"', {
  #  'ldflags': [ '-Wl,-bbigtoc' ],
  #}],

  deps = [
    "../..:v8_libplatform",
    "//build/config/sanitizers:deps",
    "//build/win:default_exe_manifest",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_component_build) {
    # compiler-unittests can't be built against a shared library, so we
    # need to depend on the underlying static target in that case.
    deps += [ "../..:v8_maybe_snapshot" ]
  } else {
    deps += [ "../..:v8" ]
  }

  if (is_win) {
    # This warning is benignly triggered by the U16 and U32 macros in
    # bytecode-utils.h.
    # C4309: 'static_cast': truncation of constant value
    cflags = [ "/wd4309" ]

    # Suppress warnings about importing locally defined symbols.
    if (is_component_build) {
      ldflags = [
        "/ignore:4049",
        "/ignore:4217",
      ]
    }
  }
}
