Alien-Libtensorflow
view release on metacpan or search on metacpan
},
gpu => {
bucket_prefix => 'libtensorflow/libtensorflow-gpu-windows-x86_64',
bucket_format => 'zip',
},
}
},
);
my %os_dynamic_lib = (
'linux' => 'libtensorflow.so.2',
'darwin' => 'libtensorflow.2.dylib',
'MSWin32' => 'tensorflow.dll',
);
my %other_os_dynamic_lib = (
'linux' => 'libtensorflow_framework.so.2',
'darwin' => 'libtensorflow_framework.2.dylib',
);
probe sub {
# linux: ./lib/libtensorflow.so.2
# darwin: ./lib/libtensorflow.2.dylib
# win32: ./lib/tensorflow.dll
my @prefix = ( "/usr/local" );
for my $prefix (@prefix) {
my $dylib_path = File::Spec->catfile(
$prefix, qw(lib),
$os_dynamic_lib{ $^O }
);
return 'system' if -f $dylib_path;
}
return 'share';
};
sub detect_gpu {
# detect Nvidia
if( $^O eq 'linux' ) {
return !! File::Which::which('nvidia-smi');
} elsif( $^O eq 'MSWin32' ) {
local $ENV{PATH} = $ENV{PATH};
push @PATH, File::Spec->catfile($ENV{ProgramFiles}, 'NVIDIA Corporation','NVSMI' );
return !! File::Which::which('nvidia-smi');
}
return 0;
}
sub device_type {
return 'gpu' if detect_gpu;
return 'cpu';
}
share {
requires 'HTTP::Tiny' => 0;
requires 'Net::SSLeay' => 0;
requires 'IO::Socket::SSL' => 0;
requires 'URI' => 0;
requires 'File::Which';
requires 'Alien::Build::Plugin::Download::GitHub' => 0.10;
$ENV{ALIEN_LIBTENSORFLOW_FROM_BINARY_ALLOW_RELEASE_CANDIDATES} ||= 0;
# 0|1 (default: 0)
$ENV{ALIEN_LIBTENSORFLOW_FROM_SOURCE} ||= 0;
# release|debug (default: release)
$ENV{ALIEN_LIBTENSORFLOW_FROM_SOURCE_BUILD_TYPE} ||= 'release';
die "Unknown value for ALIEN_LIBTENSORFLOW_FROM_SOURCE_BUILD_TYPE = $ALIEN_LIBTENSORFLOW_FROM_SOURCE_BUILD_TYPE"
unless $ALIEN_LIBTENSORFLOW_FROM_SOURCE_BUILD_TYPE =~ /^(release|debug)$/;
# auto|cpu|gpu (default: auto)
$ENV{ALIEN_LIBTENSORFLOW_DEVICE_TYPE} ||= 'auto';
die "Unknown value for ALIEN_LIBTENSORFLOW_DEVICE_TYPE = $ALIEN_LIBTENSORFLOW_DEVICE_TYPE"
unless $ALIEN_LIBTENSORFLOW_DEVICE_TYPE =~ /^(auto|cpu|gpu)$/;
my $os_arch = join ":", ( $^O, meta->prop->{platform}{cpu}{arch}{name} );
if(exists $os_arch_data{$os_arch} && !$ENV{ALIEN_LIBTENSORFLOW_FROM_SOURCE}) {
my $device_type = $ALIEN_LIBTENSORFLOW_DEVICE_TYPE eq 'auto'
? device_type()
: $ALIEN_LIBTENSORFLOW_DEVICE_TYPE;
die "Binary release for $os_arch + $device_type does not exist"
unless exists $os_arch_data{$os_arch}{device_type}{$device_type};
my $data = $os_arch_data{$os_arch}{device_type}{$device_type};
my $version_filter = exists $ENV{ALIEN_LIBTENSORFLOW_FROM_BINARY_VERSION}
? $ALIEN_LIBTENSORFLOW_FROM_BINARY_VERSION
: '2.';
(my $bucket_prefix_no_dir = $data->{bucket_prefix}) =~ s,^libtensorflow/,,;
my $re = qr{
^
\Q@{[ $bucket_prefix_no_dir ]}\E
-
(?<version> .* )
\.
\Q@{[ $data->{bucket_format} ]}\E
$
}x;
my $bucket_url = 'https://storage.googleapis.com/tensorflow/';
my $start_url = URI->new($bucket_url);
$start_url->query_form( prefix => join('',
$data->{bucket_prefix},
'-',
$version_filter,
));
start_url $start_url;
plugin 'Decode::Mojo';
meta->around_hook( fetch => sub {
my $orig = shift;
my $build = shift;
my $fetched = $orig->($build, @_);
( run in 0.540 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )