nixpkgs/pkgs/development/rocm-modules/6/mivisionx/default.nix
Martin Schwaighofer 48b253cf6e rocmPackages_6.mivisionx: add __STDC_CONSTANT_MACROS
This change adapts c3157ea4aa for ROCm 6,
in case it fixes the same problem right out of the gate.
Since rocAL is getting deprecated, dropping this and moving the
rocAL build to its own derivation is also a possibility.
2024-04-04 00:26:35 +02:00

147 lines
3.9 KiB
Nix

{ lib
, stdenv
, fetchFromGitHub
, rocmUpdateScript
, cmake
, rocm-cmake
, rocm-device-libs
, clr
, pkg-config
, rpp
, rocblas
, miopen
, migraphx
, clang
, openmp
, protobuf
, qtcreator
, opencv
, ffmpeg
, boost
, libjpeg_turbo
, half
, lmdb
, rapidjson
, rocm-docs-core
, python3Packages
, useOpenCL ? false
, useCPU ? false
, buildDocs ? false # Needs internet
, gpuTargets ? [ ]
}:
stdenv.mkDerivation (finalAttrs: {
pname = "mivisionx-" + (
if (!useOpenCL && !useCPU) then "hip"
else if (!useOpenCL && !useCPU) then "opencl"
else "cpu"
);
version = "6.0.2";
src = fetchFromGitHub {
owner = "ROCm";
repo = "MIVisionX";
rev = "rocm-${finalAttrs.version}";
hash = "sha256-d32lcJq24MXeIWbNbo6putWaol5kF2io6cz4ZuL+DbE=";
};
patches = [
./0001-set-__STDC_CONSTANT_MACROS-to-make-rocAL-compile.patch
];
nativeBuildInputs = [
cmake
rocm-cmake
clr
pkg-config
] ++ lib.optionals buildDocs [
rocm-docs-core
python3Packages.python
];
buildInputs = [
miopen
migraphx
rpp
rocblas
openmp
half
protobuf
qtcreator
opencv
ffmpeg
boost
libjpeg_turbo
lmdb
rapidjson
python3Packages.pybind11
python3Packages.numpy
python3Packages.torchWithRocm
];
cmakeFlags = [
"-DROCM_PATH=${clr}"
"-DAMDRPP_PATH=${rpp}"
# Manually define CMAKE_INSTALL_<DIR>
# See: https://github.com/NixOS/nixpkgs/pull/197838
"-DCMAKE_INSTALL_BINDIR=bin"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_INSTALL_PREFIX_PYTHON=lib"
# "-DAMD_FP16_SUPPORT=ON" `error: typedef redefinition with different types ('__half' vs 'half_float::half')`
] ++ lib.optionals (gpuTargets != [ ]) [
"-DAMDGPU_TARGETS=${lib.concatStringsSep ";" gpuTargets}"
] ++ lib.optionals (!useOpenCL && !useCPU) [
"-DBACKEND=HIP"
] ++ lib.optionals (useOpenCL && !useCPU) [
"-DBACKEND=OCL"
] ++ lib.optionals useCPU [
"-DBACKEND=CPU"
];
postPatch = ''
# We need to not use hipcc and define the CXXFLAGS manually due to `undefined hidden symbol: tensorflow:: ...`
export CXXFLAGS+="--rocm-path=${clr} --rocm-device-lib-path=${rocm-device-libs}/amdgcn/bitcode"
patchShebangs rocAL/rocAL_pybind/examples
# Properly find miopen
substituteInPlace amd_openvx_extensions/CMakeLists.txt \
--replace "miopen PATHS \''${ROCM_PATH} QUIET" "miopen PATHS ${miopen} QUIET" \
--replace "\''${ROCM_PATH}/include/miopen/config.h" "${miopen}/include/miopen/config.h"
# Properly find turbojpeg
substituteInPlace amd_openvx/cmake/FindTurboJpeg.cmake \
--replace "\''${TURBO_JPEG_PATH}/include" "${libjpeg_turbo.dev}/include" \
--replace "\''${TURBO_JPEG_PATH}/lib" "${libjpeg_turbo.out}/lib"
# Fix bad paths
substituteInPlace rocAL/rocAL/rocAL_hip/CMakeLists.txt amd_openvx_extensions/amd_nn/nn_hip/CMakeLists.txt amd_openvx/openvx/hipvx/CMakeLists.txt \
--replace "COMPILER_FOR_HIP \''${ROCM_PATH}/llvm/bin/clang++" "COMPILER_FOR_HIP ${clang}/bin/clang++"
'';
postBuild = lib.optionalString buildDocs ''
python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en ../docs _build/html
'';
postInstall = lib.optionalString (!useOpenCL && !useCPU) ''
patchelf $out/lib/rocal_pybind*.so --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE"
chmod +x $out/lib/rocal_pybind*.so
'';
passthru.updateScript = rocmUpdateScript {
name = finalAttrs.pname;
owner = finalAttrs.src.owner;
repo = finalAttrs.src.repo;
};
meta = with lib; {
description = "Set of comprehensive computer vision and machine intelligence libraries, utilities, and applications";
homepage = "https://github.com/ROCm/MIVisionX";
license = with licenses; [ mit ];
maintainers = teams.rocm.members;
platforms = platforms.linux;
broken = versions.minor finalAttrs.version != versions.minor stdenv.cc.version || versionAtLeast finalAttrs.version "7.0.0";
};
})