{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; crane.url = "github:ipetkov/crane"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, crane, fenix, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; toolchain = with fenix.packages.${system}; combine [ minimal.rustc minimal.cargo latest.rust-src targets.x86_64-unknown-linux-musl.latest.rust-std targets.x86_64-pc-windows-gnu.latest.rust-std ]; craneLib = (crane.mkLib pkgs).overrideToolchain toolchain; src = ./.; crateExpression = { openssl, pkg-config }: craneLib.buildPackage { inherit src; strictDeps = true; doCheck = false; cargoExtraArgs = "-Z build-std=std,panic_abort -Z build-std-features=optimize_for_size,panic_immediate_abort --features=harmful --target=x86_64-pc-windows-gnu"; cargoVendorDir = craneLib.vendorMultipleCargoDeps { inherit (craneLib.findCargoFiles src) cargoConfigs; cargoLockList = [ ./Cargo.lock "${toolchain}/lib/rustlib/src/rust/library/Cargo.lock" ]; }; CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu"; CARGO_BUILD_RUSTFLAGS = "-Z location-detail=none -Z threads=8"; RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; TARGET_CC = "${pkgs.pkgsCross.mingwW64.stdenv.cc}/bin/${pkgs.pkgsCross.mingwW64.stdenv.cc.targetPrefix}cc"; OPENSSL_DIR = "${pkgs.openssl.dev}"; OPENSSL_LIB_DIR = "${pkgs.openssl.out}/lib"; OPENSSL_INCLUDE_DIR = "${pkgs.openssl.dev}/include/"; nativeBuildInputs = with pkgs; [ openssl pkg-config perl ]; buildInputs = with pkgs; [ openssl ]; depsBuildBuild = with pkgs; [ pkgsCross.mingwW64.stdenv.cc pkgsCross.mingwW64.windows.pthreads ]; }; nakitai = pkgs.callPackage crateExpression { }; in { packages.default = nakitai; devShells.default = craneLib.devShell { inputsFrom = [ nakitai ]; }; checks = { inherit nakitai; }; } ); }