public static DotsRuntimeCSharpProgram CSharpProgramFor(string asmdefname) { var desc = AsmDefDescriptionFor(asmdefname); if (desc == null) { return(null); } return(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(desc)); }
public AsmDefBasedDotsRuntimeCSharpProgram(AsmDefDescription asmDefDescription) : base(asmDefDescription.Directory, deferConstruction: true ) { AsmDefDescription = asmDefDescription; ReferencedPrograms = AsmDefDescription.References.Select(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor).ToArray(); var referencesEntryPoint = ReferencedPrograms.Any(r => r.FileName.EndsWith(".exe")); var isExe = asmDefDescription.DefineConstraints.Contains("UNITY_DOTS_ENTRYPOINT") || (asmDefDescription.Path.Parent.Files("*.project").Any() && !referencesEntryPoint) || asmDefDescription.OptionalUnityReferences.Contains("TestAssemblies"); Construct(asmDefDescription.Name, isExe); ProjectFile.AdditionalFiles.Add(asmDefDescription.Path); IncludePlatforms = AsmDefDescription.IncludePlatforms; ExcludePlatforms = AsmDefDescription.ExcludePlatforms; Unsafe = AsmDefDescription.Unsafe; References.Add(config => { if (config is DotsRuntimeCSharpProgramConfiguration dotsConfig) { return(ReferencedPrograms.Where(rp => rp.IsSupportedOn(dotsConfig.NativeProgramConfiguration.ToolChain.Platform))); } //this codepath will be hit for the bindgem invocation return(ReferencedPrograms); }); if (BuildProgram.ZeroJobs != null) { References.Add(BuildProgram.ZeroJobs); } if (BuildProgram.UnityLowLevel != null) { References.Add(BuildProgram.UnityLowLevel); } if (IsTestAssembly) { References.Add(BuildProgram.NUnitFramework); var nunitLiteMain = BuildProgram.BeeRoot.Combine("CSharpSupport/NUnitLiteMain.cs"); Sources.Add(nunitLiteMain); ProjectFile.AddCustomLinkRoot(nunitLiteMain.Parent, "TestRunner"); References.Add(BuildProgram.NUnitLite); References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(BuildProgramConfigFile.AsmDefDescriptionFor("Unity.Entities"))); } BindGem.ConfigureNativeProgramFor(this); }
public AsmDefCSharpProgram(AsmDefDescription asmDefDescription) : base(asmDefDescription.Directory, asmDefDescription.IncludedAsmRefs.Select(asmref => asmref.Path.Parent), deferConstruction: true) { AsmDefDescription = asmDefDescription; var asmDefReferences = AsmDefDescription.References.Select(asmDefDescription1 => BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(asmDefDescription1)).ToList(); var isExe = asmDefDescription.DefineConstraints.Contains("UNITY_DOTS_ENTRYPOINT") || asmDefDescription.Name.EndsWith(".Tests"); Construct(asmDefDescription.Name, isExe); ProjectFile.AdditionalFiles.Add(asmDefDescription.Path); IncludePlatforms = AsmDefDescription.IncludePlatforms; ExcludePlatforms = AsmDefDescription.ExcludePlatforms; Unsafe = AsmDefDescription.AllowUnsafeCode; References.Add(config => { if (config is DotsRuntimeCSharpProgramConfiguration dotsConfig) { if (dotsConfig.TargetFramework == TargetFramework.Tiny) { return(asmDefReferences.Where(rp => rp.IsSupportedFor(dotsConfig) && !IncompatibleTinyBCLAsmDefs.Contains(rp.FileName))); } else { return(asmDefReferences.Where(rp => rp.IsSupportedFor(dotsConfig))); } } //this codepath will be hit for the bindgem invocation return(asmDefReferences); }); if (AsmDefDescription.IsTinyRoot || isExe) { AsmDefCSharpProgramCustomizer.RunAllAddPlatformImplementationReferences(this); } if (BuildProgram.UnityTinyBurst != null) { References.Add(BuildProgram.UnityTinyBurst); } if (BuildProgram.ZeroJobs != null) { References.Add(BuildProgram.ZeroJobs); } if (BuildProgram.UnityLowLevel != null) { References.Add(BuildProgram.UnityLowLevel); } if (BuildProgram.TinyIO != null) { References.Add(BuildProgram.TinyIO); } // Add in any precompiled references found in the asmdef directory or sub-directory foreach (var pcr in asmDefDescription.PrecompiledReferences) { var files = asmDefDescription.Path.Parent.Files(pcr, true); if (files.Any()) { References.Add(files); } } if (IsTestAssembly) { var nunitLiteMain = BuildProgram.BeeRoot.Combine("CSharpSupport/NUnitLiteMain.cs"); Sources.Add(nunitLiteMain); // Setup for IL2CPP var tinyTestFramework = BuildProgram.BeeRoot.Parent.Combine("TinyTestFramework"); Sources.Add(c => ((DotsRuntimeCSharpProgramConfiguration)c).ScriptingBackend == ScriptingBackend.TinyIl2cpp || ((DotsRuntimeCSharpProgramConfiguration)c).TargetFramework == TargetFramework.Tiny, tinyTestFramework); Defines.Add(c => ((DotsRuntimeCSharpProgramConfiguration)c).ScriptingBackend == ScriptingBackend.TinyIl2cpp || ((DotsRuntimeCSharpProgramConfiguration)c).TargetFramework == TargetFramework.Tiny, "UNITY_PORTABLE_TEST_RUNNER"); // Setup for dotnet References.Add(c => ((DotsRuntimeCSharpProgramConfiguration)c).ScriptingBackend == ScriptingBackend.Dotnet && ((DotsRuntimeCSharpProgramConfiguration)c).TargetFramework != TargetFramework.Tiny, BuildProgram.NUnitFramework); ProjectFile.AddCustomLinkRoot(nunitLiteMain.Parent, "TestRunner"); References.Add(c => ((DotsRuntimeCSharpProgramConfiguration)c).ScriptingBackend == ScriptingBackend.Dotnet && ((DotsRuntimeCSharpProgramConfiguration)c).TargetFramework != TargetFramework.Tiny, BuildProgram.NUnitLite); // General setup References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(AsmDefConfigFile.AsmDefDescriptionFor("Unity.Entities"))); References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(AsmDefConfigFile.AsmDefDescriptionFor("Unity.Tiny.Core"))); References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(AsmDefConfigFile.AsmDefDescriptionFor("Unity.Tiny.UnityInstance"))); References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(AsmDefConfigFile.AsmDefDescriptionFor("Unity.Collections"))); } else if (IsILPostProcessorAssembly) { References.Add(BuildProgram.UnityCompilationPipeline); References.Add(MonoCecil.Paths); References.Add(Il2Cpp.Distribution.Path.Combine("build/deploy/net471/Unity.Cecil.Awesome.dll")); } }
public AsmDefCSharpProgram(AsmDefDescription asmDefDescription) : base(asmDefDescription.Directory, asmDefDescription.IncludedAsmRefs.Select(asmref => asmref.Path.Parent), deferConstruction: true) { AsmDefDescription = asmDefDescription; var asmDefReferences = AsmDefDescription.References.Select(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor).ToList(); ReferencedPrograms = asmDefReferences.Where(r => !IncompatibleDotRuntimeAsmDefs.Contains(r.AsmDefDescription.Name)).ToArray(); var isTinyRoot = AsmDefDescription.NamedReferences.Contains("Unity.Tiny.Main") || asmDefDescription.Path.Parent.Files("*.project").Any(); var isExe = asmDefDescription.DefineConstraints.Contains("UNITY_DOTS_ENTRYPOINT") || asmDefDescription.Name.EndsWith(".Tests"); Construct(asmDefDescription.Name, isExe); ProjectFile.AdditionalFiles.Add(asmDefDescription.Path); IncludePlatforms = AsmDefDescription.IncludePlatforms; ExcludePlatforms = AsmDefDescription.ExcludePlatforms; Unsafe = AsmDefDescription.Unsafe; References.Add(config => { if (config is DotsRuntimeCSharpProgramConfiguration dotsConfig) { return(ReferencedPrograms.Where(rp => rp.IsSupportedFor(dotsConfig))); } //this codepath will be hit for the bindgem invocation return(ReferencedPrograms); }); if (isTinyRoot || isExe) { AsmDefCSharpProgramCustomizer.RunAllAddPlatformImplementationReferences(this); } if (BuildProgram.ZeroJobs != null) { References.Add(BuildProgram.ZeroJobs); } if (BuildProgram.UnityLowLevel != null) { References.Add(BuildProgram.UnityLowLevel); } if (IsTestAssembly) { References.Add(BuildProgram.NUnitFramework); var nunitLiteMain = BuildProgram.BeeRoot.Combine("CSharpSupport/NUnitLiteMain.cs"); Sources.Add(nunitLiteMain); ProjectFile.AddCustomLinkRoot(nunitLiteMain.Parent, "TestRunner"); References.Add(BuildProgram.NUnitLite); References.Add(BuildProgram.GetOrMakeDotsRuntimeCSharpProgramFor(AsmDefConfigFile.AsmDefDescriptionFor("Unity.Entities"))); } else if (IsILPostProcessorAssembly) { References.Add(BuildProgram.UnityCompilationPipeline); References.Add(StevedoreUnityCecil.Paths); } }