aboutsummaryrefslogtreecommitdiff
path: root/lld/MachO
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2020-11-18 12:31:47 -0500
committerNico Weber <thakis@chromium.org>2020-11-18 12:33:15 -0500
commitc519bc7e16f5aad3ddb6f9df8be5f7b9249c4101 (patch)
tree9224298d559f0dba7e2987996b624697f2417c3f /lld/MachO
parent72ccec1bbc98407d66275c5911ee557adb461f5a (diff)
downloadllvm-project-c519bc7e16f5aad3ddb6f9df8be5f7b9249c4101.tar.gz
lld/MachO: Move MachOOptTable to DriverUtils.cpp, remove DriverUtils.h
This makes lld/MachO look more like lld/COFF and lld/ELF, as discussed in D91640.
Diffstat (limited to 'lld/MachO')
-rw-r--r--lld/MachO/Driver.cpp64
-rw-r--r--lld/MachO/Driver.h11
-rw-r--r--lld/MachO/DriverUtils.cpp68
-rw-r--r--lld/MachO/DriverUtils.h31
-rw-r--r--lld/MachO/InputFiles.cpp2
5 files changed, 79 insertions, 97 deletions
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index a693cf6c8033..3b1daadf9f0a 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -8,7 +8,6 @@
#include "Driver.h"
#include "Config.h"
-#include "DriverUtils.h"
#include "InputFiles.h"
#include "LTO.h"
#include "ObjC.h"
@@ -34,7 +33,6 @@
#include "llvm/LTO/LTO.h"
#include "llvm/Object/Archive.h"
#include "llvm/Option/ArgList.h"
-#include "llvm/Option/Option.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/MemoryBuffer.h"
@@ -53,68 +51,6 @@ using namespace lld::macho;
Configuration *lld::macho::config;
-// Create prefix string literals used in Options.td
-#define PREFIX(NAME, VALUE) const char *NAME[] = VALUE;
-#include "Options.inc"
-#undef PREFIX
-
-// Create table mapping all options defined in Options.td
-static const opt::OptTable::Info optInfo[] = {
-#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
- {X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
- X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},
-#include "Options.inc"
-#undef OPTION
-};
-
-MachOOptTable::MachOOptTable() : OptTable(optInfo) {}
-
-// Set color diagnostics according to --color-diagnostics={auto,always,never}
-// or --no-color-diagnostics flags.
-static void handleColorDiagnostics(opt::InputArgList &args) {
- auto *arg = args.getLastArg(OPT_color_diagnostics, OPT_color_diagnostics_eq,
- OPT_no_color_diagnostics);
- if (!arg)
- return;
- if (arg->getOption().getID() == OPT_color_diagnostics) {
- lld::errs().enable_colors(true);
- } else if (arg->getOption().getID() == OPT_no_color_diagnostics) {
- lld::errs().enable_colors(false);
- } else {
- StringRef s = arg->getValue();
- if (s == "always")
- lld::errs().enable_colors(true);
- else if (s == "never")
- lld::errs().enable_colors(false);
- else if (s != "auto")
- error("unknown option: --color-diagnostics=" + s);
- }
-}
-
-opt::InputArgList MachOOptTable::parse(ArrayRef<const char *> argv) {
- // Make InputArgList from string vectors.
- unsigned missingIndex;
- unsigned missingCount;
- SmallVector<const char *, 256> vec(argv.data(), argv.data() + argv.size());
-
- opt::InputArgList args = ParseArgs(vec, missingIndex, missingCount);
-
- if (missingCount)
- error(Twine(args.getArgString(missingIndex)) + ": missing argument");
-
- handleColorDiagnostics(args);
-
- for (opt::Arg *arg : args.filtered(OPT_UNKNOWN))
- error("unknown argument: " + arg->getSpelling());
- return args;
-}
-
-void MachOOptTable::printHelp(const char *argv0, bool showHidden) const {
- PrintHelp(lld::outs(), (std::string(argv0) + " [options] file...").c_str(),
- "LLVM Linker", showHidden);
- lld::outs() << "\n";
-}
-
static HeaderFileType getOutputType(const opt::InputArgList &args) {
// TODO: -r, -dylinker, -preload...
opt::Arg *outputArg = args.getLastArg(OPT_bundle, OPT_dylib, OPT_execute);
diff --git a/lld/MachO/Driver.h b/lld/MachO/Driver.h
index 2233740d1db8..9db628c86de2 100644
--- a/lld/MachO/Driver.h
+++ b/lld/MachO/Driver.h
@@ -10,11 +10,16 @@
#define LLD_MACHO_DRIVER_H
#include "lld/Common/LLVM.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/Option/OptTable.h"
+#include "llvm/Support/MemoryBuffer.h"
namespace lld {
namespace macho {
+class DylibFile;
+
class MachOOptTable : public llvm::opt::OptTable {
public:
MachOOptTable();
@@ -30,6 +35,12 @@ enum {
#undef OPTION
};
+// Check for both libfoo.dylib and libfoo.tbd (in that order).
+llvm::Optional<std::string> resolveDylibPath(llvm::StringRef path);
+
+llvm::Optional<DylibFile *> makeDylibFromTAPI(llvm::MemoryBufferRef mbref,
+ DylibFile *umbrella = nullptr);
+
} // namespace macho
} // namespace lld
diff --git a/lld/MachO/DriverUtils.cpp b/lld/MachO/DriverUtils.cpp
index fa0b62e11c49..3899348666b4 100644
--- a/lld/MachO/DriverUtils.cpp
+++ b/lld/MachO/DriverUtils.cpp
@@ -6,20 +6,86 @@
//
//===----------------------------------------------------------------------===//
-#include "DriverUtils.h"
+#include "Driver.h"
#include "InputFiles.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/Memory.h"
+#include "llvm/Option/Arg.h"
+#include "llvm/Option/ArgList.h"
+#include "llvm/Option/Option.h"
#include "llvm/Support/Path.h"
#include "llvm/TextAPI/MachO/TextAPIReader.h"
using namespace llvm;
using namespace llvm::MachO;
+using namespace llvm::opt;
using namespace llvm::sys;
using namespace lld;
using namespace lld::macho;
+// Create prefix string literals used in Options.td
+#define PREFIX(NAME, VALUE) const char *NAME[] = VALUE;
+#include "Options.inc"
+#undef PREFIX
+
+// Create table mapping all options defined in Options.td
+static const opt::OptTable::Info optInfo[] = {
+#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
+ {X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
+ X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},
+#include "Options.inc"
+#undef OPTION
+};
+
+MachOOptTable::MachOOptTable() : OptTable(optInfo) {}
+
+// Set color diagnostics according to --color-diagnostics={auto,always,never}
+// or --no-color-diagnostics flags.
+static void handleColorDiagnostics(opt::InputArgList &args) {
+ auto *arg = args.getLastArg(OPT_color_diagnostics, OPT_color_diagnostics_eq,
+ OPT_no_color_diagnostics);
+ if (!arg)
+ return;
+ if (arg->getOption().getID() == OPT_color_diagnostics) {
+ lld::errs().enable_colors(true);
+ } else if (arg->getOption().getID() == OPT_no_color_diagnostics) {
+ lld::errs().enable_colors(false);
+ } else {
+ StringRef s = arg->getValue();
+ if (s == "always")
+ lld::errs().enable_colors(true);
+ else if (s == "never")
+ lld::errs().enable_colors(false);
+ else if (s != "auto")
+ error("unknown option: --color-diagnostics=" + s);
+ }
+}
+
+opt::InputArgList MachOOptTable::parse(ArrayRef<const char *> argv) {
+ // Make InputArgList from string vectors.
+ unsigned missingIndex;
+ unsigned missingCount;
+ SmallVector<const char *, 256> vec(argv.data(), argv.data() + argv.size());
+
+ opt::InputArgList args = ParseArgs(vec, missingIndex, missingCount);
+
+ if (missingCount)
+ error(Twine(args.getArgString(missingIndex)) + ": missing argument");
+
+ handleColorDiagnostics(args);
+
+ for (opt::Arg *arg : args.filtered(OPT_UNKNOWN))
+ error("unknown argument: " + arg->getSpelling());
+ return args;
+}
+
+void MachOOptTable::printHelp(const char *argv0, bool showHidden) const {
+ PrintHelp(lld::outs(), (std::string(argv0) + " [options] file...").c_str(),
+ "LLVM Linker", showHidden);
+ lld::outs() << "\n";
+}
+
Optional<std::string> macho::resolveDylibPath(StringRef path) {
// TODO: if a tbd and dylib are both present, we should check to make sure
// they are consistent.
diff --git a/lld/MachO/DriverUtils.h b/lld/MachO/DriverUtils.h
deleted file mode 100644
index d3d3670ab246..000000000000
--- a/lld/MachO/DriverUtils.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//===- DriverUtils.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 LLD_MACHO_DRIVER_UTILS_H
-#define LLD_MACHO_DRIVER_UTILS_H
-
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/MemoryBuffer.h"
-
-namespace lld {
-namespace macho {
-
-class DylibFile;
-
-// Check for both libfoo.dylib and libfoo.tbd (in that order).
-llvm::Optional<std::string> resolveDylibPath(llvm::StringRef path);
-
-llvm::Optional<DylibFile *> makeDylibFromTAPI(llvm::MemoryBufferRef mbref,
- DylibFile *umbrella = nullptr);
-
-} // namespace macho
-} // namespace lld
-
-#endif
diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp
index cd6fbc316fe1..c733878ec1fe 100644
--- a/lld/MachO/InputFiles.cpp
+++ b/lld/MachO/InputFiles.cpp
@@ -43,7 +43,7 @@
#include "InputFiles.h"
#include "Config.h"
-#include "DriverUtils.h"
+#include "Driver.h"
#include "ExportTrie.h"
#include "InputSection.h"
#include "MachOStructs.h"