annotate lld/ELF/Driver.h @ 192:d7606dcf6fce

Added tag llvm10 for changeset 0572611fdcc8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2020 18:01:34 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===- Driver.h -------------------------------------------------*- C++ -*-===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #ifndef LLD_ELF_DRIVER_H
anatofuz
parents:
diff changeset
10 #define LLD_ELF_DRIVER_H
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 #include "LTO.h"
anatofuz
parents:
diff changeset
13 #include "SymbolTable.h"
anatofuz
parents:
diff changeset
14 #include "lld/Common/LLVM.h"
anatofuz
parents:
diff changeset
15 #include "lld/Common/Reproduce.h"
anatofuz
parents:
diff changeset
16 #include "llvm/ADT/Optional.h"
anatofuz
parents:
diff changeset
17 #include "llvm/ADT/StringRef.h"
anatofuz
parents:
diff changeset
18 #include "llvm/ADT/StringSet.h"
anatofuz
parents:
diff changeset
19 #include "llvm/Option/ArgList.h"
anatofuz
parents:
diff changeset
20 #include "llvm/Support/raw_ostream.h"
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 namespace lld {
anatofuz
parents:
diff changeset
23 namespace elf {
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 extern class LinkerDriver *driver;
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 class LinkerDriver {
anatofuz
parents:
diff changeset
28 public:
anatofuz
parents:
diff changeset
29 void main(ArrayRef<const char *> args);
anatofuz
parents:
diff changeset
30 void addFile(StringRef path, bool withLOption);
anatofuz
parents:
diff changeset
31 void addLibrary(StringRef name);
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 private:
anatofuz
parents:
diff changeset
34 void createFiles(llvm::opt::InputArgList &args);
anatofuz
parents:
diff changeset
35 void inferMachineType();
anatofuz
parents:
diff changeset
36 template <class ELFT> void link(llvm::opt::InputArgList &args);
anatofuz
parents:
diff changeset
37 template <class ELFT> void compileBitcodeFiles();
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 // True if we are in --whole-archive and --no-whole-archive.
anatofuz
parents:
diff changeset
40 bool inWholeArchive = false;
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 // True if we are in --start-lib and --end-lib.
anatofuz
parents:
diff changeset
43 bool inLib = false;
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 // For LTO.
anatofuz
parents:
diff changeset
46 std::unique_ptr<BitcodeCompiler> lto;
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 std::vector<InputFile *> files;
anatofuz
parents:
diff changeset
49 };
anatofuz
parents:
diff changeset
50
anatofuz
parents:
diff changeset
51 // Parses command line options.
anatofuz
parents:
diff changeset
52 class ELFOptTable : public llvm::opt::OptTable {
anatofuz
parents:
diff changeset
53 public:
anatofuz
parents:
diff changeset
54 ELFOptTable();
anatofuz
parents:
diff changeset
55 llvm::opt::InputArgList parse(ArrayRef<const char *> argv);
anatofuz
parents:
diff changeset
56 };
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 // Create enum with OPT_xxx values for each option in Options.td
anatofuz
parents:
diff changeset
59 enum {
anatofuz
parents:
diff changeset
60 OPT_INVALID = 0,
anatofuz
parents:
diff changeset
61 #define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) OPT_##ID,
anatofuz
parents:
diff changeset
62 #include "Options.inc"
anatofuz
parents:
diff changeset
63 #undef OPTION
anatofuz
parents:
diff changeset
64 };
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 void printHelp();
anatofuz
parents:
diff changeset
67 std::string createResponseFile(const llvm::opt::InputArgList &args);
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 llvm::Optional<std::string> findFromSearchPaths(StringRef path);
anatofuz
parents:
diff changeset
70 llvm::Optional<std::string> searchScript(StringRef path);
anatofuz
parents:
diff changeset
71 llvm::Optional<std::string> searchLibraryBaseName(StringRef path);
anatofuz
parents:
diff changeset
72 llvm::Optional<std::string> searchLibrary(StringRef path);
anatofuz
parents:
diff changeset
73
anatofuz
parents:
diff changeset
74 } // namespace elf
anatofuz
parents:
diff changeset
75 } // namespace lld
anatofuz
parents:
diff changeset
76
anatofuz
parents:
diff changeset
77 #endif