@@ -15,13 +15,24 @@ private static int Main(string[] args)
1515 int exitCode ;
1616 Logger logger = null ;
1717
18+ Settings settings ;
19+ try
20+ {
21+ settings = Settings . Load ( ) ?? Settings . Default ;
22+ }
23+ catch ( Exception e )
24+ {
25+ Console . Error . Write ( "Failed in loading settings: " + e ) ;
26+ return 1 ;
27+ }
28+
1829#if LOGGING_ENABLED
1930 using ( logger = new Logger ( ) )
2031#endif
2132 {
2233 try
2334 {
24- exitCode = Compile ( args , logger ) ;
35+ exitCode = Compile ( args , logger , settings ) ;
2536 }
2637 catch ( Exception e )
2738 {
@@ -33,7 +44,7 @@ private static int Main(string[] args)
3344 return exitCode ;
3445 }
3546
36- private static int Compile ( string [ ] args , Logger logger )
47+ private static int Compile ( string [ ] args , Logger logger , Settings settings )
3748 {
3849 logger ? . AppendHeader ( ) ;
3950
@@ -56,7 +67,7 @@ private static int Compile(string[] args, Logger logger)
5667 return - 1 ;
5768 }
5869
59- var compiler = FindSuitableCompiler ( logger , CurrentPlatform , projectDir , compilationOptions , unityEditorDataDir ) ;
70+ var compiler = CreateCompiler ( settings . Compiler , logger , CurrentPlatform , projectDir , compilationOptions , unityEditorDataDir ) ;
6071
6172 logger ? . Append ( $ "Compiler: { compiler . Name } ") ;
6273 logger ? . Append ( "" ) ;
@@ -94,6 +105,43 @@ private static int Compile(string[] args, Logger logger)
94105 return 0 ;
95106 }
96107
108+ private static Compiler CreateCompiler ( CompilerType compilerType , Logger logger , Platform platform , string projectDir , string [ ] compilationOptions , string unityEditorDataDir )
109+ {
110+ var compilerDirectory = Path . Combine ( projectDir , LANGUAGE_SUPPORT_DIR ) ;
111+
112+ switch ( compilerType )
113+ {
114+ case CompilerType . Auto :
115+ return FindSuitableCompiler ( logger , platform , projectDir , compilationOptions , unityEditorDataDir ) ;
116+
117+ case CompilerType . Mono3 :
118+ var stockCompilerPath = Path . Combine ( unityEditorDataDir , @"Mono/lib/mono/2.0/gmcs.exe" ) ;
119+ return new Mono30Compiler ( logger , stockCompilerPath ) ;
120+
121+ case CompilerType . Mono5 :
122+ var bleedingEdgeCompilerPath = Path . Combine ( unityEditorDataDir , @"MonoBleedingEdge/lib/mono/4.5/mcs.exe" ) ;
123+ return new Mono50Compiler ( logger , bleedingEdgeCompilerPath ) ;
124+
125+ case CompilerType . Mono6 :
126+ if ( Mono60Compiler . IsAvailable ( compilerDirectory ) )
127+ return new Mono60Compiler ( logger , compilerDirectory ) ;
128+ break ;
129+
130+ case CompilerType . Microsoft6 :
131+ var roslynDirectory = Path . Combine ( compilerDirectory , "Roslyn" ) ;
132+ if ( Microsoft60Compiler . IsAvailable ( roslynDirectory ) )
133+ return new Microsoft60Compiler ( logger , roslynDirectory ) ;
134+ break ;
135+
136+ case CompilerType . Incremental6 :
137+ if ( Incremental60Compiler . IsAvailable ( compilerDirectory ) )
138+ return new Incremental60Compiler ( logger , compilerDirectory ) ;
139+ break ;
140+ }
141+
142+ return null ;
143+ }
144+
97145 private static Compiler FindSuitableCompiler ( Logger logger , Platform platform , string projectDir , string [ ] compilationOptions , string unityEditorDataDir )
98146 {
99147 Compiler compiler = null ;
0 commit comments