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-artifact-desc-util.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-artifact-desc-util.cpp')
| -rw-r--r-- | source/compiler-core/slang-artifact-desc-util.cpp | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/source/compiler-core/slang-artifact-desc-util.cpp b/source/compiler-core/slang-artifact-desc-util.cpp index cb5d401a9..7534e1265 100644 --- a/source/compiler-core/slang-artifact-desc-util.cpp +++ b/source/compiler-core/slang-artifact-desc-util.cpp @@ -443,12 +443,12 @@ static const KindExtension g_cpuKindExts[] = { switch (kind) { - case Kind::Library: - case Kind::ObjectCode: - { - return true; - } - default: break; + case Kind::Library: + case Kind::ObjectCode: + { + return true; + } + default: break; } return false; } @@ -587,9 +587,6 @@ static UnownedStringSlice _getPayloadExtension(ArtifactPayload payload) typedef ArtifactPayload Payload; switch (payload) { - /* Misc */ - case Payload::Unknown: return toSlice("unknown"); - /* Source types */ case Payload::HLSL: return toSlice("hlsl"); case Payload::GLSL: return toSlice("glsl"); @@ -685,8 +682,14 @@ SlangResult ArtifactDescUtil::appendDefaultExtension(const ArtifactDesc& desc, S } case ArtifactKind::Source: { - out << _getPayloadExtension(desc.payload); - return SLANG_OK; + auto ext = _getPayloadExtension(desc.payload); + if (ext.begin() != nullptr) + { + out << ext; + return SLANG_OK; + } + // Don't know the extension for that + return SLANG_E_NOT_FOUND; } default: break; } @@ -695,16 +698,7 @@ SlangResult ArtifactDescUtil::appendDefaultExtension(const ArtifactDesc& desc, S { return appendCpuExtensionForKind(desc.kind, out); } - else - { - auto slice = _getPayloadExtension(desc.payload); - if (slice.getLength()) - { - out << slice; - return SLANG_OK; - } - } - + return SLANG_E_NOT_FOUND; } @@ -752,6 +746,12 @@ SlangResult ArtifactDescUtil::appendDefaultExtension(const ArtifactDesc& desc, S return getBaseNameFromPath(desc, path); } +/* static */SlangResult ArtifactDescUtil::hasDefinedNameForDesc(const ArtifactDesc& desc) +{ + StringBuilder buf; + return SLANG_SUCCEEDED(appendDefaultExtension(desc, buf)); +} + /* static */SlangResult ArtifactDescUtil::calcNameForDesc(const ArtifactDesc& desc, const UnownedStringSlice& inBaseName, StringBuilder& outName) { UnownedStringSlice baseName(inBaseName); @@ -779,10 +779,18 @@ SlangResult ArtifactDescUtil::appendDefaultExtension(const ArtifactDesc& desc, S // If there is an extension append it StringBuilder ext; - if (SLANG_SUCCEEDED(appendDefaultExtension(desc, ext)) && ext.getLength() > 0) + if (SLANG_SUCCEEDED(appendDefaultExtension(desc, ext))) + { + if (ext.getLength()) + { + outName.appendChar('.'); + outName.append(ext); + } + } + else { - outName.appendChar('.'); - outName.append(ext); + // If we can't determine the type we can output with .unknown + outName.append(toSlice(".unknown")); } return SLANG_OK; |
