Tôi đang phát triển một chương trình phụ trợ LLVM rất cơ bản mới cho máy RISC (có tên là Risco), dựa trên phần phụ trợ Sparc hiện có và this tutorial. Để đăng ký chương trình phụ trợ, tôi đã sử dụng phần sau.Cách đăng ký chương trình phụ trợ LLVM mới?
Tại RiscoTargetMachine.cpp:
extern "C" void LLVMInitializeRiscoTarget() { // Register the target. RegisterTargetMachine<RiscoSimulatorTargetMachine> X(TheRiscoTarget); RegisterAsmInfo<RiscoMCAsmInfo> Y(TheRiscoTarget); }
Tại Risco.td:
def : Processor<"simulator", NoItineraries, [FeatureA]>; def Risco : Target { // Pull in Instruction Info: let InstructionSet = RiscoInstrInfo; }
Tại TargetInfo/RiscoTargetInfo.cpp:
Target llvm::TheRiscoTarget; extern "C" void LLVMInitializeRiscoTargetInfo() { RegisterTarget<> X(TheRiscoTarget, "risco", "Risco"); }
Tại phía trên mức LLVM cấu hình kịch bản:
# 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" ;;
Sau khi xây dựng, llc -version
không hiển thị các mục tiêu mới. Ngay cả llc -march=risco test.ll
cho biết đó là mục tiêu không hợp lệ. Tôi đang thiếu gì?
PS: Hiện tại, tôi đang bao gồm mục tiêu mới làm thư mục bên trong llvm/lib/Target. Làm cách nào để tôi có thể thay đổi điều đó để tôi có thể tạo mục tiêu riêng biệt và tải nó động với llc -load
?
Thật không may, kinh nghiệm của tôi với LLVM là trong khi tài liệu doxygen của dự án được cập nhật, các hướng dẫn của nó thì không. Ngay cả khi cố gắng để đi qua các hướng dẫn biên dịch là bực bội. – Zeke