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" 16*f3b20c2aSSimon Pilgrim #include "llvm/MC/MCTargetOptions.h" 17*f3b20c2aSSimon 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) 41ac1d23edSserge-sans-paille MCOPT(bool, ShowMCInst) 42ac1d23edSserge-sans-paille MCOPT(bool, FatalWarnings) 43ac1d23edSserge-sans-paille MCOPT(bool, NoWarn) 44ac1d23edSserge-sans-paille MCOPT(bool, NoDeprecatedWarn) 45ac1d23edSserge-sans-paille MCOPT(std::string, ABIName) 46ac1d23edSserge-sans-paille 47ac1d23edSserge-sans-paille llvm::mc::RegisterMCTargetOptionsFlags::RegisterMCTargetOptionsFlags() { 48ac1d23edSserge-sans-paille #define MCBINDOPT(NAME) \ 49ac1d23edSserge-sans-paille do { \ 50ac1d23edSserge-sans-paille NAME##View = std::addressof(NAME); \ 51ac1d23edSserge-sans-paille } while (0) 52ac1d23edSserge-sans-paille 53ac1d23edSserge-sans-paille static cl::opt<bool> RelaxAll( 54ac1d23edSserge-sans-paille "mc-relax-all", cl::desc("When used with filetype=obj, relax all fixups " 55ac1d23edSserge-sans-paille "in the emitted object file")); 56ac1d23edSserge-sans-paille MCBINDOPT(RelaxAll); 57ac1d23edSserge-sans-paille 58ac1d23edSserge-sans-paille static cl::opt<bool> IncrementalLinkerCompatible( 59ac1d23edSserge-sans-paille "incremental-linker-compatible", 60ac1d23edSserge-sans-paille cl::desc( 61ac1d23edSserge-sans-paille "When used with filetype=obj, " 62ac1d23edSserge-sans-paille "emit an object file which can be used with an incremental linker")); 63ac1d23edSserge-sans-paille MCBINDOPT(IncrementalLinkerCompatible); 64ac1d23edSserge-sans-paille 65ac1d23edSserge-sans-paille static cl::opt<int> DwarfVersion("dwarf-version", cl::desc("Dwarf version"), 66ac1d23edSserge-sans-paille cl::init(0)); 67ac1d23edSserge-sans-paille MCBINDOPT(DwarfVersion); 68ac1d23edSserge-sans-paille 69ac1d23edSserge-sans-paille static cl::opt<bool> ShowMCInst( 70ac1d23edSserge-sans-paille "asm-show-inst", 71ac1d23edSserge-sans-paille cl::desc("Emit internal instruction representation to assembly file")); 72ac1d23edSserge-sans-paille MCBINDOPT(ShowMCInst); 73ac1d23edSserge-sans-paille 74ac1d23edSserge-sans-paille static cl::opt<bool> FatalWarnings("fatal-warnings", 75ac1d23edSserge-sans-paille cl::desc("Treat warnings as errors")); 76ac1d23edSserge-sans-paille MCBINDOPT(FatalWarnings); 77ac1d23edSserge-sans-paille 78ac1d23edSserge-sans-paille static cl::opt<bool> NoWarn("no-warn", cl::desc("Suppress all warnings")); 79ac1d23edSserge-sans-paille static cl::alias NoWarnW("W", cl::desc("Alias for --no-warn"), 80ac1d23edSserge-sans-paille cl::aliasopt(NoWarn)); 81ac1d23edSserge-sans-paille MCBINDOPT(NoWarn); 82ac1d23edSserge-sans-paille 83ac1d23edSserge-sans-paille static cl::opt<bool> NoDeprecatedWarn( 84ac1d23edSserge-sans-paille "no-deprecated-warn", cl::desc("Suppress all deprecated warnings")); 85ac1d23edSserge-sans-paille MCBINDOPT(NoDeprecatedWarn); 86ac1d23edSserge-sans-paille 87ac1d23edSserge-sans-paille static cl::opt<std::string> ABIName( 88ac1d23edSserge-sans-paille "target-abi", cl::Hidden, 89ac1d23edSserge-sans-paille cl::desc("The name of the ABI to be targeted from the backend."), 90ac1d23edSserge-sans-paille cl::init("")); 91ac1d23edSserge-sans-paille MCBINDOPT(ABIName); 92ac1d23edSserge-sans-paille 93ac1d23edSserge-sans-paille #undef MCBINDOPT 94ac1d23edSserge-sans-paille } 95ac1d23edSserge-sans-paille 96ac1d23edSserge-sans-paille MCTargetOptions llvm::mc::InitMCTargetOptionsFromFlags() { 97ac1d23edSserge-sans-paille MCTargetOptions Options; 98ac1d23edSserge-sans-paille Options.MCRelaxAll = getRelaxAll(); 99ac1d23edSserge-sans-paille Options.MCIncrementalLinkerCompatible = getIncrementalLinkerCompatible(); 100ac1d23edSserge-sans-paille Options.DwarfVersion = getDwarfVersion(); 101ac1d23edSserge-sans-paille Options.ShowMCInst = getShowMCInst(); 102ac1d23edSserge-sans-paille Options.ABIName = getABIName(); 103ac1d23edSserge-sans-paille Options.MCFatalWarnings = getFatalWarnings(); 104ac1d23edSserge-sans-paille Options.MCNoWarn = getNoWarn(); 105ac1d23edSserge-sans-paille Options.MCNoDeprecatedWarn = getNoDeprecatedWarn(); 106ac1d23edSserge-sans-paille return Options; 107ac1d23edSserge-sans-paille } 108