mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-18 10:02:23 -07:00
78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Build Options
|
|
|
|
#define BUILD_TITLE "convertperf"
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Includes
|
|
|
|
//- rjf: [lib]
|
|
#include "third_party/rad_lzb_simple/rad_lzb_simple.h"
|
|
#include "third_party/rad_lzb_simple/rad_lzb_simple.c"
|
|
|
|
//- rjf: [h]
|
|
#include "base/base_inc.h"
|
|
#include "os/os_inc.h"
|
|
#include "async/async.h"
|
|
#include "rdi_format/rdi_format_local.h"
|
|
#include "dbgi/dbgi.h"
|
|
|
|
//- rjf: [c]
|
|
#include "base/base_inc.c"
|
|
#include "os/os_inc.c"
|
|
#include "async/async.c"
|
|
#include "rdi_format/rdi_format_local.c"
|
|
#include "dbgi/dbgi.c"
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Entry Points
|
|
|
|
internal void
|
|
entry_point(CmdLine *cmdline)
|
|
{
|
|
Arena *arena = arena_alloc();
|
|
String8 list_path = str8_list_first(&cmdline->inputs);
|
|
String8 list_data = os_data_from_file_path(arena, list_path);
|
|
U8 splits[] = {'\n'};
|
|
String8List lines = str8_split(arena, list_data, splits, ArrayCount(splits), 0);
|
|
OS_HandleList processes = {0};
|
|
String8Node *processes_first_path_n = 0;
|
|
U64 limit = 64;
|
|
U64 idx = 0;
|
|
for(String8Node *n = lines.first; n != 0; n = n->next)
|
|
{
|
|
String8 dll_path = n->string;
|
|
ProfScope("kick off %.*s", str8_varg(dll_path))
|
|
{
|
|
String8 dll_path_no_ext = str8_chop_last_dot(dll_path);
|
|
String8 dll_name = str8_skip_last_slash(dll_path_no_ext);
|
|
String8 pdb_path = push_str8f(arena, "%S.pdb", dll_path_no_ext);
|
|
String8 rdi_path = push_str8f(arena, "dump/%S.rdi", dll_name);
|
|
OS_Handle handle = os_cmd_line_launchf("raddbg --bin %S --out:%S", pdb_path, rdi_path);
|
|
os_handle_list_push(arena, &processes, handle);
|
|
if(processes_first_path_n == 0)
|
|
{
|
|
processes_first_path_n = n;
|
|
}
|
|
idx += 1;
|
|
}
|
|
if(idx >= limit)
|
|
{
|
|
String8Node *line_n = processes_first_path_n;
|
|
for(OS_HandleNode *n = processes.first; n != 0; n = n->next, line_n = line_n->next)
|
|
{
|
|
ProfScope("join %.*s", str8_varg(line_n->string))
|
|
{
|
|
os_process_join(n->v, max_U64);
|
|
}
|
|
}
|
|
idx = 0;
|
|
MemoryZeroStruct(&processes);
|
|
processes_first_path_n = 0;
|
|
}
|
|
}
|
|
}
|