-
-
Save jackyliu16/e6952c26a3810e4b46a1d348831984dd to your computer and use it in GitHub Desktop.
{ | |
description = "A devShell for rCore"; | |
inputs = { | |
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | |
nixpkgs-qemu7.url = "https://github.com/NixOS/nixpkgs/archive/7cf5ccf1cdb2ba5f08f0ac29fc3d04b0b59a07e4.tar.gz"; | |
rust-overlay.url = "github:oxalica/rust-overlay"; | |
flake-utils.url = "github:numtide/flake-utils"; | |
}; | |
outputs = { self, nixpkgs, nixpkgs-qemu7, rust-overlay, flake-utils, ... }: | |
flake-utils.lib.eachDefaultSystem (system: | |
let | |
overlays = [ | |
(import rust-overlay) | |
(self: super: { | |
# ref: https://github.com/the-nix-way/dev-templates | |
rust-toolchain = | |
let | |
rust = super.rust-bin; | |
in | |
if builtins.pathExists ./rust-toolchain.toml then | |
rust.fromRustupToolchainFile ./rust-toolchain.toml | |
else if builtins.pathExists ./rust-toolchain then | |
rust.fromRustupToolchainFile ./rust-toolchain | |
else | |
# The rust-toolchain when i make this file, which maybe change | |
(rust.nightly."2022-08-05".minimal.override { | |
extensions = [ "rust-src" "llvm-tools-preview" "rustfmt" "clippy" ]; | |
targets = [ "riscv64gc-unknown-none-elf" ]; | |
}); | |
qemu = self.callPackage "${nixpkgs-qemu7}/pkgs/applications/virtualization/qemu" { | |
inherit (self.darwin.apple_sdk.frameworks) CoreServices Cocoa Hypervisor; | |
inherit (self.darwin.stubs) rez setfile; | |
inherit (self.darwin) sigtool; | |
# Reduces the number of qemu source files from ~10000 to ~2600 source files. | |
hostCpuTargets = ["riscv64-softmmu" "riscv32-softmmu"]; | |
}; | |
}) | |
]; | |
pkgs = import nixpkgs { | |
inherit system overlays; | |
}; | |
in | |
{ | |
devShells.default = pkgs.mkShell { | |
buildInputs = (with pkgs;[ | |
# Basic | |
openssl | |
pkg-config | |
exa | |
fd | |
qemu | |
# Cross Compile | |
(with pkgsCross.riscv64; [ musl.stdenv.cc ]) # If use normally, no necessary need to change. | |
# Rust Configuraiton | |
rustup | |
cargo-binutils | |
rust-toolchain | |
]); | |
shellHook = '' | |
alias ls=exa | |
alias find=fd | |
''; | |
}; | |
} | |
); | |
} |
What about using callPackage to import qemu directly from the old nixpkgs? Pros: sharing dependencies (e.g. glibc) with other packages in
nixpkgs-unstable
. Cons: re-building qemu required for every flake user. Maybe a binary cache (e.g. cachix) can be used, and we can only rebuild riscv32/riscv64 qemu targets.let qemu7 = self.callPackage "${nixpkgs-qemu7}/pkgs/applications/virtualization/qemu" { inherit (self.darwin.apple_sdk.frameworks) CoreServices Cocoa Hypervisor; inherit (self.darwin.stubs) rez setfile; inherit (self.darwin) sigtool; qemu = qemu7; # Reduces the number of qemu source files from ~10000 to ~2600 source files. hostCpuTargets = ["riscv64-softmmu" "riscv32-softmmu"]; };I guess this diff is what you means. by the ways, what is the reason of
inherit (self.darwin.stubs) rez setfile
andinherit (self.darwin) sigtool
? Which i have check some code using it, but haven't ideas about this, it's necessary dependence or optimization in macOS?Sorry about i have no ideas about macOS, but it seems sigTool is using for signature and database management tool, I can't understand the use of this place.
https://stackoverflow.com/questions/69869574/properly-adding-darwin-apple-sdk-to-a-nix-shell
6c6 < # nixpkgs-qemu7.url = "https://github.com/NixOS/nixpkgs/archive/7cf5ccf1cdb2ba5f08f0ac29fc3d04b0b59a07e4.tar.gz"; --- > nixpkgs-qemu7.url = "https://github.com/NixOS/nixpkgs/archive/7cf5ccf1cdb2ba5f08f0ac29fc3d04b0b59a07e4.tar.gz"; 11c11 < outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }: --- > outputs = { self, nixpkgs, nixpkgs-qemu7, rust-overlay, flake-utils, ... }: 31a32,38 > qemu7 = self.callPackage "${nixpkgs-qemu7}/pkgs/applications/virtualization/qemu" { > inherit (self.darwin.apple_sdk.frameworks) CoreServices Cocoa Hypervisor; > inherit (self.darwin.stubs) rez setfile; > inherit (self.darwin) sigtool; > # Reduces the number of qemu source files from ~10000 to ~2600 source files. > hostCpuTargets = ["riscv64-softmmu" "riscv32-softmmu"]; > }; 54,55c61 < pkgs.qemu < # pkg-qemu.qemu --- > pkgs.qemu7
No idea. I just copied these lines from nixpkgs:
@gjz010 would you be interested in another one?
Another rust operating system support Multiple Architectur, which flake haven't complete yet.
I guess this diff is what you means. by the ways, what is the reason of
inherit (self.darwin.stubs) rez setfile
andinherit (self.darwin) sigtool
?Which i have check some code using it, but haven't ideas about this, it's necessary dependence or optimization in macOS?
Sorry about i have no ideas about macOS, but it seems sigTool is using for signature and database management tool, I can't understand the use of this place.
https://stackoverflow.com/questions/69869574/properly-adding-darwin-apple-sdk-to-a-nix-shell