From 634f5414f332f904c7db968810b3d6f0ca253959 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 27 Apr 2022 17:53:21 -0400 Subject: Make artifact an interface (#2195) * #include an absolute path didn't work - because paths were taken to always be relative. * Compile to a dxil library. * Added CompileProduct. * Support handling of ModuleLibrary. * CacheBehavior -> Cache * Use CompileProduct for -r references. * CompileProduct -> Artifact. * Determining an artifact type on binding. * Determine binary linkability. * Added Artifact::exists. * Added ArtifactKeep. * Small fixes. * Small improvements to Artifact. * Add zip extension. * Fix some comments. * Fix multiple adding of PublicDecoration. Make public output export for DXIL/lib. Add checking for simpleDecorations such that only added once. * Use 'whole program' to identify library build. * Move slang-artifact into compiler-core. * Split out Keep free functions. * Artifact::Keep -> ArtifactKeep. * Handle libraries as artifacts. * Add -target dxil so test infrastructure knows it needs DXC. * Linking working in DXC. * Improve handling around emit for 'export'. * Add comment around Artifact name. * Render test working with linking. * Improvements around Artifact handling. * Add ArtifactPayloadInfo. * Small tidy up around artifact. * Split out code to get info about Artifacts into artifact-info.cpp/.h * IArtifact interface and IArtifactInstance interface. * Fix small issues. * Fix compilation warning issue. * Fix missing SLANG_OVERRIDE. * Small fixes to make compilation work on Visual Studio 2022. * Small improvements to Artifact interface/naming. * Added Desc with each element in IArchive to allow more flexibility in usage. * Fix clang warning issue. * Add ArtifactPayload::Diagnostics * More discussion around IArtifact usage. * Re-add slang-artifact.h which was removed during merge. * Fix typo identified in review. --- source/slang/slang-options.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'source/slang/slang-options.cpp') diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp index 10980f216..c31006058 100644 --- a/source/slang/slang-options.cpp +++ b/source/slang/slang-options.cpp @@ -26,7 +26,7 @@ namespace Slang { -SlangResult _addLibraryReference(EndToEndCompileRequest* req, Artifact* artifact); +SlangResult _addLibraryReference(EndToEndCompileRequest* req, IArtifact* artifact); struct OptionsParser { @@ -1401,7 +1401,7 @@ struct OptionsParser CommandLineArg referenceModuleName; SLANG_RETURN_ON_FAIL(reader.expectArg(referenceModuleName)); - auto path = referenceModuleName.value; + const auto path = referenceModuleName.value; auto desc = ArtifactInfoUtil::getDescFromPath(path.getUnownedSlice()); @@ -1423,13 +1423,21 @@ struct OptionsParser return SLANG_FAIL; } - const String name = Artifact::getBaseNameFromPath(desc, referenceModuleName.value.getUnownedSlice()); + const String name = ArtifactInfoUtil::getBaseNameFromPath(desc, path.getUnownedSlice()); // Create the artifact - RefPtr artifact = new Artifact(desc, name); + ComPtr artifact(new Artifact(desc, name)); - // Set the path - artifact->setPath(Artifact::PathType::Existing, referenceModuleName.value); + // There is a problem here if I want to reference a library that is a 'system' library or is not directly a file + // In that case the path shouldn't be set and the name should completely define the library. + // Seeing as on all targets the baseName doesn't have an extension, and all library types do + // if the name doesn't have an extension we can assume there is no path to it. + + if (Path::getPathExt(path).getLength() > 0) + { + // Set the path + artifact->setPath(Artifact::PathType::Existing, path.getBuffer()); + } // TODO(JS): We might want to check if the artifact exists. // If the artifact is a CPU (or downstream compiler) library -- cgit v1.2.3