/** # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package info // Platform represents a supported plaform. type Platform string const ( PlatformAuto = Platform("auto") PlatformNVML = Platform("nvml") PlatformTegra = Platform("tegra") PlatformWSL = Platform("wsl") PlatformUnknown = Platform("unknown") ) type platformResolver struct { logger basicLogger platform Platform propertyExtractor PropertyExtractor } func (p platformResolver) ResolvePlatform() Platform { if p.platform != PlatformAuto { p.logger.Infof("Using requested platform '%s'", p.platform) return p.platform } hasDXCore, reason := p.propertyExtractor.HasDXCore() p.logger.Debugf("Is WSL-based system? %v: %v", hasDXCore, reason) hasTegraFiles, reason := p.propertyExtractor.HasTegraFiles() p.logger.Debugf("Is Tegra-based system? %v: %v", hasTegraFiles, reason) hasNVML, reason := p.propertyExtractor.HasNvml() p.logger.Debugf("Is NVML-based system? %v: %v", hasNVML, reason) usesOnlyNVGPUModule, reason := p.propertyExtractor.UsesOnlyNVGPUModule() p.logger.Debugf("Uses nvgpu kernel module? %v: %v", usesOnlyNVGPUModule, reason) switch { case hasDXCore: return PlatformWSL case (hasTegraFiles && !hasNVML), usesOnlyNVGPUModule: return PlatformTegra case hasNVML: return PlatformNVML default: return PlatformUnknown } }