我正在开发一个使用LLVM的项目(我们称之为Escala)。我们使用OR1K作为起点。我添加了一个额外的命令到CMakeLists.txt但由于某种原因,当我运行cmake
时没有任何反应。我修改的文件位于lib/Target/Escala/CMakeLists.txt
(此目录在llvm-or1k
中不存在。您可以考虑修改lib/Target/OR1K/CMakeLists
这是修改前代码的显示方式:
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
)
出于某种原因,我没有看到我的编辑有任何变化。我究竟做错了什么?
感谢任何帮助。
答案 0 :(得分:0)
好吧,可能${td_file}
指定为OUTPUT
的{{1}}永远不会被引用为用于构建add_custom_command
(默认目标)的任何目标的依赖项。您可以add_custom_target使用all
和ALL
选项(名称不重要,使用任何唯一标识符) DEPENDS ${td_file}
之后链接将所需文件构建为默认目标。或者,更好的是,准确地指定项目的哪些部分依赖于自定义命令生成的文件。请使用add_custom_command
。如果生成的文件又是某些其他构建过程的源(在您的情况下不太可能,但仍然如此),那么您应该考虑使用add_dependencies
。