Add custom make args (#59)

This commit is contained in:
Aetias 2024-05-16 02:53:14 +02:00 committed by GitHub
parent 3e5008524e
commit b457453639
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 16 additions and 2 deletions

View File

@ -59,6 +59,10 @@ file as well. You can then add `objdiff.json` to your `.gitignore` to prevent it
// objdiff.json // objdiff.json
{ {
"custom_make": "ninja", "custom_make": "ninja",
"custom_args": [
"-C",
"build"
],
// Only required if objects use "path" instead of "target_path" and "base_path". // Only required if objects use "path" instead of "target_path" and "base_path".
"target_dir": "build/asm", "target_dir": "build/asm",

View File

@ -18,6 +18,8 @@ pub struct ProjectConfig {
#[serde(default)] #[serde(default)]
pub custom_make: Option<String>, pub custom_make: Option<String>,
#[serde(default)] #[serde(default)]
pub custom_args: Option<Vec<String>>,
#[serde(default)]
pub target_dir: Option<PathBuf>, pub target_dir: Option<PathBuf>,
#[serde(default)] #[serde(default)]
pub base_dir: Option<PathBuf>, pub base_dir: Option<PathBuf>,

View File

@ -84,6 +84,8 @@ pub struct AppConfig {
#[serde(default)] #[serde(default)]
pub custom_make: Option<String>, pub custom_make: Option<String>,
#[serde(default)] #[serde(default)]
pub custom_args: Option<Vec<String>>,
#[serde(default)]
pub selected_wsl_distro: Option<String>, pub selected_wsl_distro: Option<String>,
#[serde(default)] #[serde(default)]
pub project_dir: Option<PathBuf>, pub project_dir: Option<PathBuf>,
@ -131,6 +133,7 @@ impl Default for AppConfig {
Self { Self {
version: AppConfigVersion::default().version, version: AppConfigVersion::default().version,
custom_make: None, custom_make: None,
custom_args: None,
selected_wsl_distro: None, selected_wsl_distro: None,
project_dir: None, project_dir: None,
target_obj_dir: None, target_obj_dir: None,

View File

@ -71,6 +71,7 @@ pub fn load_project_config(config: &mut AppConfig) -> Result<()> {
if let Some((result, info)) = try_project_config(project_dir) { if let Some((result, info)) = try_project_config(project_dir) {
let project_config = result?; let project_config = result?;
config.custom_make = project_config.custom_make; config.custom_make = project_config.custom_make;
config.custom_args = project_config.custom_args;
config.target_obj_dir = project_config.target_dir.map(|p| project_dir.join(p)); config.target_obj_dir = project_config.target_dir.map(|p| project_dir.join(p));
config.base_obj_dir = project_config.base_dir.map(|p| project_dir.join(p)); config.base_obj_dir = project_config.base_dir.map(|p| project_dir.join(p));
config.build_base = project_config.build_base; config.build_base = project_config.build_base;

View File

@ -39,6 +39,7 @@ impl Default for BuildStatus {
pub struct BuildConfig { pub struct BuildConfig {
pub project_dir: Option<PathBuf>, pub project_dir: Option<PathBuf>,
pub custom_make: Option<String>, pub custom_make: Option<String>,
pub custom_args: Option<Vec<String>>,
pub selected_wsl_distro: Option<String>, pub selected_wsl_distro: Option<String>,
} }
@ -47,6 +48,7 @@ impl BuildConfig {
Self { Self {
project_dir: config.project_dir.clone(), project_dir: config.project_dir.clone(),
custom_make: config.custom_make.clone(), custom_make: config.custom_make.clone(),
custom_args: config.custom_args.clone(),
selected_wsl_distro: config.selected_wsl_distro.clone(), selected_wsl_distro: config.selected_wsl_distro.clone(),
} }
} }
@ -96,10 +98,11 @@ pub(crate) fn run_make(config: &BuildConfig, arg: &Path) -> BuildStatus {
fn run_make_cmd(config: &BuildConfig, cwd: &Path, arg: &Path) -> Result<BuildStatus> { fn run_make_cmd(config: &BuildConfig, cwd: &Path, arg: &Path) -> Result<BuildStatus> {
let make = config.custom_make.as_deref().unwrap_or("make"); let make = config.custom_make.as_deref().unwrap_or("make");
let make_args = config.custom_args.as_deref().unwrap_or(&[]);
#[cfg(not(windows))] #[cfg(not(windows))]
let mut command = { let mut command = {
let mut command = Command::new(make); let mut command = Command::new(make);
command.current_dir(cwd).arg(arg); command.current_dir(cwd).args(make_args).arg(arg);
command command
}; };
#[cfg(windows)] #[cfg(windows)]
@ -120,9 +123,10 @@ fn run_make_cmd(config: &BuildConfig, cwd: &Path, arg: &Path) -> Result<BuildSta
.arg(distro) .arg(distro)
.arg("--") .arg("--")
.arg(make) .arg(make)
.args(make_args)
.arg(arg.to_slash_lossy().as_ref()); .arg(arg.to_slash_lossy().as_ref());
} else { } else {
command.current_dir(cwd).arg(arg.to_slash_lossy().as_ref()); command.current_dir(cwd).args(make_args).arg(arg.to_slash_lossy().as_ref());
} }
command.creation_flags(winapi::um::winbase::CREATE_NO_WINDOW); command.creation_flags(winapi::um::winbase::CREATE_NO_WINDOW);
command command