在LLVM中修改特定目标的CMakeLists.txt,但不做任何更改

时间:2015-12-18 00:48:11

标签: cmake llvm

我正在开发一个使用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
  )

出于某种原因,我没有看到我的编辑有任何变化。我究竟做错了什么?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好吧,可能${td_file}指定为OUTPUT的{​​{1}}永远不会被引用为用于构建add_custom_command(默认目标)的任何目标的依赖项。您可以add_custom_target使用allALL选项(名称不重要,使用任何唯一标识符) DEPENDS ${td_file}之后链接将所需文件构建为默认目标。或者,更好的是,准确地指定项目的哪些部分依赖于自定义命令生成的文件。请使用add_custom_command。如果生成的文件又是某些其他构建过程的源(在您的情况下不太可能,但仍然如此),那么您应该考虑使用add_dependencies