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
private static string[] ParseResponseFile(string rspPath)
if (!File.Exists(rspPath))
Reporter.Error.WriteLine("Invalid Response File Path");
return null;
string content;
content = File.ReadAllText(rspPath);
catch (Exception)
Reporter.Error.WriteLine("Unable to Read Response File");
var nArgs = content.Split(new [] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);
return nArgs;