2010-10-13 13 views
13

मैं मौजूदा स्पार्क बैकएंड और this tutorial के आधार पर आरआईएससी मशीन (रिस्को नामित) के लिए एक बहुत ही बुनियादी नया एलएलवीएम बैकएंड विकसित कर रहा हूं। बैकएंड पंजीकृत करने के लिए, मैंने निम्नलिखित का उपयोग किया है।नया एलएलवीएम बैकएंड कैसे पंजीकृत करें?

  • RiscoTargetMachine.cpp पर

    :

    extern "C" void LLVMInitializeRiscoTarget() 
    { 
        // Register the target. 
        RegisterTargetMachine<RiscoSimulatorTargetMachine> X(TheRiscoTarget); 
        RegisterAsmInfo<RiscoMCAsmInfo> Y(TheRiscoTarget); 
    } 
    
  • Risco.td में:

    def : Processor<"simulator", NoItineraries, [FeatureA]>; 
    
    def Risco : Target { 
         // Pull in Instruction Info: 
         let InstructionSet = RiscoInstrInfo; 
    } 
    
  • TargetInfo/RiscoTargetInfo.cpp में:

    Target llvm::TheRiscoTarget; 
    
    extern "C" void LLVMInitializeRiscoTargetInfo() { 
         RegisterTarget<> X(TheRiscoTarget, "risco", "Risco"); 
    } 
    
  • पर शीर्ष स्तर LLVM कॉन्फ़िगर स्क्रिप्ट:

    # Added Risco to the TARGETS_TO_BUILD variable at line 4965 (from svn trunk): 
    all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU PIC16 XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX Risco" ;; 
    

निर्माण के बाद, llc -version नया लक्ष्य नहीं दिखाती है। यहां तक ​​कि llc -march=risco test.ll कहता है कि यह एक अवैध लक्ष्य है। मैं क्या खो रहा हूँ?

पुनश्च: वर्तमान में, मैं LLVM/lib/लक्ष्य के अंदर एक फ़ोल्डर के रूप में नए लक्ष्य शामिल कर रहा हूँ। मैं इसे कैसे बदल सकता हूं ताकि मैं लक्ष्य को अलग से बना सकूं, और इसे llc -load के साथ गतिशील लोड कर सकता हूं?

+3

दुर्भाग्य से, LLVM के साथ मेरा अनुभव रहा है कि जब तक इस परियोजना के Doxygen प्रलेखन अप टू डेट है, इसके सभी ट्यूटोरियल नहीं हैं: और आप अपने लक्ष्य जारी करके LLC उपकरण को जोड़ा गया देख सकते हैं। यहां तक ​​कि संकलन ट्यूटोरियल के माध्यम से चलने की कोशिश भी निराशाजनक है। – Zeke

उत्तर

4

default first template parameterRegisterTarget के लिए Triple::InvalidArch है। इस प्रयास करें:

extern "C" void LLVMInitializeRiscoTargetInfo() { 
    RegisterTarget<Triple::UnknownArch> X(TheRiscoTarget, "risco", "Risco"); 
} 

तुम भी RiscoAsmPrinter.cpp में अपने बैकएंड के लिए एक विधानसभा प्रिंटर को पंजीकृत करने की आवश्यकता हो सकती:

extern "C" void LLVMInitializeRiscoAsmPrinter() { 
    RegisterAsmPrinter<RiscoAsmPrinter> X(TheRiscoTarget); 
} 

मैं काफी यकीन है कि आप पिछले थोड़ा करके क्या मतलब है नहीं कर रहा हूँ। मेरा मेकफ़ाइल LOADABLE_MODULE=1 है और lib फ़ोल्डर में साझा ऑब्जेक्ट के रूप में लक्ष्य बनाता है। पंजीकृत लक्ष्यों की सूची में रिस्को लक्ष्य को देखने के लिए, मैं ./bin/llc -load ./lib/libLLVMRisco.so -version जैसा कुछ मानता हूं कि आप लिनक्स पर हैं। करने के लिए हमारे लक्ष्य जोड़ने)

1 CMakeLists.txt में:

0

आप LLVM की रूट निर्देशिका में कम से कम 16 फ़ाइलों को संपादित करने के लिए है सेट (LLVM_ALL_TARGETS AArch64 एआरएम ...)

2) जोड़ें Triple.h

करने के लिए अपने लक्ष्य

3) जोड़े HI/LO llvm_root_dir को शामिल// LLVM/एम सी/MCExpr.h

...

16) ...

एलएलवीएमसीबुकबुक में पूरा कदम मिल सकते हैं। पृष्ठ 228 से 238. क्षमा करें मैं यहां ट्यूटोरियल के 10 पृष्ठों की प्रतिलिपि/पेस्ट नहीं कर सका।

उन सभी 16 फ़ाइलों का संपादन करने के बाद, तो LLVM का उपयोग कर cmake का निर्माण: $ cmake ~/LLVM/src/-DLLVM_TARGETS_TO_BUILD = YourTargetName और फिर $

बनाने तुम भाग्यशाली पर्याप्त तो अपने निर्माण सफल हो जाएगा रहे हैं, $ LLC -संस्करण

संबंधित मुद्दे