public void Run() { var outputDirectory = GetCppOutputDirectoryInStagingArea(); var managedDir = Path.GetFullPath(Path.Combine(m_StagingAreaData, "Managed")); // Make all assemblies in Staging/Managed writable for stripping. foreach (var file in Directory.GetFiles(managedDir)) { var fileInfo = new FileInfo(file); fileInfo.IsReadOnly = false; } var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(m_PlatformProvider.target); var managedStrippingLevel = PlayerSettings.GetManagedStrippingLevel(buildTargetGroup); // IL2CPP does not support a managed stripping level of disabled. If the player settings // do try this (which should not be possible from the editor), use Low instead. if (managedStrippingLevel == ManagedStrippingLevel.Disabled) { managedStrippingLevel = ManagedStrippingLevel.Low; } AssemblyStripper.StripAssemblies(managedDir, m_PlatformProvider.CreateUnityLinkerPlatformProvider(), m_PlatformProvider, m_RuntimeClassRegistry, managedStrippingLevel); // The IL2CPP editor integration here is responsible to give il2cpp.exe an empty directory to use. FileUtil.CreateOrCleanDirectory(outputDirectory); if (m_ModifyOutputBeforeCompile != null) { m_ModifyOutputBeforeCompile(outputDirectory); } var pipelineData = new Il2CppBuildPipelineData(m_PlatformProvider.target, managedDir); ConvertPlayerDlltoCpp(pipelineData, outputDirectory, managedDir, m_PlatformProvider.supportsManagedDebugging); var compiler = m_PlatformProvider.CreateNativeCompiler(); if (compiler != null && m_PlatformProvider.CreateIl2CppNativeCodeBuilder() == null) { var nativeLibPath = OutputFileRelativePath(); var includePaths = new List <string>(m_PlatformProvider.includePaths); includePaths.Add(outputDirectory); m_PlatformProvider.CreateNativeCompiler().CompileDynamicLibrary( nativeLibPath, NativeCompiler.AllSourceFilesIn(outputDirectory), includePaths, m_PlatformProvider.libraryPaths, new string[0]); } }
public void Run() { var generatedCppDir = GetCppOutputDirectory(m_PlatformProvider.il2cppBuildCacheDirectory); var additionalCppFilesDirectory = GetAdditionalCppFilesDirectory(m_PlatformProvider.il2cppBuildCacheDirectory); var managedDir = Path.GetFullPath(Path.Combine(m_StagingAreaData, "Managed")); // Make all assemblies in Staging/Managed writable for stripping. ClearReadOnlyFlagOnAllFilesNonRecursively(managedDir); var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(m_PlatformProvider.target); var managedStrippingLevel = PlayerSettings.GetManagedStrippingLevel(buildTargetGroup); // IL2CPP does not support a managed stripping level of disabled. If the player settings // do try this (which should not be possible from the editor), use Low instead. if (managedStrippingLevel == ManagedStrippingLevel.Disabled) { managedStrippingLevel = ManagedStrippingLevel.Minimal; } AssemblyStripper.StripAssemblies(managedDir, m_PlatformProvider.CreateUnityLinkerPlatformProvider(), m_PlatformProvider, m_RuntimeClassRegistry, managedStrippingLevel); Directory.CreateDirectory(m_TempFolder); Directory.CreateDirectory(generatedCppDir); ClearReadOnlyFlagOnAllFilesNonRecursively(generatedCppDir); // Need to clean out the AdditionalCppFiles directory because a platform could do pretty much anything // in a "modifyOutputBeforeCompile" callback method, and so we need to provide a fresh directory. Bee will // still check the hash of these files before doing a build, so writing them again won't cause a recompile. if (Directory.Exists(additionalCppFilesDirectory)) { ClearReadOnlyFlagOnAllFilesNonRecursively(additionalCppFilesDirectory); Directory.Delete(additionalCppFilesDirectory, true); } Directory.CreateDirectory(additionalCppFilesDirectory); if (m_ModifyOutputBeforeCompile != null) { m_ModifyOutputBeforeCompile(additionalCppFilesDirectory); } var pipelineData = new Il2CppBuildPipelineData(m_PlatformProvider.target, managedDir); ConvertPlayerDlltoCpp(pipelineData); }