NAME

FFI::Build::File::Cargo - Write Perl extensions in Rust!

SYNOPSIS

Crete a rust project in the ffi directory that produces a dynamic library:

 $ cargo new --lib --name my_lib ffi
       Created library `my_lib` package

Add this to your ffi/Cargo.toml file to get dynamic libraries:

 [lib]
 crate-type = ["dylib"]

Your library goes in lib/MyLib.pm:

 package MyLib;
 
 use FFI::Platypus 1.00;
 
 my $ffi = FFI::Platypus->new( api => 1, lang => 'Rust' );
 # configure platypus to use the bundled Rust code
 $ffi->bundle;
 
 ...

Your Makefile.PL:

 use ExtUtils::MakeMaker;
 use FFI::Build::MM;
 
 my $fbmm = FFI::Build::MM->new;
 
 WriteMakefile($fbmm->mm_args(
     ABSTRACT       => 'My Lib',
     DISTNAME       => 'MyLib',
     NAME           => 'MyLib',
     VERSION_FROM   => 'lib/MyLib.pm',
     BUILD_REQUIRES => {
         'FFI::Build::MM'          => '1.00',
         'FFI::Build::File::Cargo' => '0.07',
     },
     PREREQ_PM => {
         'FFI::Platypus'             => '1.00',
         'FFI::Platypus::Lang::Rust' => '0.07',
     },
 ));
 
 sub MY::postamble {
     $fbmm->mm_postamble;
 }

or alternatively, your dist.ini:

 [FFI::Build]

DESCRIPTION

This module provides the necessary machinery to bundle rust code with your Perl extension. It uses FFI::Build and cargo to do the heavy lifting.

A complete example comes with this distribution in the examples/Person directory, incouding tests. You can browse this example on the web here:

https://github.com/Perl5-FFI/FFI-Platypus-Lang-Rust/tree/master/examples/Person

The distribution that follows the pattern above works just like a regular Pure-Perl or XS distribution, except:

make

Running the make step builds the Rust library as a dynamic library using cargo, and runs the crate's tests if any are available. It then moves the resulting dynamic library in to the appropriate location in blib so that it can be found at test and runtime.

prove

If you run the tests using prove -l (that is, without building the distribution), Platypus will find the rust crate in the ffi directory, build that and use it on the fly. This makes it easier to test your distribution with less explicit building.

This module is smart enough to check the timestamps on the appropriate files so the library won't need to be rebuilt if the source files haven't changed.

For more details using Perl + Rust with FFI, see FFI::Platypus::Lang::Rust.

SEE ALSO

FFI::Platypus

The Core Platypus documentation.

FFI::Platypus::Lang::Rust

Rust language plugin for Platypus.

AUTHOR

Graham Ollis <plicease@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Graham Ollis.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.