//===-- MCTargetOptionsCommandFlags.cpp --------------------------*- C++ //-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains machine code-specific flags that are shared between // different command line tools. // //===----------------------------------------------------------------------===// #include "llvm/MC/MCTargetOptionsCommandFlags.h" #include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/CommandLine.h" using namespace llvm; #define MCOPT(TY, NAME) \ static cl::opt *NAME##View; \ TY llvm::mc::get##NAME() { \ assert(NAME##View && "RegisterMCTargetOptionsFlags not created."); \ return *NAME##View; \ } #define MCOPT_EXP(TY, NAME) \ MCOPT(TY, NAME) \ Optional llvm::mc::getExplicit##NAME() { \ if (NAME##View->getNumOccurrences()) { \ TY res = *NAME##View; \ return res; \ } \ return None; \ } MCOPT_EXP(bool, RelaxAll) MCOPT(bool, IncrementalLinkerCompatible) MCOPT(int, DwarfVersion) MCOPT(bool, Dwarf64) MCOPT(bool, ShowMCInst) MCOPT(bool, FatalWarnings) MCOPT(bool, NoWarn) MCOPT(bool, NoDeprecatedWarn) MCOPT(std::string, ABIName) llvm::mc::RegisterMCTargetOptionsFlags::RegisterMCTargetOptionsFlags() { #define MCBINDOPT(NAME) \ do { \ NAME##View = std::addressof(NAME); \ } while (0) static cl::opt RelaxAll( "mc-relax-all", cl::desc("When used with filetype=obj, relax all fixups " "in the emitted object file")); MCBINDOPT(RelaxAll); static cl::opt IncrementalLinkerCompatible( "incremental-linker-compatible", cl::desc( "When used with filetype=obj, " "emit an object file which can be used with an incremental linker")); MCBINDOPT(IncrementalLinkerCompatible); static cl::opt DwarfVersion("dwarf-version", cl::desc("Dwarf version"), cl::init(0)); MCBINDOPT(DwarfVersion); static cl::opt Dwarf64( "dwarf64", cl::desc("Generate debugging info in the 64-bit DWARF format")); MCBINDOPT(Dwarf64); static cl::opt ShowMCInst( "asm-show-inst", cl::desc("Emit internal instruction representation to assembly file")); MCBINDOPT(ShowMCInst); static cl::opt FatalWarnings("fatal-warnings", cl::desc("Treat warnings as errors")); MCBINDOPT(FatalWarnings); static cl::opt NoWarn("no-warn", cl::desc("Suppress all warnings")); static cl::alias NoWarnW("W", cl::desc("Alias for --no-warn"), cl::aliasopt(NoWarn)); MCBINDOPT(NoWarn); static cl::opt NoDeprecatedWarn( "no-deprecated-warn", cl::desc("Suppress all deprecated warnings")); MCBINDOPT(NoDeprecatedWarn); static cl::opt ABIName( "target-abi", cl::Hidden, cl::desc("The name of the ABI to be targeted from the backend."), cl::init("")); MCBINDOPT(ABIName); #undef MCBINDOPT } MCTargetOptions llvm::mc::InitMCTargetOptionsFromFlags() { MCTargetOptions Options; Options.MCRelaxAll = getRelaxAll(); Options.MCIncrementalLinkerCompatible = getIncrementalLinkerCompatible(); Options.Dwarf64 = getDwarf64(); Options.DwarfVersion = getDwarfVersion(); Options.ShowMCInst = getShowMCInst(); Options.ABIName = getABIName(); Options.MCFatalWarnings = getFatalWarnings(); Options.MCNoWarn = getNoWarn(); Options.MCNoDeprecatedWarn = getNoDeprecatedWarn(); return Options; }