Alien-Libtensorflow
view release on metacpan or search on metacpan
# - ALIEN_LIBTENSORFLOW_DEVICE_TYPE
#
# Which device type to use for binary release.
#
# Values:
# - "auto": automatically detect type (default)
# - "cpu": CPU
# - "gpu": GPU (Currently only Nvidia)
use Env qw(
ALIEN_LIBTENSORFLOW_FROM_BINARY_VERSION
ALIEN_LIBTENSORFLOW_FROM_BINARY_ALLOW_RELEASE_CANDIDATES
ALIEN_LIBTENSORFLOW_FROM_SOURCE
ALIEN_LIBTENSORFLOW_FROM_SOURCE_BUILD_TYPE
ALIEN_LIBTENSORFLOW_DEVICE_TYPE
@PATH
);
my %os_arch_data = (
'linux:x86_64' => {
device_type => {
cpu => {
bucket_prefix => 'libtensorflow/libtensorflow-cpu-linux-x86_64',
bucket_format => 'tar.gz',
},
gpu => {
bucket_prefix => 'libtensorflow/libtensorflow-gpu-linux-x86_64',
bucket_format => 'tar.gz',
},
}
},
'darwin:x86_64' => {
device_type => {
cpu => {
bucket_prefix => 'libtensorflow/libtensorflow-cpu-darwin-x86_64',
bucket_format => 'tar.gz',
}
},
},
'MSWin32:x86_64' => {
device_type => {
cpu => {
bucket_prefix => 'libtensorflow/libtensorflow-cpu-windows-x86_64',
bucket_format => 'zip',
},
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"
( run in 1.299 second using v1.01-cache-2.11-cpan-df04353d9ac )