80f204a6ee
Adds support to webassembly and enables it by default. Adds wee8 target. We can compile without wasm with: `bazel build :d8 --no//:v8_enable_webassembly` Bug: v8:11234 Change-Id: I90b11eb71aed808005b66e40e37894616d8b1658 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2960803 Commit-Queue: Victor Gomes <victorgomes@chromium.org> Reviewed-by: Dan Elphick <delphick@chromium.org> Cr-Commit-Position: refs/heads/master@{#75200}
227 lines
6.4 KiB
Python
227 lines
6.4 KiB
Python
# Copyright 2021 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.
|
|
|
|
FlagInfo = provider(fields = ["value"])
|
|
|
|
def _options_impl(ctx):
|
|
return FlagInfo(value = ctx.build_setting_value)
|
|
|
|
_create_option_flag = rule(
|
|
implementation = _options_impl,
|
|
build_setting = config.bool(flag = True),
|
|
)
|
|
|
|
_create_option_string = rule(
|
|
implementation = _options_impl,
|
|
build_setting = config.string(flag = True),
|
|
)
|
|
|
|
_create_option_int = rule(
|
|
implementation = _options_impl,
|
|
build_setting = config.int(flag = True),
|
|
)
|
|
|
|
def v8_flag(name, default = False):
|
|
_create_option_flag(name = name, build_setting_default = default)
|
|
native.config_setting(name = "is_" + name, flag_values = {name: "True"})
|
|
|
|
def v8_string(name, default = ""):
|
|
_create_option_string(name = name, build_setting_default = default)
|
|
|
|
def v8_int(name, default = 0):
|
|
_create_option_int(name = name, build_setting_default = default)
|
|
|
|
def _custom_config_impl(ctx):
|
|
defs = []
|
|
defs.append("V8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=" +
|
|
str(ctx.attr._v8_typed_array_max_size_in_heap[FlagInfo].value))
|
|
context = cc_common.create_compilation_context(defines = depset(defs))
|
|
return [CcInfo(compilation_context = context)]
|
|
|
|
v8_custom_config = rule(
|
|
implementation = _custom_config_impl,
|
|
attrs = {
|
|
"_v8_typed_array_max_size_in_heap":
|
|
attr.label(default = "//:v8_typed_array_max_size_in_heap"),
|
|
}
|
|
)
|
|
|
|
def _config_impl(ctx):
|
|
hdrs = []
|
|
# Add headers
|
|
for h in ctx.attr.hdrs:
|
|
hdrs += h[DefaultInfo].files.to_list()
|
|
defs = []
|
|
# Add conditional_defines
|
|
for f, d in ctx.attr.conditional_defines.items():
|
|
if f[FlagInfo].value:
|
|
defs.append(d)
|
|
# Add defines
|
|
for d in ctx.attr.defines:
|
|
defs.append(d)
|
|
context = cc_common.create_compilation_context(
|
|
defines = depset(
|
|
defs,
|
|
transitive = [dep[CcInfo].compilation_context.defines for dep in ctx.attr.deps],
|
|
),
|
|
headers = depset(
|
|
hdrs,
|
|
transitive = [dep[CcInfo].compilation_context.headers for dep in ctx.attr.deps],
|
|
),
|
|
)
|
|
return [CcInfo(compilation_context = context)]
|
|
|
|
v8_config = rule(
|
|
implementation = _config_impl,
|
|
attrs = {
|
|
"conditional_defines": attr.label_keyed_string_dict(),
|
|
"defines": attr.string_list(),
|
|
"deps": attr.label_list(),
|
|
"hdrs": attr.label_list(allow_files = True),
|
|
},
|
|
)
|
|
|
|
def _default_args(configs):
|
|
return struct(
|
|
deps = configs + ["//:define_flags"],
|
|
copts = [
|
|
"-fPIC",
|
|
"-Werror",
|
|
"-Wextra",
|
|
"-Wno-unused-parameter",
|
|
"-Wno-implicit-int-float-conversion",
|
|
"-Wno-deprecated-copy",
|
|
"-std=c++14",
|
|
"-isystem .",
|
|
# TODO(victorgomes): these should be passed only if x64:
|
|
"-m64",
|
|
"-march=x86-64",
|
|
"-msse3",
|
|
],
|
|
includes = ["include"],
|
|
linkopts = [
|
|
"-pthread",
|
|
"-Wl,--no-as-needed -ldl",
|
|
],
|
|
)
|
|
|
|
def v8_binary(
|
|
name,
|
|
srcs,
|
|
configs = [],
|
|
deps = [],
|
|
includes = [],
|
|
copts = [],
|
|
linkopts = [],
|
|
**kwargs):
|
|
default = _default_args(configs)
|
|
native.cc_binary(
|
|
name = name,
|
|
srcs = srcs,
|
|
deps = deps + default.deps,
|
|
includes = includes + default.includes,
|
|
copts = copts + default.copts,
|
|
linkopts = linkopts + default.linkopts,
|
|
**kwargs
|
|
)
|
|
|
|
def v8_library(
|
|
name,
|
|
srcs,
|
|
configs = [],
|
|
deps = [],
|
|
includes = [],
|
|
copts = [],
|
|
linkopts = [],
|
|
**kwargs):
|
|
default = _default_args(configs)
|
|
native.cc_library(
|
|
name = name,
|
|
srcs = srcs,
|
|
deps = deps + default.deps,
|
|
includes = includes + default.includes,
|
|
copts = copts + default.copts,
|
|
linkopts = linkopts + default.linkopts,
|
|
alwayslink = 1,
|
|
linkstatic = 1,
|
|
**kwargs
|
|
)
|
|
|
|
def _torque_impl(ctx):
|
|
# Arguments
|
|
args = []
|
|
args.append("-o")
|
|
args.append(ctx.genfiles_dir.path + "/torque-generated")
|
|
args.append("-v8-root")
|
|
args.append(".")
|
|
if ctx.attr._v8_annotate_torque_ir[FlagInfo].value:
|
|
args.append("-annotate-ir")
|
|
# Sources
|
|
args += [f.path for f in ctx.files.srcs]
|
|
# Generate/declare output files
|
|
outs = []
|
|
for src in ctx.files.srcs:
|
|
root, period, ext = src.path.rpartition(".")
|
|
file = "torque-generated/" + root
|
|
outs.append(ctx.actions.declare_file(file + "-tq-csa.cc"))
|
|
outs.append(ctx.actions.declare_file(file + "-tq-csa.h"))
|
|
outs.append(ctx.actions.declare_file(file + "-tq-inl.inc"))
|
|
outs.append(ctx.actions.declare_file(file + "-tq.inc"))
|
|
outs.append(ctx.actions.declare_file(file + "-tq.cc"))
|
|
outs += [ctx.actions.declare_file("torque-generated/" + f) for f in ctx.attr.extras]
|
|
ctx.actions.run(
|
|
outputs = outs,
|
|
inputs = ctx.files.srcs,
|
|
arguments = args,
|
|
executable = ctx.executable.tool,
|
|
progress_message = "Generating Torque files",
|
|
)
|
|
return [DefaultInfo(files = depset(outs))]
|
|
|
|
v8_torque = rule(
|
|
implementation = _torque_impl,
|
|
attrs = {
|
|
"srcs": attr.label_list(allow_files = True, mandatory = True),
|
|
"extras": attr.string_list(),
|
|
"tool": attr.label(
|
|
default = "//:torque",
|
|
allow_files = True,
|
|
executable = True,
|
|
cfg = "target",
|
|
),
|
|
"_v8_annotate_torque_ir": attr.label(default = "//:v8_annotate_torque_ir"),
|
|
},
|
|
)
|
|
|
|
def _mksnapshot(ctx):
|
|
outs = [
|
|
ctx.actions.declare_file("snapshot.cc"),
|
|
ctx.actions.declare_file("embedded.S"),
|
|
]
|
|
ctx.actions.run(
|
|
outputs = outs,
|
|
inputs = [],
|
|
arguments = [
|
|
"--embedded_variant=Default",
|
|
"--startup_src", outs[0].path,
|
|
"--embedded_src", outs[1].path,
|
|
],
|
|
executable = ctx.executable.tool,
|
|
progress_message = "Running mksnapshot"
|
|
)
|
|
return [DefaultInfo(files = depset(outs))]
|
|
|
|
|
|
v8_mksnapshot = rule(
|
|
implementation = _mksnapshot,
|
|
attrs = {
|
|
"tool": attr.label(
|
|
default = "//:mksnapshot",
|
|
allow_files = True,
|
|
executable = True,
|
|
cfg = "target",
|
|
),
|
|
}
|
|
)
|