xtask: print environment command
This commit is contained in:
parent
c4b18c3379
commit
300646e8a7
@ -67,6 +67,8 @@ x86-specific:
|
|||||||
Building the OS
|
Building the OS
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
**NOTE** This project uses `xtask`-style build system. To see help, use `cargo xtask --help`.
|
||||||
|
|
||||||
Prerequisites:
|
Prerequisites:
|
||||||
|
|
||||||
* Decent CPU and a sizable amount of RAM
|
* Decent CPU and a sizable amount of RAM
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
use std::path::PathBuf;
|
use std::{io, path::PathBuf};
|
||||||
|
|
||||||
use clap::ValueEnum;
|
use clap::ValueEnum;
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct ToolchainConfig {
|
pub struct ToolchainConfig {
|
||||||
pub branch: String,
|
pub branch: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct BuildComponents {
|
pub struct BuildComponents {
|
||||||
pub libc: bool,
|
pub libc: bool,
|
||||||
@ -16,25 +16,25 @@ pub struct BuildComponents {
|
|||||||
pub libcxx: bool,
|
pub libcxx: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct AArch64TargetConfig {
|
pub struct AArch64TargetConfig {
|
||||||
pub components: BuildComponents,
|
pub components: BuildComponents,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct X86_64TargetConfig {
|
pub struct X86_64TargetConfig {
|
||||||
pub components: BuildComponents,
|
pub components: BuildComponents,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct I686TargetConfig {
|
pub struct I686TargetConfig {
|
||||||
pub components: BuildComponents,
|
pub components: BuildComponents,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct TargetConfig {
|
pub struct TargetConfig {
|
||||||
pub aarch64: AArch64TargetConfig,
|
pub aarch64: AArch64TargetConfig,
|
||||||
@ -42,7 +42,7 @@ pub struct TargetConfig {
|
|||||||
pub i686: I686TargetConfig,
|
pub i686: I686TargetConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct XTaskConfig {
|
pub struct XTaskConfig {
|
||||||
pub toolchain: ToolchainConfig,
|
pub toolchain: ToolchainConfig,
|
||||||
@ -174,6 +174,17 @@ impl BuildEnv {
|
|||||||
llvm_sysroot,
|
llvm_sysroot,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dump<W: io::Write>(&self, output: &mut W) {
|
||||||
|
match toml::to_string_pretty(&self.config) {
|
||||||
|
Ok(string) => {
|
||||||
|
writeln!(output, "{string}").ok();
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
log::error!("Config serialization error: {error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl XTaskConfig {
|
impl XTaskConfig {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#![deny(warnings)]
|
#![deny(warnings)]
|
||||||
#![feature(exit_status_error)]
|
#![feature(exit_status_error)]
|
||||||
|
|
||||||
use std::{fs, path::PathBuf, process::ExitCode};
|
use std::{fs, io::stdout, path::PathBuf, process::ExitCode};
|
||||||
|
|
||||||
use build::CheckAction;
|
use build::CheckAction;
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
@ -88,6 +88,8 @@ enum SubArgs {
|
|||||||
Toolchain { branch: Option<String> },
|
Toolchain { branch: Option<String> },
|
||||||
#[clap(about = "Print the host triple")]
|
#[clap(about = "Print the host triple")]
|
||||||
HostTriple,
|
HostTriple,
|
||||||
|
#[clap(about = "Print information about the build environment and configuration")]
|
||||||
|
Env,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run(args: Args) -> Result<(), Error> {
|
fn run(args: Args) -> Result<(), Error> {
|
||||||
@ -148,6 +150,20 @@ fn run(args: Args) -> Result<(), Error> {
|
|||||||
println!("{}", env.host_triple);
|
println!("{}", env.host_triple);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
SubArgs::Env => {
|
||||||
|
println!("--- Build information ---");
|
||||||
|
println!();
|
||||||
|
match config_path {
|
||||||
|
Some(path) => println!(" * Using {}:", path.display()),
|
||||||
|
None => println!(" * Using default xtask config:"),
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
env.dump(&mut stdout());
|
||||||
|
qemu::dump_config(&env, &mut stdout());
|
||||||
|
println!("--- End build information ---");
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
|
io,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
process::Command,
|
process::Command,
|
||||||
};
|
};
|
||||||
@ -18,7 +19,7 @@ use crate::{
|
|||||||
|
|
||||||
const X86_64_UEFI_PATH: &str = "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd";
|
const X86_64_UEFI_PATH: &str = "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd";
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuNetworkConfig {
|
struct QemuNetworkConfig {
|
||||||
enable: bool,
|
enable: bool,
|
||||||
@ -26,7 +27,7 @@ struct QemuNetworkConfig {
|
|||||||
mac: String,
|
mac: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Copy, serde::Deserialize)]
|
#[derive(Debug, Default, Clone, Copy, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
enum QemuDiskInterface {
|
enum QemuDiskInterface {
|
||||||
#[default]
|
#[default]
|
||||||
@ -34,33 +35,33 @@ enum QemuDiskInterface {
|
|||||||
Ahci,
|
Ahci,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuDiskConfig {
|
struct QemuDiskConfig {
|
||||||
interface: QemuDiskInterface,
|
interface: QemuDiskInterface,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuX86_64MachineConfig {
|
struct QemuX86_64MachineConfig {
|
||||||
enable_kvm: bool,
|
enable_kvm: bool,
|
||||||
memory: usize,
|
memory: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuAArch64MachineConfig {
|
struct QemuAArch64MachineConfig {
|
||||||
memory: usize,
|
memory: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuI686MachineConfig {
|
struct QemuI686MachineConfig {
|
||||||
enable_kvm: bool,
|
enable_kvm: bool,
|
||||||
memory: usize,
|
memory: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Deserialize)]
|
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
struct QemuMachineConfig {
|
struct QemuMachineConfig {
|
||||||
x86_64: QemuX86_64MachineConfig,
|
x86_64: QemuX86_64MachineConfig,
|
||||||
@ -69,7 +70,7 @@ struct QemuMachineConfig {
|
|||||||
smp: usize,
|
smp: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(rename_all = "kebab-case", default)]
|
#[serde(rename_all = "kebab-case", default)]
|
||||||
struct QemuConfig {
|
struct QemuConfig {
|
||||||
network: QemuNetworkConfig,
|
network: QemuNetworkConfig,
|
||||||
@ -291,6 +292,23 @@ fn add_devices_from_config(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dump_config<W: io::Write>(env: &BuildEnv, output: &mut W) {
|
||||||
|
let config_path = env.workspace_root.join("qemu.toml");
|
||||||
|
if config_path.exists() {
|
||||||
|
writeln!(output, " * Using qemu.toml:").ok();
|
||||||
|
} else {
|
||||||
|
writeln!(output, " * Using default qemu config:").ok();
|
||||||
|
}
|
||||||
|
let config = load_qemu_config(config_path);
|
||||||
|
|
||||||
|
writeln!(output).ok();
|
||||||
|
match config.as_ref().map(toml::to_string_pretty) {
|
||||||
|
Ok(Ok(string)) => writeln!(output, "{string}").ok(),
|
||||||
|
Ok(Err(error)) => writeln!(output, "<Serialization error: {error}>").ok(),
|
||||||
|
Err(error) => writeln!(output, "<Load error: {error}>").ok(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run(
|
pub fn run(
|
||||||
env: BuildEnv,
|
env: BuildEnv,
|
||||||
qemu: Option<PathBuf>,
|
qemu: Option<PathBuf>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user