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

Reply via email to