rocmPackages.rocm-core: fix find_package(rocm-core)

Luna Nova 6c1a925c ef205d1b

+68 -5
+46 -5
pkgs/development/rocm-modules/6/rocm-core/default.nix
··· 7 writeText, 8 }: 9 10 stdenv.mkDerivation (finalAttrs: { 11 pname = "rocm-core"; 12 version = "6.3.3"; ··· 18 hash = "sha256-UDnPGvgwzwv49CzF+Kt0v95CsxS33BZeqNcKw1K6jRI="; 19 }; 20 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}"; 26 cmakeFlags = [ 27 "-DROCM_LIBPATCH_VERSION=${finalAttrs.env.ROCM_LIBPATCH_VERSION}" 28 "-DROCM_VERSION=${finalAttrs.version}" 29 "-DBUILD_ID=${finalAttrs.env.BUILD_ID}" 30 ]; 31 32 setupHook = writeText "setupHook.sh" '' 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 ''; 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}" 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
···
··· 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")