diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index e0267375..1e396d5f 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -68,5 +68,6 @@ jobs: script: | export PATH="$(nix build github:runtimeverification/kup --no-link --json | jq -r '.[].outputs | to_entries[].value')/bin:$PATH" kup publish k-framework-binary .#komet --keep-days 180 + kup publish k-framework-binary .#komet.rust-stellar --keep-days 180 diff --git a/flake.lock b/flake.lock index 08e29734..9e445525 100644 --- a/flake.lock +++ b/flake.lock @@ -330,6 +330,7 @@ "k-framework", "rv-utils" ], + "stellar-cli-flake": "stellar-cli-flake", "wasm-semantics": "wasm-semantics" } }, @@ -385,6 +386,32 @@ "type": "github" } }, + "stellar-cli-flake": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": [ + "rust-overlay" + ] + }, + "locked": { + "lastModified": 1748046752, + "narHash": "sha256-3Gnc0PMF4Md27D46RGcGazD+KstvCdcvSt2ZcPHq4i4=", + "owner": "stellar", + "repo": "stellar-cli", + "rev": "949f1620c46296c84c2f4de6e5aa70e9dc59590f", + "type": "github" + }, + "original": { + "owner": "stellar", + "repo": "stellar-cli", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index 64d33ce8..e89abf0c 100644 --- a/flake.nix +++ b/flake.nix @@ -8,154 +8,135 @@ flake-utils.follows = "k-framework/flake-utils"; rv-utils.follows = "k-framework/rv-utils"; poetry2nix.follows = "k-framework/poetry2nix"; + rust-overlay.url = "github:oxalica/rust-overlay"; + + stellar-cli-flake.url = "github:stellar/stellar-cli"; + stellar-cli-flake.inputs = { + flake-utils.follows = "flake-utils"; + nixpkgs.follows = "nixpkgs"; + rust-overlay.follows = "rust-overlay"; + }; }; outputs = { self, k-framework, nixpkgs, flake-utils, rv-utils, wasm-semantics - , rust-overlay, ... }@inputs: - let - mkCleanSource = { pkgs, src }: pkgs.lib.cleanSource (pkgs.nix-gitignore.gitignoreSourcePure [ - "/.github" - "flake.nix" - "flake.lock" - ./.gitignore - # do not include submodule directories that might be initilized empty or non-existent - "/deps/soroban-examples" - ] src - ); - overlay = (final: prev: - let - src = mkCleanSource { - src = ./.; - pkgs = final; - }; - - version = self.rev or "dirty"; - poetry2nix = inputs.poetry2nix.lib.mkPoetry2Nix { pkgs = prev; }; - in rec { - komet = prev.stdenv.mkDerivation { - pname = "komet"; - inherit src version; - - buildInputs = with final; [ - k-framework.packages.${system}.pyk-python310 - k-framework.packages.${system}.k - komet-pyk - ]; - - dontUseCmakeConfigure = true; - - nativeBuildInputs = [ prev.makeWrapper ]; - - enableParallelBuilding = true; - - buildPhase = '' - export XDG_CACHE_HOME=$(pwd) - ${ - prev.lib.optionalString - (prev.stdenv.isAarch64 && prev.stdenv.isDarwin) - "APPLE_SILICON=true" - } K_OPTS="-Xmx8G -Xss512m" kdist -v build soroban-semantics.* -j$NIX_BUILD_CORES - ''; - - installPhase = '' - mkdir -p $out - cp -r ./kdist-*/* $out/ - - makeWrapper ${komet-pyk}/bin/komet $out/bin/komet --prefix PATH : ${ - prev.lib.makeBinPath [ k-framework.packages.${prev.system}.k ] - } --set KDIST_DIR $out - ''; - }; - - komet-pyk = poetry2nix.mkPoetryApplication { - python = prev.python310; - projectDir = ./.; - src = rv-utils.lib.mkSubdirectoryAppSrc { - pkgs = import nixpkgs { system = prev.system; }; - src = ./.; - subdirectories = [ "pykwasm" ]; - cleaner = { src }: poetry2nix.cleanPythonSources { - src = (mkCleanSource { - inherit src; - pkgs = final; - }); - }; - }; - overrides = poetry2nix.overrides.withDefaults - (finalPython: prevPython: { - kframework = k-framework.packages.${prev.system}.pyk-python310; - pykwasm = wasm-semantics.packages.${prev.system}.kwasm-pyk; - }); - groups = [ ]; - checkGroups = [ ]; - }; - }); - in flake-utils.lib.eachSystem [ + , rust-overlay, stellar-cli-flake, ... }@inputs: flake-utils.lib.eachSystem [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ] (system: let + # stellar-cli flake does not build on NixOS machines due to openssl issues during `cargo build` + # putting `pkg-config` in `nativeBuildInputs` will run the `pkg-config` setuphook, which will look for derivations in `buildInputs` + # with a `pkgconfig` directory such as the `openssl` derivation + # this will then setup the `PKG_CONFIG_PATH` env variable properly + stellar-cli-overlay = final: prev: { + stellar-cli = stellar-cli-flake.packages.${system}.default.overrideAttrs (finalAttrs: previousAttrs: { + nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ (with final; [ + pkg-config + ]); + buildInputs = (previousAttrs.buildInputs or [ ]) ++ (with final; [ + openssl + ]); + }); + }; pkgs = import nixpkgs { inherit system; - overlays = [ overlay (import rust-overlay) ]; + overlays = [ + stellar-cli-overlay + (import rust-overlay) + ]; }; - rustWithWasmTarget = pkgs.rust-bin.stable.latest.default.override { - targets = [ "wasm32-unknown-unknown" ]; - }; - - rustPlatformWasm = pkgs.makeRustPlatform { - cargo = rustWithWasmTarget; - rustc = rustWithWasmTarget; - }; + poetry2nix = inputs.poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }; - version = "21.4.0"; - stellar-src = pkgs.fetchFromGitHub { - owner = "stellar"; - repo = "stellar-cli"; - rev = "v${version}"; - hash = "sha256-yPg0Tsnb7H7S1MbVvfWrAmTWehWqwJYSqYLqLWVNq0Y="; + komet-pyk = poetry2nix.mkPoetryApplication { + python = pkgs.python310; + projectDir = ./.; + src = rv-utils.lib.mkSubdirectoryAppSrc { + inherit pkgs; + src = ./.; + subdirectories = [ "pykwasm" ]; + cleaner = poetry2nix.cleanPythonSources; + }; + overrides = poetry2nix.overrides.withDefaults + (finalPython: prevPython: { + kframework = k-framework.packages.${system}.pyk-python310; + pykwasm = wasm-semantics.packages.${system}.kwasm-pyk; + }); + groups = [ ]; + checkGroups = [ ]; }; - stellar-cli = rustPlatformWasm.buildRustPackage rec { - pname = "stellar-cli"; - inherit version; - src = stellar-src; - - nativeBuildInputs = [ pkgs.pkg-config ] - ++ (if pkgs.stdenv.isDarwin then - [ pkgs.darwin.apple_sdk.frameworks.SystemConfiguration ] - else - [ ]); - - buildInputs = [ pkgs.openssl pkgs.openssl.dev ]; - - OPENSSL_NO_VENDOR = 1; - GIT_REVISION = "v${version}"; - - doCheck = false; + mkKomet = {komet-rust ? null, komet-stellar ? null}@args: pkgs.stdenv.mkDerivation { + pname = "komet"; + version = self.rev or "dirty"; + src = pkgs.lib.cleanSource (pkgs.nix-gitignore.gitignoreSourcePure [ + "/.github" + "flake.nix" + "flake.lock" + ./.gitignore + ] ./.); + + buildInputs = with pkgs; [ + k-framework.packages.${system}.pyk-python310 + k-framework.packages.${system}.k + komet-pyk + ]; + + dontUseCmakeConfigure = true; + + nativeBuildInputs = [ pkgs.makeWrapper ]; + + enableParallelBuilding = true; + + buildPhase = '' + export XDG_CACHE_HOME=$(pwd) + ${ + pkgs.lib.optionalString + (pkgs.stdenv.isAarch64 && pkgs.stdenv.isDarwin) + "APPLE_SILICON=true" + } K_OPTS="-Xmx8G -Xss512m" kdist -v build soroban-semantics.* -j$NIX_BUILD_CORES + ''; - cargoLock = { - lockFile = "${stellar-src}/Cargo.lock"; - outputHashes = { - "testcontainers-0.15.0" = - "sha256-v9HJ0cgDgTCRwB6lPm425EmVq3L9oNI8NVCzv4T2HOQ="; - }; - }; + installPhase = '' + mkdir -p $out + cp -r ./kdist-*/* $out/ + + makeWrapper ${komet-pyk}/bin/komet $out/bin/komet --prefix PATH : ${ + pkgs.lib.makeBinPath ( + [ + k-framework.packages.${system}.k + ] ++ pkgs.lib.optionals (komet-rust != null) [ + komet-rust + ] ++ pkgs.lib.optionals (komet-stellar != null) [ + komet-stellar + ] + ) + } --set KDIST_DIR $out + ''; + passthru = if komet-rust == null && komet-stellar == null then { + rust-stellar = pkgs.callPackage mkKomet (args // { + komet-rust = rustWithWasmTarget; + komet-stellar = pkgs.stellar-cli; + }); + } else { }; }; + komet = pkgs.callPackage mkKomet { }; + rustWithWasmTarget = pkgs.rust-bin.stable.latest.default.override { + targets = [ "wasm32v1-none" ]; + }; in { packages = rec { - inherit (pkgs) komet komet-pyk; - default = pkgs.komet; + inherit komet komet-pyk; + default = komet; }; devShell = pkgs.mkShell { - buildInputs = with pkgs; [ stellar-cli komet rustWithWasmTarget ]; + buildInputs = [ pkgs.stellar-cli komet rustWithWasmTarget ]; shellHook = '' ${pkgs.lib.strings.optionalString @@ -165,6 +146,8 @@ }; }) // { - overlays.default = overlay; + overlays.default = final: prev: { + inherit (self.packages.${final.system}) komet komet-pyk; + }; }; } diff --git a/package/version b/package/version index 72052e2d..9adbab1b 100644 --- a/package/version +++ b/package/version @@ -1 +1 @@ -0.1.68 +0.1.69 diff --git a/pyproject.toml b/pyproject.toml index 14465b3c..1fcc57b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "komet" -version = "0.1.68" +version = "0.1.69" description = "K tooling for the Soroban platform" authors = [ "Runtime Verification, Inc. ",