Adjustments for use with ninja build
This commit is contained in:
parent
771c380129
commit
4b6e317d0b
|
@ -3,7 +3,7 @@ name = "decomp-toolkit"
|
||||||
description = "Yet another GameCube/Wii decompilation toolkit."
|
description = "Yet another GameCube/Wii decompilation toolkit."
|
||||||
authors = ["Luke Street <luke@street.dev>"]
|
authors = ["Luke Street <luke@street.dev>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
version = "0.3.0"
|
version = "0.3.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
publish = false
|
publish = false
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
|
@ -26,7 +26,7 @@ use crate::{
|
||||||
config::{apply_splits, parse_symbol_line, write_splits, write_symbols},
|
config::{apply_splits, parse_symbol_line, write_splits, write_symbols},
|
||||||
dol::process_dol,
|
dol::process_dol,
|
||||||
elf::{process_elf, write_elf},
|
elf::{process_elf, write_elf},
|
||||||
file::{map_file, map_reader},
|
file::{map_file, map_reader, touch},
|
||||||
lcf::{asm_path_for_unit, generate_ldscript, obj_path_for_unit},
|
lcf::{asm_path_for_unit, generate_ldscript, obj_path_for_unit},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -74,6 +74,9 @@ pub struct SplitArgs {
|
||||||
#[argp(option, short = 'e')]
|
#[argp(option, short = 'e')]
|
||||||
/// ELF file to validate against (debugging only)
|
/// ELF file to validate against (debugging only)
|
||||||
elf_file: Option<PathBuf>,
|
elf_file: Option<PathBuf>,
|
||||||
|
#[argp(switch)]
|
||||||
|
/// skip updating splits & symbol files (for build systems)
|
||||||
|
no_update: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(args: Args) -> Result<()> {
|
pub fn run(args: Args) -> Result<()> {
|
||||||
|
@ -179,6 +182,7 @@ fn split(args: SplitArgs) -> Result<()> {
|
||||||
log::info!("Detecting strings");
|
log::info!("Detecting strings");
|
||||||
detect_strings(&mut obj)?;
|
detect_strings(&mut obj)?;
|
||||||
|
|
||||||
|
if !args.no_update {
|
||||||
if let Some(symbols_path) = &args.symbols_file {
|
if let Some(symbols_path) = &args.symbols_file {
|
||||||
let mut symbols_writer = BufWriter::new(
|
let mut symbols_writer = BufWriter::new(
|
||||||
File::create(symbols_path)
|
File::create(symbols_path)
|
||||||
|
@ -194,6 +198,7 @@ fn split(args: SplitArgs) -> Result<()> {
|
||||||
);
|
);
|
||||||
write_splits(&mut splits_writer, &obj)?;
|
write_splits(&mut splits_writer, &obj)?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log::info!("Adjusting splits");
|
log::info!("Adjusting splits");
|
||||||
update_splits(&mut obj)?;
|
update_splits(&mut obj)?;
|
||||||
|
@ -202,6 +207,7 @@ fn split(args: SplitArgs) -> Result<()> {
|
||||||
let split_objs = split_obj(&obj)?;
|
let split_objs = split_obj(&obj)?;
|
||||||
|
|
||||||
// Create out dirs
|
// Create out dirs
|
||||||
|
touch(&args.out_dir)?;
|
||||||
let asm_dir = args.out_dir.join("asm");
|
let asm_dir = args.out_dir.join("asm");
|
||||||
let include_dir = args.out_dir.join("include");
|
let include_dir = args.out_dir.join("include");
|
||||||
let obj_dir = args.out_dir.join("obj");
|
let obj_dir = args.out_dir.join("obj");
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
use std::{
|
use std::{
|
||||||
fs::{File, OpenOptions},
|
fs::File,
|
||||||
io::{BufRead, BufReader, Read},
|
io::{BufRead, BufReader, Read},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
};
|
};
|
||||||
|
|
||||||
use anyhow::{anyhow, bail, Context, Result};
|
use anyhow::{anyhow, bail, Context, Result};
|
||||||
use argp::FromArgs;
|
use argp::FromArgs;
|
||||||
use filetime::{set_file_mtime, FileTime};
|
|
||||||
use sha1::{Digest, Sha1};
|
use sha1::{Digest, Sha1};
|
||||||
|
|
||||||
use crate::util::file::process_rsp;
|
use crate::util::file::{process_rsp, touch};
|
||||||
|
|
||||||
#[derive(FromArgs, PartialEq, Eq, Debug)]
|
#[derive(FromArgs, PartialEq, Eq, Debug)]
|
||||||
/// Print or check SHA1 (160-bit) checksums.
|
/// Print or check SHA1 (160-bit) checksums.
|
||||||
|
@ -100,14 +99,3 @@ fn file_sha1(mut file: File) -> Result<sha1::digest::Output<Sha1>> {
|
||||||
hasher.update(&buf[0..read]);
|
hasher.update(&buf[0..read]);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn touch<P: AsRef<Path>>(path: P) -> std::io::Result<()> {
|
|
||||||
if path.as_ref().exists() {
|
|
||||||
set_file_mtime(path, FileTime::now())
|
|
||||||
} else {
|
|
||||||
match OpenOptions::new().create(true).write(true).open(path) {
|
|
||||||
Ok(_) => Ok(()),
|
|
||||||
Err(e) => Err(e),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ pub fn parse_symbol_line(line: &str, obj: &mut ObjInfo) -> Result<Option<ObjSymb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Some(symbol))
|
Ok(Some(symbol))
|
||||||
} else if COMMENT_LINE.is_match(line) {
|
} else if line.is_empty() || COMMENT_LINE.is_match(line) {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
} else {
|
} else {
|
||||||
Err(anyhow!("Failed to parse symbol line '{line}'"))
|
Err(anyhow!("Failed to parse symbol line '{line}'"))
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
use std::{
|
use std::{
|
||||||
fs::File,
|
fs::{File, OpenOptions},
|
||||||
io::{BufRead, BufReader, Cursor, Read},
|
io::{BufRead, BufReader, Cursor, Read},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
};
|
};
|
||||||
|
|
||||||
use anyhow::{anyhow, Context, Result};
|
use anyhow::{anyhow, Context, Result};
|
||||||
use byteorder::ReadBytesExt;
|
use byteorder::ReadBytesExt;
|
||||||
|
use filetime::{set_file_mtime, FileTime};
|
||||||
use memmap2::{Mmap, MmapOptions};
|
use memmap2::{Mmap, MmapOptions};
|
||||||
|
|
||||||
use crate::util::{rarc, rarc::Node, yaz0};
|
use crate::util::{rarc, rarc::Node, yaz0};
|
||||||
|
@ -234,3 +235,14 @@ impl Iterator for FileIterator {
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> { self.next_rarc().or_else(|| self.next_path()) }
|
fn next(&mut self) -> Option<Self::Item> { self.next_rarc().or_else(|| self.next_path()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn touch<P: AsRef<Path>>(path: P) -> std::io::Result<()> {
|
||||||
|
if path.as_ref().exists() {
|
||||||
|
set_file_mtime(path, FileTime::now())
|
||||||
|
} else {
|
||||||
|
match OpenOptions::new().create(true).write(true).open(path) {
|
||||||
|
Ok(_) => Ok(()),
|
||||||
|
Err(e) => Err(e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -286,7 +286,7 @@ impl StateMachine {
|
||||||
}
|
}
|
||||||
ProcessMapState::SectionLayout(ref mut state) => {
|
ProcessMapState::SectionLayout(ref mut state) => {
|
||||||
if let Some(captures) = SECTION_LAYOUT_SYMBOL.captures(&line) {
|
if let Some(captures) = SECTION_LAYOUT_SYMBOL.captures(&line) {
|
||||||
StateMachine::section_layout_entry(captures, state, &mut self.result)?;
|
StateMachine::section_layout_entry(captures, state, &self.result)?;
|
||||||
} else if let Some(captures) = SECTION_LAYOUT_START.captures(&line) {
|
} else if let Some(captures) = SECTION_LAYOUT_START.captures(&line) {
|
||||||
self.switch_state(ProcessMapState::SectionLayout(SectionLayoutState {
|
self.switch_state(ProcessMapState::SectionLayout(SectionLayoutState {
|
||||||
current_section: captures["section"].to_string(),
|
current_section: captures["section"].to_string(),
|
||||||
|
@ -493,7 +493,7 @@ impl StateMachine {
|
||||||
fn section_layout_entry(
|
fn section_layout_entry(
|
||||||
captures: Captures,
|
captures: Captures,
|
||||||
state: &mut SectionLayoutState,
|
state: &mut SectionLayoutState,
|
||||||
result: &mut MapInfo,
|
result: &MapInfo,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
if captures["rom_addr"].trim() == "UNUSED" {
|
if captures["rom_addr"].trim() == "UNUSED" {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|
Loading…
Reference in New Issue