1533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===- TargetControlOptions.cpp -------------------------------------------===// 2533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 3533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// The MCLinker Project 4533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 5533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// This file is distributed under the University of Illinois Open Source 6533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// License. See LICENSE.TXT for details. 7533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// 8533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 9533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines#include <mcld/TargetControlOptions.h> 10533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines#include <mcld/LinkerConfig.h> 11533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines#include <mcld/Support/MsgHandling.h> 12533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 13533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesnamespace { 14533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 15533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<int> ArgGPSize("G", 16533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Set the maximum size of objects to be optimized using GP"), 17533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(8)); 18533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 19533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgWarnSharedTextrel("warn-shared-textrel", 20533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::ZeroOrMore, 21533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Warn if adding DT_TEXTREL in a shared object."), 22533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 23533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 24533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// Not supported yet { 25533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgFIXCA8("fix-cortex-a8", 26533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Enable Cortex-A8 Thumb-2 branch erratum fix"), 27533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 28533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 29533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgEB("EB", 30533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Link big-endian objects. This affects the output format."), 31533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 32533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 33533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgEL("EL", 34533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("Link little-endian objects. This affects the output format."), 35533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 36533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 37533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesllvm::cl::opt<bool> ArgSVR4Compatibility("Qy", 38533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::desc("This option is ignored for SVR4 compatibility"), 39533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines llvm::cl::init(false)); 40533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 41533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// } Not supported yet 42533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 43533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} // anonymous namespace 44533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 45533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesusing namespace mcld; 46533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 47533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 48533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines// TargetControlOptions 49533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines//===----------------------------------------------------------------------===// 50533eae20118036f425f27bf0536ef0ccbb090b65Stephen HinesTargetControlOptions::TargetControlOptions() 51533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines : m_GPSize(ArgGPSize), 52533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_WarnSharedTextrel(ArgWarnSharedTextrel), 53533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_FIXCA8(ArgFIXCA8), 54533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_EB(ArgEB), 55533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_EL(ArgEL), 56533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines m_SVR4Compatibility(ArgSVR4Compatibility) { 57533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} 58533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 59533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hinesbool TargetControlOptions::parse(LinkerConfig& pConfig) 60533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines{ 61533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines // set -G [size] 62533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines pConfig.options().setGPSize(m_GPSize); 63533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 64533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines // set --warn-shared-textrel 65533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines pConfig.options().setWarnSharedTextrel(m_WarnSharedTextrel); 66533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 67533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines // set --fix-cortex-a8 68533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines if (m_FIXCA8) 69533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines mcld::warning(mcld::diag::warn_unsupported_option) << m_FIXCA8.ArgStr; 70533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 71533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines return true; 72533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines} 73533eae20118036f425f27bf0536ef0ccbb090b65Stephen Hines 74