This commit is contained in:
2024-11-23 23:33:12 +08:00
parent 5e4200f4b4
commit 5430154a09
2 changed files with 32 additions and 25 deletions

View File

@@ -5,8 +5,8 @@
{
src = pkgs.fetchurl
{
url = "https://developer.download.nvidia.com/hpc-sdk/24.11/nvhpc_2024_2411_Linux_x86_64_cuda_12.6.tar.gz";
sha256 = "080rb89p2z98b75wqssvp3s8x6b5n0556d0zskh3cfapcb08lh1r";
url = "https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64/nvhpc-24-11_24.11-0_amd64.deb";
sha256 = "0xzfgdz7s8kzxmcm3k6n9nqd0isfzj23nxfq0y3ca9f046gp4zp3";
};
version = "24.11";
};

View File

@@ -1,4 +1,4 @@
{ src, stdenv, gcc, glibc_multi, autoPatchelfHook, libz, wrapCCWith, config, gfortran, overrideCC, zstd, libxml2, symlinkJoin, flock, glibc, binutils, writeText, addAttrsToDerivation, iconv, rdma-core, numactl, ncurses }:
{ src, stdenv, gcc, glibc_multi, autoPatchelfHook, libz, wrapCCWith, config, gfortran, overrideCC, zstd, libxml2, symlinkJoin, flock, glibc, binutils, writeText, addAttrsToDerivation, iconv, rdma-core, numactl, ncurses, dpkg }:
let
gcc-combined = symlinkJoin
{
@@ -12,51 +12,57 @@ let
# gcc.cc gfortran.cc gfortran.cc.lib
];
};
unwrapped = stdenv.mkDerivation
nvhpc = stdenv.mkDerivation
{
pname = "nvhpc-unwrapped";
pname = "nvhpc";
inherit (src) src version;
buildInputs = [ glibc_multi gcc.cc.lib libz libxml2 zstd numactl ncurses ];
nativeBuildInputs = [ autoPatchelfHook dpkg flock ];
langFortran = true;
buildInputs = [ gcc-combined libz libxml2 zstd numactl ncurses ];
nativeBuildInputs = [ autoPatchelfHook flock ];
dontConfigure = true;
dontBuild = true;
dontStrip = true;
dontShrink = true;
unpackPhase =
''
dpkg-deb -x $src .
'';
installPhase =
''
# install component
# NVHPC use very complex mechanism to identify the location of compilers, headers, etc.
# we should keep the original structure
mkdir -p $out/opt/nvhpc/Linux_x86_64/${src.version}
cp -r install_components/Linux_x86_64/${src.version}/compilers $out/opt/nvhpc/Linux_x86_64/${src.version}
ln -s $out/opt/nvhpc/Linux_x86_64/${src.version}/compilers/bin $out
# create localrc
patchShebangs $out/opt/nvhpc/Linux_x86_64/${src.version}/compilers/bin/makelocalrc
sed -i '/makelocalrc executed by/d' $out/opt/nvhpc/Linux_x86_64/${src.version}/compilers/bin/makelocalrc
$out/opt/nvhpc/Linux_x86_64/${src.version}/compilers/bin/makelocalrc -x
mkdir -p $out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/
cp -r opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/compilers $out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}
'';
postFixup =
''
sed -i '/makelocalrc executed by/d' $out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/compilers/bin/makelocalrc
$out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/compilers/bin/makelocalrc $out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/compilers/bin -x -no-cuda
ln -s $out/opt/nvidia/hpc_sdk/Linux_x86_64/${src.version}/compilers/bin $out
'';
};
# fix /usr/lib/crt1.o impure path used in link
customLocalrc = writeText "localrc"
''
set DEFLIBDIR=${gcc-combined}/lib;
set DEFSTDOBJDIR=${gcc-combined}/lib;
set DEFLIBDIR=${glibc_multi}/lib;
set DEFSTDOBJDIR=${glibc_multi}/lib;
'';
cudaCapability = builtins.concatStringsSep ","
(builtins.map (cap: "cc${builtins.replaceStrings ["."] [""] cap}") config.cudaCapabilities);
nvhpc = (wrapCCWith
wrapper = (wrapCCWith
{
cc = unwrapped;
cc = nvhpc;
extraBuildCommands =
''
# echo "-isystem ${unwrapped}/include" >> $out/nix-support/cc-cflags
# echo "-L${stdenv.cc.cc}/lib/gcc/${stdenv.targetPlatform.config}/${stdenv.cc.version}" >> $out/nix-support/cc-ldflags
# echo "-L${stdenv.cc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
# echo "-L${unwrapped}/lib -L${gcc-combined}/lib --verbose" >> $out/nix-support/cc-ldflags
# echo "-isystem ${nvhpc}/include" >> $out/nix-support/cc-cflags
# echo "-L${stdenv.cc.cc}/lib/gcc/${stdenv.targetPlatform.config}/${stdenv.cc.version}" >>
# $out/nix-support/cc-ldflags
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
# echo "-L${nvhpc}/lib -L${gcc-combined}/lib --verbose" >> $out/nix-support/cc-ldflags
echo "-tp=${config.nvhpcArch}" >> $out/nix-support/cc-cflags-before
echo "-gpu=${cudaCapability} -#" >> $out/nix-support/cc-cflags-before
echo "-gpu=${cudaCapability}" >> $out/nix-support/cc-cflags-before
# Need the gcc in the path
# echo 'export "PATH=${gcc-combined}/bin:$PATH"' >> $out/nix-support/cc-wrapper-hook
@@ -73,5 +79,6 @@ let
export named_cc=nvc
export named_cxx=nvc++
export named_fc=nvfortran''; });
in addAttrsToDerivation { NVLOCALRC = customLocalrc; } (overrideCC stdenv nvhpc)
in addAttrsToDerivation { NVLOCALRC = customLocalrc; } (overrideCC stdenv wrapper)
# NIX_DEBUG = "7";
# in nvhpc