action("configure_node") {
  script = "//third_party/electron_node/configure"
  args = [
    "--enable-static",
    "--openssl-no-asm",
    "--release-urlbase=https://atom.io/download/electron",
    "--shared",
    "--without-npm",
    "--without-bundled-v8",
    "--without-dtrace",
    "--without-etw",
    "--without-perfctr",
    "--without-v8-platform",
    "--without-intl",
    "--prefix=",
    "--config-out-dir=" + rebase_path(target_gen_dir),
    "--no-run-gyp",
  ]
  outputs = [
    "$target_gen_dir/config.gypi",
  ]
}

action("gyp_node") {
  script = "//tools/gyp/gyp_main.py"
  deps = [ ":configure_node" ]
  inputs = [
    "//third_party/electron_node/common.gypi",
    "//third_party/electron_node/node.gyp",
    "//third_party/electron_node/node.gypi",
    "$target_gen_dir/config.gypi",
    "node_override.gypi",
  ]
  outputs = [
    "$target_out_dir/Release/build.ninja",
  ]

  # TODO(jeremy): should shlib_suffix be set inside node.gypi?
  if (is_mac) {
    shlib_suffix = "dylib"
  } else if (is_linux) {
    shlib_suffix = "so"
  }
  args = [
    "-I", rebase_path("$target_gen_dir/config.gypi", root_build_dir),
    "-I", rebase_path("node_override.gypi", root_build_dir),
    "-I", rebase_path("//third_party/electron_node/common.gypi", root_build_dir),
    "-D", "component=shared_library",
    "-D", "target_arch=$target_cpu",
    "-D", "host_arch=$host_cpu",
    "-D", "config_gypi=" + rebase_path("$target_gen_dir/config.gypi"),
    "-Goutput_dir=./$target_out_dir", # bizarrely, gyp generates from the build root instead of from cwd
    "-fninja",
    rebase_path("//third_party/electron_node/node.gyp", root_build_dir),
  ]
}

action("build_node") {
  deps = [
    "//third_party/icu",
    "//v8",
    "//v8:v8_libbase",
    "//v8:v8_libplatform",
    ":gyp_node",
  ]
  script = "//electron/build/run-ninja.py"
  args = [
    "-C", rebase_path(target_out_dir, root_build_dir) + "/Release",
    "node_lib"
  ]
  if (is_mac) {
    outputs = [ "$target_out_dir/Release/libnode.dylib" ]
  }
  if (is_linux) {
    outputs = [ "$target_out_dir/Release/lib/libnode.so" ]
  }
}

node_libs = get_target_outputs(":build_node")

copy("copy_node") {
  deps = [ ":build_node" ]
  sources = node_libs
  outputs = [ "$root_out_dir/{{source_file_part}}" ]
}

config("node_config") {
  include_dirs = [
    "//third_party/electron_node/src",
    "//third_party/electron_node/deps/uv/include",
    "//third_party/electron_node/deps/cares/include",
  ]
  libs = node_libs
  cflags_cc = [
    "-Wno-deprecated-declarations",
  ]
  defines = [
    # We need to access internal implementations of Node.
    "NODE_WANT_INTERNALS=1",
    "NODE_SHARED_MODE",
    "HAVE_OPENSSL=1",
    "HAVE_INSPECTOR=1",
  ]
}

group("node") {
  public_configs = [ ":node_config" ]
  public_deps = [ ":copy_node" ]
}
