dotnet-installer/src/dotnet/commands/dotnet-compile-native/Program.cs

84 lines
2.2 KiB
C#
Raw Normal View History

using System;
using System.IO;
using Microsoft.DotNet.Cli.Utils;
namespace Microsoft.DotNet.Tools.Compiler.Native
{
public class CompileNativeCommand
{
public static int Run(string[] args)
{
DebugHelper.HandleDebugSwitch(ref args);
return ExecuteApp(args);
}
private static int ExecuteApp(string[] args)
{
// Support Response File
foreach(var arg in args)
{
if(arg.Contains(".rsp"))
{
args = ParseResponseFile(arg);
if (args == null)
{
return 1;
}
}
}
try
{
var cmdLineArgs = ArgumentsParser.Parse(args);
if (cmdLineArgs.IsHelp) return cmdLineArgs.ReturnCode;
var config = cmdLineArgs.GetNativeCompileSettings();
DirectoryExtensions.CleanOrCreateDirectory(config.OutputDirectory);
DirectoryExtensions.CleanOrCreateDirectory(config.IntermediateDirectory);
var nativeCompiler = NativeCompiler.Create(config);
var result = nativeCompiler.CompileToNative(config);
return result ? 0 : 1;
}
catch (Exception ex)
{
#if DEBUG
Console.WriteLine(ex);
#else
Reporter.Error.WriteLine(ex.Message);
#endif
return 1;
}
}
private static string[] ParseResponseFile(string rspPath)
{
if (!File.Exists(rspPath))
{
Reporter.Error.WriteLine("Invalid Response File Path");
return null;
}
string content;
try
{
content = File.ReadAllText(rspPath);
}
catch (Exception)
{
Reporter.Error.WriteLine("Unable to Read Response File");
return null;
}
var nArgs = content.Split(new [] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);
return nArgs;
}
}
}