mirror of
https://github.com/open-goal/jak-project
synced 2026-09-03 02:14:07 -04:00
decomp: support part-tracker-spawn in jak2, part group constants (#4082)
This commit is contained in:
@@ -1125,6 +1125,34 @@ void ObjectFileDB::dump_art_info(const fs::path& output_dir) {
|
||||
lg::info("Written art group info: in {:.2f} ms", timer.getMs());
|
||||
}
|
||||
|
||||
void ObjectFileDB::dump_part_group_table(
|
||||
const fs::path& output_dir,
|
||||
const std::unordered_map<u32, std::string>& part_group_table) {
|
||||
lg::info("Writing part group table...");
|
||||
Timer timer;
|
||||
|
||||
if (!part_group_table.empty()) {
|
||||
file_util::create_dir_if_needed(output_dir / "import");
|
||||
}
|
||||
|
||||
auto ptable_fpath = output_dir / "import" / "part-groups.gc";
|
||||
std::string result;
|
||||
|
||||
for (const auto& [id, name] : part_group_table) {
|
||||
result += fmt::format("(defconstant {} (-> *part-group-id-table* {}))", name, id);
|
||||
result += "\n";
|
||||
}
|
||||
|
||||
file_util::write_text_file(ptable_fpath, result);
|
||||
|
||||
auto ptable_dump_fpath = output_dir / "dump" / "part-groups.min.json";
|
||||
nlohmann::json json = part_group_table;
|
||||
file_util::create_dir_if_needed_for_file(ptable_dump_fpath);
|
||||
file_util::write_text_file(ptable_dump_fpath, json.dump(-1));
|
||||
|
||||
lg::info("Written part group table in {:.2f} ms", timer.getMs());
|
||||
}
|
||||
|
||||
void ObjectFileDB::dump_raw_objects(const fs::path& output_dir) {
|
||||
for_each_obj([&](ObjectFileData& data) {
|
||||
auto dest = output_dir / data.to_unique_name();
|
||||
|
||||
@@ -190,6 +190,8 @@ class ObjectFileDB {
|
||||
void extract_art_info();
|
||||
void dump_art_info(const fs::path& output_dir);
|
||||
void dump_raw_objects(const fs::path& output_dir);
|
||||
void dump_part_group_table(const fs::path& output_dir,
|
||||
const std::unordered_map<u32, std::string>& part_group_table);
|
||||
void write_object_file_words(const fs::path& output_dir, bool dump_data, bool dump_code);
|
||||
void write_disassembly(const fs::path& output_dir,
|
||||
bool disassemble_data,
|
||||
@@ -199,12 +201,12 @@ class ObjectFileDB {
|
||||
void process_object_file_data(
|
||||
ObjectFileData& data,
|
||||
const fs::path& output_dir,
|
||||
const Config& config,
|
||||
Config& config,
|
||||
const std::unordered_set<std::string>& skip_functions,
|
||||
const std::unordered_map<std::string, std::unordered_set<std::string>>& skip_states);
|
||||
void analyze_functions_ir2(
|
||||
const fs::path& output_dir,
|
||||
const Config& config,
|
||||
Config& config,
|
||||
const std::optional<std::function<void(std::string)>> prefile_callback,
|
||||
const std::optional<std::function<void()>> postfile_callback,
|
||||
const std::unordered_set<std::string>& skip_functions,
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace decompiler {
|
||||
void ObjectFileDB::process_object_file_data(
|
||||
ObjectFileData& data,
|
||||
const fs::path& output_dir,
|
||||
const Config& config,
|
||||
Config& config,
|
||||
const std::unordered_set<std::string>& skip_functions,
|
||||
const std::unordered_map<std::string, std::unordered_set<std::string>>& skip_states) {
|
||||
Timer file_timer;
|
||||
@@ -50,7 +50,8 @@ void ObjectFileDB::process_object_file_data(
|
||||
if (data.linked_data.functions_by_seg.size() == 3) {
|
||||
enum { DEFPART, DEFSTATE, DEFSKELGROUP } step = DEFPART;
|
||||
try {
|
||||
run_defpartgroup(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front());
|
||||
run_defpartgroup(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front(),
|
||||
config.part_group_table);
|
||||
step = DEFSTATE;
|
||||
run_defstate(data.linked_data.functions_by_seg.at(TOP_LEVEL_SEGMENT).front(), skip_states);
|
||||
step = DEFSKELGROUP;
|
||||
@@ -126,7 +127,7 @@ void ObjectFileDB::process_object_file_data(
|
||||
*/
|
||||
void ObjectFileDB::analyze_functions_ir2(
|
||||
const fs::path& output_dir,
|
||||
const Config& config,
|
||||
Config& config,
|
||||
const std::optional<std::function<void(std::string)>> prefile_callback,
|
||||
const std::optional<std::function<void()>> postfile_callback,
|
||||
const std::unordered_set<std::string>& skip_functions,
|
||||
|
||||
Reference in New Issue
Block a user