# 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",
  ]
  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) ###
    "../../test/common/wasm/flag-utils.h",
    "../../test/common/wasm/test-signatures.h",
    "../../test/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.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-stubs.cc",
    "compiler/test-run-tail-calls.cc",
    "compiler/test-run-unwinding-info.cc",
    "compiler/test-run-variables.cc",
    "compiler/test-run-wasm-machops.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-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",
    "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-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-identity-map.cc",
    "test-inobject-slack-tracking.cc",
    "test-intl.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-sampler-api.cc",
    "test-serialize.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-usecounters.cc",
    "test-utils.cc",
    "test-version.cc",
    "test-weakmaps.cc",
    "test-weaksets.cc",
    "trace-extension.cc",
    "trace-extension.h",
    "types-fuzz.h",
    "unicode-helpers.h",
    "wasm/test-c-wasm-entry.cc",
    "wasm/test-run-wasm-64.cc",
    "wasm/test-run-wasm-asmjs.cc",
    "wasm/test-run-wasm-atomics.cc",
    "wasm/test-run-wasm-interpreter.cc",
    "wasm/test-run-wasm-js.cc",
    "wasm/test-run-wasm-module.cc",
    "wasm/test-run-wasm-relocation.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-interpreter-entry.cc",
    "wasm/test-wasm-stack.cc",
    "wasm/test-wasm-trap-position.cc",
    "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/bytecode-expectations-printer.h",
      "interpreter/test-bytecode-generator.cc",
      "test-api.cc",
      "test-api.h",
    ]
  }

  if (v8_current_cpu == "arm") {
    sources += [  ### gcmole(arch:arm) ###
      "assembler-helper-arm.cc",
      "assembler-helper-arm.h",
      "test-assembler-arm.cc",
      "test-code-stubs-arm.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-arm.cc",
      "test-macro-assembler-arm.cc",
      "test-run-wasm-relocation-arm.cc",
      "test-sync-primitives-arm.cc",
    ]
  } else if (v8_current_cpu == "arm64") {
    sources += [  ### gcmole(arch:arm64) ###
      "test-assembler-arm64.cc",
      "test-code-stubs-arm64.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-arm64.cc",
      "test-fuzz-arm64.cc",
      "test-javascript-arm64.cc",
      "test-js-arm64-variables.cc",
      "test-run-wasm-relocation-arm64.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-code-stubs-ia32.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-ia32.cc",
      "test-log-stack-tracer.cc",
      "test-run-wasm-relocation-ia32.cc",
    ]
  } else if (v8_current_cpu == "mips") {
    sources += [  ### gcmole(arch:mips) ###
      "test-assembler-mips.cc",
      "test-code-stubs-mips.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-mips.cc",
      "test-macro-assembler-mips.cc",
    ]
  } else if (v8_current_cpu == "mipsel") {
    sources += [  ### gcmole(arch:mipsel) ###
      "test-assembler-mips.cc",
      "test-code-stubs-mips.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-mips.cc",
      "test-macro-assembler-mips.cc",
    ]
  } else if (v8_current_cpu == "mips64") {
    sources += [  ### gcmole(arch:mips64) ###
      "test-assembler-mips64.cc",
      "test-code-stubs-mips64.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-mips64.cc",
      "test-macro-assembler-mips64.cc",
    ]
  } else if (v8_current_cpu == "mips64el") {
    sources += [  ### gcmole(arch:mips64el) ###
      "test-assembler-mips64.cc",
      "test-code-stubs-mips64.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-mips64.cc",
      "test-macro-assembler-mips64.cc",
    ]
  } else if (v8_current_cpu == "x64") {
    sources += [  ### gcmole(arch:x64) ###
      "test-assembler-x64.cc",
      "test-code-stubs-x64.cc",
      "test-code-stubs.cc",
      "test-code-stubs.h",
      "test-disasm-x64.cc",
      "test-log-stack-tracer.cc",
      "test-macro-assembler-x64.cc",
      "test-run-wasm-relocation-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/config:exe_and_shlib_deps",
    "//build/win:default_exe_manifest",
  ]

  defines = []
  deps = []

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

  # The script depends on this other script, this rule causes a rebuild if it
  # changes.
  inputs = [
    "../../tools/jsmin.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/config:exe_and_shlib_deps",
    "//build/win:default_exe_manifest",
  ]
}
