nixpkgs/pkgs/by-name/hw/hwloc/package.nix
aleksana 571c71e6f7 treewide: migrate packages to pkgs/by-name, take 1
We are migrating packages that meet below requirements:

1. using `callPackage`
2. called path is a directory
3. overriding set is empty (`{ }`)
4. not containing path expressions other than relative path (to
makenixpkgs-vet happy)
5. not referenced by nix files outside of the directory, other
than`pkgs/top-level/all-packages.nix`
6. not referencing nix files outside of the directory
7. not referencing `default.nix` (since it's changed to `package.nix`)
8. `outPath` doesn't change after migration

The tool is here: https://github.com/Aleksanaa/by-name-migrate.
2024-11-09 20:04:51 +08:00

103 lines
2.7 KiB
Nix

{
lib,
stdenv,
fetchurl,
pkg-config,
expat,
ncurses,
pciutils,
numactl,
x11Support ? false,
libX11,
cairo,
config,
enableCuda ? config.cudaSupport,
cudaPackages,
}:
stdenv.mkDerivation rec {
pname = "hwloc";
version = "2.11.2";
src = fetchurl {
url = "https://www.open-mpi.org/software/hwloc/v${lib.versions.majorMinor version}/downloads/hwloc-${version}.tar.bz2";
hash = "sha256-9/iP7K4GcQDxoakVtlit0PT3FWEllIKRCmm66iL+hAk=";
};
configureFlags = [
"--localstatedir=/var"
"--enable-netloc"
];
# XXX: libX11 is not directly needed, but needed as a propagated dep of Cairo.
nativeBuildInputs = [ pkg-config ] ++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
buildInputs =
[
expat
ncurses
]
++ lib.optionals x11Support [
cairo
libX11
]
++ lib.optionals stdenv.hostPlatform.isLinux [ numactl ]
++ lib.optionals enableCuda [ cudaPackages.cuda_cudart ];
# Since `libpci' appears in `hwloc.pc', it must be propagated.
propagatedBuildInputs = lib.optional stdenv.hostPlatform.isLinux pciutils;
enableParallelBuilding = true;
postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
if [ -d "${numactl}/lib64" ]; then
numalibdir="${numactl}/lib64"
else
numalibdir="${numactl}/lib"
test -d "$numalibdir"
fi
sed -i "$lib/lib/libhwloc.la" \
-e "s|-lnuma|-L$numalibdir -lnuma|g"
'';
# Checks disabled because they're impure (hardware dependent) and
# fail on some build machines.
doCheck = false;
outputs = [
"out"
"lib"
"dev"
"doc"
"man"
];
meta = {
description = "Portable abstraction of hierarchical architectures for high-performance computing";
longDescription = ''
hwloc provides a portable abstraction (across OS,
versions, architectures, ...) of the hierarchical topology of
modern architectures, including NUMA memory nodes, sockets,
shared caches, cores and simultaneous multithreading. It also
gathers various attributes such as cache and memory
information. It primarily aims at helping high-performance
computing applications with gathering information about the
hardware so as to exploit it accordingly and efficiently.
hwloc may display the topology in multiple convenient
formats. It also offers a powerful programming interface to
gather information about the hardware, bind processes, and much
more.
'';
# https://www.open-mpi.org/projects/hwloc/license.php
license = lib.licenses.bsd3;
homepage = "https://www.open-mpi.org/projects/hwloc/";
maintainers = with lib.maintainers; [
fpletz
markuskowa
];
platforms = lib.platforms.all;
};
}