xref: /freebsd/contrib/llvm-project/clang/lib/Driver/DriverOptions.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
10b57cec5SDimitry Andric //===--- DriverOptions.cpp - Driver Options Table -------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "clang/Driver/Options.h"
100b57cec5SDimitry Andric #include "llvm/ADT/STLExtras.h"
110b57cec5SDimitry Andric #include "llvm/Option/OptTable.h"
120b57cec5SDimitry Andric #include "llvm/Option/Option.h"
130b57cec5SDimitry Andric #include <cassert>
140b57cec5SDimitry Andric 
150b57cec5SDimitry Andric using namespace clang::driver;
160b57cec5SDimitry Andric using namespace clang::driver::options;
170b57cec5SDimitry Andric using namespace llvm::opt;
180b57cec5SDimitry Andric 
19bdd1243dSDimitry Andric #define OPTTABLE_VALUES_CODE
20bdd1243dSDimitry Andric #include "clang/Driver/Options.inc"
21bdd1243dSDimitry Andric #undef OPTTABLE_VALUES_CODE
22bdd1243dSDimitry Andric 
23bdd1243dSDimitry Andric #define PREFIX(NAME, VALUE)                                                    \
24bdd1243dSDimitry Andric   static constexpr llvm::StringLiteral NAME##_init[] = VALUE;                  \
25bdd1243dSDimitry Andric   static constexpr llvm::ArrayRef<llvm::StringLiteral> NAME(                   \
26bdd1243dSDimitry Andric       NAME##_init, std::size(NAME##_init) - 1);
270b57cec5SDimitry Andric #include "clang/Driver/Options.inc"
280b57cec5SDimitry Andric #undef PREFIX
290b57cec5SDimitry Andric 
30bdd1243dSDimitry Andric static constexpr const llvm::StringLiteral PrefixTable_init[] =
31bdd1243dSDimitry Andric #define PREFIX_UNION(VALUES) VALUES
32bdd1243dSDimitry Andric #include "clang/Driver/Options.inc"
33bdd1243dSDimitry Andric #undef PREFIX_UNION
34bdd1243dSDimitry Andric     ;
35bdd1243dSDimitry Andric static constexpr const llvm::ArrayRef<llvm::StringLiteral>
36bdd1243dSDimitry Andric     PrefixTable(PrefixTable_init, std::size(PrefixTable_init) - 1);
37bdd1243dSDimitry Andric 
38bdd1243dSDimitry Andric static constexpr OptTable::Info InfoTable[] = {
39*5f757f3fSDimitry Andric #define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
400b57cec5SDimitry Andric #include "clang/Driver/Options.inc"
410b57cec5SDimitry Andric #undef OPTION
420b57cec5SDimitry Andric };
430b57cec5SDimitry Andric 
440b57cec5SDimitry Andric namespace {
450b57cec5SDimitry Andric 
46bdd1243dSDimitry Andric class DriverOptTable : public PrecomputedOptTable {
470b57cec5SDimitry Andric public:
48bdd1243dSDimitry Andric   DriverOptTable() : PrecomputedOptTable(InfoTable, PrefixTable) {}
490b57cec5SDimitry Andric };
500b57cec5SDimitry Andric }
510b57cec5SDimitry Andric 
52a7dea167SDimitry Andric const llvm::opt::OptTable &clang::driver::getDriverOptTable() {
53bdd1243dSDimitry Andric   static DriverOptTable Table;
54bdd1243dSDimitry Andric   return Table;
550b57cec5SDimitry Andric }
56