[cmake-developers] -GNinja on Windows
Óscar Fuentes
ofv at wanadoo.es
Sat Jun 9 10:22:28 EDT 2012
Peter Kümmel <syntheticpp at 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.
More information about the cmake-developers
mailing list