CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
//===-- llvm-driver.cpp ---------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/ADT/StringExtras.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
#include "llvm/Support/InitLLVM.h"
|
|
#include "llvm/Support/LLVMDriver.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/Support/WithColor.h"
|
|
|
|
using namespace llvm;
|
|
|
|
#define LLVM_DRIVER_TOOL(tool, entry) \
|
|
int entry##_main(int argc, char **argv, const llvm::ToolContext &);
|
|
#include "LLVMDriverTools.def"
|
|
|
|
constexpr char subcommands[] =
|
|
#define LLVM_DRIVER_TOOL(tool, entry) " " tool "\n"
|
|
#include "LLVMDriverTools.def"
|
|
;
|
|
|
|
static void printHelpMessage() {
|
|
llvm::outs() << "OVERVIEW: llvm toolchain driver\n\n"
|
|
<< "USAGE: llvm [subcommand] [options]\n\n"
|
|
<< "SUBCOMMANDS:\n\n"
|
|
<< subcommands
|
|
<< "\n Type \"llvm <subcommand> --help\" to get more help on a "
|
|
"specific subcommand\n\n"
|
|
<< "OPTIONS:\n\n --help - Display this message\n";
|
|
}
|
|
|
|
static int findTool(int Argc, char **Argv, const char *Argv0) {
|
|
if (!Argc) {
|
|
printHelpMessage();
|
|
return 1;
|
|
}
|
|
|
|
StringRef ToolName = Argv[0];
|
|
|
|
if (ToolName == "--help") {
|
|
printHelpMessage();
|
|
return 0;
|
|
}
|
|
|
|
StringRef Stem = sys::path::stem(ToolName);
|
|
auto Is = [=](StringRef Tool) {
|
|
auto IsImpl = [=](StringRef Stem) {
|
|
auto I = Stem.rfind_insensitive(Tool);
|
|
return I != StringRef::npos && (I + Tool.size() == Stem.size() ||
|
|
!llvm::isAlnum(Stem[I + Tool.size()]));
|
|
};
|
|
for (StringRef S : {Stem, sys::path::filename(ToolName)})
|
|
if (IsImpl(S))
|
|
return true;
|
|
return false;
|
|
};
|
|
|
|
auto MakeDriverArgs = [=]() -> llvm::ToolContext {
|
|
if (ToolName != Argv0)
|
|
return {Argv0, ToolName.data(), true};
|
|
return {Argv0, sys::path::filename(Argv0).data(), false};
|
|
};
|
|
|
|
#define LLVM_DRIVER_TOOL(tool, entry) \
|
|
if (Is(tool)) \
|
|
return entry##_main(Argc, Argv, MakeDriverArgs());
|
|
#include "LLVMDriverTools.def"
|
|
|
|
if (Is("llvm") || Argv0 == Argv[0])
|
|
return findTool(Argc - 1, Argv + 1, Argv0);
|
|
|
|
printHelpMessage();
|
|
return 1;
|
|
}
|
|
|
|
int main(int Argc, char **Argv) {
|
|
llvm::InitLLVM X(Argc, Argv);
|
|
return findTool(Argc, Argv, Argv[0]);
|
|
}
|