Add first c test to test the C api

This commit is contained in:
Brandon Fish
2019-02-01 22:10:36 -06:00
parent 6f05146737
commit 62f7bb607e
8 changed files with 54 additions and 13 deletions

View File

@ -1,4 +1,8 @@
# Wasmer Runtime C API
## Generating header files
Run `make capi`
Run `make capi` from wasmer project root directory
## Running tests
`cmake . && make && make test` from runtime-c-api/tests directory
(TODO run this within a rust test)

View File

@ -15,8 +15,10 @@ fn main() {
fn build() {
let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
use cbindgen::Language;
cbindgen::Builder::new()
.with_crate(crate_dir)
.with_language(Language::C)
.generate()
.expect("Unable to generate bindings")
.write_to_file("wasmer.h");

View File

@ -23,6 +23,7 @@ pub extern "C" fn wasmer_import_object_new() -> *mut wasmer_import_object_t {
Box::into_raw(Box::new(ImportObject::new())) as *mut wasmer_import_object_t
}
#[allow(clippy::cast_ptr_alignment)]
#[no_mangle]
pub extern "C" fn wasmer_import_object_destroy(import_object: *mut wasmer_import_object_t) {
if !import_object.is_null() {
@ -30,6 +31,7 @@ pub extern "C" fn wasmer_import_object_destroy(import_object: *mut wasmer_import
}
}
#[allow(clippy::cast_ptr_alignment)]
#[no_mangle]
pub extern "C" fn wasmer_instantiate(
mut instance: *mut wasmer_instance_t,

12
lib/runtime-c-api/tests/.gitignore vendored Normal file
View File

@ -0,0 +1,12 @@
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
test-instantiate

View File

@ -0,0 +1,11 @@
cmake_minimum_required (VERSION 2.6)
project (WasmerCApiTests)
add_executable(test-instantiate test-instantiate.c)
target_link_libraries(test-instantiate
general "${CMAKE_SOURCE_DIR}/../../../target/debug/libwasmer_runtime_c_api.dylib")
enable_testing()
add_test(test-instantiate test-instantiate)

View File

@ -0,0 +1,4 @@
#[test]
fn test_c_api() {
// TODO run `cmake . && make && make test`
}

View File

@ -0,0 +1,9 @@
#include <stdio.h>
#include "../wasmer.h"
int main()
{
wasmer_import_object_t *import_object = wasmer_import_object_new();
wasmer_import_object_destroy(import_object);
return 0;
}

View File

@ -1,24 +1,21 @@
#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
enum class wasmer_compile_result_t {
typedef enum {
WASMER_COMPILE_OK = 1,
WASMER_COMPILE_ERROR = 2,
};
} wasmer_compile_result_t;
struct wasmer_import_object_t;
typedef struct wasmer_import_object_t wasmer_import_object_t;
struct wasmer_instance_t;
extern "C" {
typedef struct wasmer_instance_t wasmer_instance_t;
void wasmer_import_object_destroy(wasmer_import_object_t *import_object);
wasmer_import_object_t *wasmer_import_object_new();
wasmer_import_object_t *wasmer_import_object_new(void);
wasmer_compile_result_t wasmer_instantiate(wasmer_instance_t *instance,
const char *bytes,
wasmer_import_object_t *import_object);
} // extern "C"