From a685253a1a1df735fcaf4935f7111568ad569f2e Mon Sep 17 00:00:00 2001 From: Zhang Junyang Date: Mon, 26 Feb 2024 20:08:30 +0800 Subject: [PATCH] Specify target dir for the base crate --- osdk/src/commands/build/mod.rs | 35 +++++++++++++++++++++++++--------- osdk/src/commands/run.rs | 4 +++- osdk/src/commands/test.rs | 4 +++- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/osdk/src/commands/build/mod.rs b/osdk/src/commands/build/mod.rs index 1ef410ad7..2187e6589 100644 --- a/osdk/src/commands/build/mod.rs +++ b/osdk/src/commands/build/mod.rs @@ -24,19 +24,26 @@ use crate::{ }; pub fn execute_build_command(config: &BuildConfig) { - let osdk_target_directory = get_target_directory().join(DEFAULT_TARGET_RELPATH); + let ws_target_directory = get_target_directory(); + let osdk_target_directory = ws_target_directory.join(DEFAULT_TARGET_RELPATH); if !osdk_target_directory.exists() { std::fs::create_dir_all(&osdk_target_directory).unwrap(); } let target_info = get_current_crate_info(); let bundle_path = osdk_target_directory.join(target_info.name); - let _bundle = create_base_and_build(bundle_path, &osdk_target_directory, config); + let _bundle = create_base_and_build( + bundle_path, + &osdk_target_directory, + &ws_target_directory, + config, + ); } pub fn create_base_and_build( bundle_path: impl AsRef, osdk_target_directory: impl AsRef, + cargo_target_directory: impl AsRef, config: &BuildConfig, ) -> Bundle { let base_crate_path = osdk_target_directory.as_ref().join("base"); @@ -47,7 +54,12 @@ pub fn create_base_and_build( ); let original_dir = std::env::current_dir().unwrap(); std::env::set_current_dir(&base_crate_path).unwrap(); - let bundle = do_build(&bundle_path, &osdk_target_directory, config); + let bundle = do_build( + &bundle_path, + &osdk_target_directory, + &cargo_target_directory, + config, + ); std::env::set_current_dir(original_dir).unwrap(); bundle } @@ -55,6 +67,7 @@ pub fn create_base_and_build( pub fn do_build( bundle_path: impl AsRef, osdk_target_directory: impl AsRef, + cargo_target_directory: impl AsRef, config: &BuildConfig, ) -> Bundle { if let Some(ref initramfs) = config.manifest.initramfs { @@ -76,7 +89,7 @@ pub fn do_build( &bundle_path, ); info!("Building kernel ELF"); - let aster_elf = build_kernel_elf(&config.cargo_args); + let aster_elf = build_kernel_elf(&config.cargo_args, &cargo_target_directory); if matches!(config.manifest.qemu.machine, QemuMachine::Microvm) { let stripped_elf = strip_elf_for_qemu(&osdk_target_directory, &aster_elf); @@ -100,13 +113,16 @@ pub fn do_build( bundle } -fn build_kernel_elf(args: &CargoArgs) -> AsterBin { - let target_directory = get_target_directory(); +fn build_kernel_elf(args: &CargoArgs, cargo_target_directory: impl AsRef) -> AsterBin { let target_json_path = PathBuf::from_str("x86_64-custom.json").unwrap(); let mut command = cargo(); command.env_remove("RUSTUP_TOOLCHAIN"); - command.arg("build").arg("--target").arg(&target_json_path); + command.arg("build"); + command.arg("--target").arg(&target_json_path); + command + .arg("--target-dir") + .arg(cargo_target_directory.as_ref()); command.args(COMMON_CARGO_ARGS); command.arg("--profile=".to_string() + &args.profile); let status = command.status().unwrap(); @@ -115,8 +131,9 @@ fn build_kernel_elf(args: &CargoArgs) -> AsterBin { process::exit(Errno::ExecuteCommand as _); } - let aster_bin_path = - target_directory.join(target_json_path.file_stem().unwrap().to_str().unwrap()); + let aster_bin_path = cargo_target_directory + .as_ref() + .join(target_json_path.file_stem().unwrap().to_str().unwrap()); let aster_bin_path = if args.profile == "dev" { aster_bin_path.join("debug") } else { diff --git a/osdk/src/commands/run.rs b/osdk/src/commands/run.rs index b5e3f3447..dae6ca169 100644 --- a/osdk/src/commands/run.rs +++ b/osdk/src/commands/run.rs @@ -7,7 +7,8 @@ use crate::{ }; pub fn execute_run_command(config: &RunConfig) { - let osdk_target_directory = get_target_directory().join(DEFAULT_TARGET_RELPATH); + let ws_target_directory = get_target_directory(); + let osdk_target_directory = ws_target_directory.join(DEFAULT_TARGET_RELPATH); let target_name = get_current_crate_info().name; let default_bundle_directory = osdk_target_directory.join(target_name); @@ -20,6 +21,7 @@ pub fn execute_run_command(config: &RunConfig) { let bundle = create_base_and_build( default_bundle_directory, &osdk_target_directory, + &ws_target_directory, &required_build_config, ); diff --git a/osdk/src/commands/test.rs b/osdk/src/commands/test.rs index a2d43a408..12b6bf134 100644 --- a/osdk/src/commands/test.rs +++ b/osdk/src/commands/test.rs @@ -11,7 +11,8 @@ use crate::{ pub fn execute_test_command(config: &TestConfig) { let current_crate = get_current_crate_info(); - let osdk_target_directory = get_target_directory().join(DEFAULT_TARGET_RELPATH); + let ws_target_directory = get_target_directory(); + let osdk_target_directory = ws_target_directory.join(DEFAULT_TARGET_RELPATH); let target_crate_dir = osdk_target_directory.join("base"); new_base_crate(&target_crate_dir, ¤t_crate.name, ¤t_crate.path); @@ -56,6 +57,7 @@ pub static KTEST_CRATE_WHITELIST: Option<&[&str]> = Some(&{:#?}); let bundle = do_build( default_bundle_directory, &osdk_target_directory, + &ws_target_directory, &required_build_config, ); std::env::remove_var("RUSTFLAGS");