tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
rocmPackages.rocm-core: fix find_package(rocm-core)
Luna Nova
5 months ago
6c1a925c
ef205d1b
+68
-5
2 changed files
expand all
collapse all
unified
split
pkgs
development
rocm-modules
6
rocm-core
default.nix
env-rocm-path.patch
+46
-5
pkgs/development/rocm-modules/6/rocm-core/default.nix
···
7
writeText,
8
}:
9
0
0
0
0
0
0
0
0
10
stdenv.mkDerivation (finalAttrs: {
11
pname = "rocm-core";
12
version = "6.3.3";
···
18
hash = "sha256-UDnPGvgwzwv49CzF+Kt0v95CsxS33BZeqNcKw1K6jRI=";
19
};
20
0
0
0
0
21
nativeBuildInputs = [ cmake ];
22
-
# FIXME: What's the correct way to set this?
23
-
env.ROCM_LIBPATCH_VERSION = "${lib.versions.major finalAttrs.version}0${lib.versions.minor finalAttrs.version}0${lib.versions.patch finalAttrs.version}";
24
-
env.BUILD_ID = "nixos-${finalAttrs.env.ROCM_LIBPATCH_VERSION}";
25
-
env.ROCM_BUILD_ID = "release-${finalAttrs.env.BUILD_ID}";
0
26
cmakeFlags = [
27
"-DROCM_LIBPATCH_VERSION=${finalAttrs.env.ROCM_LIBPATCH_VERSION}"
28
"-DROCM_VERSION=${finalAttrs.version}"
29
"-DBUILD_ID=${finalAttrs.env.BUILD_ID}"
0
0
0
30
];
31
32
setupHook = writeText "setupHook.sh" ''
0
33
export ROCM_LIBPATCH_VERSION="${finalAttrs.env.ROCM_LIBPATCH_VERSION}"
34
-
export BUILD_ID="${finalAttrs.env.BUILD_ID}"
35
export ROCM_BUILD_ID="${finalAttrs.env.ROCM_BUILD_ID}"
36
'';
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
37
38
passthru.ROCM_LIBPATCH_VERSION = finalAttrs.env.ROCM_LIBPATCH_VERSION;
39
passthru.updateScript = rocmUpdateScript {
···
7
writeText,
8
}:
9
10
+
# rocm-core is used by most distros for a few purposes:
11
+
# - meta package that all rocm packages depend so `apt-get remove rocm-core` removes all rocm packages
12
+
# - provide overall ROCM_PATH
13
+
# - provide rocm version info and path to rocm version headers
14
+
# only the last usage makes sense in nixpkgs
15
+
let
16
+
padIfSingle = s: if lib.stringLength s == 1 then "0${s}" else s;
17
+
in
18
stdenv.mkDerivation (finalAttrs: {
19
pname = "rocm-core";
20
version = "6.3.3";
···
26
hash = "sha256-UDnPGvgwzwv49CzF+Kt0v95CsxS33BZeqNcKw1K6jRI=";
27
};
28
29
+
patches = [
30
+
./env-rocm-path.patch
31
+
];
32
+
33
nativeBuildInputs = [ cmake ];
34
+
env = {
35
+
ROCM_LIBPATCH_VERSION = "${lib.versions.major finalAttrs.version}${padIfSingle (lib.versions.minor finalAttrs.version)}${padIfSingle (lib.versions.patch finalAttrs.version)}";
36
+
BUILD_ID = "nixpkgs-${finalAttrs.env.ROCM_LIBPATCH_VERSION}";
37
+
ROCM_BUILD_ID = "${finalAttrs.env.BUILD_ID}";
38
+
};
39
cmakeFlags = [
40
"-DROCM_LIBPATCH_VERSION=${finalAttrs.env.ROCM_LIBPATCH_VERSION}"
41
"-DROCM_VERSION=${finalAttrs.version}"
42
"-DBUILD_ID=${finalAttrs.env.BUILD_ID}"
43
+
"-DCMAKE_INSTALL_LIBDIR=lib"
44
+
"-DCMAKE_INSTALL_INCLUDEDIR=include"
45
+
"-DCMAKE_INSTALL_BINDIR=bin"
46
];
47
48
setupHook = writeText "setupHook.sh" ''
49
+
export ROCM_VERSION="${finalAttrs.version}"
50
export ROCM_LIBPATCH_VERSION="${finalAttrs.env.ROCM_LIBPATCH_VERSION}"
0
51
export ROCM_BUILD_ID="${finalAttrs.env.ROCM_BUILD_ID}"
52
'';
53
+
54
+
doInstallCheck = true;
55
+
preInstallCheck =
56
+
# Test that the CMake config file can be included and sets expected vars
57
+
''
58
+
mkdir test_project
59
+
cd test_project
60
+
61
+
echo '
62
+
cmake_minimum_required(VERSION 3.16)
63
+
project(test_rocm_core)
64
+
find_package(rocm-core REQUIRED)
65
+
if(NOT DEFINED ROCM_CORE_INCLUDE_DIR)
66
+
message(FATAL_ERROR "ROCM_CORE_INCLUDE_DIR not set")
67
+
endif()
68
+
message(STATUS "Found ROCM_CORE_INCLUDE_DIR: ''${ROCM_CORE_INCLUDE_DIR}")
69
+
message(STATUS "Found ROCM_PATH: ''${ROCM_PATH}")
70
+
' > CMakeLists.txt
71
+
72
+
CMAKE_PREFIX_PATH="$out" cmake .
73
+
cd ..
74
+
75
+
. $out/nix-support/setup-hook
76
+
env | grep '^ROCM'
77
+
'';
78
79
passthru.ROCM_LIBPATCH_VERSION = finalAttrs.env.ROCM_LIBPATCH_VERSION;
80
passthru.updateScript = rocmUpdateScript {
+22
pkgs/development/rocm-modules/6/rocm-core/env-rocm-path.patch
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
In FHS distros rocm-core expects to be installed colocated with a full set of ROCM packages.
2
+
In nixpkgs contexts, we don't want rocm-core to be a ROCM_PATH root.
3
+
diff --git a/cmake_modules/rocm-core-config.cmake.in b/cmake_modules/rocm-core-config.cmake.in
4
+
index f5fe07c..9d72c9c 100644
5
+
--- a/cmake_modules/rocm-core-config.cmake.in
6
+
+++ b/cmake_modules/rocm-core-config.cmake.in
7
+
@@ -11,7 +11,14 @@ set_and_check(rocm_core_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
8
+
set_and_check(ROCM_CORE_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
9
+
set_and_check(rocm_core_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
10
+
set_and_check(ROCM_CORE_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
11
+
-set_and_check(ROCM_PATH "${PACKAGE_PREFIX_DIR}")
12
+
+# Set ROCM_PATH with priority: existing value > environment variable > package prefix
13
+
+if(NOT DEFINED ROCM_PATH)
14
+
+ if(DEFINED ENV{ROCM_PATH})
15
+
+ set(ROCM_PATH "$ENV{ROCM_PATH}")
16
+
+ else()
17
+
+ set_and_check(ROCM_PATH "${PACKAGE_PREFIX_DIR}")
18
+
+ endif()
19
+
+endif()
20
+
21
+
get_filename_component(ROCM_CORE_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
22
+
include("${ROCM_CORE_CMAKE_DIR}/rocmCoreTargets.cmake")