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