# 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",
    "../..:v8_wrappers",
  ]

  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",
    "../..:v8_wrappers",
    "../..: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",
    "../..:v8_wrappers",
    "//build/win:default_exe_manifest",
  ]

  data = [ "interpreter/bytecode_expectations/" ]
}
