475eef01c3
On Windows, you need to link against the `.lib` but the `.dll` needs to be next to the `.exe` at runtime, so we need to copy both.
114 lines
3 KiB
Text
114 lines
3 KiB
Text
action("configure_node") {
|
|
script = "//third_party/electron_node/configure"
|
|
ssl_libname_suffix = ""
|
|
if (is_win) {
|
|
ssl_libname_suffix = ".dll"
|
|
}
|
|
args = [
|
|
"--enable-static",
|
|
"--release-urlbase=https://atom.io/download/electron",
|
|
"--shared",
|
|
"--shared-openssl",
|
|
"--shared-openssl-includes=" + rebase_path("//third_party/boringssl/src/include"),
|
|
"--shared-openssl-libname=boringssl" + ssl_libname_suffix,
|
|
"--shared-openssl-libpath=" + rebase_path(root_out_dir),
|
|
"--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",
|
|
]
|
|
|
|
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/boringssl",
|
|
"//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" ]
|
|
}
|
|
if (is_win) {
|
|
outputs = [ "$target_out_dir/Release/node.dll.lib", "$target_out_dir/Release/node.dll" ]
|
|
}
|
|
}
|
|
|
|
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[0] ]
|
|
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" ]
|
|
}
|