- Use mkisofs to create ISO file

This commit is contained in:
Phil Garcia 2014-12-07 10:04:46 -08:00
parent 0cf75a801a
commit ca7b9aa697
9 changed files with 90 additions and 26 deletions

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,6 @@
mkisofs
- GPLv2
- http://code.google.com/p/mkisofs-md5/
- Version: 2.01

View file

@ -156,6 +156,7 @@ Source: ".\Resources\Dependencies\cecil\Mono.Cecil.Pdb.pdb"; DestDir: "{app}\Bui
Source: ".\Build\Tools\*.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\Tools\NAsm\*.exe"; DestDir: "{app}\Build\Tools\NAsm"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\Tools\Cygwin\*"; DestDir: "{app}\Build\Tools\cygwin"; Flags: ignoreversion uninsremovereadonly overwritereadonly
Source: ".\Build\Tools\mkisofs\*"; DestDir: "{app}\Build\Tools\mkisofs"; Flags: ignoreversion uninsremovereadonly overwritereadonly
;
Source: ".\Build\VSIP\Cosmos.Deploy.USB.exe"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly
Source: ".\Build\VSIP\Cosmos.Build.Common.dll"; DestDir: "{app}\Build\Tools"; Flags: ignoreversion uninsremovereadonly

View file

@ -81,6 +81,7 @@
<Compile Include="Enums.cs" />
<Compile Include="EnumValue.cs" />
<Compile Include="ExtensionMethods.cs" />
<Compile Include="ProcessExtension.cs" />
<Compile Include="IsoMaker.cs" />
<Compile Include="PropertiesBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View file

@ -1,30 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Text;
namespace Cosmos.Build.Common {
public class IsoMaker {
namespace Cosmos.Build.Common
{
public class IsoMaker
{
static public void Generate(string imageFile, string isoFilename)
{
var destinationDirectory = Path.GetDirectoryName(imageFile);
static public void Generate(string aBuildPath, string xInputPathname, string aIsoPathname) {
string xPath = Path.Combine(aBuildPath, @"ISO");
if (File.Exists(aIsoPathname)) {
File.Delete(aIsoPathname);
}
string xIsoLinux = Path.Combine(xPath, "isolinux.bin");
File.SetAttributes(xIsoLinux, FileAttributes.Normal);
string isoDirectory = Path.Combine(destinationDirectory, "iso");
if (Directory.Exists(isoDirectory))
{
Directory.Delete(isoDirectory, true);
}
Directory.CreateDirectory(isoDirectory);
var buildISO = Path.Combine(CosmosPaths.Build, "ISO");
File.Copy(Path.Combine(buildISO, "isolinux.bin"), Path.Combine(isoDirectory, "isolinux.bin"));
File.Copy(Path.Combine(buildISO, "mboot.c32"), Path.Combine(isoDirectory, "mboot.c32"));
File.Copy(Path.Combine(buildISO, "syslinux.cfg"), Path.Combine(isoDirectory, "syslinux.cfg"));
File.Copy(imageFile, Path.Combine(isoDirectory, "Cosmos.bin"));
string arg =
"-relaxed-filenames" +
" -J -R" +
" -o " + Quote(isoFilename) +
" -b isolinux.bin" +
" -no-emul-boot" +
" -boot-load-size 4" +
" -boot-info-table " +
Quote(isoDirectory);
var output = ProcessExtension.LaunchApplication(
Path.Combine(Path.Combine(CosmosPaths.Tools, "mkisofs"), "mkisofs.exe"),
arg,
true
);
File.WriteAllText(Path.ChangeExtension(isoFilename, ".log"), output);
}
protected static string Quote(string location)
{
return '"' + location + '"';
}
var xPSI = new ProcessStartInfo(
Path.Combine(CosmosPaths.Tools, "mkisofs.exe"),
String.Format("-R -b \"{0}\" -no-emul-boot -boot-load-size 4 -boot-info-table -o \"{1}\" \"{2}\"",
xIsoLinux, aIsoPathname, xPath)
);
xPSI.UseShellExecute = false;
xPSI.CreateNoWindow = true;
Process.Start(xPSI);
}
}
}
}

View file

@ -0,0 +1,32 @@
using System.Diagnostics;
namespace Cosmos.Build.Common
{
public static class ProcessExtension
{
public static string LaunchApplication(string app, string args, bool waitForExit)
{
var start = new ProcessStartInfo();
start.FileName = app;
start.Arguments = args;
start.UseShellExecute = false;
start.CreateNoWindow = true;
start.RedirectStandardOutput = true;
start.RedirectStandardError = true;
var process = Process.Start(start);
if (waitForExit)
{
var output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
var error = process.StandardError.ReadToEnd();
return output + error;
}
return string.Empty;
}
}
}

View file

@ -31,7 +31,7 @@ namespace Cosmos.Build.MSBuild {
#endregion
public override bool Execute() {
IsoMaker.Generate(CosmosBuildDir, InputFile, OutputFile);
IsoMaker.Generate(InputFile, OutputFile);
return true;
}
}

View file

@ -40,7 +40,7 @@ namespace Cosmos.VS.Package {
string xBinFile = Path.ChangeExtension(xOutputAsm, ".bin");
if (xDeployment == DeploymentType.ISO) {
IsoMaker.Generate(CosmosPaths.Build, xBinFile, xIsoFile);
IsoMaker.Generate(xBinFile, xIsoFile);
} else if (xDeployment == DeploymentType.USB) {
Process.Start(Path.Combine(CosmosPaths.Tools, "Cosmos.Deploy.USB.exe"), "\"" + xBinFile + "\"");