-
-
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
and inherit (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
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.
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.