diff --git a/source/Cosmos.Build.Tasks/CreateMbr.cs b/source/Cosmos.Build.Tasks/CreateMbr.cs
new file mode 100644
index 000000000..9040dc9f1
--- /dev/null
+++ b/source/Cosmos.Build.Tasks/CreateMbr.cs
@@ -0,0 +1,63 @@
+using System;
+using System.IO;
+using System.Linq;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+
+namespace Cosmos.Build.Tasks
+{
+ public class CreateMbr : ToolTask
+ {
+ [Required]
+ public string TargetDrive { get; set; }
+
+ [Required]
+ public bool FormatDrive { get; set; }
+
+ protected override string ToolName => "syslinux.exe";
+
+ protected override MessageImportance StandardErrorLoggingImportance => MessageImportance.High;
+ protected override MessageImportance StandardOutputLoggingImportance => MessageImportance.High;
+
+ protected override bool ValidateParameters()
+ {
+ if (!DriveInfo.GetDrives().Any(
+ d => String.Equals(
+ Path.GetFullPath(d.Name),
+ Path.GetFullPath(TargetDrive),
+ StringComparison.OrdinalIgnoreCase)))
+ {
+ Log.LogError($"Invalid target drive '{TargetDrive}'!");
+ }
+
+ return !Log.HasLoggedErrors;
+ }
+
+ protected override string GenerateFullPathToTool()
+ {
+ if (String.IsNullOrWhiteSpace(ToolExe))
+ {
+ return null;
+ }
+
+ if (String.IsNullOrWhiteSpace(ToolPath))
+ {
+ return Path.Combine(Directory.GetCurrentDirectory(), ToolExe);
+ }
+
+ return Path.Combine(Path.GetFullPath(ToolPath), ToolExe);
+ }
+
+ protected override string GenerateCommandLineCommands()
+ {
+ var builder = new CommandLineBuilder();
+
+ var driveLetter = TargetDrive.TrimEnd(':', Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
+
+ builder.AppendSwitch("-fma");
+ builder.AppendSwitch($"{driveLetter}:");
+
+ return builder.ToString();
+ }
+ }
+}
diff --git a/source/Cosmos.Build.Tasks/CreateSyslinuxConfig.cs b/source/Cosmos.Build.Tasks/CreateSyslinuxConfig.cs
index 3c35469ab..01991f011 100644
--- a/source/Cosmos.Build.Tasks/CreateSyslinuxConfig.cs
+++ b/source/Cosmos.Build.Tasks/CreateSyslinuxConfig.cs
@@ -1,5 +1,4 @@
-using System;
-using System.IO;
+using System.IO;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
@@ -8,7 +7,7 @@ namespace Cosmos.Build.Tasks
public class CreateSyslinuxConfig : Task
{
[Required]
- public string IsoDirectory { get; set; }
+ public string TargetDirectory { get; set; }
[Required]
public string BinName { get; set; }
@@ -17,16 +16,16 @@ namespace Cosmos.Build.Tasks
public override bool Execute()
{
- if (String.IsNullOrWhiteSpace(IsoDirectory) || !Directory.Exists(IsoDirectory))
+ if (!Directory.Exists(TargetDirectory))
{
- Log.LogError($"Invalid ISO directory! ISO directory: '{IsoDirectory}'");
+ Log.LogError($"Invalid target directory! Target directory: '{TargetDirectory}'");
return false;
}
var xBinName = BinName;
var xLabelName = Path.GetFileNameWithoutExtension(xBinName);
- using (var xWriter = File.CreateText(Path.Combine(IsoDirectory, "syslinux.cfg")))
+ using (var xWriter = File.CreateText(Path.Combine(TargetDirectory, "syslinux.cfg")))
{
xWriter.WriteLine("default " + xLabelName);
xWriter.WriteLine("label " + xLabelName);
diff --git a/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets b/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets
index 5959f94e9..ad24dbb18 100644
--- a/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets
+++ b/source/Cosmos.Build.Tasks/build/Cosmos.Build.targets
@@ -13,23 +13,26 @@
$(MSBuildThisFileDirectory)..\tools\
- $(CosmosToolsPath)nasm\
+ $(CosmosToolsPath)nasm\win\
nasm.exe
- $(CosmosToolsPath)cygwin\
+ $(CosmosToolsPath)cygwin\win\
ld.exe
- $(CosmosToolsPath)cygwin\
+ $(CosmosToolsPath)cygwin\win\
objdump.exe
- $(CosmosToolsPath)mkisofs\
+ $(CosmosToolsPath)mkisofs\win\
mkisofs.exe
+
+ $(CosmosToolsPath)syslinux\win\
+ syslinux.exe
True
False
-
+
ELF
Source
User
@@ -48,7 +51,7 @@
$(OutputPath)$(AssemblyName).cdb
$(OutputPath)ISO\
- $(CosmosToolsPath)isolinux\
+ $(CosmosToolsPath)syslinux\bios\
ISO
@@ -73,6 +76,7 @@
+
@@ -260,15 +264,20 @@
Condition="'$(Deployment)' == 'ISO'">
- <_ISOLINUX Include="$(ISOLINUX)**" />
+ <_IsoFile Include="$(SyslinuxPath)core\isolinux.bin" />
+ <_IsoFile Include="$(SyslinuxPath)com32\elflink\ldlinux\ldlinux.c32" />
+ <_IsoFile Include="$(SyslinuxPath)com32\lib\libcom32.c32" />
+ <_IsoFile Include="$(SyslinuxPath)com32\mboot\mboot.c32" />
+ <_IsoFile Include="$(BinFile)" />
+
-
-
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+ <_UsbFile Include="$(SyslinuxPath)com32\elflink\ldlinux\ldlinux.c32" />
+ <_UsbFile Include="$(SyslinuxPath)com32\lib\libcom32.c32" />
+ <_UsbFile Include="$(SyslinuxPath)com32\mboot\mboot.c32" />
+ <_UsbFile Include="$(BinFile)" />
+
+
+
+
+
+
+
+
+
+
$(MSBuildExtensionsPath)\Cosmos\Cosmos.DesignTime.targets
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/GPL Readme.txt b/source/Cosmos.Build.Tasks/tools/cygwin/win/GPL Readme.txt
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/GPL Readme.txt
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/GPL Readme.txt
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/cygiconv-2.dll b/source/Cosmos.Build.Tasks/tools/cygwin/win/cygiconv-2.dll
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/cygiconv-2.dll
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/cygiconv-2.dll
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/cygintl-3.dll b/source/Cosmos.Build.Tasks/tools/cygwin/win/cygintl-3.dll
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/cygintl-3.dll
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/cygintl-3.dll
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/cygwin1.dll b/source/Cosmos.Build.Tasks/tools/cygwin/win/cygwin1.dll
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/cygwin1.dll
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/cygwin1.dll
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/ld.exe b/source/Cosmos.Build.Tasks/tools/cygwin/win/ld.exe
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/ld.exe
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/ld.exe
diff --git a/source/Cosmos.Build.Tasks/tools/cygwin/objdump.exe b/source/Cosmos.Build.Tasks/tools/cygwin/win/objdump.exe
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/cygwin/objdump.exe
rename to source/Cosmos.Build.Tasks/tools/cygwin/win/objdump.exe
diff --git a/source/Cosmos.Build.Tasks/tools/mkisofs/mkisofs.exe b/source/Cosmos.Build.Tasks/tools/mkisofs/win/mkisofs.exe
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/mkisofs/mkisofs.exe
rename to source/Cosmos.Build.Tasks/tools/mkisofs/win/mkisofs.exe
diff --git a/source/Cosmos.Build.Tasks/tools/nasm/LICENSE.txt b/source/Cosmos.Build.Tasks/tools/nasm/win/LICENSE.txt
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/nasm/LICENSE.txt
rename to source/Cosmos.Build.Tasks/tools/nasm/win/LICENSE.txt
diff --git a/source/Cosmos.Build.Tasks/tools/nasm/nasm.exe b/source/Cosmos.Build.Tasks/tools/nasm/win/nasm.exe
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/nasm/nasm.exe
rename to source/Cosmos.Build.Tasks/tools/nasm/win/nasm.exe
diff --git a/source/Cosmos.Build.Tasks/tools/nasm/ndisasm.exe b/source/Cosmos.Build.Tasks/tools/nasm/win/ndisasm.exe
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/nasm/ndisasm.exe
rename to source/Cosmos.Build.Tasks/tools/nasm/win/ndisasm.exe
diff --git a/source/Cosmos.Build.Tasks/tools/nasm/version.txt b/source/Cosmos.Build.Tasks/tools/nasm/win/version.txt
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/nasm/version.txt
rename to source/Cosmos.Build.Tasks/tools/nasm/win/version.txt
diff --git a/source/Cosmos.Build.Tasks/tools/isolinux/ldlinux.c32 b/source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/elflink/ldlinux/ldlinux.c32
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/isolinux/ldlinux.c32
rename to source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/elflink/ldlinux/ldlinux.c32
diff --git a/source/Cosmos.Build.Tasks/tools/isolinux/libcom32.c32 b/source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/lib/libcom32.c32
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/isolinux/libcom32.c32
rename to source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/lib/libcom32.c32
diff --git a/source/Cosmos.Build.Tasks/tools/isolinux/mboot.c32 b/source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/mboot/mboot.c32
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/isolinux/mboot.c32
rename to source/Cosmos.Build.Tasks/tools/syslinux/bios/com32/mboot/mboot.c32
diff --git a/source/Cosmos.Build.Tasks/tools/isolinux/isolinux.bin b/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/isolinux.bin
similarity index 100%
rename from source/Cosmos.Build.Tasks/tools/isolinux/isolinux.bin
rename to source/Cosmos.Build.Tasks/tools/syslinux/bios/core/isolinux.bin
diff --git a/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.0 b/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.0
new file mode 100644
index 000000000..61a38889d
Binary files /dev/null and b/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.0 differ
diff --git a/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.bin b/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.bin
new file mode 100644
index 000000000..61a38889d
Binary files /dev/null and b/source/Cosmos.Build.Tasks/tools/syslinux/bios/core/pxelinux.bin differ
diff --git a/source/Cosmos.Build.Tasks/tools/syslinux/win/syslinux.exe b/source/Cosmos.Build.Tasks/tools/syslinux/win/syslinux.exe
new file mode 100644
index 000000000..8c3c859ef
Binary files /dev/null and b/source/Cosmos.Build.Tasks/tools/syslinux/win/syslinux.exe differ