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 Andric static 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 Andric int 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