diff --git a/perl-to-rust/Cargo.toml b/perl-to-rust/Cargo.toml new file mode 100644 index 0000000..93a038e --- /dev/null +++ b/perl-to-rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "perl-to-rust" +version = "0.1.0" +#modified based on python version +authors = ["Hao Wu "] + +[lib] +name = "double_input" +crate-type = ["dylib"] diff --git a/perl-to-rust/Makefile b/perl-to-rust/Makefile new file mode 100644 index 0000000..a49e37e --- /dev/null +++ b/perl-to-rust/Makefile @@ -0,0 +1,15 @@ +ifeq ($(shell uname),Darwin) + EXT := dylib +else + EXT := so +endif + +all: target/libdouble_input.so + perl src/main.pl + +target/libdouble_input.so: src/lib.rs Cargo.toml + cargo build + (cd target && ln -nsf debug/libdouble_input-*$(EXT) libdouble_input.so) + +clean: + rm -rf target diff --git a/perl-to-rust/src/lib.rs b/perl-to-rust/src/lib.rs new file mode 100644 index 0000000..bf573d1 --- /dev/null +++ b/perl-to-rust/src/lib.rs @@ -0,0 +1,4 @@ +#[no_mangle] +pub extern fn double_input(input: i32) -> i32 { + input * 2 +} diff --git a/perl-to-rust/src/main.pl b/perl-to-rust/src/main.pl new file mode 100644 index 0000000..24265cc --- /dev/null +++ b/perl-to-rust/src/main.pl @@ -0,0 +1,14 @@ +use v5.10; +use FFI::Raw; + +my $double_input = FFI::Raw->new( + "target/libdouble_input.so", + 'double_input', + FFI::Raw::int, # return value + FFI::Raw::int # arg #1 +); + +my $input = 4; +my $output = $double_input->call($input); +say $input . " * 2 = " . $output; +