# 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")

v8_executable("cctest") {
  testonly = true
  deps = [
    ":cctest_sources",
  ]

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

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

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

  ldflags = []

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

  # crbug.com/676417: Suppress symbol import warning from linker.
  if (is_win && is_component_build) {
    ldflags += [
      "/ignore:4217",
      "/ignore:4049",
    ]
    remove_configs = [ "//build/config/win:default_incremental_linking" ]
    configs += [ "//build/config/win:no_incremental_linking" ]
  }
}

v8_source_set("cctest_sources") {
  testonly = true

  sources = [
    "$target_gen_dir/resources.cc",

    ### gcmole(all) ###
    "../common/assembler-tester.h",
    "../common/wasm/flag-utils.h",
    "../common/wasm/test-signatures.h",
    "../common/wasm/wasm-macro-gen.h",
    "cctest.cc",
    "cctest.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/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",
    "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-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-lab.cc",
    "heap/test-mark-compact.cc",
    "heap/test-page-promotion.cc",
    "heap/test-spaces.cc",
    "heap/test-unmapper.cc",
    "heap/test-weak-references.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",
    "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-interceptors.cc",
    "test-api.cc",
    "test-api.h",
    "test-array-list.cc",
    "test-atomicops.cc",
    "test-bignum-dtoa.cc",
    "test-bignum.cc",
    "test-bit-vector.cc",
    "test-circular-queue.cc",
    "test-code-layout.cc",
    "test-code-stub-assembler.cc",
    "test-compiler.cc",
    "test-constantpool.cc",
    "test-conversions.cc",
    "test-cpu-profiler.cc",
    "test-date.cc",
    "test-debug.cc",
    "test-decls.cc",
    "test-deoptimization.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-lockers.cc",
    "test-log.cc",
    "test-managed.cc",
    "test-mementos.cc",
    "test-modules.cc",
    "test-object.cc",
    "test-orderedhashtable.cc",
    "test-parsing.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-unbound-queue.cc",
    "test-unboxed-doubles.cc",
    "test-unscopables-hidden-prototype.cc",
    "test-unwinder.cc",
    "test-usecounters.cc",
    "test-utils.cc",
    "test-version.cc",
    "test-weakmaps.cc",
    "test-weaksets.cc",
    "torque/test-torque.cc",
    "trace-extension.cc",
    "trace-extension.h",
    "types-fuzz.h",
    "unicode-helpers.cc",
    "unicode-helpers.h",
    "wasm/test-c-wasm-entry.cc",
    "wasm/test-jump-table-assembler.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-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.cc",
    "wasm/test-run-wasm.cc",
    "wasm/test-streaming-compilation.cc",
    "wasm/test-wasm-breakpoints.cc",
    "wasm/test-wasm-codegen.cc",
    "wasm/test-wasm-import-wrapper-cache.cc",
    "wasm/test-wasm-interpreter-entry.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 (use_jumbo_build) {
    jumbo_excluded_sources = [
      # TODO(mostynb@opera.com): figure out the jumbo issues with these source
      # files, and include them in jumbo compilation units.
      "interpreter/bytecode-expectations-printer.cc",
      "interpreter/test-bytecode-generator.cc",
      "test-api.cc",
    ]
  }

  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-sync-primitives-arm64.cc",
      "test-utils-arm64.cc",
      "test-utils-arm64.h",
    ]
  } 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",
    ]
  } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
    sources += [  ### gcmole(arch:ppc) ###
      "test-assembler-ppc.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-ppc.cc",
    ]
  } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
    sources += [  ### gcmole(arch:s390) ###
      "test-assembler-s390.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-s390.cc",
    ]
  }

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

  public_deps = [
    ":resources",
    "../..:v8_initializers",
    "../..:v8_libbase",
    "../..:v8_libplatform",
    "../..:wasm_module_runner",
    "//build/win:default_exe_manifest",
  ]

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

  if (is_component_build) {
    # cctest 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" ]
    defines += [ "BUILDING_V8_SHARED" ]
  } else {
    deps += [ "../..:v8" ]
  }

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

action("resources") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.

  script = "../../tools/js2c.py"

  # NOSORT
  sources = [
    "../../tools/splaytree.js",
    "../../tools/codemap.js",
    "../../tools/csvparser.js",
    "../../tools/consarray.js",
    "../../tools/profile.js",
    "../../tools/profile_view.js",
    "../../tools/arguments.js",
    "../../tools/logreader.js",
    "log-eq-of-logging-and-traversal.js",
  ]

  outputs = [
    "$target_gen_dir/resources.cc",
  ]

  args = [
    rebase_path("$target_gen_dir/resources.cc", root_build_dir),
    "TEST",
  ]
  args += rebase_path(sources, root_build_dir)
}

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

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

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

#Target to generate all .cc files.
group("v8_generated_cc_files") {
  testonly = true

  deps = [
    ":resources",
  ]
}
