diff --git a/local/pkgs/aocc/default.nix b/local/pkgs/aocc/default.nix index b421cf29..72fce375 100644 --- a/local/pkgs/aocc/default.nix +++ b/local/pkgs/aocc/default.nix @@ -1 +1,19 @@ -1k9anln9hmdjflrkq4iacrmhma7gfrfj6d0b8ywxys0wfpdvy12v \ No newline at end of file +{ stdenv, fetchurl }: + +stdenv.mkDerivation +{ + pname = "aocc"; + version = "4.2.0"; + src = fetchurl + { + url = "https://download.amd.com/developer/eula/aocc/aocc-4-2/aocc-compiler-4.2.0.tar"; + sha256 = "1aycw6ygzr1db6xf3z7v5lpznhs8j7gcpkawd304vcj5qw75cnpd"; + }; + dontBuild = true; + installPhase = + '' + mkdir -p $out + cp -r bin include lib lib32 libexec share $out + ''; + dontFixup = true; +} diff --git a/local/pkgs/aocl/default.nix b/local/pkgs/aocl/default.nix new file mode 100644 index 00000000..7119b43b --- /dev/null +++ b/local/pkgs/aocl/default.nix @@ -0,0 +1,18 @@ +{ stdenv, fetchurl }: + +stdenv.mkDerivation +{ + pname = "aocl"; + version = "4.2.0"; + src = fetchurl + { + url = "https://download.amd.com/developer/eula/aocl/aocl-4-2/aocl-linux-aocc-4.2.0.tar.gz"; + sha256 = "0p4x0zza6y18hjjs1971gyc5kjd2f8nzzynp2jabhl2vxiys2nnj"; + }; + dontBuild = true; + installPhase = + '' + bash ./install.sh -t $out/share + ''; + dontFixup = true; +} diff --git a/local/pkgs/default.nix b/local/pkgs/default.nix index ef40bfe9..7a3380b4 100644 --- a/local/pkgs/default.nix +++ b/local/pkgs/default.nix @@ -67,4 +67,7 @@ hdf5-oneapi = callPackage ./hdf5-oneapi { inherit lmod; inherit (hdf5) src; oneapi = oneapi."2024.0"; }; oneapi = callPackage ./oneapi {}; mumax = callPackage ./mumax { src = topInputs.mumax; }; + aocc = callPackage ./aocc {}; + aocl = callPackage ./aocl {}; + hdf5-aocc = callPackage ./hdf5-aocc { inherit (hdf5) src; inherit aocc; }; } diff --git a/local/pkgs/hdf5-aocc/default.nix b/local/pkgs/hdf5-aocc/default.nix new file mode 100644 index 00000000..6ce0aea3 --- /dev/null +++ b/local/pkgs/hdf5-aocc/default.nix @@ -0,0 +1,43 @@ +{ + buildFHSEnv, writeScript, stdenvNoCC, + src, + aocc, cmake +}: +let + buildEnv = buildFHSEnv + { + name = "buildEnv"; + targetPkgs = pkgs: with pkgs; [ zlib aocc gcc.cc gcc.cc.lib mpi glibc.dev binutils.bintools ]; + extraBwrapArgs = [ "--bind" "$out" "$out" ]; + }; + buildScript = writeScript "build" + '' + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=$out -DHDF5_INSTALL_CMAKE_DIR=$out/lib/cmake \ + -DHDF5_BUILD_FORTRAN=ON -DHDF5_ENABLE_PARALLEL=ON -DBUILD_SHARED_LIBS=OFF .. + make -j$NIX_BUILD_CORES + make install + ''; +in stdenvNoCC.mkDerivation +{ + name = "hdf5-aocc"; + inherit src; + dontConfigure = true; + enableParallelBuilding = true; + nativeBuildInputs = [ cmake ]; + CC = "clang"; + CXX = "clang++"; + FC = "flang"; + OMPI_CC = "clang"; + OMPI_CXX = "clang++"; + OMPI_FC = "flang"; + buildPhase = + '' + mkdir -p $out + ${buildEnv}/bin/buildEnv ${buildScript} + ''; + dontInstall = true; + dontFixup = true; + requiredSystemFeatures = [ "gccarch-exact-${stdenvNoCC.hostPlatform.gcc.arch}" "big-parallel" ]; +} diff --git a/local/pkgs/vasp/amd/default.nix b/local/pkgs/vasp/amd/default.nix new file mode 100644 index 00000000..2299590b --- /dev/null +++ b/local/pkgs/vasp/amd/default.nix @@ -0,0 +1,72 @@ +{ + buildFHSEnv, writeScript, stdenvNoCC, requireFile, substituteAll, + aocc, rsync, which, hdf5, wannier90 +}: +let + sources = import ../source.nix { inherit requireFile; }; + buildEnv = buildFHSEnv + { + name = "buildEnv"; + targetPkgs = pkgs: with pkgs; [ zlib ]; + }; + buildScript = writeScript "build" + '' + . ${lmod}/share/lmod/lmod/init/bash + module use ${nvhpc}/share/nvhpc/modulefiles + module load nvhpc + mkdir -p bin + make DEPS=1 -j$NIX_BUILD_CORES + ''; + include = version: substituteAll + { + src = ./makefile.include-${version}; + cudaCapabilities = builtins.concatStringsSep "," (builtins.map + (cap: "cc${builtins.replaceStrings ["."] [""] cap}") + cudaCapabilities); + inherit nvhpcArch; + }; + vasp = version: stdenvNoCC.mkDerivation rec + { + pname = "vasp-nvidia"; + inherit version; + src = sources.${version}; + configurePhase = + '' + cp ${include version} makefile.include + cp ${../constr_cell_relax.F} src/constr_cell_relax.F + ''; + enableParallelBuilding = true; + buildInputs = [ mkl hdf5 wannier90 ]; + nativeBuildInputs = [ gfortran rsync which ]; + MKLROOT = mkl; + HDF5_ROOT = hdf5; + WANNIER90_ROOT = wannier90; + buildPhase = "${buildEnv}/bin/buildEnv ${buildScript}"; + installPhase = + '' + mkdir -p $out/bin + for i in std gam ncl; do cp bin/vasp_$i $out/bin/vasp-$i; done + ''; + dontFixup = true; + requiredSystemFeatures = [ "gccarch-exact-${stdenvNoCC.hostPlatform.gcc.arch}" "big-parallel" ]; + }; + startScript = version: writeScript "vasp-nvidia-${version}" + '' + . ${lmod}/share/lmod/lmod/init/bash + module use ${nvhpc}/share/nvhpc/modulefiles + module load nvhpc + + # if SLURM_CPUS_PER_TASK is set, use it to set OMP_NUM_THREADS + if [ -n "''${SLURM_CPUS_PER_TASK-}" ]; then + export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK + fi + + exec "$@" + ''; + runEnv = version: buildFHSEnv + { + name = "vasp-nvidia-${version}"; + targetPkgs = pkgs: with pkgs; [ zlib (vasp version) ]; + runScript = startScript version; + }; +in builtins.mapAttrs (version: _: runEnv version) sources