Skip to content

Commit 51f94f4

Browse files
committed
Update Nix recipes to make develop work
1 parent 533d3f8 commit 51f94f4

File tree

5 files changed

+137
-52
lines changed

5 files changed

+137
-52
lines changed

flake.nix

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,72 @@
1+
# flake.nix
2+
13
{
2-
description = "OpenPFC built with Nix";
4+
description = "OpenPFC and HeFFTe builder";
35

46
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
57
inputs.flake-utils.url = "github:numtide/flake-utils";
68

7-
outputs = { self, nixpkgs, flake-utils }:
9+
outputs = { self, nixpkgs, flake-utils, ... }:
810
flake-utils.lib.eachDefaultSystem (system:
911
let
12+
1013
pkgs = import nixpkgs { inherit system; };
14+
versions = import ./nix/versions.nix;
15+
hefftePath = ./nix/heffte/default.nix;
16+
openpfcPath = ./nix/openpfc/default.nix;
1117

12-
# HeFFTe for development (master branch)
13-
heffteDev = pkgs.stdenv.mkDerivation {
14-
pname = "heffte";
15-
version = "dev";
16-
src = pkgs.fetchFromGitHub {
17-
owner = "icl-utk-edu";
18-
repo = "heffte";
19-
rev = "master";
20-
sha256 = null; # Allow Nix to compute the hash dynamically
18+
in
19+
{
20+
21+
packages = {
22+
# HeFFTe version 2.4.1 from GitHub
23+
heffte = pkgs.callPackage hefftePath {
24+
inherit versions;
25+
version = "2.4.1";
2126
};
22-
nativeBuildInputs = [ pkgs.cmake pkgs.openmpi pkgs.fftw pkgs.fftwFloat ];
23-
};
2427

25-
# HeFFTe for releases (specific versions)
26-
heffteRelease = pkgs.callPackage ./nix/heffte.nix {
27-
fftw = pkgs.fftw;
28-
fftwFloat = pkgs.fftwFloat;
29-
openmpi = pkgs.openmpi;
30-
fetchFromGitHub = pkgs.fetchFromGitHub;
31-
cmake = pkgs.cmake;
28+
# OpenPFC versioned release (e.g., 0.1.1)
29+
openpfc = pkgs.callPackage openpfcPath {
30+
inherit versions;
31+
version = "0.1.1";
32+
heffte = self.packages.${system}.heffte;
33+
};
34+
35+
# OpenPFC from local checkout (your dev version)
36+
openpfc-dev = pkgs.callPackage openpfcPath {
37+
inherit versions;
38+
version = "dev";
39+
src = ./.;
40+
heffte = self.packages.${system}.heffte;
41+
};
3242
};
3343

34-
in {
35-
# Development environment
44+
default = self.packages.${system}.openpfc-dev;
45+
3646
devShells.default = pkgs.mkShell {
37-
nativeBuildInputs = [
47+
48+
packages = [
3849
pkgs.cmake
50+
pkgs.git
3951
pkgs.openmpi
40-
pkgs.gcc
41-
pkgs.fftw
42-
pkgs.fftwFloat
4352
pkgs.nlohmann_json
44-
heffteDev
53+
pkgs.doxygen
54+
pkgs.catch2_3
4555
];
46-
src = ./; # Use the local source for OpenPFC during development
47-
};
4856

49-
# Release builds
50-
packages.default = pkgs.callPackage ./nix/default.nix {
51-
heffte = heffteRelease;
52-
enableDocs = true;
53-
enableTests = true;
54-
catch2_3 = pkgs.catch2_3;
57+
inputsFrom = [
58+
self.packages.${system}.heffte
59+
self.packages.${system}.openpfc-dev
60+
];
61+
62+
shellHook = ''
63+
export Heffte_DIR=${self.packages.${system}.heffte}/lib/cmake/Heffte
64+
echo "🎉 Welcome to the OpenPFC development shell!"
65+
echo "👉 To configure the project, run: cmake -S . -B build"
66+
echo "👉 To build the project, run: cmake --build build"
67+
'';
68+
5569
};
56-
});
70+
}
71+
);
5772
}

nix/heffte/default.nix

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# nix/heffte/default.nix
2+
3+
{ lib, stdenv, cmake, fftw, fftwFloat, openmpi, fetchFromGitHub, versions, version ? "2.4.1" }:
4+
5+
let
6+
inherit (versions.heffte.${version}) rev sha256;
7+
in
8+
stdenv.mkDerivation {
9+
pname = "heffte";
10+
inherit version;
11+
12+
meta = {
13+
description = "Highly Efficient FFT for Exascale";
14+
license = lib.licenses.bsd3;
15+
platforms = lib.platforms.linux;
16+
};
17+
18+
src = fetchFromGitHub {
19+
owner = "icl-utk-edu";
20+
repo = "heffte";
21+
inherit rev sha256;
22+
};
23+
24+
nativeBuildInputs = [ cmake ];
25+
26+
buildInputs = [ fftw fftwFloat openmpi ];
27+
28+
cmakeFlags = [
29+
"-DHeffte_ENABLE_FFTW=ON"
30+
"-DHeffte_ENABLE_CUDA=OFF"
31+
"-DHeffte_ENABLE_ROCM=OFF"
32+
"-DHeffte_ENABLE_ONEAPI=OFF"
33+
];
34+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let
33
pkgs = import <nixpkgs> {};
44

5-
heffte = pkgs.callPackage ./pkgs/heffte.nix {
5+
heffte = pkgs.callPackage ./default.nix {
66
cmake = pkgs.cmake;
77
fftw = pkgs.fftw;
88
fftwFloat = pkgs.fftwFloat;
Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
# nix/openpfc/default.nix
2+
13
{ lib
24
, stdenv
35
, cmake
4-
, git
56
, mpi
67
, heffte
78
, nlohmann_json
@@ -12,17 +13,33 @@
1213
, enableExamples ? true
1314
, enableApps ? true
1415
, fetchFromGitHub
15-
, version ? "dev"
16-
, src ? ./
17-
}:
16+
, versions
17+
, version ? "0.1.1"
18+
, src ? null }:
19+
20+
let
21+
inherit (versions.openpfc.${version}) rev sha256;
22+
23+
realSrc = if src != null then src else fetchFromGitHub {
24+
owner = "VTT-ProperTune";
25+
repo = "OpenPFC";
26+
inherit (versions.openpfc.${version}) rev sha256;
27+
};
28+
in
1829

19-
stdenv.mkDerivation rec {
30+
stdenv.mkDerivation {
2031
pname = "openpfc";
2132
inherit version;
33+
src = realSrc;
34+
35+
meta = {
36+
description = "Phase Field Crystal simulation framework";
37+
license = lib.licenses.agpl3;
38+
platforms = lib.platforms.linux;
39+
};
2240

23-
inherit src;
41+
nativeBuildInputs = [ cmake ];
2442

25-
nativeBuildInputs = [ cmake git ];
2643
buildInputs = [ mpi heffte nlohmann_json ]
2744
++ lib.optional enableDocs doxygen
2845
++ lib.optional enableTests catch2_3;
@@ -36,12 +53,4 @@ stdenv.mkDerivation rec {
3653
"-DHeffte_DIR=${heffte}/lib/cmake/Heffte"
3754
];
3855

39-
doCheck = enableTests;
40-
41-
meta = {
42-
description = "Phase Field Crystal simulation framework";
43-
homepage = "https://github.com/VTT-ProperTune/OpenPFC";
44-
license = lib.licenses.agpl3;
45-
platforms = lib.platforms.linux;
46-
};
4756
}

nix/versions.nix

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
heffte = {
3+
"2.3.0" = {
4+
rev = "v2.3.0";
5+
sha256 = "";
6+
};
7+
"2.4.1" = {
8+
rev = "v2.4.1";
9+
sha256 = "3qCF3nsxjjj3OOks8f4Uu1L3+budRPX1i+iwXy8hLhE=";
10+
};
11+
};
12+
13+
openpfc = {
14+
"0.1.0" = {
15+
rev = "v0.1.0";
16+
sha256 = "";
17+
};
18+
"0.1.1" = {
19+
rev = "v0.1.1";
20+
sha256 = "";
21+
};
22+
"0.2.0" = {
23+
rev = "v0.2.0";
24+
sha256 = "sha256-bbbbbbb";
25+
};
26+
};
27+
}

0 commit comments

Comments
 (0)