| 478 | } |
| 479 | |
| 480 | SC::Result SC::PluginCompiler::compileFile(const PluginDefinition& definition, const PluginSysroot& sysroot, |
| 481 | const PluginCompilerEnvironment& compilerEnvironment, StringSpan sourceFile, |
| 482 | StringSpan objectFile, Span<char>& standardOutput) const |
| 483 | { |
| 484 | static constexpr size_t MAX_PROCESS_ARGUMENTS = 32; |
| 485 | |
| 486 | size_t argumentsLengths[MAX_PROCESS_ARGUMENTS]; |
| 487 | size_t numberOfArguments = 0; |
| 488 | |
| 489 | StringSpan::NativeWritable bufferWritable = {buffer}; |
| 490 | |
| 491 | StringsArena argumentsArena{bufferWritable, numberOfArguments, {argumentsLengths}}; |
| 492 | SC_TRY(argumentsArena.appendAsSingleString(compilerPath.view())); |
| 493 | #if SC_PLATFORM_WINDOWS |
| 494 | for (size_t idx = 0; idx < includePaths.size(); ++idx) |
| 495 | { |
| 496 | SC_TRY(argumentsArena.appendAsSingleString({L"/I\"", includePaths[idx].view(), L"\""})); |
| 497 | } |
| 498 | |
| 499 | if (definition.build.contains("libc")) |
| 500 | { |
| 501 | for (size_t idx = 0; idx < compilerIncludePaths.size(); ++idx) |
| 502 | { |
| 503 | SC_TRY(argumentsArena.appendAsSingleString({L"/I\"", compilerIncludePaths[idx].view(), L"\""})); |
| 504 | } |
| 505 | |
| 506 | for (size_t idx = 0; idx < sysroot.includePaths.size(); ++idx) |
| 507 | { |
| 508 | SC_TRY(argumentsArena.appendAsSingleString({L"/I\"", sysroot.includePaths[idx].view(), L"\""})); |
| 509 | } |
| 510 | } |
| 511 | |
| 512 | SC_TRY(argumentsArena.appendAsSingleString({L"/Fo:", objectFile})); |
| 513 | if (not definition.build.contains("libc")) |
| 514 | { |
| 515 | SC_TRY(argumentsArena.appendMultipleStrings({L"/DSC_INCLUDE_STD_CPP=0"})); |
| 516 | } |
| 517 | if (not definition.build.contains("libc++")) |
| 518 | { |
| 519 | SC_TRY(argumentsArena.appendMultipleStrings({L"/DSC_PROVIDE_CPP_RUNTIME_SHIMS=1"})); |
| 520 | } |
| 521 | SC_TRY(argumentsArena.appendMultipleStrings({L"/std:c++17", L"/GR-", L"/WX", L"/W4", L"/permissive-", L"/GS-", |
| 522 | L"/Zi", L"/DSC_PLUGIN_LIBRARY=1", L"/D_HAS_EXCEPTIONS=0", L"/nologo", |
| 523 | L"/c", sourceFile})); |
| 524 | #else |
| 525 | (void)sysroot; |
| 526 | for (size_t idx = 0; idx < includePaths.size(); ++idx) |
| 527 | { |
| 528 | SC_TRY(argumentsArena.appendAsSingleString({"-I", includePaths[idx].view()})); |
| 529 | } |
| 530 | if (not definition.build.contains("libc")) |
| 531 | { |
| 532 | SC_TRY(argumentsArena.appendMultipleStrings({"-nostdinc", "-nostdinc++", "-fno-stack-protector"})); |
| 533 | SC_TRY(argumentsArena.appendMultipleStrings({"-DSC_INCLUDE_STD_CPP=0"})); |
| 534 | } |
| 535 | if (not definition.build.contains("libc++")) |
| 536 | { |
| 537 | SC_TRY(argumentsArena.appendMultipleStrings({"-DSC_PROVIDE_CPP_RUNTIME_SHIMS=1"})); |
nothing calls this directly
no test coverage detected