mirror of
https://github.com/fluencelabs/wasmer
synced 2025-07-31 07:12:10 +00:00
Merge #1123
1123: feat(runtime-c-api) Define the `DEPRECATED` C macro. r=Hywan a=Hywan This PR defines a cross-compiler `DEPRECATED(message)` macro. It must be used as follows in Rust: ```rust /// This is a documentation. /// cbindgen:prefix=DEPRECATED("This is a deprecation message.") pub extern "C" fn wasmer_foo() -> c_uint { 42 } ``` It will generate the following C header: ```c /** * This is a documentation. */ DEPRECATED("This is a deprecation message.") unsigned int wasmer_foo(); ``` And once this code is used by a C compiler, it will print something like this (example from Clang): ``` …/test.c:…:…: error: 'wasmer_foo' is deprecated: This is a deprecation message. [-Werror,-Wdeprecated-declarations] unsigned int x = wasmer_foo(); ^ …/wasmer.h:…:…: note: 'wasmer_foo' has been explicitly marked deprecated here DEPRECATED("This is a deprecation message.") ^ …/wasmer.h:…:…: note: expanded from macro 'DEPRECATED' ``` This is required for further deprecations. (cf https://github.com/eqrion/cbindgen/issues/408) Co-authored-by: Ivan Enderlin <ivan.enderlin@hoa-project.net> Co-authored-by: Ivan Enderlin <ivan.enderlin@wanadoo.fr>
This commit is contained in:
@@ -14,18 +14,31 @@ fn main() {
|
||||
|
||||
let mut pre_header = r#"
|
||||
#if !defined(WASMER_H_MACROS)
|
||||
|
||||
#define WASMER_H_MACROS
|
||||
|
||||
#if defined(MSVC)
|
||||
#if defined(_M_AMD64)
|
||||
#define ARCH_X86_64
|
||||
#endif
|
||||
// Define the `ARCH_X86_X64` constant.
|
||||
#if defined(MSVC) && defined(_M_AMD64)
|
||||
# define ARCH_X86_64
|
||||
#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
|
||||
# define ARCH_X86_64
|
||||
#endif
|
||||
|
||||
#if defined(GCC) || defined(__GNUC__) || defined(__clang__)
|
||||
#if defined(__x86_64__)
|
||||
#define ARCH_X86_64
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_attribute)
|
||||
# define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_declspec_attribute)
|
||||
# define __has_declspec_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Define the `DEPRECATED` macro.
|
||||
#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
|
||||
# define DEPRECATED(message) __attribute__((deprecated(message)))
|
||||
#elif defined(MSVC) || __has_declspec_attribute(deprecated)
|
||||
# define DEPRECATED(message) __declspec(deprecated(message))
|
||||
#endif
|
||||
|
||||
"#
|
||||
@@ -41,7 +54,7 @@ fn main() {
|
||||
pre_header += "#define WASMER_EMSCRIPTEN_ENABLED\n";
|
||||
}
|
||||
|
||||
// close pre header
|
||||
// Close pre header.
|
||||
pre_header += "#endif // WASMER_H_MACROS\n";
|
||||
|
||||
// Generate the C bindings in the `OUT_DIR`.
|
||||
|
@@ -1,17 +1,30 @@
|
||||
|
||||
#if !defined(WASMER_H_MACROS)
|
||||
|
||||
#define WASMER_H_MACROS
|
||||
|
||||
#if defined(MSVC)
|
||||
#if defined(_M_AMD64)
|
||||
#define ARCH_X86_64
|
||||
#endif
|
||||
// Define the `ARCH_X86_X64` constant.
|
||||
#if defined(MSVC) && defined(_M_AMD64)
|
||||
# define ARCH_X86_64
|
||||
#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
|
||||
# define ARCH_X86_64
|
||||
#endif
|
||||
|
||||
#if defined(GCC) || defined(__GNUC__) || defined(__clang__)
|
||||
#if defined(__x86_64__)
|
||||
#define ARCH_X86_64
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_attribute)
|
||||
# define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_declspec_attribute)
|
||||
# define __has_declspec_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Define the `DEPRECATED` macro.
|
||||
#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
|
||||
# define DEPRECATED(message) __attribute__((deprecated(message)))
|
||||
#elif defined(MSVC) || __has_declspec_attribute(deprecated)
|
||||
# define DEPRECATED(message) __declspec(deprecated(message))
|
||||
#endif
|
||||
|
||||
#define WASMER_WASI_ENABLED
|
||||
|
@@ -1,17 +1,30 @@
|
||||
|
||||
#if !defined(WASMER_H_MACROS)
|
||||
|
||||
#define WASMER_H_MACROS
|
||||
|
||||
#if defined(MSVC)
|
||||
#if defined(_M_AMD64)
|
||||
#define ARCH_X86_64
|
||||
#endif
|
||||
// Define the `ARCH_X86_X64` constant.
|
||||
#if defined(MSVC) && defined(_M_AMD64)
|
||||
# define ARCH_X86_64
|
||||
#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
|
||||
# define ARCH_X86_64
|
||||
#endif
|
||||
|
||||
#if defined(GCC) || defined(__GNUC__) || defined(__clang__)
|
||||
#if defined(__x86_64__)
|
||||
#define ARCH_X86_64
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_attribute)
|
||||
# define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Compatibility with non-Clang compilers.
|
||||
#if !defined(__has_declspec_attribute)
|
||||
# define __has_declspec_attribute(x) 0
|
||||
#endif
|
||||
|
||||
// Define the `DEPRECATED` macro.
|
||||
#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
|
||||
# define DEPRECATED(message) __attribute__((deprecated(message)))
|
||||
#elif defined(MSVC) || __has_declspec_attribute(deprecated)
|
||||
# define DEPRECATED(message) __declspec(deprecated(message))
|
||||
#endif
|
||||
|
||||
#define WASMER_WASI_ENABLED
|
||||
|
Reference in New Issue
Block a user