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