1fe6060f1SDimitry Andric //===- AMDGPUArch.cpp - list AMDGPU installed ----------*- C++ -*---------===// 2fe6060f1SDimitry Andric // 3fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fe6060f1SDimitry Andric // 7fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 8fe6060f1SDimitry Andric // 9*06c3fb27SDimitry Andric // This file implements a tool for detecting name of AMDGPU installed in system. 10*06c3fb27SDimitry Andric // This tool is used by AMDGPU OpenMP and HIP driver. 11fe6060f1SDimitry Andric // 12fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 13fe6060f1SDimitry Andric 14*06c3fb27SDimitry Andric #include "clang/Basic/Version.h" 15*06c3fb27SDimitry Andric #include "llvm/Support/CommandLine.h" 16fe6060f1SDimitry Andric 17*06c3fb27SDimitry Andric using namespace llvm; 18bdd1243dSDimitry Andric 19*06c3fb27SDimitry Andric static cl::opt<bool> Help("h", cl::desc("Alias for -help"), cl::Hidden); 20bdd1243dSDimitry Andric 21*06c3fb27SDimitry Andric // Mark all our options with this category. 22*06c3fb27SDimitry Andric static cl::OptionCategory AMDGPUArchCategory("amdgpu-arch options"); 23bdd1243dSDimitry Andric PrintVersion(raw_ostream & OS)24*06c3fb27SDimitry Andricstatic void PrintVersion(raw_ostream &OS) { 25*06c3fb27SDimitry Andric OS << clang::getClangToolFullVersion("amdgpu-arch") << '\n'; 26fe6060f1SDimitry Andric } 27fe6060f1SDimitry Andric 28*06c3fb27SDimitry Andric int printGPUsByHSA(); 29*06c3fb27SDimitry Andric int printGPUsByHIP(); 30fe6060f1SDimitry Andric main(int argc,char * argv[])31bdd1243dSDimitry Andricint main(int argc, char *argv[]) { 32*06c3fb27SDimitry Andric cl::HideUnrelatedOptions(AMDGPUArchCategory); 33bdd1243dSDimitry Andric 34*06c3fb27SDimitry Andric cl::SetVersionPrinter(PrintVersion); 35*06c3fb27SDimitry Andric cl::ParseCommandLineOptions( 36*06c3fb27SDimitry Andric argc, argv, 37*06c3fb27SDimitry Andric "A tool to detect the presence of AMDGPU devices on the system. \n\n" 38*06c3fb27SDimitry Andric "The tool will output each detected GPU architecture separated by a\n" 39*06c3fb27SDimitry Andric "newline character. If multiple GPUs of the same architecture are found\n" 40*06c3fb27SDimitry Andric "a string will be printed for each\n"); 41fe6060f1SDimitry Andric 42*06c3fb27SDimitry Andric if (Help) { 43*06c3fb27SDimitry Andric cl::PrintHelpMessage(); 44fe6060f1SDimitry Andric return 0; 45fe6060f1SDimitry Andric } 46*06c3fb27SDimitry Andric 47*06c3fb27SDimitry Andric #ifndef _WIN32 48*06c3fb27SDimitry Andric if (!printGPUsByHSA()) 49*06c3fb27SDimitry Andric return 0; 50*06c3fb27SDimitry Andric #endif 51*06c3fb27SDimitry Andric 52*06c3fb27SDimitry Andric return printGPUsByHIP(); 53*06c3fb27SDimitry Andric } 54