Last active
June 9, 2022 12:38
-
-
Save darbotron/7bb328b4bc17e6916be02428eb477ebd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// StandaloneBuildCompilationChecker by Alex 'darbotron' Darby | |
// | |
// License: https://opensource.org/licenses/unlicense | |
// TL;DR: | |
// 1) you may do what you like with it... | |
// 2) ...except blame me for any consequence of acting on rule 1) | |
// | |
#if UNITY_EDITOR | |
using System.Reflection; | |
using UnityEngine; | |
using UnityEditor; | |
using UnityEditor.Build.Player; | |
public static class PL_BuildScriptCompilationChecker | |
{ | |
const string k_strAssemblyQualifiedEditorLogType = "UnityEditor.LogEntries,UnityEditor.dll"; | |
const string k_strEditorLogTypeClearFunction = "Clear"; | |
const float k_fCompilerProgressBarAmount = 0.1f; | |
static readonly string k_strTempCompilerDirectory = $"Temp/{nameof(PL_BuildScriptCompilationChecker)}"; | |
/// <summary> | |
/// compiles scripts in "standalone" mode for current UnityEditor platform | |
/// i.e. as they are compiled when you do a standalone build | |
/// Note: works for all tested platforms (PC/Mac/Consoles) | |
/// </summary> | |
[MenuItem( "Tools/Compile Standalone Scripts for Platform" )] | |
static void CompilePlayerScripts() | |
{ | |
var buildTarget = EditorUserBuildSettings.activeBuildTarget; | |
var buildGroup = BuildPipeline.GetBuildTargetGroup( buildTarget ); | |
var compilerSettings = new ScriptCompilationSettings { group = buildGroup, target = buildTarget, options = ScriptCompilationOptions.None }; | |
var definesForGroup = PlayerSettings.GetScriptingDefineSymbolsForGroup( buildGroup ); | |
// clear the log | |
var currentLogEntries = System.Type.GetType( k_strAssemblyQualifiedEditorLogType ); | |
if( null != currentLogEntries ) | |
{ | |
BindingFlags k_consoleClearFunctionbindingFlags = BindingFlags.Static | BindingFlags.Public; | |
var logEntryClearFunction = currentLogEntries.GetMethod( k_strEditorLogTypeClearFunction, k_consoleClearFunctionbindingFlags ); | |
if( null != logEntryClearFunction ) | |
{ | |
logEntryClearFunction.Invoke( null, null ); | |
} else Debug.LogWarning( $"Editor log entries (type: '{k_strAssemblyQualifiedEditorLogType}') no longer have a method called {k_strEditorLogTypeClearFunction} (with binding {k_consoleClearFunctionbindingFlags.ToString()})" ); | |
} else Debug.LogWarning( $"Editor log entries cannot be fetched via reflection with string: '{k_strAssemblyQualifiedEditorLogType}'" ); | |
Debug.Log("Compiling C# code for " + compilerSettings.group + "/" + compilerSettings.target); | |
Debug.Log( $"defines: {definesForGroup}" ); | |
EditorUtility.DisplayProgressBar( "Compiling C# Scripts", $"Group:{compilerSettings.group} Target:{compilerSettings.target}", k_fCompilerProgressBarAmount ); | |
var compilationResult = PlayerBuildInterface.CompilePlayerScripts( compilerSettings, k_strTempCompilerDirectory ); | |
Debug.Log( $"Compiled Assemblies: {string.Join("\n", compilationResult.assemblies)}" ); | |
EditorUtility.ClearProgressBar(); | |
} | |
} | |
#endif // #if UNITY_EDITOR |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment