Alien-OpenMP
view release on metacpan or search on metacpan
lib/Alien/OpenMP.pm view on Meta::CPAN
package Alien::OpenMP;
use parent 'Alien::Base';
use Config ();
use Alien::OpenMP::configure ();
our $VERSION = '0.003006';
# "public" Alien::Base method implementations
# we can reuse cflags for gcc/gomp; hopefully this will
# remain the case for all supported compilers
sub lddlflags { shift->libs }
# Inline related methods
sub Inline {
my ($self, $lang) = @_;
my $params = $self->SUPER::Inline($lang);
$params->{CCFLAGSEX} = delete $params->{INC};
return {
%$params,
LDDLFLAGS => join( q{ }, $Config::Config{lddlflags}, $self->lddlflags() ),
AUTO_INCLUDE => $self->runtime_prop->{auto_include},
};
}
1;
__END__
=head1 NAME
Alien::OpenMP - Encapsulate system info for OpenMP
=head1 SYNOPSIS
use Alien::OpenMP;
say Alien::OpenMP->cflags; # e.g. '-fopenmp' if gcc
say Alien::OpenMP->lddlflags; # e.g. '-fopenmp' if gcc
say Alien::OpenMP->auto_include; # e.g. '#include <omp.h>' if gcc
=head1 DESCRIPTION
This module encapsulates the knowledge required to compile OpenMP programs
C<$Config{ccname}>. C<C>, C<Fortran>, and C<C++> programs annotated
with declarative OpenMP pragmas will still compile if the compiler (and
linker if this is a separate process) is not passed the appropriate flag
to enable OpenMP support. This is because all pragmas are hidden behind
full line comments (with the addition of OpenMP specific C<sentinels>,
as they are called).
All compilers require OpenMP to be explicitly activated during compilation;
for example, GCC's implementation, C<GOMP>, is invoked by the C<-fopenmp>
flag.
Most major compilers support OpenMP, including: GCC, Intel, IBM,
Portland Group, NAG, and those compilers created using LLVM. GCC's OpenMP
implementation, C<GOMP>, is available in all modern versions. Unfortunately,
while OpenMP is a well supported standard; compilers are not required to
use the same commandline switch to activate support. All compilers that
support OpenMP use slightly different ways of invoking it.
=head2 Compilers Supported by this module
At this time, the following compilers are supported:
=over 4
=item C<gcc>
C<-fopenmp> enables OpenMP support in via compiler and linker:
gcc -fopenmp ./my-openmp.c -o my-openmp.x
=item C<clang> EXPERIMENTAL
C<-fopenmp> enables OpenMP support via compiler and linker in recent
versions of C<clang>. MacOS shipped versions are missing the library
which needs installing either with L<Homebrew|https://brew.sh> or
L<Macports|https://www.macports.org>.
=back
=head2 Note On Compiler Support
If used for an unsupported compiler, C<ExtUtils::MakeMaker::os_unsupported>
is invoked, which results an exception propagating from this method being
raised with the value of C<qq{OS unsupported\n}> (note the new line).
This module assumes that the compiler in question is the same one used to
build C<perl>. Since the vast majority of C<perl>s are building using
C<gcc>, initial support is targeting it. However, like C<perl>, many
other compilers may be used.
Adding support for a new compiler should be straightforward; please
section on contributing, below.
=head2 Contributing
The biggest need is to support additional compilers. OpenMP is a well
( run in 1.262 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )