Alien::OpenMP

Alien::OpenMP encapsulates the compiler and linker settings needed to use OpenMP from Perl extensions and Inline::C.

Supported compiler families

The conservative supported set remains:

The running Perl's configured C compiler ($Config{cc}) is authoritative. Alien::OpenMP does not silently switch toolchains based on CC, because XS and Inline::C normally return to Perl's configured compiler and ABI settings.

Compiler family detection is based on predefined compiler macros rather than the executable filename. This allows versioned and target-prefixed GCC names such as gcc-16, x86_64-linux-gnu-gcc, and similar drivers to use the same GCC OpenMP profile.

GCC

GCC uses -fopenmp for both compilation and runtime linkage. This applies to GNU GCC on macOS as well; it must not be mixed with LLVM's -lomp runtime.

Clang

Upstream LLVM Clang uses -fopenmp.

Apple Clang requires a separate OpenMP runtime. Install one with Homebrew or MacPorts, for example:

brew install libomp

The configure helper first asks Homebrew for libomp's prefix, then checks MacPorts, then falls back to conventional Homebrew locations.

Capability probing

Installation performs a real compile/link/run probe that verifies OpenMP is enabled, omp.h is usable, the runtime links, and an OpenMP runtime function can execute. The probe intentionally does not demand a particular thread count because runtime/site policy may legitimately limit threads.

CI coverage

The workflows cover Linux/GCC, Linux with a Perl built by Clang, Strawberry Windows/MinGW GCC, Apple Clang/macOS with Homebrew libomp, and FreeBSD/base Clang. A separate compiler sweep builds Perl with GCC 10 through GCC 16.

Inline::C

use Alien::OpenMP;
use Inline C => 'DATA', with => 'Alien::OpenMP';

Alien::OpenMP supplies the OpenMP compiler/linker flags and automatically includes omp.h.