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(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); } }