mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
add basedlls.pl
This commit is contained in:
parent
38bc4fdb1e
commit
4f940d5498
92
pandatool/src/scripts/basedlls.pl
Executable file
92
pandatool/src/scripts/basedlls.pl
Executable file
@ -0,0 +1,92 @@
|
||||
#!perl
|
||||
|
||||
# generate address base file for panda dlls
|
||||
# to simplify things, do it for Opt1 and reuse that for Opt2,
|
||||
# and do it for Opt3 and use that for Opt4, since they will both be bigger than counterparts
|
||||
# to run, 'perl basedlls.pl' will generate dllbase.txt and dllbase_d.txt in 'tmp' dir under current
|
||||
|
||||
$archive_root="\\\\dimbo\\panda\\win\\";
|
||||
|
||||
# note: this is the order dlls will be laid out in memory
|
||||
@dll_names=("libpanda","libpandadx","libpandagl","libpandaexpress","libpandaphysics",
|
||||
"libshader","libdtool","libdtoolconfig","libpystub","libdirect","libtoontown",
|
||||
"libaudio_load_midi","libaudio_load_mp3","libaudio_load_st","libaudio_load_wav",
|
||||
"libpandaegg");
|
||||
|
||||
@headerstrs=(
|
||||
"This file is used by the MSVC linker to specify DLL base addresses to",
|
||||
"prevent runtime relocation of DLLs by the windows loader. This speeds",
|
||||
"loading. This file was generated using \$PANDATOOL/src/scripts/basedlls.pl",
|
||||
"which uses rebase.exe from the MS platform SDK. It may additionally be",
|
||||
"hand-hacked to simplify addresses for popular dlls to aid debugging."
|
||||
);
|
||||
|
||||
$headerstr="";
|
||||
for($i=0;$i<=$#headerstrs;$i++) {
|
||||
$headerstr.="; ".$headerstrs[$i]."\n";
|
||||
}
|
||||
$headerstr.="\n";
|
||||
|
||||
@modules=("dtool","panda","direct","toontown");
|
||||
|
||||
$dll_names_nodbg="";
|
||||
$dll_names_dbg="";
|
||||
|
||||
foreach my $nm (@dll_names) {
|
||||
$dll_names_nodbg.=" ".$nm.".dll";
|
||||
$dll_names_dbg.=" ".$nm."_d.dll";
|
||||
}
|
||||
|
||||
# 0x60000000 is the recommended base address for user dll addr space
|
||||
$baseaddr="0x60000000";
|
||||
$dllbasefile="dllbase.txt";
|
||||
$dllbasefile_dbg="dllbase_d.txt";
|
||||
$basedlllogfilename="log.txt";
|
||||
|
||||
# rebase will modify input dlls, so make tmp copies of them
|
||||
if(!(-d "tmp")) {
|
||||
system("mkdir tmp");
|
||||
}
|
||||
chdir("tmp");
|
||||
unlink($basedlllogfilename);
|
||||
|
||||
############################
|
||||
### do debug
|
||||
|
||||
$archivepath=$archive_root."debug";
|
||||
|
||||
# need to remove existing files or rebase will just append to them
|
||||
open(OUTFILE, ">$dllbasefile") || die "Couldn't open $dllbasefile!\n";
|
||||
print OUTFILE $headerstr;
|
||||
close(OUTFILE);
|
||||
|
||||
foreach my $dir1 (@modules) {
|
||||
my @args=("cmd.exe","/c","copy ".$archivepath."\\$dir1\\lib\\*.dll .");
|
||||
system(@args);
|
||||
}
|
||||
|
||||
$argstr="-v -b $baseaddr -c $dllbasefile -l $basedlllogfilename $dll_names_nodbg";
|
||||
@args=("cmd.exe","/C","rebase.exe $argstr");
|
||||
print $args[0]." ".$args[1]." ".$args[2]."\n";
|
||||
system(@args);
|
||||
|
||||
############################
|
||||
### do release
|
||||
|
||||
open(OUTFILE, ">$dllbasefile_dbg") || die "Couldn't open $dllbasefile!\n";
|
||||
print OUTFILE $headerstr;
|
||||
close(OUTFILE);
|
||||
|
||||
$archivepath=$archive_root."release";
|
||||
foreach my $dir1 (@modules) {
|
||||
my @args=("cmd.exe","/c","copy ".$archivepath."\\$dir1\\lib\\*.dll .");
|
||||
system(@args);
|
||||
}
|
||||
|
||||
$argstr="-v -b $baseaddr -c $dllbasefile_dbg -l $basedlllogfilename $dll_names_dbg";
|
||||
@args=("cmd.exe","/C","rebase.exe $argstr");
|
||||
print $args[0]." ".$args[1]." ".$args[2]."\n";
|
||||
system(@args);
|
||||
|
||||
exit(0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user