1097a140dSpatrick //===-- MCTargetOptionsCommandFlags.cpp --------------------------*- C++ 2097a140dSpatrick //-*-===// 3097a140dSpatrick // 4097a140dSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5097a140dSpatrick // See https://llvm.org/LICENSE.txt for license information. 6097a140dSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7097a140dSpatrick // 8097a140dSpatrick //===----------------------------------------------------------------------===// 9097a140dSpatrick // 10097a140dSpatrick // This file contains machine code-specific flags that are shared between 11097a140dSpatrick // different command line tools. 12097a140dSpatrick // 13097a140dSpatrick //===----------------------------------------------------------------------===// 14097a140dSpatrick 15097a140dSpatrick #include "llvm/MC/MCTargetOptionsCommandFlags.h" 16097a140dSpatrick #include "llvm/MC/MCTargetOptions.h" 17097a140dSpatrick #include "llvm/Support/CommandLine.h" 18097a140dSpatrick 19097a140dSpatrick using namespace llvm; 20097a140dSpatrick 21097a140dSpatrick #define MCOPT(TY, NAME) \ 22097a140dSpatrick static cl::opt<TY> *NAME##View; \ 23097a140dSpatrick TY llvm::mc::get##NAME() { \ 24097a140dSpatrick assert(NAME##View && "RegisterMCTargetOptionsFlags not created."); \ 25097a140dSpatrick return *NAME##View; \ 26097a140dSpatrick } 27097a140dSpatrick 28097a140dSpatrick #define MCOPT_EXP(TY, NAME) \ 29097a140dSpatrick MCOPT(TY, NAME) \ 30097a140dSpatrick Optional<TY> llvm::mc::getExplicit##NAME() { \ 31097a140dSpatrick if (NAME##View->getNumOccurrences()) { \ 32097a140dSpatrick TY res = *NAME##View; \ 33097a140dSpatrick return res; \ 34097a140dSpatrick } \ 35097a140dSpatrick return None; \ 36097a140dSpatrick } 37097a140dSpatrick 38097a140dSpatrick MCOPT_EXP(bool, RelaxAll) 39097a140dSpatrick MCOPT(bool, IncrementalLinkerCompatible) 40097a140dSpatrick MCOPT(int, DwarfVersion) 41097a140dSpatrick MCOPT(bool, Dwarf64) 42097a140dSpatrick MCOPT(bool, ShowMCInst) 43097a140dSpatrick MCOPT(bool, FatalWarnings) 44097a140dSpatrick MCOPT(bool, NoWarn) 45097a140dSpatrick MCOPT(bool, NoDeprecatedWarn) 46*73471bf0Spatrick MCOPT(bool, NoTypeCheck) 47097a140dSpatrick MCOPT(std::string, ABIName) 48097a140dSpatrick 49097a140dSpatrick llvm::mc::RegisterMCTargetOptionsFlags::RegisterMCTargetOptionsFlags() { 50097a140dSpatrick #define MCBINDOPT(NAME) \ 51097a140dSpatrick do { \ 52097a140dSpatrick NAME##View = std::addressof(NAME); \ 53097a140dSpatrick } while (0) 54097a140dSpatrick 55097a140dSpatrick static cl::opt<bool> RelaxAll( 56097a140dSpatrick "mc-relax-all", cl::desc("When used with filetype=obj, relax all fixups " 57097a140dSpatrick "in the emitted object file")); 58097a140dSpatrick MCBINDOPT(RelaxAll); 59097a140dSpatrick 60097a140dSpatrick static cl::opt<bool> IncrementalLinkerCompatible( 61097a140dSpatrick "incremental-linker-compatible", 62097a140dSpatrick cl::desc( 63097a140dSpatrick "When used with filetype=obj, " 64097a140dSpatrick "emit an object file which can be used with an incremental linker")); 65097a140dSpatrick MCBINDOPT(IncrementalLinkerCompatible); 66097a140dSpatrick 67097a140dSpatrick static cl::opt<int> DwarfVersion("dwarf-version", cl::desc("Dwarf version"), 68097a140dSpatrick cl::init(0)); 69097a140dSpatrick MCBINDOPT(DwarfVersion); 70097a140dSpatrick 71097a140dSpatrick static cl::opt<bool> Dwarf64( 72097a140dSpatrick "dwarf64", 73097a140dSpatrick cl::desc("Generate debugging info in the 64-bit DWARF format")); 74097a140dSpatrick MCBINDOPT(Dwarf64); 75097a140dSpatrick 76097a140dSpatrick static cl::opt<bool> ShowMCInst( 77097a140dSpatrick "asm-show-inst", 78097a140dSpatrick cl::desc("Emit internal instruction representation to assembly file")); 79097a140dSpatrick MCBINDOPT(ShowMCInst); 80097a140dSpatrick 81097a140dSpatrick static cl::opt<bool> FatalWarnings("fatal-warnings", 82097a140dSpatrick cl::desc("Treat warnings as errors")); 83097a140dSpatrick MCBINDOPT(FatalWarnings); 84097a140dSpatrick 85097a140dSpatrick static cl::opt<bool> NoWarn("no-warn", cl::desc("Suppress all warnings")); 86097a140dSpatrick static cl::alias NoWarnW("W", cl::desc("Alias for --no-warn"), 87097a140dSpatrick cl::aliasopt(NoWarn)); 88097a140dSpatrick MCBINDOPT(NoWarn); 89097a140dSpatrick 90097a140dSpatrick static cl::opt<bool> NoDeprecatedWarn( 91097a140dSpatrick "no-deprecated-warn", cl::desc("Suppress all deprecated warnings")); 92097a140dSpatrick MCBINDOPT(NoDeprecatedWarn); 93097a140dSpatrick 94*73471bf0Spatrick static cl::opt<bool> NoTypeCheck( 95*73471bf0Spatrick "no-type-check", cl::desc("Suppress type errors (Wasm)")); 96*73471bf0Spatrick MCBINDOPT(NoTypeCheck); 97*73471bf0Spatrick 98097a140dSpatrick static cl::opt<std::string> ABIName( 99097a140dSpatrick "target-abi", cl::Hidden, 100097a140dSpatrick cl::desc("The name of the ABI to be targeted from the backend."), 101097a140dSpatrick cl::init("")); 102097a140dSpatrick MCBINDOPT(ABIName); 103097a140dSpatrick 104097a140dSpatrick #undef MCBINDOPT 105097a140dSpatrick } 106097a140dSpatrick 107097a140dSpatrick MCTargetOptions llvm::mc::InitMCTargetOptionsFromFlags() { 108097a140dSpatrick MCTargetOptions Options; 109097a140dSpatrick Options.MCRelaxAll = getRelaxAll(); 110097a140dSpatrick Options.MCIncrementalLinkerCompatible = getIncrementalLinkerCompatible(); 111097a140dSpatrick Options.Dwarf64 = getDwarf64(); 112097a140dSpatrick Options.DwarfVersion = getDwarfVersion(); 113097a140dSpatrick Options.ShowMCInst = getShowMCInst(); 114097a140dSpatrick Options.ABIName = getABIName(); 115097a140dSpatrick Options.MCFatalWarnings = getFatalWarnings(); 116097a140dSpatrick Options.MCNoWarn = getNoWarn(); 117097a140dSpatrick Options.MCNoDeprecatedWarn = getNoDeprecatedWarn(); 118*73471bf0Spatrick Options.MCNoTypeCheck = getNoTypeCheck(); 119097a140dSpatrick return Options; 120097a140dSpatrick } 121