我正在使用LLVM的項目(我們稱之爲Escala)。我們使用OR1K作爲我們的出發點。有一個額外的命令,我添加到CMakeLists.txt但由於某種原因,當我運行cmake
沒有任何反應。我修改該文件是lib/Target/Escala/CMakeLists.txt
(此目錄中不llvm-or1k
存在你能想到的修改lib/Target/OR1K/CMakeLists
在LLVM中爲特定目標修改CMakeLists.txt,但沒有更改
這是代碼修改之前是什麼樣子的:
set(LLVM_TARGET_DEFINITIONS Escala.td)
tablegen(LLVM EscalaGenRegisterInfo.inc -gen-register-info)
tablegen(LLVM EscalaGenInstrInfo.inc -gen-instr-info)
tablegen(LLVM EscalaGenAsmWriter.inc -gen-asm-writer)
tablegen(LLVM EscalaGenAsmMatcher.inc -gen-asm-matcher)
tablegen(LLVM EscalaGenMCCodeEmitter.inc -gen-emitter -mc-emitter)
tablegen(LLVM EscalaGenDAGISel.inc -gen-dag-isel)
tablegen(LLVM EscalaGenCallingConv.inc -gen-callingconv)
tablegen(LLVM EscalaGenSubtargetInfo.inc -gen-subtarget)
tablegen(LLVM EscalaGenDisassemblerTables.inc -gen-disassembler)
tablegen(LLVM EscalaGenDFAPacketizer.inc -gen-dfa-packetizer)
add_public_tablegen_target(EscalaCommonTableGen)
add_llvm_target(EscalaCodeGen
EscalaDelaySlotFiller.cpp
EscalaISelDAGToDAG.cpp
EscalaISelLowering.cpp
EscalaInstrInfo.cpp
EscalaFrameLowering.cpp
EscalaMachineFunctionInfo.cpp
EscalaRegisterInfo.cpp
EscalaSubtarget.cpp
EscalaTargetMachine.cpp
EscalaSelectionDAGInfo.cpp
EscalaAsmPrinter.cpp
EscalaMCInstLower.cpp
EscalaMachineScheduler.cpp
EscalaVLIWPacketizer.cpp
)
add_subdirectory(InstPrinter)
add_subdirectory(Disassembler)
add_subdirectory(TargetInfo)
add_subdirectory(MCTargetDesc)
add_subdirectory(AsmParser)
,這是它現在的樣子:
set(LLVM_TARGET_DEFINITIONS Escala.td)
tablegen(LLVM EscalaGenRegisterInfo.inc -gen-register-info)
tablegen(LLVM EscalaGenInstrInfo.inc -gen-instr-info)
tablegen(LLVM EscalaGenAsmWriter.inc -gen-asm-writer)
tablegen(LLVM EscalaGenAsmMatcher.inc -gen-asm-matcher)
tablegen(LLVM EscalaGenMCCodeEmitter.inc -gen-emitter -mc-emitter)
tablegen(LLVM EscalaGenDAGISel.inc -gen-dag-isel)
tablegen(LLVM EscalaGenCallingConv.inc -gen-callingconv)
tablegen(LLVM EscalaGenSubtargetInfo.inc -gen-subtarget)
tablegen(LLVM EscalaGenDisassemblerTables.inc -gen-disassembler)
tablegen(LLVM EscalaGenDFAPacketizer.inc -gen-dfa-packetizer)
add_public_tablegen_target(EscalaCommonTableGen)
add_llvm_target(EscalaCodeGen
EscalaDelaySlotFiller.cpp
EscalaISelDAGToDAG.cpp
EscalaISelLowering.cpp
EscalaInstrInfo.cpp
EscalaFrameLowering.cpp
EscalaMachineFunctionInfo.cpp
EscalaRegisterInfo.cpp
EscalaSubtarget.cpp
EscalaTargetMachine.cpp
EscalaSelectionDAGInfo.cpp
EscalaAsmPrinter.cpp
EscalaMCInstLower.cpp
EscalaMachineScheduler.cpp
EscalaVLIWPacketizer.cpp
)
add_subdirectory(InstPrinter)
add_subdirectory(Disassembler)
add_subdirectory(TargetInfo)
add_subdirectory(MCTargetDesc)
add_subdirectory(AsmParser)
set(PLP_FILES EscalaSchedule.td.plp EscalaRegisterInfo.td.plp)
foreach (plp_file ${PLP_FILES})
string(REPLACE ".plp" "" td_file ${plp_file})
add_custom_command(
OUTPUT ${td_file}
COMMAND plp ${plp_file}
DEPENDS EscalaConstants.pm
)
endforeach()
換句話說我加了下列片:
set(PLP_FILES EscalaSchedule.td.plp EscalaRegisterInfo.td.plp)
foreach (plp_file ${PLP_FILES})
string(REPLACE ".plp" "" td_file ${plp_file})
add_custom_command(
OUTPUT ${td_file}
COMMAND plp ${plp_file}
DEPENDS EscalaConstants.pm
)
出於某種原因,我沒有看到我的彙編有任何更改。我究竟做錯了什麼?
任何幫助表示讚賞。
明天我會測試你的建議。但我還有另一個問題。只有當'PATH'中存在工具'plp'時,我纔想添加一個自定義命令。如果它不在'PATH'中,那麼我想生成一個警告消息並繼續定期編譯。有關如何實現這一目標的任何建議?對不起,如果這個問題看起來很明顯,我應該說我對'cmake'有點新鮮。任何幫助表示讚賞。 – flashburn
[find_program](https://cmake.org/cmake/help/v3.0/command/find_program.html)是你想要完成的任務。 – user3159253