Peter Kümmel <syntheti...@gmx.net> writes: > Does clang has another build system which supports ninja? > Then we could compare the generated files.
No, AFAIK. What does work is all other build tools supported by cmake (VS project files, nmake/jom). The command looks good. It is a custom command that runs a tool previously generated by the build (llvm-tblgen.exe). After looking that the ouptput of ninja -v, the problem is that ninja is recompiling some of the source files of llvm-tblgen.exe, which regenerates the llvm-tblgen.exe executable, which in turn triggers the regeneration of the files produced using that tool. Here, the first chunk of output of ninja -v, whith comments: # Ninja starts recompiling some of the source files of llvm-tblgen.exe. This is wrong, because everything is up to date: [1/71] "C:/apps/CMake2.8ninja/bin/cmcldeps.exe" D:\dev\llvm\llvm\utils\TableGen\ DisassemblerEmitter.cpp utils\TableGen\CMakeFiles\llvm-tblgen.dir\DisassemblerEm itter.cpp.obj.d utils\TableGen\CMakeFiles\llvm-tblgen.dir\DisassemblerEmitter.cp p.obj "Note: including file: " C:\ARCHIV~1\MICROS~2.0\VC\bin\cl.exe /nologo /D WIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR /MD /O2 /Ob2 /D NDEBUG -Iutils\TableGen - ID:\dev\llvm\llvm\utils\TableGen -Iinclude -ID:\dev\llvm\llvm\include -wd4146 -wd4180 -wd4224 -wd4244 -wd4267 -wd4275 -wd4291 -wd4345 -wd4351 -wd4355 -wd4503 -wd4551 -wd4624 -wd4715 -wd4800 -wd4065 -wd4181 -w14062 -D_CRT_SECURE_NO_DEPRE CATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WAR NINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D__STDC_CONSTANT_MAC ROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS /TP /Foutils\TableGen\CMakeFile s\llvm-tblgen.dir\DisassemblerEmitter.cpp.obj /Fdbin\llvm-tblgen.pdb -c D:\dev\l lvm\llvm\utils\TableGen\DisassemblerEmitter.cpp [2/71] "C:/apps/CMake2.8ninja/bin/cmcldeps.exe" D:\dev\llvm\llvm\utils\TableGen\ X86DisassemblerTables.cpp utils\TableGen\CMakeFiles\llvm-tblgen.dir\X86Disassemb lerTables.cpp.obj.d utils\TableGen\CMakeFiles\llvm-tblgen.dir\X86DisassemblerTab les.cpp.obj "Note: including file: " C:\ARCHIV~1\MICROS~2.0\VC\bin\cl.exe /nol ogo /DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR /MD /O2 /Ob2 /D NDEBUG -Iutils\Tabl eGen -ID:\dev\llvm\llvm\utils\TableGen -Iinclude -ID:\dev\llvm\llvm\include - wd4146 -wd4180 -wd4224 -wd4244 -wd4267 -wd4275 -wd4291 -wd4345 -wd4351 -wd4355 - wd4503 -wd4551 -wd4624 -wd4715 -wd4800 -wd4065 -wd4181 -w14062 -D_CRT_SECURE_NO _DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_ NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D__STDC_CONSTA NT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS /TP /Foutils\TableGen\CMa keFiles\llvm-tblgen.dir\X86DisassemblerTables.cpp.obj /Fdbin\llvm-tblgen.pdb -c D:\dev\llvm\llvm\utils\TableGen\X86DisassemblerTables.cpp [3/71] "C:/apps/CMake2.8ninja/bin/cmcldeps.exe" D:\dev\llvm\llvm\utils\TableGen\ X86RecognizableInstr.cpp utils\TableGen\CMakeFiles\llvm-tblgen.dir\X86Recognizab leInstr.cpp.obj.d utils\TableGen\CMakeFiles\llvm-tblgen.dir\X86RecognizableInstr .cpp.obj "Note: including file: " C:\ARCHIV~1\MICROS~2.0\VC\bin\cl.exe /nologo /DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR /MD /O2 /Ob2 /D NDEBUG -Iutils\TableGe n -ID:\dev\llvm\llvm\utils\TableGen -Iinclude -ID:\dev\llvm\llvm\include -wd4 146 -wd4180 -wd4224 -wd4244 -wd4267 -wd4275 -wd4291 -wd4345 -wd4351 -wd4355 -wd4 503 -wd4551 -wd4624 -wd4715 -wd4800 -wd4065 -wd4181 -w14062 -D_CRT_SECURE_NO_DE PRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_ WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D__STDC_CONSTANT_ MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS /TP /Foutils\TableGen\CMakeF iles\llvm-tblgen.dir\X86RecognizableInstr.cpp.obj /Fdbin\llvm-tblgen.pdb -c D:\d ev\llvm\llvm\utils\TableGen\X86RecognizableInstr.cpp # Now invokes the linker for producing llvm-tblgen.exe : [4/71] cmd.exe /c cd. && c:\apps\CMake2.8ninja\bin\cmake.exe -E vs_link_exe C:\A RCHIV~1\MICROS~2.0\VC\bin\cl.exe /nologo utils\TableGen\CMakeFiles\llvm-tblgen. dir\AsmMatcherEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\AsmWrite rEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\AsmWriterInst.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\CallingConvEmitter.cpp.obj utils\Tabl eGen\CMakeFiles\llvm-tblgen.dir\CodeEmitterGen.cpp.obj utils\TableGen\CMakeFiles \llvm-tblgen.dir\CodeGenDAGPatterns.cpp.obj utils\TableGen\CMakeFiles\llvm-tblge n.dir\CodeGenInstruction.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\CodeG enRegisters.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\CodeGenTarget.cpp. obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\DAGISelEmitter.cpp.obj utils\Table Gen\CMakeFiles\llvm-tblgen.dir\DAGISelMatcherEmitter.cpp.obj utils\TableGen\CMak eFiles\llvm-tblgen.dir\DAGISelMatcherGen.cpp.obj utils\TableGen\CMakeFiles\llvm- tblgen.dir\DAGISelMatcherOpt.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\D AGISelMatcher.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\DFAPacketizerEmi tter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\DisassemblerEmitter.cpp.o bj utils\TableGen\CMakeFiles\llvm-tblgen.dir\EDEmitter.cpp.obj utils\TableGen\CM akeFiles\llvm-tblgen.dir\FastISelEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm- tblgen.dir\FixedLenDecoderEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen. dir\InstrInfoEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\Intrinsic Emitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\PseudoLoweringEmitter. cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\RegisterInfoEmitter.cpp.obj ut ils\TableGen\CMakeFiles\llvm-tblgen.dir\SetTheory.cpp.obj utils\TableGen\CMakeFi les\llvm-tblgen.dir\SubtargetEmitter.cpp.obj utils\TableGen\CMakeFiles\llvm-tblg en.dir\TGValueTypes.cpp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\TableGen.c pp.obj utils\TableGen\CMakeFiles\llvm-tblgen.dir\X86DisassemblerTables.cpp.obj u tils\TableGen\CMakeFiles\llvm-tblgen.dir\X86ModRMFilters.cpp.obj utils\TableGen\ CMakeFiles\llvm-tblgen.dir\X86RecognizableInstr.cpp.obj /DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR /MD /O2 /Ob2 /D NDEBUG /Febin\llvm-tblgen.exe /Fdbin\llvm-tblg en.pdb -link /implib:lib\llvm-tblgen.lib /version:0.0 /STACK:10000000 /machine: X86 /INCREMENTAL:NO /subsystem:console lib\LLVMTableGen.lib lib\LLVMSupport.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.l ib uuid.lib comdlg32.lib advapi32.lib && cd. Creating library lib\llvm-tblgen.lib and object lib\llvm-tblgen.exp # Now, ninja correctly re-executes the custom commands where llvm-tblgen.exe intervenes. This is expected, as this custom commands have a dependency on llvm-tblgen.exe: [5/71] cmd.exe /c cd D:\dev\llvm\ninja\include\llvm && D:\dev\llvm\ninja\bin\llv m-tblgen.exe -gen-intrinsic -I D:/dev/llvm/llvm/include/llvm -I D:/dev/llvm/llvm /lib/Target -I D:/dev/llvm/llvm/include D:/dev/llvm/llvm/include/llvm/Intrinsics .td -o D:/dev/llvm/ninja/include/llvm/Intrinsics.gen.tmp [6/71] cmd.exe /c cd D:\dev\llvm\ninja\include\llvm && c:\apps\CMake2.8ninja\bin \cmake.exe -E copy_if_different D:/dev/llvm/ninja/include/llvm/Intrinsics.gen.tm p D:/dev/llvm/ninja/include/llvm/Intrinsics.gen [7/71] cmd.exe /c cd D:\dev\llvm\ninja\lib\Target\X86 && D:\dev\llvm\ninja\bin\l lvm-tblgen.exe -gen-register-info -I D:/dev/llvm/llvm/lib/Target/X86 -I D:/dev/l lvm/llvm/lib/Target -I D:/dev/llvm/llvm/include D:/dev/llvm/llvm/lib/Target/X86/ X86.td -o D:/dev/llvm/ninja/lib/Target/X86/X86GenRegisterInfo.inc.tmp [8/71] cmd.exe /c cd D:\dev\llvm\ninja\lib\Target\X86 && D:\dev\llvm\ninja\bin\l lvm-tblgen.exe -gen-disassembler -I D:/dev/llvm/llvm/lib/Target/X86 -I D:/dev/ll vm/llvm/lib/Target -I D:/dev/llvm/llvm/include D:/dev/llvm/llvm/lib/Target/X86/X 86.td -o D:/dev/llvm/ninja/lib/Target/X86/X86GenDisassemblerTables.inc.tmp [9/71] cmd.exe /c cd D:\dev\llvm\ninja\lib\Target\X86 && D:\dev\llvm\ninja\bin\l lvm-tblgen.exe -gen-instr-info -I D:/dev/llvm/llvm/lib/Target/X86 -I D:/dev/llvm /llvm/lib/Target -I D:/dev/llvm/llvm/include D:/dev/llvm/llvm/lib/Target/X86/X86 .td -o D:/dev/llvm/ninja/lib/Target/X86/X86GenInstrInfo.inc.tmp # etc So the problem is not on executing the custom commands that runs llvm-tblgen.exe, but on unnecessarily re-compiling some of its source files. -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers