diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp --- 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 @@ 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 --- 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 @@ 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 --- 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/cmake/modules/llvm-driver-template.cpp.in b/llvm/include/llvm/Support/LLVMDriver.h copy from llvm/cmake/modules/llvm-driver-template.cpp.in copy to llvm/include/llvm/Support/LLVMDriver.h --- a/llvm/cmake/modules/llvm-driver-template.cpp.in +++ b/llvm/include/llvm/Support/LLVMDriver.h @@ -1,4 +1,4 @@ -//===-- driver-template.cpp -----------------------------------------------===// +//===- 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. @@ -6,6 +6,13 @@ // //===----------------------------------------------------------------------===// -int @TOOL_NAME@_main(int argc, char **argv); +#ifndef LLVM_SUPPORT_LLVMDRIVER_H +#define LLVM_SUPPORT_LLVMDRIVER_H -int main(int argc, char **argv) { return @TOOL_NAME@_main(argc, argv); } +namespace llvm { + +struct ToolContext {}; + +} // namespace llvm + +#endif diff --git a/llvm/tools/dsymutil/CMakeLists.txt b/llvm/tools/dsymutil/CMakeLists.txt --- a/llvm/tools/dsymutil/CMakeLists.txt +++ b/llvm/tools/dsymutil/CMakeLists.txt @@ -41,4 +41,4 @@ 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 --- 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 --- 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 @@ 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 --- 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 @@ 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 --- 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 @@ #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 --- 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 @@ 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 --- 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 @@ 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 --- 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 @@ }); } -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 --- 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 @@ 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 --- 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 @@ 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 --- 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 @@ 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 --- 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 @@ } // 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 --- 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 @@ 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 --- 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 @@ << "(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);