Linux CPP Mode Working.

This commit is contained in:
Bryan 2015-11-17 17:02:16 -08:00
parent 1952e6d972
commit fd471025dc
5 changed files with 116 additions and 119 deletions

View file

@ -46,7 +46,7 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
} }
else if (config.OS == OSMode.Linux) else if (config.OS == OSMode.Linux)
{ {
throw new NotImplementedException("Linux Cpp not yet supported."); stepList.Add(new LinuxCppCompileStep(config));
} }
else if (config.OS == OSMode.Mac) else if (config.OS == OSMode.Mac)
{ {

View file

@ -10,29 +10,27 @@ using Microsoft.DotNet.Tools.Common;
namespace Microsoft.DotNet.Tools.Compiler.Native namespace Microsoft.DotNet.Tools.Compiler.Native
{ {
public class LinuxCppCompiler : IPlatformNativeStep public class LinuxCppCompileStep : IPlatformNativeStep
{ {
private readonly string CompilerName = "clang-3.5"; private readonly string CompilerName = "clang-3.5";
private readonly string InputExtension = ".cpp"; private readonly string InputExtension = ".cpp";
private readonly string CompilerOutputExtension = ".a";
// TODO: debug/release support // TODO: debug/release support
private readonly string cLibsFlags = "-lm -ldl"; private readonly string cLibsFlags = "-lm -ldl";
private readonly string cflags = "-g -lstdc++ -lrt -Wno-invalid-offsetof -pthread"; private readonly string cflags = "-g -lstdc++ -lrt -Wno-invalid-offsetof -pthread";
private readonly string[] libs = new string[] private readonly string[] libs = new string[]
{ {
"System.Native.so",
"libPortableRuntime.a",
"libbootstrappercpp.a", "libbootstrappercpp.a",
"libPortableRuntime.a",
"libSystem.Private.CoreLib.Native.a", "libSystem.Private.CoreLib.Native.a",
"System.Native.so"
}; };
private string CompilerArgStr { get; set; } private string CompilerArgStr { get; set; }
public LinuxCppCompiler(NativeCompileSettings config) public LinuxCppCompileStep(NativeCompileSettings config)
{ {
InitializeArgs(config); InitializeArgs(config);
} }
@ -68,13 +66,15 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
argsList.Add("-I"); argsList.Add("-I");
argsList.Add(Path.Combine(config.AppDepSDKPath, "CPPSdk")); argsList.Add(Path.Combine(config.AppDepSDKPath, "CPPSdk"));
// Add Stubs
argsList.Add(Path.Combine(config.AppDepSDKPath, "CPPSdk/ubuntu.14.04/lxstubs.cpp"));
// Input File // Input File
var inCppFile = DetermineInFile(config); var inCppFile = DetermineInFile(config);
argsList.Add(inCppFile); argsList.Add(inCppFile);
// Add Stubs
argsList.Add(Path.Combine(config.AppDepSDKPath, "CPPSdk/ubuntu.14.04/lxstubs.cpp"));
// Libs // Libs
foreach (var lib in libs) foreach (var lib in libs)
{ {
@ -115,15 +115,13 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
public string DetermineOutputFile(NativeCompileSettings config) public string DetermineOutputFile(NativeCompileSettings config)
{ {
var inputFile = DetermineInFile(config); var intermediateDirectory = config.OutputDirectory;
return inputFile + CompilerOutputExtension; var filename = Path.GetFileNameWithoutExtension(config.InputManagedAssemblyPath);
var outfile = Path.Combine(intermediateDirectory, filename);
return outfile;
} }
public bool RequiresLinkStep()
{
return false;
}
} }
} }

View file

@ -24,7 +24,6 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
{ {
"libbootstrapper.a", "libbootstrapper.a",
"libRuntime.a", "libRuntime.a",
"libPortableRuntime.a",
"libSystem.Private.CoreLib.Native.a", "libSystem.Private.CoreLib.Native.a",
"System.Native.so" "System.Native.so"
}; };

View file

@ -15,7 +15,7 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
//TODO support x86 //TODO support x86
private readonly string CompilerName = "cl.exe"; private readonly string CompilerName = "cl.exe";
private readonly string VSBin = "..\\..\\VC\\bin\\x86_amd64"; private readonly string VSBin = "..\\..\\VC\\bin\\amd64";
private readonly string InputExtension = ".cpp"; private readonly string InputExtension = ".cpp";
private readonly string CompilerOutputExtension = ".obj"; private readonly string CompilerOutputExtension = ".obj";

View file

@ -14,7 +14,7 @@ namespace Microsoft.DotNet.Tools.Compiler.Native
{ {
private readonly string LinkerName = "link.exe"; private readonly string LinkerName = "link.exe";
private readonly string LinkerOutputExtension = ".exe"; private readonly string LinkerOutputExtension = ".exe";
private readonly string VSBin = "..\\..\\VC\\bin\\x86_amd64"; private readonly string VSBin = "..\\..\\VC\\bin\\amd64";
private readonly string InputExtension = ".obj"; private readonly string InputExtension = ".obj";