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

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

config("cctest_config") {
  # Work around a bug in the gold linker.
  if (use_gold && target_cpu == "x86") {
    ldflags = [ "-Wl,--icf=none" ]
  }
}

v8_executable("cctest") {
  testonly = true

  sources = [ "cctest.cc" ]

  deps = [ ":cctest_sources" ]

  data_deps = [ "../../tools:v8_testrunner" ]

  data = [
    "testcfg.py",
    "cctest.status",
    "interpreter/bytecode_expectations/",
  ]

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

  ldflags = []

  if (v8_use_perfetto) {
    deps += [
      # TODO(skyostil): Switch the test to use protozero.
      "//third_party/perfetto/protos/perfetto/trace/interned_data:lite",
      "//third_party/perfetto/protos/perfetto/trace/track_event:lite",
    ]
  }

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

v8_header_set("cctest_headers") {
  testonly = true

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

  sources = [ "cctest.h" ]
}

config("cctest_sources_config") {
  if (is_clang) {
    cflags = [ "-Wno-string-concatenation" ]
  }
}

v8_source_set("cctest_sources") {
  testonly = true

  sources = [
    ### gcmole(all) ###
    "../common/assembler-tester.h",
    "../common/flag-utils.h",
    "../common/wasm/flag-utils.h",
    "../common/wasm/test-signatures.h",
    "../common/wasm/wasm-macro-gen.h",
    "cctest-utils.h",
    "collector.h",
    "compiler/c-signature.h",
    "compiler/call-tester.h",
    "compiler/code-assembler-tester.h",
    "compiler/codegen-tester.cc",
    "compiler/codegen-tester.h",
    "compiler/function-tester.cc",
    "compiler/function-tester.h",
    "compiler/graph-builder-tester.h",
    "compiler/serializer-tester.cc",
    "compiler/serializer-tester.h",
    "compiler/test-basic-block-profiler.cc",
    "compiler/test-branch-combine.cc",
    "compiler/test-code-assembler.cc",
    "compiler/test-code-generator.cc",
    "compiler/test-gap-resolver.cc",
    "compiler/test-graph-visualizer.cc",
    "compiler/test-instruction-scheduler.cc",
    "compiler/test-instruction.cc",
    "compiler/test-js-constant-cache.cc",
    "compiler/test-js-context-specialization.cc",
    "compiler/test-js-typed-lowering.cc",
    "compiler/test-jump-threading.cc",
    "compiler/test-linkage.cc",
    "compiler/test-loop-analysis.cc",
    "compiler/test-machine-operator-reducer.cc",
    "compiler/test-multiple-return.cc",
    "compiler/test-node.cc",
    "compiler/test-operator.cc",
    "compiler/test-representation-change.cc",
    "compiler/test-run-bytecode-graph-builder.cc",
    "compiler/test-run-calls-to-external-references.cc",
    "compiler/test-run-deopt.cc",
    "compiler/test-run-intrinsics.cc",
    "compiler/test-run-jsbranches.cc",
    "compiler/test-run-jscalls.cc",
    "compiler/test-run-jsexceptions.cc",
    "compiler/test-run-jsobjects.cc",
    "compiler/test-run-jsops.cc",
    "compiler/test-run-load-store.cc",
    "compiler/test-run-machops.cc",
    "compiler/test-run-native-calls.cc",
    "compiler/test-run-retpoline.cc",
    "compiler/test-run-stackcheck.cc",
    "compiler/test-run-tail-calls.cc",
    "compiler/test-run-unwinding-info.cc",
    "compiler/test-run-variables.cc",
    "compiler/value-helper.cc",
    "compiler/value-helper.h",
    "disasm-regex-helper.cc",
    "disasm-regex-helper.h",
    "expression-type-collector-macros.h",
    "gay-fixed.cc",
    "gay-fixed.h",
    "gay-precision.cc",
    "gay-precision.h",
    "gay-shortest.cc",
    "gay-shortest.h",
    "heap/heap-tester.h",
    "heap/heap-utils.cc",
    "heap/heap-utils.h",
    "heap/test-alloc.cc",
    "heap/test-array-buffer-tracker.cc",
    "heap/test-compaction.cc",
    "heap/test-concurrent-allocation.cc",
    "heap/test-concurrent-marking.cc",
    "heap/test-embedder-tracing.cc",
    "heap/test-external-string-tracker.cc",
    "heap/test-heap.cc",
    "heap/test-incremental-marking.cc",
    "heap/test-invalidated-slots.cc",
    "heap/test-iterators.cc",
    "heap/test-lab.cc",
    "heap/test-mark-compact.cc",
    "heap/test-memory-measurement.cc",
    "heap/test-page-promotion.cc",
    "heap/test-spaces.cc",
    "heap/test-unmapper.cc",
    "heap/test-weak-references.cc",
    "heap/test-write-barrier.cc",
    "interpreter/bytecode-expectations-printer.cc",
    "interpreter/bytecode-expectations-printer.h",
    "interpreter/interpreter-tester.cc",
    "interpreter/interpreter-tester.h",
    "interpreter/source-position-matcher.cc",
    "interpreter/source-position-matcher.h",
    "interpreter/test-bytecode-generator.cc",
    "interpreter/test-interpreter-intrinsics.cc",
    "interpreter/test-interpreter.cc",
    "interpreter/test-source-positions.cc",
    "libplatform/test-tracing.cc",
    "libsampler/test-sampler.cc",
    "manually-externalized-buffer.h",
    "parsing/test-parse-decision.cc",
    "parsing/test-preparser.cc",
    "parsing/test-scanner-streams.cc",
    "parsing/test-scanner.cc",
    "print-extension.cc",
    "print-extension.h",
    "profiler-extension.cc",
    "profiler-extension.h",
    "scope-test-helper.h",
    "setup-isolate-for-tests.cc",
    "setup-isolate-for-tests.h",
    "test-access-checks.cc",
    "test-accessor-assembler.cc",
    "test-accessors.cc",
    "test-allocation.cc",
    "test-api-accessors.cc",
    "test-api-array-buffer.cc",
    "test-api-icu.cc",
    "test-api-interceptors.cc",
    "test-api-stack-traces.cc",
    "test-api-typed-array.cc",
    "test-api-wasm.cc",
    "test-api.cc",
    "test-api.h",
    "test-array-list.cc",
    "test-atomicops.cc",
    "test-backing-store.cc",
    "test-bignum-dtoa.cc",
    "test-bignum.cc",
    "test-bit-vector.cc",
    "test-circular-queue.cc",
    "test-code-layout.cc",
    "test-code-pages.cc",
    "test-code-stub-assembler.cc",
    "test-compiler.cc",
    "test-concurrent-descriptor-array.cc",
    "test-concurrent-feedback-vector.cc",
    "test-concurrent-prototype.cc",
    "test-concurrent-script-context-table.cc",
    "test-concurrent-transition-array.cc",
    "test-constantpool.cc",
    "test-conversions.cc",
    "test-cpu-profiler.cc",
    "test-date.cc",
    "test-debug-helper.cc",
    "test-debug.cc",
    "test-decls.cc",
    "test-deoptimization.cc",
    "test-descriptor-array.cc",
    "test-dictionary.cc",
    "test-diy-fp.cc",
    "test-double.cc",
    "test-dtoa.cc",
    "test-elements-kind.cc",
    "test-factory.cc",
    "test-fast-dtoa.cc",
    "test-feedback-vector.cc",
    "test-feedback-vector.h",
    "test-field-type-tracking.cc",
    "test-fixed-dtoa.cc",
    "test-flags.cc",
    "test-func-name-inference.cc",
    "test-global-handles.cc",
    "test-global-object.cc",
    "test-hashcode.cc",
    "test-hashmap.cc",
    "test-heap-profiler.cc",
    "test-icache.cc",
    "test-identity-map.cc",
    "test-inobject-slack-tracking.cc",
    "test-inspector.cc",
    "test-intl.cc",
    "test-js-weak-refs.cc",
    "test-liveedit.cc",
    "test-local-handles.cc",
    "test-lockers.cc",
    "test-log.cc",
    "test-managed.cc",
    "test-mementos.cc",
    "test-modules.cc",
    "test-object.cc",
    "test-orderedhashtable.cc",
    "test-parsing.cc",
    "test-persistent-handles.cc",
    "test-platform.cc",
    "test-profile-generator.cc",
    "test-random-number-generator.cc",
    "test-regexp.cc",
    "test-representation.cc",
    "test-roots.cc",
    "test-sampler-api.cc",
    "test-serialize.cc",
    "test-smi-lexicographic-compare.cc",
    "test-strings.cc",
    "test-strtod.cc",
    "test-symbols.cc",
    "test-thread-termination.cc",
    "test-threads.cc",
    "test-trace-event.cc",
    "test-traced-value.cc",
    "test-transitions.cc",
    "test-transitions.h",
    "test-typedarrays.cc",
    "test-types.cc",
    "test-unboxed-doubles.cc",
    "test-unscopables-hidden-prototype.cc",
    "test-unwinder-code-pages.cc",
    "test-usecounters.cc",
    "test-utils.cc",
    "test-verifiers.cc",
    "test-version.cc",
    "test-weakmaps.cc",
    "test-weaksets.cc",
    "torque/test-torque.cc",
    "trace-extension.cc",
    "trace-extension.h",
    "unicode-helpers.cc",
    "unicode-helpers.h",
    "wasm/test-c-wasm-entry.cc",
    "wasm/test-compilation-cache.cc",
    "wasm/test-gc.cc",
    "wasm/test-grow-memory.cc",
    "wasm/test-jump-table-assembler.cc",
    "wasm/test-liftoff-inspection.cc",
    "wasm/test-run-wasm-64.cc",
    "wasm/test-run-wasm-asmjs.cc",
    "wasm/test-run-wasm-atomics.cc",
    "wasm/test-run-wasm-atomics64.cc",
    "wasm/test-run-wasm-bulk-memory.cc",
    "wasm/test-run-wasm-exceptions.cc",
    "wasm/test-run-wasm-interpreter.cc",
    "wasm/test-run-wasm-js.cc",
    "wasm/test-run-wasm-module.cc",
    "wasm/test-run-wasm-sign-extension.cc",
    "wasm/test-run-wasm-simd-liftoff.cc",
    "wasm/test-run-wasm-simd-scalar-lowering.cc",
    "wasm/test-run-wasm-simd.cc",
    "wasm/test-run-wasm-wrappers.cc",
    "wasm/test-run-wasm.cc",
    "wasm/test-streaming-compilation.cc",
    "wasm/test-wasm-breakpoints.cc",
    "wasm/test-wasm-codegen.cc",
    "wasm/test-wasm-debug-evaluate.cc",
    "wasm/test-wasm-debug-evaluate.h",
    "wasm/test-wasm-import-wrapper-cache.cc",
    "wasm/test-wasm-metrics.cc",
    "wasm/test-wasm-serialization.cc",
    "wasm/test-wasm-shared-engine.cc",
    "wasm/test-wasm-stack.cc",
    "wasm/test-wasm-trap-position.cc",
    "wasm/wasm-atomics-utils.h",
    "wasm/wasm-run-utils.cc",
    "wasm/wasm-run-utils.h",
  ]

  if (v8_current_cpu == "arm") {
    sources += [  ### gcmole(arch:arm) ###
      "assembler-helper-arm.cc",
      "assembler-helper-arm.h",
      "test-assembler-arm.cc",
      "test-disasm-arm.cc",
      "test-macro-assembler-arm.cc",
      "test-poison-disasm-arm.cc",
      "test-sync-primitives-arm.cc",
    ]
  } else if (v8_current_cpu == "arm64") {
    sources += [  ### gcmole(arch:arm64) ###
      "test-assembler-arm64.cc",
      "test-disasm-arm64.cc",
      "test-fuzz-arm64.cc",
      "test-javascript-arm64.cc",
      "test-js-arm64-variables.cc",
      "test-macro-assembler-arm64.cc",
      "test-pointer-auth-arm64.cc",
      "test-poison-disasm-arm64.cc",
      "test-sync-primitives-arm64.cc",
      "test-utils-arm64.cc",
      "test-utils-arm64.h",
    ]
    if (is_win) {
      sources += [ "test-stack-unwinding-win64.cc" ]
    }
  } else if (v8_current_cpu == "x86") {
    sources += [  ### gcmole(arch:ia32) ###
      "test-assembler-ia32.cc",
      "test-disasm-ia32.cc",
      "test-log-stack-tracer.cc",
    ]
  } else if (v8_current_cpu == "mips") {
    sources += [  ### gcmole(arch:mips) ###
      "test-assembler-mips.cc",
      "test-disasm-mips.cc",
      "test-macro-assembler-mips.cc",
    ]
  } else if (v8_current_cpu == "mipsel") {
    sources += [  ### gcmole(arch:mipsel) ###
      "test-assembler-mips.cc",
      "test-disasm-mips.cc",
      "test-macro-assembler-mips.cc",
    ]
  } else if (v8_current_cpu == "mips64") {
    sources += [  ### gcmole(arch:mips64) ###
      "test-assembler-mips64.cc",
      "test-disasm-mips64.cc",
      "test-macro-assembler-mips64.cc",
    ]
  } else if (v8_current_cpu == "mips64el") {
    sources += [  ### gcmole(arch:mips64el) ###
      "test-assembler-mips64.cc",
      "test-disasm-mips64.cc",
      "test-macro-assembler-mips64.cc",
    ]
  } else if (v8_current_cpu == "x64") {
    sources += [  ### gcmole(arch:x64) ###
      "test-assembler-x64.cc",
      "test-disasm-x64.cc",
      "test-log-stack-tracer.cc",
      "test-macro-assembler-x64.cc",
    ]
    if (is_win) {
      sources += [ "test-stack-unwinding-win64.cc" ]
    }
  } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
    sources += [  ### gcmole(arch:ppc) ###
      "test-assembler-ppc.cc",
      "test-disasm-ppc.cc",
    ]
  } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
    sources += [  ### gcmole(arch:s390) ###
      "test-assembler-s390.cc",
      "test-disasm-s390.cc",
    ]
  }

  if (v8_use_perfetto) {
    # Perfetto doesn't use TraceObject.
    sources -= [ "test-trace-event.cc" ]
  }

  configs = [
    "../..:cppgc_base_config",
    "../..:external_config",
    "../..:internal_config_base",
    "../..:v8_tracing_config",
    ":cctest_sources_config",
  ]

  public_deps = [
    ":cctest_headers",
    "..:common_test_headers",
    "../..:v8_for_testing",
    "../..:v8_libbase",
    "../..:v8_libplatform",
    "../..:wasm_test_common",
    "../../tools/debug_helper:v8_debug_helper",
    "//build/win:default_exe_manifest",
  ]

  defines = []
  deps = [ "../..:run_torque" ]

  if (v8_enable_i18n_support) {
    defines += [ "V8_INTL_SUPPORT" ]
    public_deps += [ "//third_party/icu" ]
  } else {
    sources -= [ "test-intl.cc" ]
  }

  cflags = []
  if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64" ||
      v8_current_cpu == "arm" || v8_current_cpu == "arm64" ||
      v8_current_cpu == "s390" || v8_current_cpu == "s390x" ||
      v8_current_cpu == "mips" || v8_current_cpu == "mips64" ||
      v8_current_cpu == "mipsel" || v8_current_cpu == "mipsel64") {
    # Disable fmadd/fmsub so that expected results match generated code in
    # RunFloat64MulAndFloat64Add1 and friends.
    if (!is_win) {
      cflags += [ "-ffp-contract=off" ]
    }
  }

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

    # MSVS wants this for gay-{precision,shortest}.cc.
    cflags += [ "/bigobj" ]

    if (symbol_level == 2) {
      sources += [ "test-v8windbg.cc" ]
      deps += [ "../../tools/v8windbg:v8windbg_test" ]
    }
  }

  if (v8_use_perfetto) {
    deps += [
      # TODO(skyostil): Migrate to protozero.
      "//third_party/perfetto/protos/perfetto/trace:lite",
    ]
  }
}

v8_executable("generate-bytecode-expectations") {
  testonly = true

  sources = [
    "interpreter/bytecode-expectations-printer.cc",
    "interpreter/bytecode-expectations-printer.h",
    "interpreter/generate-bytecode-expectations.cc",
  ]

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

  deps = [
    ":cctest_headers",
    "../..:v8",
    "../..:v8_libbase",
    "../..:v8_libplatform",
    "//build/win:default_exe_manifest",
  ]

  data = [ "interpreter/bytecode_expectations/" ]
}
