summaryrefslogtreecommitdiffstats
path: root/security/rlbox/rlbox.mozbuild
blob: 8e91eff8ae4e105abdb3dc72a026b7db1c71e0ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.


@template
def RLBoxLibrary(name):
    WASM_SOURCES += [
        "/memory/mozalloc/mozalloc.cpp",
        "/third_party/rlbox_wasm2c_sandbox/c_src/wasm2c_sandbox_wrapper.c",
    ]

    SOURCES += [f"!{name}.wasm.c"]
    SOURCES += ["/third_party/wasm2c/wasm2c/wasm-rt-impl.c"]

    # Configuration for the wasm2c runtime used by RLBox

    # Enable SIMD autovectorization
    if CONFIG["WASM_CC_VERSION"] and int(CONFIG["WASM_CC_VERSION"].split(".")[0]) >= 11:
        WASM_CXXFLAGS += ["-msimd128"]

    # Use a mmap style allocation
    DEFINES["WASM_RT_USE_MMAP"] = 1

    # Don't use internal signal handler as Firefox already provides one
    DEFINES["WASM_RT_SKIP_SIGNAL_RECOVERY"] = 1

    # We provide a custom trap handler that calls MOZ_CRASH
    DEFINES["WASM_RT_TRAP_HANDLER"] = "moz_wasm2c_trap_handler"

    # Don't limit the nested call depth
    DEFINES["WASM_RT_USE_STACK_DEPTH_COUNT"] = 0

    # Configure the wasm runtime to invoke a callback when a Wasm memory growth
    # fails inside the sandbox. This information is used to annotate crash reports.
    DEFINES["WASM_RT_GROW_FAILED_HANDLER"] = "moz_wasm2c_memgrow_failed"

    SOURCES[f"!{name}.wasm.c"].flags += [
        "-Wno-unused",
    ]

    WASM_DEFINES["MOZ_IN_WASM_SANDBOX"] = True
    if CONFIG["ENABLE_CLANG_PLUGIN"]:
        WASM_DEFINES["MOZ_CLANG_PLUGIN"] = True

    SANDBOXED_WASM_LIBRARY_NAME = f"{name}.wasm"

    # Ideally we'd also list {name}.wasm.h as an output, but that would put the
    # generation in export rather than pre-compile, and we prefer the latter.
    GeneratedFile(
        f"{name}.wasm.c",
        script="/config/wasm2c.py",
        entry_point="wasm2c",
        inputs=["!/dist/host/bin/wasm2c" + CONFIG["HOST_BIN_SUFFIX"], f"!{name}.wasm"],
    )