Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  rlbox.mozbuild   Sprache: unbekannt

 
# -*- 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, use_segue=True):
    WASM_SOURCES += [
        "/memory/mozalloc/mozalloc.cpp",
        "/third_party/rlbox_wasm2c_sandbox/c_src/wasm2c_sandbox_wrapper.c",
    ]

    if CONFIG["DEVELOPER_OPTIONS"]:
        wasm_sources = sorted(f"!{name}.wasm_{n}.c" for n in range(16))
    else:
        wasm_sources = [f"!{name}.wasm.c"]
    SOURCES += wasm_sources
    SOURCES += ["/third_party/wasm2c/wasm2c/wasm-rt-impl.c"]
    SOURCES += ["/third_party/wasm2c/wasm2c/wasm-rt-mem-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_NONCONFORMING_UNCHECKED_STACK_EXHAUSTION"] = 1

    # 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"

    for source in wasm_sources:
        SOURCES[source].flags += ["-Wno-unused"]

    # Use Segue optimization. Since this requires passing the "-mfsgsbase", we
    # restrict this to compilers and architectures that support this flag.
    # Manually exclude android for now due to bug in upstream wasm2c support
    if (
        use_segue
        and CONFIG["CC_TYPE"] in ("clang", "gcc")
        and CONFIG["TARGET_CPU"] == "x86_64"
        and CONFIG["OS_TARGET"] != "Android"
        # https://github.com/llvm/llvm-project/issues/124238
        and not (CONFIG["MOZ_ASAN"] or CONFIG["MOZ_TSAN"])
    ):
        # Setting WASM_RT_ALLOW_SEGUE means Segue is used on supported
        # OS/compiler/Arch combinations. For example, it is used for
        # Linux/clang/x86_64 but not on Windows
        DEFINES["WASM_RT_ALLOW_SEGUE"] = 1

        # Segue can assume there is no other use of the segment register by the
        # application. This is fine as the System V ABI for x86_64 systems does
        # not use the gs register for any other purpose.
        DEFINES["WASM_RT_SEGUE_FREE_SEGMENT"] = 1

        # Add a compiler flag for the wasm2c produced file to enable use of
        # wrgsbase64 instruction via intrinsics. While this instruction is
        # available only on CPUs starting Ivybridge, the wasm2c runtime checks for
        # support before using this instruction. Thus, enabling this flag does not
        # introduce a dependency on newer CPUs to Firefox.
        CFLAGS += ["-mfsgsbase"]

    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"],
        flags=["--num-outputs", len(wasm_sources)] if len(wasm_sources) > 1 else [],
    )

[ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge