# 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/components.gni")
import("//build/host.gni")
import("//build/test.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-fallthrough",
    "-Wno-implicit-int-float-conversion",
    "-Wno-sign-compare",
    "-Wno-unused-but-set-variable",
    "-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" ]
  }

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

  configs += [ ":qjs-config" ]

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