diff --git a/clang/tools/amdgpu-arch/AMDGPUArch.cpp b/clang/tools/amdgpu-arch/AMDGPUArch.cpp --- a/clang/tools/amdgpu-arch/AMDGPUArch.cpp +++ b/clang/tools/amdgpu-arch/AMDGPUArch.cpp @@ -11,12 +11,25 @@ // //===----------------------------------------------------------------------===// +#include "clang/Basic/Version.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/DynamicLibrary.h" #include "llvm/Support/Error.h" #include #include #include +using namespace llvm; + +static cl::opt Help("h", cl::desc("Alias for -help"), cl::Hidden); + +// Mark all our options with this category. +static cl::OptionCategory AMDGPUArchCategory("amdgpu-arch options"); + +static void PrintVersion(raw_ostream &OS) { + OS << clang::getClangToolFullVersion("amdgpu-arch") << '\n'; +} + #if DYNAMIC_HSA typedef enum { HSA_STATUS_SUCCESS = 0x0, @@ -102,6 +115,16 @@ } int main(int argc, char *argv[]) { + cl::HideUnrelatedOptions(AMDGPUArchCategory); + + cl::SetVersionPrinter(PrintVersion); + cl::ParseCommandLineOptions( + argc, argv, + "A tool to detect the presence of AMDGPU devices on the system. \n\n" + "The tool will output each detected GPU architecture separated by a\n" + "newline character. If multiple GPUs of the same architecture are found\n" + "a string will be printed for each\n"); + // Attempt to load the HSA runtime. if (llvm::Error Err = loadHSA()) { logAllUnhandledErrors(std::move(Err), llvm::errs()); diff --git a/clang/tools/amdgpu-arch/CMakeLists.txt b/clang/tools/amdgpu-arch/CMakeLists.txt --- a/clang/tools/amdgpu-arch/CMakeLists.txt +++ b/clang/tools/amdgpu-arch/CMakeLists.txt @@ -15,6 +15,7 @@ if(hsa-runtime64_FOUND AND NOT (LLVM_BUILD_32_BITS OR CMAKE_SIZEOF_VOID_P EQUAL 4)) set_target_properties(amdgpu-arch PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON) target_link_libraries(amdgpu-arch PRIVATE hsa-runtime64::hsa-runtime64) + clang_target_link_libraries(amdgpu-arch PRIVATE clangBasic) else() target_compile_definitions(amdgpu-arch PRIVATE "DYNAMIC_HSA") endif() diff --git a/clang/tools/nvptx-arch/CMakeLists.txt b/clang/tools/nvptx-arch/CMakeLists.txt --- a/clang/tools/nvptx-arch/CMakeLists.txt +++ b/clang/tools/nvptx-arch/CMakeLists.txt @@ -14,6 +14,7 @@ # If we found the CUDA library directly we just dynamically link against it. if(CUDAToolkit_FOUND AND NOT (LLVM_BUILD_32_BITS OR CMAKE_SIZEOF_VOID_P EQUAL 4)) target_link_libraries(nvptx-arch PRIVATE CUDA::cuda_driver) + clang_target_link_libraries(nvptx-arch PRIVATE clangBasic) else() target_compile_definitions(nvptx-arch PRIVATE "DYNAMIC_CUDA") endif() diff --git a/clang/tools/nvptx-arch/NVPTXArch.cpp b/clang/tools/nvptx-arch/NVPTXArch.cpp --- a/clang/tools/nvptx-arch/NVPTXArch.cpp +++ b/clang/tools/nvptx-arch/NVPTXArch.cpp @@ -11,12 +11,25 @@ // //===----------------------------------------------------------------------===// +#include "clang/Basic/Version.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/DynamicLibrary.h" #include "llvm/Support/Error.h" #include #include #include +using namespace llvm; + +static cl::opt Help("h", cl::desc("Alias for -help"), cl::Hidden); + +static void PrintVersion(raw_ostream &OS) { + OS << clang::getClangToolFullVersion("nvptx-arch") << '\n'; +} +// Mark all our options with this category, everything else (except for -version +// and -help) will be hidden. +static cl::OptionCategory NVPTXArchCategory("nvptx-arch options"); + #if DYNAMIC_CUDA typedef enum cudaError_enum { CUDA_SUCCESS = 0, @@ -79,6 +92,16 @@ } int main(int argc, char *argv[]) { + cl::HideUnrelatedOptions(NVPTXArchCategory); + + cl::SetVersionPrinter(PrintVersion); + cl::ParseCommandLineOptions( + argc, argv, + "A tool to detect the presence of NVIDIA devices on the system. \n\n" + "The tool will output each detected GPU architecture separated by a\n" + "newline character. If multiple GPUs of the same architecture are found\n" + "a string will be printed for each\n"); + // Attempt to load the NVPTX driver runtime. if (llvm::Error Err = loadCUDA()) { logAllUnhandledErrors(std::move(Err), llvm::errs());