|
| 1 | +# flake.nix |
| 2 | + |
1 | 3 | { |
2 | | - description = "OpenPFC built with Nix"; |
| 4 | + description = "OpenPFC and HeFFTe builder"; |
3 | 5 |
|
4 | 6 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11"; |
5 | 7 | inputs.flake-utils.url = "github:numtide/flake-utils"; |
6 | 8 |
|
7 | | - outputs = { self, nixpkgs, flake-utils }: |
| 9 | + outputs = { self, nixpkgs, flake-utils, ... }: |
8 | 10 | flake-utils.lib.eachDefaultSystem (system: |
9 | 11 | let |
| 12 | + |
10 | 13 | pkgs = import nixpkgs { inherit system; }; |
| 14 | + versions = import ./nix/versions.nix; |
| 15 | + hefftePath = ./nix/heffte/default.nix; |
| 16 | + openpfcPath = ./nix/openpfc/default.nix; |
11 | 17 |
|
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"; |
21 | 26 | }; |
22 | | - nativeBuildInputs = [ pkgs.cmake pkgs.openmpi pkgs.fftw pkgs.fftwFloat ]; |
23 | | - }; |
24 | 27 |
|
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 | + }; |
32 | 42 | }; |
33 | 43 |
|
34 | | - in { |
35 | | - # Development environment |
| 44 | + default = self.packages.${system}.openpfc-dev; |
| 45 | + |
36 | 46 | devShells.default = pkgs.mkShell { |
37 | | - nativeBuildInputs = [ |
| 47 | + |
| 48 | + packages = [ |
38 | 49 | pkgs.cmake |
| 50 | + pkgs.git |
39 | 51 | pkgs.openmpi |
40 | | - pkgs.gcc |
41 | | - pkgs.fftw |
42 | | - pkgs.fftwFloat |
43 | 52 | pkgs.nlohmann_json |
44 | | - heffteDev |
| 53 | + pkgs.doxygen |
| 54 | + pkgs.catch2_3 |
45 | 55 | ]; |
46 | | - src = ./; # Use the local source for OpenPFC during development |
47 | | - }; |
48 | 56 |
|
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 | + |
55 | 69 | }; |
56 | | - }); |
| 70 | + } |
| 71 | + ); |
57 | 72 | } |
0 commit comments