From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../preprocess_wasm2c_config.py | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 config/external/wasm2c_sandbox_compiler/preprocess_wasm2c_config.py (limited to 'config/external/wasm2c_sandbox_compiler/preprocess_wasm2c_config.py') diff --git a/config/external/wasm2c_sandbox_compiler/preprocess_wasm2c_config.py b/config/external/wasm2c_sandbox_compiler/preprocess_wasm2c_config.py new file mode 100644 index 0000000000..3edb8f4e06 --- /dev/null +++ b/config/external/wasm2c_sandbox_compiler/preprocess_wasm2c_config.py @@ -0,0 +1,139 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Souce Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distibuted with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import itertools + +# The wasm2c source relies on CMAKE to generate a config file to be used to build the project +# Since we do not use cmake, this script automates the generation of a similar config suitable +# for firefox builds +# The script has a list of known variables it can replace and throws an error if it encounters a +# new variable (for instance when the in-tree source is updated) + +# This python script knows how to replace the following variables normally configured by cmake for +# the wasm2c source +known_vars = [ + '#cmakedefine WABT_VERSION_STRING "@WABT_VERSION_STRING@"', + "#cmakedefine WABT_DEBUG @WABT_DEBUG@", + "#cmakedefine01 HAVE_ALLOCA_H", + "#cmakedefine01 HAVE_UNISTD_H", + "#cmakedefine01 HAVE_SNPRINTF", + "#cmakedefine01 HAVE_SSIZE_T", + "#cmakedefine01 HAVE_STRCASECMP", + "#cmakedefine01 HAVE_WIN32_VT100", + "#cmakedefine01 WABT_BIG_ENDIAN", + "#cmakedefine01 HAVE_OPENSSL_SHA_H", + "#cmakedefine01 COMPILER_IS_CLANG", + "#cmakedefine01 COMPILER_IS_GNU", + "#cmakedefine01 COMPILER_IS_MSVC", + "#cmakedefine01 WITH_EXCEPTIONS", + "#define SIZEOF_SIZE_T @SIZEOF_SIZE_T@", +] + +# The above variables are replaced with the code shown below +replaced_variables = """ +// mozilla-config.h defines the following which is used +// - HAVE_ALLOCA_H +// - HAVE_UNISTD_H +#include "mozilla-config.h" + +#define WABT_VERSION_STRING "Firefox-in-tree-version" + +#define WABT_DEBUG 0 + +/* We don't require color printing of wasm2c errors on any platform */ +#define HAVE_WIN32_VT100 0 + +#ifdef _WIN32 + // Ignore whatever is set in mozilla-config.h wrt alloca because it is + // wrong when cross-compiling on Windows. + #undef HAVE_ALLOCA_H + // It is wrong when cross-compiling on Windows. + #undef HAVE_UNISTD_H + /* Whether ssize_t is defined by stddef.h */ + #define HAVE_SSIZE_T 0 + /* Whether strcasecmp is defined by strings.h */ + #define HAVE_STRCASECMP 0 +#else + #define HAVE_SSIZE_T 1 + #define HAVE_STRCASECMP 1 +#endif + +#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) +# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define WABT_BIG_ENDIAN 0 +# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define WABT_BIG_ENDIAN 1 +# else +# error "Can't handle mixed-endian architectures" +# endif +#else +# error "Don't know how to determine endianness" +#endif + +/* Use internal Pico-SHA. Never use OpenSSL */ +#define HAVE_OPENSSL_SHA_H 0 + +/* Whether snprintf is defined by stdio.h */ +#define HAVE_SNPRINTF 1 + +#if defined(_MSC_VER) + #define COMPILER_IS_GNU 0 + #define COMPILER_IS_CLANG 0 + #define COMPILER_IS_MSVC 1 +#elif defined(__GNUC__) + #if defined(__clang__) + #define COMPILER_IS_GNU 0 + #define COMPILER_IS_CLANG 1 + #define COMPILER_IS_MSVC 0 + #else + #define COMPILER_IS_GNU 1 + #define COMPILER_IS_CLANG 0 + #define COMPILER_IS_MSVC 0 + #endif +#else + #error "Unknown compiler" +#endif + +#define WITH_EXCEPTIONS 0 + +#if SIZE_MAX == 0xffffffffffffffff + #define SIZEOF_SIZE_T 8 +#elif SIZE_MAX == 0xffffffff + #define SIZEOF_SIZE_T 4 +#else + #error "Unknown size of size_t" +#endif +""" + + +def generate_config(output, config_h_in): + file_config_h_in = open(config_h_in, "r") + lines = file_config_h_in.readlines() + + # Remove the known cmake variables + for known_var in known_vars: + lines = [x for x in lines if not x.startswith(known_var)] + + # Do a sanity check to make sure there are no unknown variables + remaining_vars = [x for x in lines if x.startswith("#cmakedefine") or "@" in x] + if len(remaining_vars) > 0: + raise BaseException("Unknown cmake variables: " + str(remaining_vars)) + + pos = lines.index("#define WABT_CONFIG_H_\n") + skipped = itertools.takewhile( + lambda x: not (x.strip()) or x.startswith("#include "), lines[pos + 1 :] + ) + pos += len(list(skipped)) + pre_include_lines = lines[0:pos] + post_include_lines = lines[pos:] + output_str = ( + "".join(pre_include_lines) + + "\n" + + replaced_variables + + "\n" + + "".join(post_include_lines) + ) + output.write(output_str) -- cgit v1.2.3