From 1f173a0653e7f0c3800033edfa16ffe4c35cde85 Mon Sep 17 00:00:00 2001 From: Alex Brachet Date: Fri, 10 Feb 2023 19:40:56 +0000 Subject: [PATCH] [llvm-driver] Pass extra arguments to tools Differential Revision: https://reviews.llvm.org/D137799 --- clang/tools/driver/driver.cpp | 3 ++- lld/tools/lld/lld.cpp | 3 ++- llvm/cmake/modules/llvm-driver-template.cpp.in | 7 +++++-- llvm/include/llvm/Support/LLVMDriver.h | 18 ++++++++++++++++++ llvm/tools/dsymutil/CMakeLists.txt | 2 +- llvm/tools/dsymutil/dsymutil.cpp | 1 + llvm/tools/llvm-ar/llvm-ar.cpp | 3 ++- llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp | 3 ++- llvm/tools/llvm-driver/llvm-driver.cpp | 6 ++++-- llvm/tools/llvm-ifs/llvm-ifs.cpp | 3 ++- llvm/tools/llvm-lipo/llvm-lipo.cpp | 3 ++- llvm/tools/llvm-mt/llvm-mt.cpp | 3 ++- llvm/tools/llvm-nm/llvm-nm.cpp | 3 ++- llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 3 ++- llvm/tools/llvm-profdata/llvm-profdata.cpp | 4 +++- llvm/tools/llvm-rc/llvm-rc.cpp | 3 ++- llvm/tools/llvm-readobj/llvm-readobj.cpp | 3 ++- llvm/tools/llvm-size/llvm-size.cpp | 3 ++- 18 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 llvm/include/llvm/Support/LLVMDriver.h diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index 59d9ac0ff54d..712474279550 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -37,6 +37,7 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Process.h" @@ -369,7 +370,7 @@ static int ExecuteCC1Tool(SmallVectorImpl &ArgV) { return 1; } -int clang_main(int Argc, char **Argv) { +int clang_main(int Argc, char **Argv, const llvm::ToolContext &) { noteBottomOfStack(); llvm::InitLLVM X(Argc, Argv); llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL diff --git a/lld/tools/lld/lld.cpp b/lld/tools/lld/lld.cpp index 3600afedddb6..292fd9d0f9c6 100644 --- a/lld/tools/lld/lld.cpp +++ b/lld/tools/lld/lld.cpp @@ -36,6 +36,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/CrashRecoveryContext.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/Path.h" #include "llvm/Support/PluginLoader.h" #include "llvm/Support/Process.h" @@ -214,7 +215,7 @@ static unsigned inTestVerbosity() { return v; } -int lld_main(int argc, char **argv) { +int lld_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM x(argc, argv); sys::Process::UseANSIEscapeCodes(true); diff --git a/llvm/cmake/modules/llvm-driver-template.cpp.in b/llvm/cmake/modules/llvm-driver-template.cpp.in index 2164fb00d168..a828b6dadfbd 100644 --- a/llvm/cmake/modules/llvm-driver-template.cpp.in +++ b/llvm/cmake/modules/llvm-driver-template.cpp.in @@ -6,6 +6,9 @@ // //===----------------------------------------------------------------------===// -int @TOOL_NAME@_main(int argc, char **argv); +#include "llvm/Support/LLVMDriver.h" +#include "llvm/ADT/ArrayRef.h" -int main(int argc, char **argv) { return @TOOL_NAME@_main(argc, argv); } +int @TOOL_NAME@_main(int argc, char **, const llvm::ToolContext &); + +int main(int argc, char **argv) { return @TOOL_NAME@_main(argc, argv, {}); } diff --git a/llvm/include/llvm/Support/LLVMDriver.h b/llvm/include/llvm/Support/LLVMDriver.h new file mode 100644 index 000000000000..1e00c056ec4d --- /dev/null +++ b/llvm/include/llvm/Support/LLVMDriver.h @@ -0,0 +1,18 @@ +//===- LLVMDriver.h ---------------------------------------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_SUPPORT_LLVMDRIVER_H +#define LLVM_SUPPORT_LLVMDRIVER_H + +namespace llvm { + +struct ToolContext {}; + +} // namespace llvm + +#endif diff --git a/llvm/tools/dsymutil/CMakeLists.txt b/llvm/tools/dsymutil/CMakeLists.txt index ae92e3fd6267..37290d962454 100644 --- a/llvm/tools/dsymutil/CMakeLists.txt +++ b/llvm/tools/dsymutil/CMakeLists.txt @@ -41,4 +41,4 @@ if(APPLE) target_link_libraries(dsymutil PRIVATE "-framework CoreFoundation") endif(APPLE) -target_link_libraries(dsymutil PRIVATE ${LLVM_ATOMIC_LIB}) +# target_link_libraries(dsymutil PRIVATE ${LLVM_ATOMIC_LIB}) diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp index 2a3a2c661370..1c11297f940a 100644 --- a/llvm/tools/dsymutil/dsymutil.cpp +++ b/llvm/tools/dsymutil/dsymutil.cpp @@ -36,6 +36,7 @@ #include "llvm/Support/FileCollector.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/Path.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/ThreadPool.h" diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index 62d20811effb..d21650d146a9 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -26,6 +26,7 @@ #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" @@ -1425,7 +1426,7 @@ static int ranlib_main(int argc, char **argv) { return 0; } -int llvm_ar_main(int argc, char **argv) { +int llvm_ar_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); ToolName = argv[0]; diff --git a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp index 17c0b110dd9e..0eb66b0492b7 100644 --- a/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp +++ b/llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp @@ -13,6 +13,7 @@ #include "llvm/Option/Option.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/Host.h" @@ -145,7 +146,7 @@ static void demangleLine(llvm::raw_ostream &OS, StringRef Mangled, bool Split) { OS.flush(); } -int llvm_cxxfilt_main(int argc, char **argv) { +int llvm_cxxfilt_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); BumpPtrAllocator A; StringSaver Saver(A); diff --git a/llvm/tools/llvm-driver/llvm-driver.cpp b/llvm/tools/llvm-driver/llvm-driver.cpp index a373dafb158f..653c2adee26e 100644 --- a/llvm/tools/llvm-driver/llvm-driver.cpp +++ b/llvm/tools/llvm-driver/llvm-driver.cpp @@ -11,12 +11,14 @@ #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.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); +#define LLVM_DRIVER_TOOL(tool, entry) \ + int entry##_main(int argc, char **argv, const llvm::ToolContext &); #include "LLVMDriverTools.def" constexpr char subcommands[] = @@ -62,7 +64,7 @@ static int findTool(int Argc, char **Argv) { #define LLVM_DRIVER_TOOL(tool, entry) \ if (Is(tool)) \ - return entry##_main(Argc, Argv); + return entry##_main(Argc, Argv, {}); #include "LLVMDriverTools.def" if (Is("llvm")) diff --git a/llvm/tools/llvm-ifs/llvm-ifs.cpp b/llvm/tools/llvm-ifs/llvm-ifs.cpp index 1d78ab5bd323..92ca519e4f27 100644 --- a/llvm/tools/llvm-ifs/llvm-ifs.cpp +++ b/llvm/tools/llvm-ifs/llvm-ifs.cpp @@ -22,6 +22,7 @@ #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/FileOutputBuffer.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/VersionTuple.h" @@ -382,7 +383,7 @@ static DriverConfig parseArgs(int argc, char *const *argv) { return Config; } -int llvm_ifs_main(int argc, char **argv) { +int llvm_ifs_main(int argc, char **argv, const llvm::ToolContext &) { DriverConfig Config = parseArgs(argc, argv); if (Config.InputFilePaths.empty()) diff --git a/llvm/tools/llvm-lipo/llvm-lipo.cpp b/llvm/tools/llvm-lipo/llvm-lipo.cpp index 21f67470ef39..d37df628475d 100644 --- a/llvm/tools/llvm-lipo/llvm-lipo.cpp +++ b/llvm/tools/llvm-lipo/llvm-lipo.cpp @@ -27,6 +27,7 @@ #include "llvm/Support/Error.h" #include "llvm/Support/FileOutputBuffer.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/WithColor.h" #include "llvm/TargetParser/Triple.h" @@ -723,7 +724,7 @@ replaceSlices(LLVMContext &LLVMCtx, exit(EXIT_SUCCESS); } -int llvm_lipo_main(int argc, char **argv) { +int llvm_lipo_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); llvm::InitializeAllTargetInfos(); llvm::InitializeAllTargetMCs(); diff --git a/llvm/tools/llvm-mt/llvm-mt.cpp b/llvm/tools/llvm-mt/llvm-mt.cpp index d460fd6b433a..887cc9056b60 100644 --- a/llvm/tools/llvm-mt/llvm-mt.cpp +++ b/llvm/tools/llvm-mt/llvm-mt.cpp @@ -17,6 +17,7 @@ #include "llvm/Support/Error.h" #include "llvm/Support/FileOutputBuffer.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" @@ -82,7 +83,7 @@ static void error(Error EC) { }); } -int llvm_mt_main(int Argc, char **Argv) { +int llvm_mt_main(int Argc, char **Argv, const llvm::ToolContext &) { InitLLVM X(Argc, Argv); CvtResOptTable T; diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 9c2f773859f3..6564c23a92d9 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -40,6 +40,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Program.h" #include "llvm/Support/Signals.h" @@ -2286,7 +2287,7 @@ exportSymbolNamesFromFiles(const std::vector &InputFilenames) { printExportSymbolList(SymbolList); } -int llvm_nm_main(int argc, char **argv) { +int llvm_nm_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); BumpPtrAllocator A; StringSaver Saver(A); diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index 5c2ba5cbd8cd..2afa97601f5c 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -43,6 +43,7 @@ #include "llvm/Support/ErrorOr.h" #include "llvm/Support/FileUtilities.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/Memory.h" #include "llvm/Support/Path.h" #include "llvm/Support/Process.h" @@ -223,7 +224,7 @@ static Error executeObjcopy(ConfigManager &ConfigMgr) { return Error::success(); } -int llvm_objcopy_main(int argc, char **argv) { +int llvm_objcopy_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); ToolName = argv[0]; diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp index 8ebbac5021be..e27d0becad2f 100644 --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -30,6 +30,7 @@ #include "llvm/Support/Format.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MD5.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" @@ -2988,7 +2989,8 @@ static int show_main(int argc, const char *argv[]) { return showMemProfProfile(Filename, ProfiledBinary, SFormat, OS); } -int llvm_profdata_main(int argc, char **argvNonConst) { +int llvm_profdata_main(int argc, char **argvNonConst, + const llvm::ToolContext &) { const char **argv = const_cast(argvNonConst); InitLLVM X(argc, argv); diff --git a/llvm/tools/llvm-rc/llvm-rc.cpp b/llvm/tools/llvm-rc/llvm-rc.cpp index 99edb9230643..fbf2aa78c5d3 100644 --- a/llvm/tools/llvm-rc/llvm-rc.cpp +++ b/llvm/tools/llvm-rc/llvm-rc.cpp @@ -25,6 +25,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/FileUtilities.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" @@ -734,7 +735,7 @@ void doCvtres(std::string Src, std::string Dest, std::string TargetTriple) { } // anonymous namespace -int llvm_rc_main(int Argc, char **Argv) { +int llvm_rc_main(int Argc, char **Argv, const llvm::ToolContext &) { InitLLVM X(Argc, Argv); ExitOnErr.setBanner("llvm-rc: "); diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index a11de35fcd76..aa49e3087a4d 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -43,6 +43,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/Path.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/WithColor.h" @@ -632,7 +633,7 @@ std::unique_ptr createWriter() { return std::make_unique(fouts()); } -int llvm_readobj_main(int argc, char **argv) { +int llvm_readobj_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); BumpPtrAllocator A; StringSaver Saver(A); diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index 32dbf3d489c0..048a98b9af7d 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -26,6 +26,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" #include "llvm/Support/InitLLVM.h" +#include "llvm/Support/LLVMDriver.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" @@ -869,7 +870,7 @@ static void printBerkeleyTotals() { << "(TOTALS)\n"; } -int llvm_size_main(int argc, char **argv) { +int llvm_size_main(int argc, char **argv, const llvm::ToolContext &) { InitLLVM X(argc, argv); BumpPtrAllocator A; StringSaver Saver(A);