Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -398,6 +398,12 @@ set(LLVM_USE_HOST_TOOLS ON) endif() +if (MSVC_IDE AND NOT (MSVC_VERSION LESS 1900)) + option(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION "Configure project to use Visual Studio native visualizers" TRUE) +else() + set(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION FALSE CACHE INTERNAL "For Visual Studio 2013, manually copy natvis files to Documents\\Visual Studio 2013\\Visualizers" FORCE) +endif() + # All options referred to from HandleLLVMOptions have to be specified # BEFORE this include, otherwise options will not be correctly set on # first cmake run @@ -664,6 +670,11 @@ endif() endif() +# Use LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION instead of LLVM_INCLUDE_UTILS because it is not really a util +if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION) + add_subdirectory(utils/LLVMVisualizers) +endif() + if(LLVM_INCLUDE_TESTS) add_subdirectory(utils/unittest) endif() Index: utils/LLVMVisualizers/CMakeLists.txt =================================================================== --- utils/LLVMVisualizers/CMakeLists.txt +++ utils/LLVMVisualizers/CMakeLists.txt @@ -0,0 +1,7 @@ +# Do this by hand instead of using add_llvm_utilities(), which +# tries to create a corresponding executable, which we don't want. +if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION) + set(LLVM_VISUALIZERS llvm.natvis) + add_custom_target(LLVMVisualizers SOURCES ${LLVM_VISUALIZERS}) + set_target_properties(LLVMVisualizers PROPERTIES FOLDER "Utils") +endif() Index: utils/LLVMVisualizers/llvm.natvis =================================================================== --- utils/LLVMVisualizers/llvm.natvis +++ utils/LLVMVisualizers/llvm.natvis @@ -1,9 +1,11 @@ Index: utils/llvm.natvis =================================================================== --- utils/llvm.natvis +++ utils/llvm.natvis @@ -1,169 +0,0 @@ - - - - - - empty - {{ size={($T1*)EndX - ($T1*)BeginX} }} - - ($T1*)EndX - ($T1*)BeginX - ($T1*)CapacityX - ($T1*)BeginX - - ($T1*)EndX - ($T1*)BeginX - ($T1*)BeginX - - - - - - {BeginX,s} - BeginX,s - - (char*)EndX - (char*)BeginX - (char*)CapacityX - (char*)BeginX - - (char*)EndX - (char*)BeginX - (char*)BeginX - - - - - - {Data,[Length]s} - Data,[Length]s - - Length - - Length - Data - - - - - - {IntMask}: {($T1)(Value & PointerBitMask)} [{($T3)((Value >> IntShift) & IntMask)}] - - ($T1)(Value & PointerBitMask) - ($T3)((Value >> IntShift) & IntMask) - - - - - {"$T1", s8b}: {($T1)(Val.Value & Val.PointerBitMask)} - {"$T2", s8b}: {($T2)(Val.Value & Val.PointerBitMask)} - - ($T1)(Val.Value & Val.PointerBitMask) - ($T2)(Val.Value & Val.PointerBitMask) - - - - - {"$T1", s8b}: {($T1)((Val.Val.Value >> 2) << 2)} - {"$T2", s8b}: {($T2)((Val.Val.Value >> 2) << 2)} - {"$T3", s8b}: {($T3)((Val.Val.Value >> 2) << 2)} - - ($T1)((Val.Val.Value >> 2) << 2) - ($T2)((Val.Val.Value >> 2) << 2) - ($T3)((Val.Val.Value >> 2) << 2) - - - - - {"$T1", s8b}: {($T1)((Val.Val.Value >> 2) << 2)} - {"$T2", s8b}: {($T2)((Val.Val.Value >> 2) << 2)} - {"$T3", s8b}: {($T3)((Val.Val.Value >> 2) << 2)} - {"$T4", s8b}: {($T4)((Val.Val.Value >> 2) << 2)} - - ($T1)((Val.Val.Value >> 2) << 2) - ($T2)((Val.Val.Value >> 2) << 2) - ($T3)((Val.Val.Value >> 2) << 2) - ($T4)((Val.Val.Value >> 2) << 2) - - - - - {{ empty }} - {{ head={Head} }} - - - Head - Next - this - - - - - - empty - RefPtr [1 ref] {*Obj} - RefPtr [{Obj->ref_cnt} refs] {*Obj} - - Obj->ref_cnt - Obj - - - - - {{ [Small Mode] size={NumElements}, capacity={CurArraySize} }} - {{ [Big Mode] size={NumElements}, capacity={CurArraySize} }} - - NumElements - CurArraySize - - CurArraySize - ($T1*)CurArray - - - - - - empty - {{ size={NumEntries}, buckets={NumBuckets} }} - - NumEntries - NumBuckets - - NumBuckets - Buckets - - - - - - {{ size={NumItems}, buckets={NumBuckets} }} - - NumItems - NumBuckets - - NumBuckets - (MapEntryTy**)TheTable - - - - - - empty - ({this+1,s}, {second}) - - this+1,s - second - - - - - {Data} - - - - empty - {*(($T1 *)(unsigned char *)storage.buffer)} - - *(($T1 *)(unsigned char *)storage.buffer) - - -