diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2022-09-01 09:35:18 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-01 09:35:18 -0400 |
| commit | cd8715a7760189c54b36c0c250efbe1db5b8635c (patch) | |
| tree | cd1b2e840e64cbdd9e9a383646f0e58a7f14ae97 /source/compiler-core/slang-downstream-dep1.cpp | |
| parent | 5c2c2cfc9918bb43225159e67a851e196e17759a (diff) | |
Passing source to Downstream compilation as artifacts (#2382)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Make DownstreamCompileOptions use POD types.
* CharSliceAllocator -> SliceAllocator
Added SliceConverter
CharSliceCaster -> SliceCaster
* First attempt at zero terminating around blobs.
* Fix clang warning.
* Add SlangTerminatedChars
Make Blob implementations support it.
Make most blobs 'terminated'.
* Fix bug setting up sourceFiles for CommandLineDownstreamCompiler.
* Traffic in TerminatedCharSlice for sourceFiles.
Use ArtifactDesc to generate temporary file names for source.
* Fix typo in testing for shared library/C++.
* Working with source being passed as artifacts to DownstreamCompiler.
* Use artifacts in SourceManager/SourceFile.
* Support infering extension from the original file extension.
Diffstat (limited to 'source/compiler-core/slang-downstream-dep1.cpp')
| -rw-r--r-- | source/compiler-core/slang-downstream-dep1.cpp | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/source/compiler-core/slang-downstream-dep1.cpp b/source/compiler-core/slang-downstream-dep1.cpp index ac66b4502..c62fc77fc 100644 --- a/source/compiler-core/slang-downstream-dep1.cpp +++ b/source/compiler-core/slang-downstream-dep1.cpp @@ -6,6 +6,7 @@ #include "slang-artifact-desc-util.h" #include "../core/slang-castable-util.h" +#include "../core/slang-string-util.h" #include "slang-slice-allocator.h" @@ -97,6 +98,14 @@ DownstreamCompilerAdapter_Dep1::DownstreamCompilerAdapter_Dep1(DownstreamCompile } SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOptions, IArtifact** outArtifact) { + // Currently this only for llvm, so we'll just ignore other scenarios + if (inOptions.sourceArtifacts.count != 1) + { + return SLANG_FAIL; + } + + IArtifact* sourceArtifact = inOptions.sourceArtifacts[0]; + typedef DownstreamCompileOptions_Dep1::SomeEnum SomeEnum; // Convert to the Deps1 compile options @@ -126,15 +135,16 @@ SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOpti options.defines.add(dst); } - options.sourceContents = asStringSlice(inOptions.sourceContents); - options.sourceContentsPath = asStringSlice(inOptions.sourceContentsPath); - - options.sourceFiles = SliceConverter::toList(inOptions.sourceFiles); + ComPtr<ISlangBlob> blob; + SLANG_RETURN_ON_FAIL(sourceArtifact->loadBlob(ArtifactKeep::Yes, blob.writeRef())); + + options.sourceContents = StringUtil::getString(blob); + options.sourceContentsPath = ArtifactUtil::findPath(sourceArtifact); - options.includePaths = SliceConverter::toList(inOptions.includePaths); - options.libraryPaths = SliceConverter::toList(inOptions.libraryPaths); + options.includePaths = SliceUtil::toList(inOptions.includePaths); + options.libraryPaths = SliceUtil::toList(inOptions.libraryPaths); - options.libraries = SliceConverter::toComPtrList(inOptions.libraries); + options.libraries = SliceUtil::toComPtrList(inOptions.libraries); for (auto& src : inOptions.requiredCapabilityVersions) { @@ -155,7 +165,7 @@ SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOpti options.stage = inOptions.stage; - options.compilerSpecificArguments = SliceConverter::toList(inOptions.compilerSpecificArguments); + options.compilerSpecificArguments = SliceUtil::toList(inOptions.compilerSpecificArguments); options.fileSystemExt = inOptions.fileSystemExt; options.sourceManager = inOptions.sourceManager; @@ -163,8 +173,6 @@ SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOpti RefPtr<DownstreamCompileResult_Dep1> result; SLANG_RETURN_ON_FAIL(m_dep->compile(options, result)); - typedef SliceCaster Caster; - ComPtr<IArtifact> artifact = ArtifactUtil::createArtifactForCompileTarget(options.targetType); // Convert the diagnostics @@ -173,7 +181,7 @@ SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOpti const DownstreamDiagnostics_Dep1* srcDiagnostics = &result->getDiagnostics(); dstDiagnostics->setResult(srcDiagnostics->result); - dstDiagnostics->setRaw(Caster::asCharSlice(srcDiagnostics->rawDiagnostics)); + dstDiagnostics->setRaw(SliceUtil::asCharSlice(srcDiagnostics->rawDiagnostics)); for (const auto& srcDiagnostic : srcDiagnostics->diagnostics) { @@ -182,11 +190,14 @@ SlangResult DownstreamCompilerAdapter_Dep1::compile(const CompileOptions& inOpti dstDiagnostic.severity = ArtifactDiagnostic::Severity(srcDiagnostic.severity); dstDiagnostic.stage = ArtifactDiagnostic::Stage(srcDiagnostic.stage); - dstDiagnostic.code = Caster::asTerminatedCharSlice(srcDiagnostic.code); - dstDiagnostic.text = Caster::asTerminatedCharSlice(srcDiagnostic.text); - dstDiagnostic.filePath = Caster::asTerminatedCharSlice(srcDiagnostic.filePath); + dstDiagnostic.code = SliceUtil::asTerminatedCharSlice(srcDiagnostic.code); + dstDiagnostic.text = SliceUtil::asTerminatedCharSlice(srcDiagnostic.text); + dstDiagnostic.filePath = SliceUtil::asTerminatedCharSlice(srcDiagnostic.filePath); dstDiagnostic.location.line = srcDiagnostic.fileLine; + + // Add the diagnostic + dstDiagnostics->add(dstDiagnostic); } artifact->addAssociated(dstDiagnostics); |
