diff --git a/flake.lock b/flake.lock index e4f092d..0f720e2 100644 --- a/flake.lock +++ b/flake.lock @@ -1,26 +1,26 @@ { "nodes": { - "flake-utils": { + "flake-parts": { "inputs": { - "systems": "systems" + "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, - "flake-utils_2": { + "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems" }, "locked": { "lastModified": 1710146030, @@ -36,9 +36,9 @@ "type": "github" } }, - "flake-utils_3": { + "flake-utils_2": { "inputs": { - "systems": "systems_3" + "systems": "systems_2" }, "locked": { "lastModified": 1710146030, @@ -54,9 +54,9 @@ "type": "github" } }, - "flake-utils_4": { + "flake-utils_3": { "inputs": { - "systems": "systems_4" + "systems": "systems_3" }, "locked": { "lastModified": 1701680307, @@ -72,9 +72,9 @@ "type": "github" } }, - "flake-utils_5": { + "flake-utils_4": { "inputs": { - "systems": "systems_5" + "systems": "systems_4" }, "locked": { "lastModified": 1710146030, @@ -97,11 +97,11 @@ ] }, "locked": { - "lastModified": 1715862037, - "narHash": "sha256-s/D7vvGELAvk0oU4qnoAoOTIIYw6jXT3spPPkwMWxpU=", + "lastModified": 1717097002, + "narHash": "sha256-ckh0evfg2XOkdsDaHirD6znMbZjJcp10IdDEosUzq+4=", "owner": "foolnotion", "repo": "nur-pkg", - "rev": "396182e1a0e2fc5a4f6c6137bbb45c732049574b", + "rev": "a5cb1c5cab80601cdf233850867fbdbf7dddb7b5", "type": "github" }, "original": { @@ -118,11 +118,11 @@ ] }, "locked": { - "lastModified": 1715862037, - "narHash": "sha256-s/D7vvGELAvk0oU4qnoAoOTIIYw6jXT3spPPkwMWxpU=", + "lastModified": 1717097002, + "narHash": "sha256-ckh0evfg2XOkdsDaHirD6znMbZjJcp10IdDEosUzq+4=", "owner": "foolnotion", "repo": "nur-pkg", - "rev": "396182e1a0e2fc5a4f6c6137bbb45c732049574b", + "rev": "a5cb1c5cab80601cdf233850867fbdbf7dddb7b5", "type": "github" }, "original": { @@ -136,11 +136,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1715862037, - "narHash": "sha256-s/D7vvGELAvk0oU4qnoAoOTIIYw6jXT3spPPkwMWxpU=", + "lastModified": 1717097002, + "narHash": "sha256-ckh0evfg2XOkdsDaHirD6znMbZjJcp10IdDEosUzq+4=", "owner": "foolnotion", "repo": "nur-pkg", - "rev": "396182e1a0e2fc5a4f6c6137bbb45c732049574b", + "rev": "a5cb1c5cab80601cdf233850867fbdbf7dddb7b5", "type": "github" }, "original": { @@ -154,11 +154,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1715862037, - "narHash": "sha256-s/D7vvGELAvk0oU4qnoAoOTIIYw6jXT3spPPkwMWxpU=", + "lastModified": 1716998884, + "narHash": "sha256-fBpgvYZZmK2T1jopvH3CN7qxBeI/JImYpQ8PBVZH/R8=", "owner": "foolnotion", "repo": "nur-pkg", - "rev": "396182e1a0e2fc5a4f6c6137bbb45c732049574b", + "rev": "85a3a22c495ed1596e2c7b1d6cebb085d182a17e", "type": "github" }, "original": { @@ -169,7 +169,7 @@ }, "lbfgs": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils", "foolnotion": "foolnotion_2", "nixpkgs": [ "nixpkgs" @@ -191,11 +191,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1715978625, - "narHash": "sha256-oPELqnTsm1yS9eXgNkgy6spv12fS87wKRs504BnxtTE=", + "lastModified": 1717096212, + "narHash": "sha256-1Tti/eg2jTKYiVonCCjy+DnJspZ5q+tw9+C/bV9y0mg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "72d09fc9320cc9046f1b83081cbe4bc3387afeb0", + "rev": "afd3a57b83977a2e0fe8c4685ca2016a12103d03", "type": "github" }, "original": { @@ -205,13 +205,25 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1714640452, + "narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1715978625, - "narHash": "sha256-oPELqnTsm1yS9eXgNkgy6spv12fS87wKRs504BnxtTE=", + "lastModified": 1717096212, + "narHash": "sha256-1Tti/eg2jTKYiVonCCjy+DnJspZ5q+tw9+C/bV9y0mg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "72d09fc9320cc9046f1b83081cbe4bc3387afeb0", + "rev": "afd3a57b83977a2e0fe8c4685ca2016a12103d03", "type": "github" }, "original": { @@ -223,11 +235,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1715978625, - "narHash": "sha256-oPELqnTsm1yS9eXgNkgy6spv12fS87wKRs504BnxtTE=", + "lastModified": 1716998047, + "narHash": "sha256-283oSIJvWqL9xxHKXVIw7V7cUoJBjnhmJnaw7l0sxUE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "72d09fc9320cc9046f1b83081cbe4bc3387afeb0", + "rev": "e6154cf4028b84cc640b11e479ba1d1de06f2346", "type": "github" }, "original": { @@ -239,7 +251,7 @@ }, "pratt-parser": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils_2", "foolnotion": "foolnotion_3", "nixpkgs": [ "nixpkgs" @@ -261,7 +273,7 @@ }, "root": { "inputs": { - "flake-utils": "flake-utils", + "flake-parts": "flake-parts", "foolnotion": "foolnotion", "lbfgs": "lbfgs", "nixpkgs": "nixpkgs", @@ -330,24 +342,9 @@ "type": "github" } }, - "systems_5": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "vdt": { "inputs": { - "flake-utils": "flake-utils_4", + "flake-utils": "flake-utils_3", "nixpkgs": [ "nixpkgs" ] @@ -369,18 +366,18 @@ }, "vstat": { "inputs": { - "flake-utils": "flake-utils_5", + "flake-utils": "flake-utils_4", "foolnotion": "foolnotion_4", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1711321977, - "narHash": "sha256-yGbdec6OexJt+4H5V1pzub9R5fH4J2l+vXQWEq0/ohU=", + "lastModified": 1717074135, + "narHash": "sha256-H2vqDivHQyVMzytjAoqH7dfRwrjMnu3nG/1px4IlCg8=", "owner": "heal-research", "repo": "vstat", - "rev": "428ec2385aebf44d9ba89064b2b2ef419fd6206a", + "rev": "716385bfe51d9185fc39f1d9ed0028e8ebbdc854", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index d181a50..05dedfc 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Operon development environment"; inputs = { - flake-utils.url = "github:numtide/flake-utils"; + flake-parts.url = "github:hercules-ci/flake-parts"; nixpkgs.url = "github:nixos/nixpkgs/master"; foolnotion.url = "github:foolnotion/nur-pkg"; lbfgs.url = "github:foolnotion/lbfgs"; @@ -18,129 +18,68 @@ vdt.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { self, flake-utils, nixpkgs, foolnotion, pratt-parser, vdt, vstat, lbfgs }: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { - inherit system; - overlays = [ foolnotion.overlay ]; - }; - - stdenv_ = pkgs.llvmPackages_18.stdenv; - - operon = stdenv_.mkDerivation { - name = "operon"; - src = self; - - enableShared = true; - - cmakeFlags = [ - "--preset ${if pkgs.stdenv.hostPlatform.isx86_64 then "build-linux" else "build-osx"}" - "-DCMAKE_BUILD_TYPE=Release" - "-DUSE_SINGLE_PRECISION=ON" - ]; - - nativeBuildInputs = with pkgs; [ cmake git ]; - - buildInputs = (with pkgs; [ - aria-csv - armadillo - blaze - ceres-solver - cpp-sort - cxxopts - doctest - eigen - eve - fast_float - fastor - fmt - icu - jemalloc - cpptrace - libassert - libdwarf - mdspan - pkg-config - pratt-parser.packages.${system}.default - simdutf_4 # required by scnlib - scnlib - sleef - taskflow - unordered_dense - vdt.packages.${system}.default - vstat.packages.${system}.default - lbfgs.packages.${system}.default - # ned14 deps - byte-lite - span-lite - ned14-outcome - ned14-quickcpplib - ned14-status-code - xad - xsimd - xxHash - zstd - ]); - }; - - in rec { - packages = { - default = operon.overrideAttrs(old: { - cmakeFlags = old.cmakeFlags ++ [ - "-DBUILD_CLI_PROGRAMS=ON" + outputs = inputs@{ self, flake-parts, nixpkgs, foolnotion, pratt-parser, vdt, vstat, lbfgs }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" "aarch64-darwin" ]; + + perSystem = { pkgs, system, ... }: + let + pkgs = import self.inputs.nixpkgs { + inherit system; + overlays = [ + foolnotion.overlay + (final: prev: { + vdt = vdt.packages.${system}.default; + vstat = vstat.packages.${system}.default; + lbfgs = lbfgs.packages.${system}.default; + pratt-parser = pratt-parser.packages.${system}.default; + }) ]; - }); - - library = operon.overrideAttrs(old: { - enableShared = true; - }); - - library-static = operon.overrideAttrs(old: { - enableShared = false; - }); - }; - - apps.operon-gp = { - type = "app"; - program = "${packages.default}/bin/operon_gp"; - }; - - apps.operon-nsgp = { - type = "app"; - program = "${packages.default}/bin/operon_nsgp"; - }; - - apps.parse-model = { - type = "app"; - program = "${packages.default}/bin/operon_parse_model"; - }; - - devShells.default = stdenv_.mkDerivation { - name = "operon"; - - nativeBuildInputs = operon.nativeBuildInputs ++ (with pkgs; [ - clang-tools_18 - cppcheck - include-what-you-use - #cmake-language-server - ]); - - buildInputs = operon.buildInputs ++ (with pkgs; [ - gdb - gcc13 - graphviz - hyperfine - linuxPackages_latest.perf - seer - valgrind - hotspot - ]); - - shellHook = '' - export LD_LIBRARY_PATH=$CMAKE_LIBRARY_PATH - alias bb="cmake --build build -j" - ''; + }; + stdenv = pkgs.llvmPackages_18.stdenv; + operon = import ./operon.nix { inherit stdenv pkgs; }; + in + rec + { + packages = { + default = operon.overrideAttrs (old: { + cmakeFlags = old.cmakeFlags ++ [ "-DBUILD_CLI_PROGRAMS=ON" ]; + }); + + library = operon.overrideAttrs (old: { + enableShared = true; + }); + + library-static = operon.overrideAttrs (old: { + enableShared = false; + }); + }; + + devShells.default = stdenv.mkDerivation { + name = "operon"; + + nativeBuildInputs = operon.nativeBuildInputs ++ (with pkgs; [ + clang-tools_18 + cppcheck + include-what-you-use + cmake-language-server + ]); + + buildInputs = operon.buildInputs ++ (with pkgs; [ + gdb + gcc13 + graphviz + hyperfine + linuxPackages_latest.perf + seer + valgrind + hotspot + ]); + }; + + apps.operon-gp.program = "${packages.default}/bin/operon_gp"; + apps.operon-nsgp.program = "${packages.default}/bin/operon_nsgp"; + apps.operon-parse-model.program = "${packages.default}/bin/operon_parse_model"; }; - }); + }; } diff --git a/operon.nix b/operon.nix new file mode 100644 index 0000000..b620d7d --- /dev/null +++ b/operon.nix @@ -0,0 +1,56 @@ +{ stdenv, pkgs }: +stdenv.mkDerivation { + name = "operon"; + src = ./.; + + enableShared = true; + + cmakeFlags = [ + "--preset ${if pkgs.stdenv.hostPlatform.isx86_64 then "build-linux" else "build-osx"}" + "-DUSE_SINGLE_PRECISION=ON" + ]; + cmakeBuildType = "Release"; + + nativeBuildInputs = with pkgs; [ cmake git ]; + + buildInputs = (with pkgs; [ + aria-csv + armadillo + blaze + ceres-solver + cpp-sort + cxxopts + doctest + eigen + eve + fast_float + fastor + fmt + icu + jemalloc + cpptrace + libassert + libdwarf + mdspan + pkg-config + pratt-parser + simdutf_4 # required by scnlib + scnlib + sleef + taskflow + unordered_dense + vdt + vstat + lbfgs + # ned14 deps + byte-lite + span-lite + ned14-outcome + ned14-quickcpplib + ned14-status-code + xad + xsimd + xxHash + zstd + ]); +}