Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
Link::C - Link C libraries into your Perl 6 program Supports most functions of native types (int, char *, etc.) No support for structs, but this can be added eventually. Only works with Rakudo. USAGE: use Link::C; Link::C::link <library_file header.h>; my $result = C::my_function("arguments", 42); OPTIONS: (give to Link::C::link) :link($match, ...) (Default: *) - Link only functions whose names match $match. Useful if you're interested in only a small subset of a large library that would take a long time to process. :skip($match, ...) - Do not link functions whose names match $match. This overrides :link. :import($match, ...) :import($match => $subst, ...) - Import functions into global namespace By default functions are put into the C:: namespace. Using this option will import the functions whose names match $match, optionally replacing those parts of their name with $subst. You can include namespace seperators in the string. This is mainly so you can say: :import(/^SDL_/ => 'SDL::') or such, and call SDL::Init instead of C::SDL_Init. Using :import(*) will put all functions into the global namespace. :verbose - Print status messages to STDERR for the impatient. :quiet - Disable non-fatal warnings such as when caching fails. :cache (Default: True) - Cache the linking code. :!cache - Do not cache the linking code. :cache<always> - Use cache even if old. Use this if you don't want Link::C to regenerate the linking code every time your program is modified. To force regeneration, delete both cache files manually or remove this option. INSTALLATION: Copy the Link directory to wherever you keep your perl 6 libraries. DEPENDENCIES: perl >= 5.10 nm gcc or cpp NOTES: Eventually, you will simply be able to say: use Link::C <library header.h>; instead of: use Link::C; Link::C::link <library header.h>; but this is not possible until custom imports are specced and implemented. Due to Rakudo's speed, the first run-through of your program will take a bit of time to generate and compile the linking code. However, this code will be cached at $yourprogram.linkc-cache.pm and $yourprogram.linkc-cache.pir. Once cached there will be minimal overhead. For even shorter load times, do this: $ perl6 --target=pir Link/C.pm > Link/C.pir Right now, Link::C::link can only be called once, because the cache would get overwritten. However, you can give all your libraries and headers to Link::C at once, and it will automatically link each function to the right library. This will probably be faster than doing it in multiple passes anyway. Link::C assumes your library files are in ELF format.