xref: /netbsd-src/external/apache2/llvm/dist/clang/lib/Driver/DriverOptions.cpp (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1*7330f729Sjoerg //===--- DriverOptions.cpp - Driver Options Table -------------------------===//
2*7330f729Sjoerg //
3*7330f729Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*7330f729Sjoerg // See https://llvm.org/LICENSE.txt for license information.
5*7330f729Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*7330f729Sjoerg //
7*7330f729Sjoerg //===----------------------------------------------------------------------===//
8*7330f729Sjoerg 
9*7330f729Sjoerg #include "clang/Driver/Options.h"
10*7330f729Sjoerg #include "llvm/ADT/STLExtras.h"
11*7330f729Sjoerg #include "llvm/Option/OptTable.h"
12*7330f729Sjoerg #include "llvm/Option/Option.h"
13*7330f729Sjoerg #include <cassert>
14*7330f729Sjoerg 
15*7330f729Sjoerg using namespace clang::driver;
16*7330f729Sjoerg using namespace clang::driver::options;
17*7330f729Sjoerg using namespace llvm::opt;
18*7330f729Sjoerg 
19*7330f729Sjoerg #define PREFIX(NAME, VALUE) static const char *const NAME[] = VALUE;
20*7330f729Sjoerg #include "clang/Driver/Options.inc"
21*7330f729Sjoerg #undef PREFIX
22*7330f729Sjoerg 
23*7330f729Sjoerg static const OptTable::Info InfoTable[] = {
24*7330f729Sjoerg #define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM,  \
25*7330f729Sjoerg                HELPTEXT, METAVAR, VALUES)                                      \
26*7330f729Sjoerg   {PREFIX, NAME,  HELPTEXT,    METAVAR,     OPT_##ID,  Option::KIND##Class,    \
27*7330f729Sjoerg    PARAM,  FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS, VALUES},
28*7330f729Sjoerg #include "clang/Driver/Options.inc"
29*7330f729Sjoerg #undef OPTION
30*7330f729Sjoerg };
31*7330f729Sjoerg 
32*7330f729Sjoerg namespace {
33*7330f729Sjoerg 
34*7330f729Sjoerg class DriverOptTable : public OptTable {
35*7330f729Sjoerg public:
DriverOptTable()36*7330f729Sjoerg   DriverOptTable()
37*7330f729Sjoerg     : OptTable(InfoTable) {}
38*7330f729Sjoerg };
39*7330f729Sjoerg 
40*7330f729Sjoerg }
41*7330f729Sjoerg 
getDriverOptTable()42*7330f729Sjoerg const llvm::opt::OptTable &clang::driver::getDriverOptTable() {
43*7330f729Sjoerg   static const DriverOptTable *Table = []() {
44*7330f729Sjoerg     auto Result = std::make_unique<DriverOptTable>();
45*7330f729Sjoerg     // Options.inc is included in DriverOptions.cpp, and calls OptTable's
46*7330f729Sjoerg     // addValues function.
47*7330f729Sjoerg     // Opt is a variable used in the code fragment in Options.inc.
48*7330f729Sjoerg     OptTable &Opt = *Result;
49*7330f729Sjoerg #define OPTTABLE_ARG_INIT
50*7330f729Sjoerg #include "clang/Driver/Options.inc"
51*7330f729Sjoerg #undef OPTTABLE_ARG_INIT
52*7330f729Sjoerg     return Result.release();
53*7330f729Sjoerg   }();
54*7330f729Sjoerg   return *Table;
55*7330f729Sjoerg }
56