$gInputFile = $argv[1];
$gOutputFile = $argv[2];
-$gDepFile = ($argc > 3 ? $argv[3] : false);
+$gOutputLDOptsFile = $argv[3];
+$gDepFile = ($argc > 4 ? $argv[4] : false);
$gDependencies = array();
return "0x".str_pad( dechex(ord(fgetc($fp))), 2, "0", STR_PAD_LEFT );
}
+$inode = 0;
+$gSymFiles = array();
function ProcessFolder($prefix, $items)
{
global $gOutput, $gDependencies;
global $ACESSDIR, $ARCH;
+ global $inode;
+ global $gSymFiles;
foreach($items as $i=>$item)
{
+ $inode ++;
if(is_array($item[1]))
{
ProcessFolder("{$prefix}_{$i}", $item[1]);
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = VFS_FFLAG_DIRECTORY,
.Size = $size,
+ .Inode = {$inode},
.ImplPtr = {$prefix}_{$i}_entries,
.ReadDir = InitRD_ReadDir,
.FindDir = InitRD_FindDir
// Parse path components
$path = str_replace("__BIN__", "$ACESSDIR/Usermode/Output/$ARCH", $path);
$path = str_replace("__FS__", "$ACESSDIR/Usermode/Filesystem", $path);
+ $path = str_replace("__SRC__", "$ACESSDIR", $path);
echo $path,"\n";
// ---
exit(1);
}
$size = filesize($path);
-
+
+/*
+ $_sym = $prefix."_".$i."_data";
$fp = fopen($path, "rb");
- $gOutput .= "Uint8 {$prefix}_{$i}_data[] = {\n";
+ $gOutput .= "Uint8 $_sym[] = {\n";
for( $j = 0; $j + 16 < $size; $j += 16 ) {
$gOutput .= "\t";
$gOutput .= hd8($fp).",".hd8($fp).",";
}
fclose($fp);
$gOutput .= "\n};\n";
+*/
+
+//*
+ $_sym = "_binary_".str_replace(array("/","-","."), "_", $path)."_start";
+ $gOutput .= "extern Uint8 {$_sym}[];";
+ $gSymFiles[] = $path;
+//*/
$gOutput .= <<<EOF
tVFS_Node {$prefix}_{$i} = {
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = 0,
.Size = $size,
- .ImplPtr = {$prefix}_{$i}_data,
+ .Inode = {$inode},
+ .ImplPtr = $_sym,
.Read = InitRD_ReadFile
};
};
EOF;
+$gOutput .= <<<EOF
+
+tVFS_Node * const gInitRD_FileList[] = {
+&gInitRD_RootNode
+EOF;
+
+function PutNodePointers($prefix, $items)
+{
+ global $gOutput;
+ foreach($items as $i=>$item)
+ {
+ $gOutput .= ",&{$prefix}_{$i}";
+ if(is_array($item[1]))
+ {
+ PutNodePointers("{$prefix}_{$i}", $item[1]);
+ }
+ }
+}
+
+PutNodePointers("gInitRD_Files", $lStack[0][1]);
+
+$gOutput .= <<<EOF
+};
+const int giInitRD_NumFiles = sizeof(gInitRD_FileList)/sizeof(gInitRD_FileList[0]);
+
+EOF;
+
+
$fp = fopen($gOutputFile, "w");
fputs($fp, $gOutput);
fclose($fp);
+// - Create options call
+$fp = fopen($gOutputLDOptsFile, "w");
+fputs($fp, "--format binary\n");
+foreach($gSymFiles as $sym=>$file)
+{
+ fputs($fp, "$file\n");
+// fputs($fp, "--defsym $sym=_binary_".$sym_filename."_start\n");
+}
+fclose($fp);
if($gDepFile !== false)
{