xtask: print environment command
This commit is contained in:
parent
c4b18c3379
commit
300646e8a7
@ -67,6 +67,8 @@ x86-specific:
|
||||
Building the OS
|
||||
---------------
|
||||
|
||||
**NOTE** This project uses `xtask`-style build system. To see help, use `cargo xtask --help`.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
* Decent CPU and a sizable amount of RAM
|
||||
|
@ -1,14 +1,14 @@
|
||||
use std::path::PathBuf;
|
||||
use std::{io, path::PathBuf};
|
||||
|
||||
use clap::ValueEnum;
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct ToolchainConfig {
|
||||
pub branch: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct BuildComponents {
|
||||
pub libc: bool,
|
||||
@ -16,25 +16,25 @@ pub struct BuildComponents {
|
||||
pub libcxx: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct AArch64TargetConfig {
|
||||
pub components: BuildComponents,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct X86_64TargetConfig {
|
||||
pub components: BuildComponents,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct I686TargetConfig {
|
||||
pub components: BuildComponents,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct TargetConfig {
|
||||
pub aarch64: AArch64TargetConfig,
|
||||
@ -42,7 +42,7 @@ pub struct TargetConfig {
|
||||
pub i686: I686TargetConfig,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
pub struct XTaskConfig {
|
||||
pub toolchain: ToolchainConfig,
|
||||
@ -174,6 +174,17 @@ impl BuildEnv {
|
||||
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 {
|
||||
|
@ -1,7 +1,7 @@
|
||||
#![deny(warnings)]
|
||||
#![feature(exit_status_error)]
|
||||
|
||||
use std::{fs, path::PathBuf, process::ExitCode};
|
||||
use std::{fs, io::stdout, path::PathBuf, process::ExitCode};
|
||||
|
||||
use build::CheckAction;
|
||||
use clap::{Parser, Subcommand};
|
||||
@ -88,6 +88,8 @@ enum SubArgs {
|
||||
Toolchain { branch: Option<String> },
|
||||
#[clap(about = "Print the host triple")]
|
||||
HostTriple,
|
||||
#[clap(about = "Print information about the build environment and configuration")]
|
||||
Env,
|
||||
}
|
||||
|
||||
fn run(args: Args) -> Result<(), Error> {
|
||||
@ -148,6 +150,20 @@ fn run(args: Args) -> Result<(), Error> {
|
||||
println!("{}", env.host_triple);
|
||||
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::{
|
||||
io,
|
||||
path::{Path, PathBuf},
|
||||
process::Command,
|
||||
};
|
||||
@ -18,7 +19,7 @@ use crate::{
|
||||
|
||||
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)]
|
||||
struct QemuNetworkConfig {
|
||||
enable: bool,
|
||||
@ -26,7 +27,7 @@ struct QemuNetworkConfig {
|
||||
mac: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, serde::Deserialize)]
|
||||
#[derive(Debug, Default, Clone, Copy, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
enum QemuDiskInterface {
|
||||
#[default]
|
||||
@ -34,33 +35,33 @@ enum QemuDiskInterface {
|
||||
Ahci,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
struct QemuDiskConfig {
|
||||
interface: QemuDiskInterface,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
struct QemuX86_64MachineConfig {
|
||||
enable_kvm: bool,
|
||||
memory: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
struct QemuAArch64MachineConfig {
|
||||
memory: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
struct QemuI686MachineConfig {
|
||||
enable_kvm: bool,
|
||||
memory: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
#[derive(Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(default)]
|
||||
struct QemuMachineConfig {
|
||||
x86_64: QemuX86_64MachineConfig,
|
||||
@ -69,7 +70,7 @@ struct QemuMachineConfig {
|
||||
smp: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, serde::Deserialize)]
|
||||
#[derive(Debug, Default, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
struct QemuConfig {
|
||||
network: QemuNetworkConfig,
|
||||
@ -291,6 +292,23 @@ fn add_devices_from_config(
|
||||
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(
|
||||
env: BuildEnv,
|
||||
qemu: Option<PathBuf>,
|
||||
|
Loading…
x
Reference in New Issue
Block a user