# Copyright 2019 The Fuchsia 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("//build/host.gni")
import("//build/test.gni")
import("//build/components.gni")
import("//third_party/quickjs/compiled_js.gni")

config("qjs-config") {
  version_lines = read_file("VERSION", "list lines")
  defines = [
    "_GNU_SOURCE",
    "CONFIG_VERSION=\"" + version_lines[0] + "\"",
    "CONFIG_BIGNUM",

    # Use a switch rather than a manually created dispatch table. Using the
    # host-asan_ubsan variant causes the interpreter to crash with an internal
    # stack overflow error if this table is used. The compiler should already
    # decide which is the best way to lower a switch statement anyway.
    "DIRECT_DISPATCH=0",
  ]

  # Suppress warnings in upstream code that are triggered by Fuchsia compilation flags.
  cflags = [
    "-Wno-conversion",
    "-Wno-implicit-int-float-conversion",
    "-Wno-sign-compare",
    "-Wno-unused-variable",
    "-funsigned-char",
  ]
}

source_set("qjs-lib") {
  # based on QJS_LIB_OBJS
  sources = [
    "cutils.c",
    "libbf.c",
    "libbf.h",
    "libregexp.c",
    "libunicode.c",
    "quickjs-libc.c",
    "quickjs.c",
  ]

  if (is_fuchsia) {
    deps = [ "//sdk/lib/fdio" ]
  }

  public_configs = [ ":qjs-config" ]
}

executable("qjsc") {
  sources = [ "qjsc.c" ]
  deps = [ ":qjs-lib" ]
  configs += [ ":qjs-config" ]
}

compiled_js("repl") {
  source = "repl.js"
  module = true
}

compiled_js("qjscalc") {
  source = "qjscalc.js"
  module = true
}

executable("qjs") {
  # based on QJS_OBJS
  sources = [ "qjs.c" ]

  deps = [
    ":qjs-lib",
    ":qjscalc",
    ":repl",
  ]

  if (is_fuchsia) {
    deps += [ "//src/zircon/lib/zircon" ]
  }
}

fuchsia_shell_package("quickjs") {
  package_name = "qjs"
  deps = [ ":qjs" ]
}

test("qjs_test") {
  sources = [ "basic_test.cc" ]

  deps = [
    ":qjs-lib",
    "//sdk/lib/syslog/cpp:backend_legacy",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]

  if (is_fuchsia) {
    deps += [ "//src/zircon/lib/zircon" ]
  }
}

fuchsia_unittest_package("qjs_tests") {
  deps = [ ":qjs_test" ]
}

install_host_tools("quickjs_host") {
  deps = [ ":qjs" ]
  outputs = [ "qjs" ]
}
