MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / compileFile

Method compileFile

Libraries/Plugin/Plugin.cpp:480–591  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

478}
479
480SC::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"}));

Callers

nothing calls this directly

Calls 10

appendAsSingleStringMethod · 0.80
appendMultipleStringsMethod · 0.80
InheritClass · 0.50
ResultClass · 0.50
ErrorEnum · 0.50
viewMethod · 0.45
sizeMethod · 0.45
containsMethod · 0.45
isEmptyMethod · 0.45
writeToMethod · 0.45

Tested by

no test coverage detected