Author: Joseph Huber Date: 2023-03-13T12:32:42-05:00 New Revision: a26aabefe535d323c416d7d57be8c669f3741f15
URL: https://github.com/llvm/llvm-project/commit/a26aabefe535d323c416d7d57be8c669f3741f15 DIFF: https://github.com/llvm/llvm-project/commit/a26aabefe535d323c416d7d57be8c669f3741f15.diff LOG: [Clang] Add --version and --help messages to amdgpu/nvptx-arch Summray: These clang tools should print some basic help and version messages so they are less opaque. Reviewed By: ye-luo Differential Revision: https://reviews.llvm.org/D145944 Added: Modified: clang/tools/amdgpu-arch/AMDGPUArch.cpp clang/tools/amdgpu-arch/CMakeLists.txt clang/tools/nvptx-arch/CMakeLists.txt clang/tools/nvptx-arch/NVPTXArch.cpp Removed: ################################################################################ diff --git a/clang/tools/amdgpu-arch/AMDGPUArch.cpp b/clang/tools/amdgpu-arch/AMDGPUArch.cpp index fbb084a2a123..b63ff5cfe175 100644 --- 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 <memory> #include <string> #include <vector> +using namespace llvm; + +static cl::opt<bool> 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,21 @@ static hsa_status_t iterateAgentsCallback(hsa_agent_t Agent, void *Data) { } 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"); + + if (Help) { + cl::PrintHelpMessage(); + return 0; + } + // 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 index 5b7ef13924b8..cc65217c7ee2 100644 --- a/clang/tools/amdgpu-arch/CMakeLists.txt +++ b/clang/tools/amdgpu-arch/CMakeLists.txt @@ -15,6 +15,7 @@ find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/ 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 index 1854d34ca075..1bbff79e8967 100644 --- a/clang/tools/nvptx-arch/CMakeLists.txt +++ b/clang/tools/nvptx-arch/CMakeLists.txt @@ -14,6 +14,7 @@ find_package(CUDAToolkit QUIET) # 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 index 91723324c28e..4cfc58681cba 100644 --- 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 <cstdint> #include <cstdio> #include <memory> +using namespace llvm; + +static cl::opt<bool> 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,21 @@ static int handleError(CUresult Err) { } 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"); + + if (Help) { + cl::PrintHelpMessage(); + return 0; + } + // Attempt to load the NVPTX driver runtime. if (llvm::Error Err = loadCUDA()) { logAllUnhandledErrors(std::move(Err), llvm::errs()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits