From cd8715a7760189c54b36c0c250efbe1db5b8635c Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 1 Sep 2022 09:35:18 -0400 Subject: 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. --- source/compiler-core/slang-downstream-dep1.cpp | 39 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'source/compiler-core/slang-downstream-dep1.cpp') 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 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 result; SLANG_RETURN_ON_FAIL(m_dep->compile(options, result)); - typedef SliceCaster Caster; - ComPtr 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); -- cgit v1.2.3