summaryrefslogtreecommitdiffstats
path: root/source/compiler-core/slang-downstream-dep1.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-09-01 09:35:18 -0400
committerGitHub <noreply@github.com>2022-09-01 09:35:18 -0400
commitcd8715a7760189c54b36c0c250efbe1db5b8635c (patch)
treecd1b2e840e64cbdd9e9a383646f0e58a7f14ae97 /source/compiler-core/slang-downstream-dep1.cpp
parent5c2c2cfc9918bb43225159e67a851e196e17759a (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.cpp39
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);