diff --git a/Cargo.toml b/Cargo.toml index e834e66349..2c6400e249 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,11 +4,15 @@ version = "0.1.0" authors = ["Pat Hickey ", "Jakub Konka "] edition = "2018" +[lib] +proc-macro = true + [dependencies] wiggle-generate = { path = "crates/generate" } -wiggle-runtime = { path = "crates/runtime" } +syn = { version = "1.0", features = ["full"] } [dev-dependencies] +wiggle-runtime = { path = "crates/runtime" } wiggle-test = { path = "crates/test" } proptest = "0.9" diff --git a/crates/generate/Cargo.toml b/crates/generate/Cargo.toml index 9926ca7f80..6008ca57ba 100644 --- a/crates/generate/Cargo.toml +++ b/crates/generate/Cargo.toml @@ -5,7 +5,6 @@ authors = ["Pat Hickey ", "Jakub Konka TokenStream { - let config = parse_macro_input!(args as Config); +pub use config::Config; +pub use funcs::define_func; +pub use module_trait::define_module_trait; +pub use names::Names; +pub use types::define_datatype; +pub fn generate(config: Config) -> TokenStream { let doc = witx::load(&config.witx.paths).expect("loading witx"); let names = Names::new(config); // TODO parse the names from the invocation of the macro, or from a file? @@ -43,10 +37,10 @@ pub fn from_witx(args: TokenStream) -> TokenStream { ) }); - TokenStream::from(quote!( + quote!( mod types { #(#types)* } #(#modules)* - )) + ) } diff --git a/src/lib.rs b/src/lib.rs index 2b66a42972..24e2e4909b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,10 @@ -/* -pub mod wasi { - generate::from_witx!("crates/WASI/phases/snapshot/witx/wasi_snapshot_preview1.witx"); +extern crate proc_macro; + +use proc_macro::TokenStream; +use syn::parse_macro_input; + +#[proc_macro] +pub fn from_witx(args: TokenStream) -> TokenStream { + let config = parse_macro_input!(args as wiggle_generate::Config); + TokenStream::from(wiggle_generate::generate(config)) } -*/ diff --git a/tests/arrays.rs b/tests/arrays.rs index 0a5e0641fa..f8ec9a3675 100644 --- a/tests/arrays.rs +++ b/tests/arrays.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestArray, GuestError, GuestPtr, GuestPtrMut, GuestType}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/arrays.witx"], ctx: WasiCtx, }); diff --git a/tests/atoms.rs b/tests/atoms.rs index e9be5479b6..3a6f56ac52 100644 --- a/tests/atoms.rs +++ b/tests/atoms.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestError, GuestRef}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/atoms.witx"], ctx: WasiCtx, }); diff --git a/tests/flags.rs b/tests/flags.rs index 0dcc16d3b4..c3973d10e6 100644 --- a/tests/flags.rs +++ b/tests/flags.rs @@ -3,7 +3,7 @@ use std::convert::TryFrom; use wiggle_runtime::{GuestError, GuestPtr}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/flags.witx"], ctx: WasiCtx, }); diff --git a/tests/handles.rs b/tests/handles.rs index ed86a04519..b082bd3ef8 100644 --- a/tests/handles.rs +++ b/tests/handles.rs @@ -4,7 +4,7 @@ use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; const FD_VAL: u32 = 123; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/handles.witx"], ctx: WasiCtx, }); diff --git a/tests/ints.rs b/tests/ints.rs index f6a00ccc4a..6a927adf00 100644 --- a/tests/ints.rs +++ b/tests/ints.rs @@ -3,7 +3,7 @@ use std::convert::TryFrom; use wiggle_runtime::GuestError; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/ints.witx"], ctx: WasiCtx, }); diff --git a/tests/pointers.rs b/tests/pointers.rs index e086c59061..ec0977c8bc 100644 --- a/tests/pointers.rs +++ b/tests/pointers.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestError, GuestPtr, GuestPtrMut, GuestRefMut, GuestType}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/pointers.witx"], ctx: WasiCtx, }); diff --git a/tests/strings.rs b/tests/strings.rs index f25c8dc9e6..4558108b37 100644 --- a/tests/strings.rs +++ b/tests/strings.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestError, GuestPtrMut, GuestString}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/strings.witx"], ctx: WasiCtx, }); diff --git a/tests/structs.rs b/tests/structs.rs index 40f212f551..e36b0d4903 100644 --- a/tests/structs.rs +++ b/tests/structs.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestError, GuestPtr}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/structs.witx"], ctx: WasiCtx, }); diff --git a/tests/union.rs b/tests/union.rs index 91b50c033f..7a3a6f0364 100644 --- a/tests/union.rs +++ b/tests/union.rs @@ -2,7 +2,7 @@ use proptest::prelude::*; use wiggle_runtime::{GuestError, GuestType}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx}; -wiggle_generate::from_witx!({ +wiggle::from_witx!({ witx: ["tests/union.witx"], ctx: WasiCtx, });