unified-memory-framework: init at 1.0.3
This commit is contained in:
162
pkgs/by-name/un/unified-memory-framework/package.nix
Normal file
162
pkgs/by-name/un/unified-memory-framework/package.nix
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
fetchFromGitHub,
|
||||||
|
fetchpatch,
|
||||||
|
lib,
|
||||||
|
cmake,
|
||||||
|
ninja,
|
||||||
|
level-zero,
|
||||||
|
hwloc,
|
||||||
|
autoconf,
|
||||||
|
onetbb,
|
||||||
|
numactl,
|
||||||
|
jemalloc,
|
||||||
|
pkg-config,
|
||||||
|
cudaPackages,
|
||||||
|
useJemalloc ? true,
|
||||||
|
config,
|
||||||
|
cudaSupport ? config.cudaSupport,
|
||||||
|
ctestCheckHook,
|
||||||
|
gtest,
|
||||||
|
gbenchmark,
|
||||||
|
python3,
|
||||||
|
sphinx,
|
||||||
|
buildDocs ? true,
|
||||||
|
}:
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "unified-memory-framework";
|
||||||
|
version = "1.0.3";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
]
|
||||||
|
++ lib.optionals useJemalloc [
|
||||||
|
autoconf
|
||||||
|
]
|
||||||
|
++ lib.optionals buildDocs [
|
||||||
|
python3
|
||||||
|
sphinx
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
onetbb
|
||||||
|
level-zero
|
||||||
|
]
|
||||||
|
++ lib.optionals useJemalloc [
|
||||||
|
hwloc
|
||||||
|
]
|
||||||
|
++ lib.optionals cudaSupport [
|
||||||
|
cudaPackages.cuda_cudart
|
||||||
|
]
|
||||||
|
++ lib.optionals finalAttrs.doCheck [
|
||||||
|
numactl
|
||||||
|
gtest
|
||||||
|
gbenchmark
|
||||||
|
];
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "oneapi-src";
|
||||||
|
repo = "unified-memory-framework";
|
||||||
|
tag = "v${finalAttrs.version}";
|
||||||
|
hash = "sha256-j7qQwBetICf1sTz+ssZQLm9P0SiH68lcEvtV1YLuW5s=";
|
||||||
|
};
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
(fetchpatch {
|
||||||
|
name = "gtest-use-find_package.patch";
|
||||||
|
url = "https://github.com/oneapi-src/unified-memory-framework/commit/503d302a72f719a3f11fce0e610f07a3793549d9.patch";
|
||||||
|
hash = "sha256-T29pJuWGcj/Kfw3VNW5lNBG5OrBsB1UAvwroQ+km4Vs=";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
# The CMake tries to find out the version via git.
|
||||||
|
# Since we're not in a clone, git describe won't work.
|
||||||
|
substituteInPlace cmake/helpers.cmake \
|
||||||
|
--replace-fail "git describe --always" "echo v${finalAttrs.version}"
|
||||||
|
|
||||||
|
# By default, it'd try to install into the CMake binary dir,
|
||||||
|
# causing the package to link to /build
|
||||||
|
substituteInPlace CMakeLists.txt \
|
||||||
|
--replace-fail "\''${jemalloc_targ_BINARY_DIR}" "$out/jemalloc"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# If included, jemalloc needs to be vendored, as they don't support using a pre-built version
|
||||||
|
# and they compile with specific flags that the nixpkgs version doesn't (and shouldn't) set.
|
||||||
|
# autoconf wants to write files, so we copy the source to the build directory
|
||||||
|
# where we can make it writable
|
||||||
|
preConfigure = lib.optionalString useJemalloc ''
|
||||||
|
# by default this will point to /build/jemalloc
|
||||||
|
cp -r ${jemalloc.src} ../jemalloc
|
||||||
|
chmod -R u+w ../jemalloc
|
||||||
|
'';
|
||||||
|
|
||||||
|
preInstall = lib.optionalString useJemalloc ''
|
||||||
|
mkdir -p $out/jemalloc
|
||||||
|
'';
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "UMF_BUILD_CUDA_PROVIDER" cudaSupport)
|
||||||
|
(lib.cmakeBool "UMF_BUILD_LEVEL_ZERO_PROVIDER" true)
|
||||||
|
|
||||||
|
(lib.cmakeBool "UMF_BUILD_LIBUMF_POOL_JEMALLOC" useJemalloc)
|
||||||
|
|
||||||
|
(lib.cmakeBool "UMF_BUILD_TESTS" finalAttrs.doCheck)
|
||||||
|
# We won't be able to run these inside the sandbox, so no use in building them
|
||||||
|
(lib.cmakeBool "UMF_BUILD_GPU_TESTS" false)
|
||||||
|
(lib.cmakeBool "UMF_BUILD_BENCHMARKS" false)
|
||||||
|
(lib.cmakeBool "UMF_BUILD_EXAMPLES" false)
|
||||||
|
(lib.cmakeBool "UMF_BUILD_GPU_EXAMPLES" false)
|
||||||
|
]
|
||||||
|
++ lib.optionals useJemalloc [
|
||||||
|
(lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true)
|
||||||
|
(lib.cmakeBool "FETCHCONTENT_QUIET" false)
|
||||||
|
|
||||||
|
# by default this will point to /build/jemalloc
|
||||||
|
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_JEMALLOC_TARG" "../../jemalloc")
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
ctestCheckHook
|
||||||
|
];
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
dontUseNinjaCheck = true;
|
||||||
|
|
||||||
|
NIX_LDFLAGS = lib.optionalString finalAttrs.doCheck "-rpath ${
|
||||||
|
lib.makeLibraryPath [
|
||||||
|
onetbb
|
||||||
|
]
|
||||||
|
}";
|
||||||
|
|
||||||
|
disabledTests = [
|
||||||
|
# These tests try to access sysfs, which is unavailable in the sandbox
|
||||||
|
"test_memspace_highest_capacity"
|
||||||
|
"test_memtarget"
|
||||||
|
"test_provider_tracking_fixture_tests"
|
||||||
|
"test_scalable_coarse_file"
|
||||||
|
|
||||||
|
# Flaky
|
||||||
|
"test_provider_file_memory_ipc"
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/oneapi-src/unified-memory-framework";
|
||||||
|
changelog = "https://github.com/oneapi-src/unified-memory-framework/releases/tag/v${finalAttrs.version}";
|
||||||
|
description = "Library for constructing allocators and memory pools";
|
||||||
|
longDescription = ''
|
||||||
|
A library for constructing allocators and memory pools.
|
||||||
|
It also contains broadly useful abstractions and utilities for memory management.
|
||||||
|
UMF allows users to manage multiple memory pools characterized by different attributes,
|
||||||
|
allowing certain allocation types to be isolated from others and allocated using different hardware resources as required.
|
||||||
|
'';
|
||||||
|
platforms = lib.platforms.all;
|
||||||
|
license = [
|
||||||
|
lib.licenses.asl20
|
||||||
|
lib.licenses.llvm-exception
|
||||||
|
];
|
||||||
|
maintainers = [ lib.maintainers.blenderfreaky ];
|
||||||
|
};
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user