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