Je suis en train de développer un nouveau backend LLVM très basique pour une machine RISC (nommé Risco), basé sur le backend Sparc existant et this tutorial. Pour enregistrer le backend, j'ai utilisé ce qui suit.Comment enregistrer un nouveau backend LLVM?
A RiscoTargetMachine.cpp:
extern "C" void LLVMInitializeRiscoTarget() { // Register the target. RegisterTargetMachine<RiscoSimulatorTargetMachine> X(TheRiscoTarget); RegisterAsmInfo<RiscoMCAsmInfo> Y(TheRiscoTarget); }
A Risco.td:
def : Processor<"simulator", NoItineraries, [FeatureA]>; def Risco : Target { // Pull in Instruction Info: let InstructionSet = RiscoInstrInfo; }
A TargetInfo/RiscoTargetInfo.cpp:
Target llvm::TheRiscoTarget; extern "C" void LLVMInitializeRiscoTargetInfo() { RegisterTarget<> X(TheRiscoTarget, "risco", "Risco"); }
A le script de configuration de LLVM de haut niveau:
# 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" ;;
Après la construction, llc -version
ne montre pas la nouvelle cible. Même llc -march=risco test.ll
indique que c'est une cible invalide. Qu'est-ce que je rate? PS: Actuellement, j'inclus la nouvelle cible en tant que dossier dans llvm/lib/Target. Comment puis-je changer cela afin que je puisse construire la cible séparément, et le charger dynamique avec llc -load
?
Malheureusement, mon expérience avec LLVM a été que, bien que la documentation doxygen du projet soit à jour, ses didacticiels ne le sont pas. Même essayer de marcher à travers le tutoriel de compilation est frustrant. – Zeke