Skip to content

Commit cb0c59a

Browse files
mmazasslachiewicz
mmazas
authored andcommitted
Added 3 compiler options.
Signed-off-by: mmazas <[email protected]>
1 parent 51840ef commit cb0c59a

File tree

1 file changed

+194
-1
lines changed
  • plexus-compilers/plexus-compiler-csharp/src/main/java/org/codehaus/plexus/compiler/csharp

1 file changed

+194
-1
lines changed

Diff for: plexus-compilers/plexus-compiler-csharp/src/main/java/org/codehaus/plexus/compiler/csharp/CSharpCompiler.java

+194-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
* @author <a href="mailto:[email protected]">Trygve Laugst&oslash;l</a>
5757
* @author <a href="mailto:[email protected]">Matthew Pocock</a>
5858
* @author <a href="mailto:[email protected]">Chris Stevenson</a>
59+
* @author <a href="mailto:[email protected]">Marc Mazas</a>
5960
*/
6061
@Named("csharp")
6162
public class CSharpCompiler extends AbstractCompiler {
@@ -219,6 +220,171 @@ private String findExecutable(CompilerConfiguration config) {
219220
Options can be of the form -option or /option
220221
*/
221222

223+
/*
224+
C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\Roslyn>csc -help -preferreduilang:en
225+
Microsoft (R) Visual C# Compiler version 4.11.0-3.24460.3 (5649376e)
226+
Copyright (C) Microsoft Corporation. All rights reserved.
227+
228+
229+
Visual C# Compiler Options
230+
231+
- OUTPUT FILES -
232+
-out:<file> Specify output file name (default: base name of
233+
file with main class or first file)
234+
-target:exe Build a console executable (default) (Short
235+
form: -t:exe)
236+
-target:winexe Build a Windows executable (Short form:
237+
-t:winexe)
238+
-target:library Build a library (Short form: -t:library)
239+
-target:module Build a module that can be added to another
240+
assembly (Short form: -t:module)
241+
-target:appcontainerexe Build an Appcontainer executable (Short form:
242+
-t:appcontainerexe)
243+
-target:winmdobj Build a Windows Runtime intermediate file that
244+
is consumed by WinMDExp (Short form: -t:winmdobj)
245+
-doc:<file> XML Documentation file to generate
246+
-refout:<file> Reference assembly output to generate
247+
-platform:<string> Limit which platforms this code can run on: x86,
248+
Itanium, x64, arm, arm64, anycpu32bitpreferred, or
249+
anycpu. The default is anycpu.
250+
251+
- INPUT FILES -
252+
-recurse:<wildcard> Include all files in the current directory and
253+
subdirectories according to the wildcard
254+
specifications
255+
-reference:<alias>=<file> Reference metadata from the specified assembly
256+
file using the given alias (Short form: -r)
257+
-reference:<file list> Reference metadata from the specified assembly
258+
files (Short form: -r)
259+
-addmodule:<file list> Link the specified modules into this assembly
260+
-link:<file list> Embed metadata from the specified interop
261+
assembly files (Short form: -l)
262+
-analyzer:<file list> Run the analyzers from this assembly
263+
(Short form: -a)
264+
-additionalfile:<file list> Additional files that don't directly affect code
265+
generation but may be used by analyzers for producing
266+
errors or warnings.
267+
-embed Embed all source files in the PDB.
268+
-embed:<file list> Embed specific files in the PDB.
269+
270+
- RESOURCES -
271+
-win32res:<file> Specify a Win32 resource file (.res)
272+
-win32icon:<file> Use this icon for the output
273+
-win32manifest:<file> Specify a Win32 manifest file (.xml)
274+
-nowin32manifest Do not include the default Win32 manifest
275+
-resource:<resinfo> Embed the specified resource (Short form: -res)
276+
-linkresource:<resinfo> Link the specified resource to this assembly
277+
(Short form: -linkres) Where the resinfo format
278+
is <file>[,<string name>[,public|private]]
279+
280+
- CODE GENERATION -
281+
-debug[+|-] Emit debugging information
282+
-debug:{full|pdbonly|portable|embedded}
283+
Specify debugging type ('full' is default,
284+
'portable' is a cross-platform format,
285+
'embedded' is a cross-platform format embedded into
286+
the target .dll or .exe)
287+
-optimize[+|-] Enable optimizations (Short form: -o)
288+
-deterministic Produce a deterministic assembly
289+
(including module version GUID and timestamp)
290+
-refonly Produce a reference assembly in place of the main output
291+
-instrument:TestCoverage Produce an assembly instrumented to collect
292+
coverage information
293+
-sourcelink:<file> Source link info to embed into PDB.
294+
295+
- ERRORS AND WARNINGS -
296+
-warnaserror[+|-] Report all warnings as errors
297+
-warnaserror[+|-]:<warn list> Report specific warnings as errors
298+
(use "nullable" for all nullability warnings)
299+
-warn:<n> Set warning level (0 or higher) (Short form: -w)
300+
-nowarn:<warn list> Disable specific warning messages
301+
(use "nullable" for all nullability warnings)
302+
-ruleset:<file> Specify a ruleset file that disables specific
303+
diagnostics.
304+
-errorlog:<file>[,version=<sarif_version>]
305+
Specify a file to log all compiler and analyzer
306+
diagnostics.
307+
sarif_version:{1|2|2.1} Default is 1. 2 and 2.1
308+
both mean SARIF version 2.1.0.
309+
-reportanalyzer Report additional analyzer information, such as
310+
execution time.
311+
-skipanalyzers[+|-] Skip execution of diagnostic analyzers.
312+
313+
- LANGUAGE -
314+
-checked[+|-] Generate overflow checks
315+
-unsafe[+|-] Allow 'unsafe' code
316+
-define:<symbol list> Define conditional compilation symbol(s) (Short
317+
form: -d)
318+
-langversion:? Display the allowed values for language version
319+
-langversion:<string> Specify language version such as
320+
`latest` (latest version, including minor versions),
321+
`default` (same as `latest`),
322+
`latestmajor` (latest version, excluding minor versions),
323+
`preview` (latest version, including features in unsupported preview),
324+
or specific versions like `6` or `7.1`
325+
-nullable[+|-] Specify nullable context option enable|disable.
326+
-nullable:{enable|disable|warnings|annotations}
327+
Specify nullable context option enable|disable|warnings|annotations.
328+
329+
- SECURITY -
330+
-delaysign[+|-] Delay-sign the assembly using only the public
331+
portion of the strong name key
332+
-publicsign[+|-] Public-sign the assembly using only the public
333+
portion of the strong name key
334+
-keyfile:<file> Specify a strong name key file
335+
-keycontainer:<string> Specify a strong name key container
336+
-highentropyva[+|-] Enable high-entropy ASLR
337+
338+
- MISCELLANEOUS -
339+
@<file> Read response file for more options
340+
-help Display this usage message (Short form: -?)
341+
-nologo Suppress compiler copyright message
342+
-noconfig Do not auto include CSC.RSP file
343+
-parallel[+|-] Concurrent build.
344+
-version Display the compiler version number and exit.
345+
346+
- ADVANCED -
347+
-baseaddress:<address> Base address for the library to be built
348+
-checksumalgorithm:<alg> Specify algorithm for calculating source file
349+
checksum stored in PDB. Supported values are:
350+
SHA1 or SHA256 (default).
351+
-codepage:<n> Specify the codepage to use when opening source
352+
files
353+
-utf8output Output compiler messages in UTF-8 encoding
354+
-main:<type> Specify the type that contains the entry point
355+
(ignore all other possible entry points) (Short
356+
form: -m)
357+
-fullpaths Compiler generates fully qualified paths
358+
-filealign:<n> Specify the alignment used for output file
359+
sections
360+
-pathmap:<K1>=<V1>,<K2>=<V2>,...
361+
Specify a mapping for source path names output by
362+
the compiler.
363+
-pdb:<file> Specify debug information file name (default:
364+
output file name with .pdb extension)
365+
-errorendlocation Output line and column of the end location of
366+
each error
367+
-preferreduilang Specify the preferred output language name.
368+
-nosdkpath Disable searching the default SDK path for standard library assemblies.
369+
-nostdlib[+|-] Do not reference standard library (mscorlib.dll)
370+
-subsystemversion:<string> Specify subsystem version of this assembly
371+
-lib:<file list> Specify additional directories to search in for
372+
references
373+
-errorreport:<string> Specify how to handle internal compiler errors:
374+
prompt, send, queue, or none. The default is
375+
queue.
376+
-appconfig:<file> Specify an application configuration file
377+
containing assembly binding settings
378+
-moduleassemblyname:<string> Name of the assembly which this module will be
379+
a part of
380+
-modulename:<string> Specify the name of the source module
381+
-generatedfilesout:<dir> Place files generated during compilation in the
382+
specified directory.
383+
-reportivts[+|-] Output information on all IVTs granted to this
384+
assembly by all dependencies, and annotate foreign assembly
385+
accessibility errors with what assembly they came from.
386+
*/
387+
222388
private String[] buildCompilerArguments(CompilerConfiguration config, String[] sourceFiles)
223389
throws CompilerException {
224390
List<String> args = new ArrayList<>();
@@ -291,7 +457,7 @@ private String[] buildCompilerArguments(CompilerConfiguration config, String[] s
291457
}
292458

293459
// ----------------------------------------------------------------------
294-
// Xml Doc output
460+
// Nowarn option
295461
// ----------------------------------------------------------------------
296462

297463
String nowarn = compilerArguments.get("-nowarn");
@@ -343,6 +509,33 @@ private String[] buildCompilerArguments(CompilerConfiguration config, String[] s
343509
args.add("/nologo");
344510
}
345511

512+
// ----------------------------------------------------------------------
513+
// Unsafe option
514+
// ----------------------------------------------------------------------
515+
String unsafe = compilerArguments.get("-unsafe");
516+
517+
if (!StringUtils.isEmpty(unsafe) && unsafe.equals("true")) {
518+
args.add("/unsafe");
519+
}
520+
521+
// ----------------------------------------------------------------------
522+
// PreferredUILang option
523+
// ----------------------------------------------------------------------
524+
String preferreduilang = compilerArguments.get("-preferreduilang");
525+
526+
if (!StringUtils.isEmpty(preferreduilang)) {
527+
args.add("/preferreduilang:" + preferreduilang);
528+
}
529+
530+
// ----------------------------------------------------------------------
531+
// Utf8Output option
532+
// ----------------------------------------------------------------------
533+
String utf8output = compilerArguments.get("-utf8output");
534+
535+
if (!StringUtils.isEmpty(utf8output)) {
536+
args.add("/utf8output:");
537+
}
538+
346539
// ----------------------------------------------------------------------
347540
// add any resource files
348541
// ----------------------------------------------------------------------

0 commit comments

Comments
 (0)