2015-12-18 53 views
0

我正在使用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 
) 

出於某種原因,我沒有看到我的彙編有任何更改。我究竟做錯了什麼?

任何幫助表示讚賞。

回答

0

很好,可能${td_file}指定爲add_custom_commandOUTPUT從不作爲用於構建all(默認的目標)的任何目標的依賴性被引用。您可以使用add_custom_targetALLDEPENDS ${td_file}選項(名稱無關緊要,使用任何唯一標識符)add_custom_command將所需文件鏈建立爲默認目標。或者,更好的是,準確地指定項目的哪些部分依賴於由自定義命令生成的文件。爲此,使用add_dependencies。如果生成的文件反過來是其他構建過程的源代碼(不太可能在您的情況下,但不過),那麼您應該考慮使用set_source_files_properties(${td_file} PROPERTIES GENERATED true)

+0

明天我會測試你的建議。但我還有另一個問題。只有當'PATH'中存在工具'plp'時,我纔想添加一個自定義命令。如果它不在'PATH'中,那麼我想生成一個警告消息並繼續定期編譯。有關如何實現這一目標的任何建議?對不起,如果這個問題看起來很明顯,我應該說我對'cmake'有點新鮮。任何幫助表示讚賞。 – flashburn

+1

[find_program](https://cmake.org/cmake/help/v3.0/command/find_program.html)是你想要完成的任務。 – user3159253