summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2021-10-25 15:02:17 -0400
committerGitHub <noreply@github.com>2021-10-25 15:02:17 -0400
commit499e6764e6fbb2a1e9b107e5b30f45ec2b13046c (patch)
treecb814599487f95d9a8436da5ea67aaa5702038f1 /source
parent8fb8459150efcb61bd65e6e83d94d12c821f6a4e (diff)
Enabling slang-llvm for host-callable (#1975)
* #include an absolute path didn't work - because paths were taken to always be relative. * First integration of slang-pack. * Use .os * Add optional dependency support. * Update github actions/scripts to update deps. aarch64 needs special handling. * Upgrade to latest slang-pack for ignore-deps support. * Fix linux build issues. * Copying slang-llvm from dependencies. * Add support for LLVM for host callable. Added CodeGenTransitionMap. * Remove hack to enable host callable for LLVM. * Small improvements around transitions/downstream compiler. * Fix typo in method name. * Fix comment. * Update visual studio project. * Updage slang-llvm to include initialization fix. * Fix handling extraction of clang version number. * Fix some formatting problems. * hack - to see if there is a version problem on CI. * Remove progress on github action linux. * Allow version lines to have text before 'prefix'. * Update slang-binaries to include centos-7 premake binaries. * Upgrade slang-binaries. * Upgrade slang-binaries. * Update slang binaries to have certificates. * Fix handling of dependency path. * Update README to include LLVM Update building to include --deps and --arch * Include slang-llvm in packages. * Update building docs.
Diffstat (limited to 'source')
-rw-r--r--source/compiler-core/slang-gcc-compiler-util.cpp86
1 files changed, 60 insertions, 26 deletions
diff --git a/source/compiler-core/slang-gcc-compiler-util.cpp b/source/compiler-core/slang-gcc-compiler-util.cpp
index 971416ddb..c897f5492 100644
--- a/source/compiler-core/slang-gcc-compiler-util.cpp
+++ b/source/compiler-core/slang-gcc-compiler-util.cpp
@@ -7,10 +7,37 @@
#include "../core/slang-io.h"
#include "../core/slang-shared-library.h"
+#include "../core/slang-char-util.h"
namespace Slang
{
+static Index _findVersionEnd(const UnownedStringSlice& in)
+{
+ Index numDots = 0;
+ const Index len = in.getLength();
+
+ for (Index i = 0; i < len; ++i)
+ {
+ const char c = in[i];
+ if (CharUtil::isDigit(c))
+ {
+ continue;
+ }
+ if (c == '.')
+ {
+ if (numDots >= 2)
+ {
+ return i;
+ }
+ numDots++;
+ continue;
+ }
+ return i;
+ }
+ return len;
+}
+
/* static */SlangResult GCCDownstreamCompilerUtil::parseVersion(const UnownedStringSlice& text, const UnownedStringSlice& prefix, DownstreamCompiler::Desc& outDesc)
{
List<UnownedStringSlice> lines;
@@ -18,38 +45,42 @@ namespace Slang
for (auto line : lines)
{
- if (line.startsWith(prefix))
+ Index prefixIndex = line.indexOf(prefix);
+ if (prefixIndex < 0)
{
- const UnownedStringSlice remainingSlice = UnownedStringSlice(line.begin() + prefix.getLength(), line.end()).trim();
- const Index versionEndIndex = remainingSlice.indexOf(' ');
- if (versionEndIndex < 0)
- {
- return SLANG_FAIL;
- }
+ continue;
+ }
- const UnownedStringSlice versionSlice(remainingSlice.begin(), remainingSlice.begin() + versionEndIndex);
+ const UnownedStringSlice remainingSlice = UnownedStringSlice(line.begin() + prefixIndex + prefix.getLength(), line.end()).trim();
- // Version is in format 0.0.0
- List<UnownedStringSlice> split;
- StringUtil::split(versionSlice, '.', split);
- List<Int> digits;
+ const Index versionEndIndex = _findVersionEnd(remainingSlice);
+ if (versionEndIndex < 0)
+ {
+ return SLANG_FAIL;
+ }
- for (auto v : split)
- {
- Int version;
- SLANG_RETURN_ON_FAIL(StringUtil::parseInt(v, version));
- digits.add(version);
- }
+ const UnownedStringSlice versionSlice(remainingSlice.begin(), remainingSlice.begin() + versionEndIndex);
- if (digits.getCount() < 2)
- {
- return SLANG_FAIL;
- }
+ // Version is in format 0.0.0
+ List<UnownedStringSlice> split;
+ StringUtil::split(versionSlice, '.', split);
+ List<Int> digits;
- outDesc.majorVersion = digits[0];
- outDesc.minorVersion = digits[1];
- return SLANG_OK;
+ for (auto v : split)
+ {
+ Int version;
+ SLANG_RETURN_ON_FAIL(StringUtil::parseInt(v, version));
+ digits.add(version);
+ }
+
+ if (digits.getCount() < 2)
+ {
+ return SLANG_FAIL;
}
+
+ outDesc.majorVersion = digits[0];
+ outDesc.minorVersion = digits[1];
+ return SLANG_OK;
}
return SLANG_FAIL;
@@ -64,6 +95,8 @@ SlangResult GCCDownstreamCompilerUtil::calcVersion(const String& exeName, Downst
ExecuteResult exeRes;
SLANG_RETURN_ON_FAIL(ProcessUtil::execute(cmdLine, exeRes));
+ // Note we now have builds that add other words in front of the version
+ // such as "Ubuntu clang version"
const UnownedStringSlice prefixes[] =
{
UnownedStringSlice::fromLiteral("clang version"),
@@ -89,6 +122,7 @@ SlangResult GCCDownstreamCompilerUtil::calcVersion(const String& exeName, Downst
return SLANG_OK;
}
}
+
return SLANG_FAIL;
}
@@ -594,7 +628,7 @@ static SlangResult _parseGCCFamilyLine(const UnownedStringSlice& line, LineParse
{
// Make STD libs available
cmdLine.addArg("-lstdc++");
- // Make maths lib available
+ // Make maths lib available
cmdLine.addArg("-lm");
}