diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2021-10-25 15:02:17 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-25 15:02:17 -0400 |
| commit | 499e6764e6fbb2a1e9b107e5b30f45ec2b13046c (patch) | |
| tree | cb814599487f95d9a8436da5ea67aaa5702038f1 /source | |
| parent | 8fb8459150efcb61bd65e6e83d94d12c821f6a4e (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.cpp | 86 |
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"); } |
