Alien-Xmake
view release on metacpan or search on metacpan
eg/alien_xrepo.pl view on Meta::CPAN
# Initialize
my $repo = Alien::Xrepo->new();
# Add a custom repository (optional)
# $repo->add_repo( 'my-repo', 'https://github.com/my/repo.git' );
# Install a shared lib with an automatic configuration
my $ogg = $repo->install('libvorbis');
# Install a library with specific configuration
# equivalent to: xrepo install -p windows -a x86_64 -m debug --configs='shared=true,vs_runtime=MD' libpng
my $pkg = $repo->install( 'libpng', '1.6.x', plat => 'windows', arch => 'x64', mode => 'debug', configs => { vs_runtime => 'MD' } );
die 'Install failed' unless $pkg;
# Automatically wrap zlib as a whole with Affix::Wrap
use Affix;
use Affix::Wrap;
my $zlib = $repo->install('zlib');
Affix::Wrap->new(
project_files => [ $zlib->find_header('zlib.h') ],
include_dirs => [ $zlib->includedirs ],
types => { gzFile_s => Pointer [Void] }
lib/Alien/Xrepo.pm view on Meta::CPAN
push @cmd, $name if defined $name;
system @cmd;
}
#
method _build_args ($opts) {
my @args;
# Standard xmake/xrepo flags
push @args, '-p', $opts->{plat} if $opts->{plat}; # platform (iphoneos, android, etc)
push @args, '-a', $opts->{arch} if $opts->{arch}; # architecture (arm64, x86_64)
push @args, '-m', $opts->{mode} if $opts->{mode}; # debug/release
push @args, '-k', ( $opts->{kind} // 'shared' ); # static/shared (Default to shared for FFI)
push @args, '--toolchain=' . $opts->{toolchain} if $opts->{toolchain};
# Complex configs (passed as --configs='key=val,key2=val2')
if ( my $c = $opts->{configs} ) {
if ( ref $c eq 'HASH' ) {
my $str = join( ',', map {"$_=$c->{$_}"} sort keys %$c );
push @args, "--configs=$str";
}
else {
lib/Alien/Xrepo.pod view on Meta::CPAN
# Initialize
my $repo = Alien::Xrepo->new( );
# Add a custom repository (optional)
# $repo->add_repo( 'my-repo', 'https://github.com/my/repo.git' );
# Install a shared lib with an automatic configuration
my $ogg = $repo->install('libvorbis');
# Install a library with specific configuration
# equivalent to: xrepo install -p windows -a x86_64 -m debug --configs='shared=true,vs_runtime=MD' libpng
my $pkg = $repo->install( 'libpng', '1.6.x', plat => 'windows', arch => 'x64', mode => 'debug', configs => { vs_runtime => 'MD' } );
die 'Install failed' unless $pkg;
# Automatically wrap zlib as a whole with Affix::Wrap
use Affix;
use Affix::Wrap;
my $zlib = $repo->install('zlib');
Affix::Wrap->new(
project_files => [ $zlib->find_header('zlib.h') ],
include_dirs => [ $zlib->includedirs ],
types => { gzFile_s => Pointer [Void] }
lib/Alien/Xrepo.pod view on Meta::CPAN
=item B<plat>
Target platform (e.g., C<windows>, C<linux>, C<macosx>, C<android>, C<iphoneos>, C<wasm>).
=item B<arch>
Target architecture (e.g., C<x86_64>, C<arm64>, C<riscv64>).
=item B<mode>
Build mode: C<debug> or C<release>.
=item B<kind>
Library kind: C<shared> (default) or C<static>.
I<Note: For FFI, you almost always want C<shared>, but C<static> is available if you are linking archives with, say, an
XS module.>
=item B<toolchain>
( run in 1.093 second using v1.01-cache-2.11-cpan-0b74b88170d )