1*ac1d23edSserge-sans-paille //===-- MCTargetOptionsCommandFlags.cpp --------------------------*- C++ 2*ac1d23edSserge-sans-paille //-*-===// 3*ac1d23edSserge-sans-paille // 4*ac1d23edSserge-sans-paille // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*ac1d23edSserge-sans-paille // See https://llvm.org/LICENSE.txt for license information. 6*ac1d23edSserge-sans-paille // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*ac1d23edSserge-sans-paille // 8*ac1d23edSserge-sans-paille //===----------------------------------------------------------------------===// 9*ac1d23edSserge-sans-paille // 10*ac1d23edSserge-sans-paille // This file contains machine code-specific flags that are shared between 11*ac1d23edSserge-sans-paille // different command line tools. 12*ac1d23edSserge-sans-paille // 13*ac1d23edSserge-sans-paille //===----------------------------------------------------------------------===// 14*ac1d23edSserge-sans-paille 15*ac1d23edSserge-sans-paille #include "llvm/MC/MCTargetOptionsCommandFlags.h" 16*ac1d23edSserge-sans-paille 17*ac1d23edSserge-sans-paille using namespace llvm; 18*ac1d23edSserge-sans-paille 19*ac1d23edSserge-sans-paille #define MCOPT(TY, NAME) \ 20*ac1d23edSserge-sans-paille static cl::opt<TY> *NAME##View; \ 21*ac1d23edSserge-sans-paille TY llvm::mc::get##NAME() { \ 22*ac1d23edSserge-sans-paille assert(NAME##View && "RegisterMCTargetOptionsFlags not created."); \ 23*ac1d23edSserge-sans-paille return *NAME##View; \ 24*ac1d23edSserge-sans-paille } 25*ac1d23edSserge-sans-paille 26*ac1d23edSserge-sans-paille #define MCOPT_EXP(TY, NAME) \ 27*ac1d23edSserge-sans-paille MCOPT(TY, NAME) \ 28*ac1d23edSserge-sans-paille Optional<TY> llvm::mc::getExplicit##NAME() { \ 29*ac1d23edSserge-sans-paille if (NAME##View->getNumOccurrences()) { \ 30*ac1d23edSserge-sans-paille TY res = *NAME##View; \ 31*ac1d23edSserge-sans-paille return res; \ 32*ac1d23edSserge-sans-paille } \ 33*ac1d23edSserge-sans-paille return None; \ 34*ac1d23edSserge-sans-paille } 35*ac1d23edSserge-sans-paille 36*ac1d23edSserge-sans-paille MCOPT_EXP(bool, RelaxAll) 37*ac1d23edSserge-sans-paille MCOPT(bool, IncrementalLinkerCompatible) 38*ac1d23edSserge-sans-paille MCOPT(int, DwarfVersion) 39*ac1d23edSserge-sans-paille MCOPT(bool, ShowMCInst) 40*ac1d23edSserge-sans-paille MCOPT(bool, FatalWarnings) 41*ac1d23edSserge-sans-paille MCOPT(bool, NoWarn) 42*ac1d23edSserge-sans-paille MCOPT(bool, NoDeprecatedWarn) 43*ac1d23edSserge-sans-paille MCOPT(std::string, ABIName) 44*ac1d23edSserge-sans-paille 45*ac1d23edSserge-sans-paille llvm::mc::RegisterMCTargetOptionsFlags::RegisterMCTargetOptionsFlags() { 46*ac1d23edSserge-sans-paille #define MCBINDOPT(NAME) \ 47*ac1d23edSserge-sans-paille do { \ 48*ac1d23edSserge-sans-paille NAME##View = std::addressof(NAME); \ 49*ac1d23edSserge-sans-paille } while (0) 50*ac1d23edSserge-sans-paille 51*ac1d23edSserge-sans-paille static cl::opt<bool> RelaxAll( 52*ac1d23edSserge-sans-paille "mc-relax-all", cl::desc("When used with filetype=obj, relax all fixups " 53*ac1d23edSserge-sans-paille "in the emitted object file")); 54*ac1d23edSserge-sans-paille MCBINDOPT(RelaxAll); 55*ac1d23edSserge-sans-paille 56*ac1d23edSserge-sans-paille static cl::opt<bool> IncrementalLinkerCompatible( 57*ac1d23edSserge-sans-paille "incremental-linker-compatible", 58*ac1d23edSserge-sans-paille cl::desc( 59*ac1d23edSserge-sans-paille "When used with filetype=obj, " 60*ac1d23edSserge-sans-paille "emit an object file which can be used with an incremental linker")); 61*ac1d23edSserge-sans-paille MCBINDOPT(IncrementalLinkerCompatible); 62*ac1d23edSserge-sans-paille 63*ac1d23edSserge-sans-paille static cl::opt<int> DwarfVersion("dwarf-version", cl::desc("Dwarf version"), 64*ac1d23edSserge-sans-paille cl::init(0)); 65*ac1d23edSserge-sans-paille MCBINDOPT(DwarfVersion); 66*ac1d23edSserge-sans-paille 67*ac1d23edSserge-sans-paille static cl::opt<bool> ShowMCInst( 68*ac1d23edSserge-sans-paille "asm-show-inst", 69*ac1d23edSserge-sans-paille cl::desc("Emit internal instruction representation to assembly file")); 70*ac1d23edSserge-sans-paille MCBINDOPT(ShowMCInst); 71*ac1d23edSserge-sans-paille 72*ac1d23edSserge-sans-paille static cl::opt<bool> FatalWarnings("fatal-warnings", 73*ac1d23edSserge-sans-paille cl::desc("Treat warnings as errors")); 74*ac1d23edSserge-sans-paille MCBINDOPT(FatalWarnings); 75*ac1d23edSserge-sans-paille 76*ac1d23edSserge-sans-paille static cl::opt<bool> NoWarn("no-warn", cl::desc("Suppress all warnings")); 77*ac1d23edSserge-sans-paille static cl::alias NoWarnW("W", cl::desc("Alias for --no-warn"), 78*ac1d23edSserge-sans-paille cl::aliasopt(NoWarn)); 79*ac1d23edSserge-sans-paille MCBINDOPT(NoWarn); 80*ac1d23edSserge-sans-paille 81*ac1d23edSserge-sans-paille static cl::opt<bool> NoDeprecatedWarn( 82*ac1d23edSserge-sans-paille "no-deprecated-warn", cl::desc("Suppress all deprecated warnings")); 83*ac1d23edSserge-sans-paille MCBINDOPT(NoDeprecatedWarn); 84*ac1d23edSserge-sans-paille 85*ac1d23edSserge-sans-paille static cl::opt<std::string> ABIName( 86*ac1d23edSserge-sans-paille "target-abi", cl::Hidden, 87*ac1d23edSserge-sans-paille cl::desc("The name of the ABI to be targeted from the backend."), 88*ac1d23edSserge-sans-paille cl::init("")); 89*ac1d23edSserge-sans-paille MCBINDOPT(ABIName); 90*ac1d23edSserge-sans-paille 91*ac1d23edSserge-sans-paille #undef MCBINDOPT 92*ac1d23edSserge-sans-paille } 93*ac1d23edSserge-sans-paille 94*ac1d23edSserge-sans-paille MCTargetOptions llvm::mc::InitMCTargetOptionsFromFlags() { 95*ac1d23edSserge-sans-paille MCTargetOptions Options; 96*ac1d23edSserge-sans-paille Options.MCRelaxAll = getRelaxAll(); 97*ac1d23edSserge-sans-paille Options.MCIncrementalLinkerCompatible = getIncrementalLinkerCompatible(); 98*ac1d23edSserge-sans-paille Options.DwarfVersion = getDwarfVersion(); 99*ac1d23edSserge-sans-paille Options.ShowMCInst = getShowMCInst(); 100*ac1d23edSserge-sans-paille Options.ABIName = getABIName(); 101*ac1d23edSserge-sans-paille Options.MCFatalWarnings = getFatalWarnings(); 102*ac1d23edSserge-sans-paille Options.MCNoWarn = getNoWarn(); 103*ac1d23edSserge-sans-paille Options.MCNoDeprecatedWarn = getNoDeprecatedWarn(); 104*ac1d23edSserge-sans-paille return Options; 105*ac1d23edSserge-sans-paille } 106