Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 3.25)
project(MoltenVK)

set(MVK_GIT_REV "unknown")

find_package(Git)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
OUTPUT_VARIABLE MVK_GIT_REV
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message( STATUS "GIT hash: ${MVK_GIT_REV}")
else()
message(STATUS "GIT not found")
endif()

configure_file(${CMAKE_CURRENT_LIST_DIR}/mvkGitRevDerived.h.in
${CMAKE_CURRENT_BINARY_DIR}/mvkGitRevDerived.h)

add_subdirectory(External)
add_subdirectory(MoltenVKShaderConverter)
add_subdirectory(MoltenVK)

target_include_directories(MoltenVK-iOS PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(MoltenVK-tvOS PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(MoltenVK-macOS PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
8 changes: 8 additions & 0 deletions External/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
set(SKIP_PORTABILITY_TEST ON)
set(JUST_INSTALL_CEREAL ON)

add_subdirectory(cereal)
add_subdirectory(glslang)
set(SPIRV_TOOLS_BUILD_STATIC ON)
add_subdirectory(SPIRV-Cross)
add_subdirectory(Vulkan-Headers)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The contents of External are not currently saved to repo. .gitignore needs to be adjusted so that External/CMakeLists.txt is added to the repo.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In regards to external deps, for a cmake approach, was CPM considered?

204 changes: 204 additions & 0 deletions MoltenVK/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@


##
## MoltenVK-iOS Files
##

set(MOLTEN_VK_PROJECT_HEADERS
${CMAKE_CURRENT_LIST_DIR}/../Common/MVKCommonEnvironment.h
${CMAKE_CURRENT_LIST_DIR}/../Common/MVKOSExtensions.h
${CMAKE_CURRENT_LIST_DIR}/../Common/MVKStrings.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API/mvk_datatypes.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API/mvk_vulkan.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API/vk_mvk_moltenvk.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdDebug.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdDraw.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdPipeline.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdQueries.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRenderPass.h
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRenderPass.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRendering.h

${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdTransfer.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommand.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandBuffer.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandEncoderState.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandEncodingPool.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandPipelineStateFactoryShaderSource.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandPool.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandResourceFactory.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKMTLBufferAllocation.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKMTLResourceBindings.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKBuffer.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDescriptor.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDescriptorSet.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDevice.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDeviceMemory.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKFramebuffer.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKImage.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKInstance.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKPipeline.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKPixelFormats.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKQueryPool.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKQueue.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKRenderPass.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKResource.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKShaderModule.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSurface.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSwapchain.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSync.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKVulkanAPIObject.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers/MVKExtensions.def
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers/MVKExtensions.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers/MVKLayers.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/CAMetalLayer+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassDepthAttachmentDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassStencilAttachmentDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPipelineDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLSamplerDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLTextureDescriptor+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MVKGPUCapture.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/NSString+MoltenVK.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKBaseObject.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKBitArray.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKBlockObserver.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKCodec.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKEnvironment.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKFoundation.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKLogging.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKObjectPool.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKSmallVector.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKSmallVectorAllocator.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKWatermark.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKWatermarkShaderSource.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKWatermarkTextureContent.h
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan/mvk_datatypes.hpp
)

set(MOLTEN_VK_SOURCES
${CMAKE_CURRENT_LIST_DIR}/../Common/MVKOSExtensions.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdDebug.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdDispatch.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdDraw.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdPipeline.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdQueries.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRenderPass.mm
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRenderPass.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdRendering.mm

${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCmdTransfer.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandBuffer.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandEncoderState.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandEncodingPool.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandPool.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKCommandResourceFactory.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands/MVKMTLBufferAllocation.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKBuffer.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDescriptor.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDescriptorSet.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDevice.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKDeviceMemory.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKFramebuffer.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKImage.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKInstance.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKPipeline.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKPixelFormats.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKQueryPool.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKQueue.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKRenderPass.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKResource.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKShaderModule.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSurface.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSwapchain.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKSync.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects/MVKVulkanAPIObject.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers/MVKExtensions.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers/MVKLayers.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/CAMetalLayer+MoltenVK.m
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/CAMetalLayer+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/CAMetalLayer+MoltenVK.mm

${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassDepthAttachmentDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPassStencilAttachmentDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLRenderPipelineDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLSamplerDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MTLTextureDescriptor+MoltenVK.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/MVKGPUCapture.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS/NSString+MoltenVK.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKBaseObject.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKBlockObserver.m
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKCodec.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKEnvironment.cpp
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKFoundation.cpp
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility/MVKWatermark.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan/mvk_datatypes.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan/mvk_api.mm
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan/vulkan.mm
)

##
## MoltenVK-iOS
##

add_library(MoltenVK-iOS STATIC
${MOLTEN_VK_SOURCES}
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MoltenVK-iOS target builds a macOS binary.


target_include_directories(MoltenVK-iOS
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/../Common
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan
${CMAKE_CURRENT_LIST_DIR}/include
)

target_compile_features(MoltenVK-iOS PRIVATE cxx_std_17)
target_link_libraries(MoltenVK-iOS PUBLIC moltenvk_shader_converter)

##
## MoltenVK-tvOS
##

add_library(MoltenVK-tvOS STATIC
${MOLTEN_VK_SOURCES}
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MoltenVK-tvOS target builds a macOS binary.


target_include_directories(MoltenVK-tvOS
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/../Common
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan
${CMAKE_CURRENT_LIST_DIR}/include
)

target_compile_features(MoltenVK-tvOS PRIVATE cxx_std_17)
target_link_libraries(MoltenVK-tvOS PUBLIC moltenvk_shader_converter)


##
## MoltenVK-macOS
##

add_executable(MoltenVK-macOS
${MOLTEN_VK_SOURCES}
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MoltenVK-macOS target builds the MoltenVKShaderConverter tool, not a MoltenVK static library.


target_include_directories(MoltenVK-macOS
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/../Common
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/API
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Commands
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/GPUObjects
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Layers
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/OS
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Utility
${CMAKE_CURRENT_LIST_DIR}/MoltenVK/Vulkan
${CMAKE_CURRENT_LIST_DIR}/include
)

target_compile_features(MoltenVK-macOS PRIVATE cxx_std_17)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To get any of the MoltenVK-* targets to build, I also had to add the following build settings:

CURRENT_PROJECT_VERSION=1.2.9
GCC_PREPROCESSOR_DEFINITIONS=MVK_FRAMEWORK_VERSION=${CURRENT_PROJECT_VERSION}

target_link_libraries(MoltenVK-macOS PUBLIC moltenvk_shader_converter)
40 changes: 40 additions & 0 deletions MoltenVKShaderConverter/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
##
## MoltenVKShaderConverter Files
##

add_library(moltenvk_shader_converter STATIC
../Common/MVKOSExtensions.mm
MoltenVKShaderConverter/SPIRVSupport.cpp
MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp
MoltenVKShaderConverterTool/OSSupport.mm
MoltenVKShaderConverterTool/main.cpp
MoltenVKShaderConverter/FileSupport.mm
MoltenVKShaderConverter/GLSLConversion.mm
MoltenVKShaderConverter/GLSLToSPIRVConverter.cpp
MoltenVKShaderConverter/SPIRVConversion.mm
MoltenVKShaderConverter/SPIRVToMSLConverter.cpp
)

find_library(FOUNDATION_LIBRARY Foundation)
message(STATUS "FOUNDATION_LIBRARY is ${FOUNDATION_LIBRARY}")
find_library(METAL_LIBRARY Metal)
message(STATUS "METAL_LIBRARY is ${METAL_LIBRARY}")
find_library(APPKIT_LIBRARY AppKit)
message(STATUS "APPKIT_LIBRARY is ${APPKIT_LIBRARY}")
find_library(IOKIT_LIBRARY IOKit)
message(STATUS "IOKIT_LIBRARY is ${IOKIT_LIBRARY}")
find_library(IOSURFACE_LIBRARY IOSurface)
message(STATUS "IOSURFACE_LIBRARY is ${IOSURFACE_LIBRARY}")
find_library(QUARTZCORE_LIBRARY QuartzCore)
message(STATUS "QUARTZCORE_LIBRARY is ${QUARTZCORE_LIBRARY}")


target_link_libraries(moltenvk_shader_converter PUBLIC ${FOUNDATION_LIBRARY} ${METAL_LIBRARY} ${APPKIT_LIBRARY}
${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} ${QUARTZCORE_LIBRARY}
cereal spirv-cross-msl glslang SPIRV-Tools-opt spirv-cross-reflect SPIRV)

target_include_directories(moltenvk_shader_converter PUBLIC MoltenVKShaderConverter include
${CMAKE_CURRENT_LIST_DIR}/../Common
${CMAKE_CURRENT_LIST_DIR}/../External
${CMAKE_CURRENT_LIST_DIR})
target_compile_features(moltenvk_shader_converter PUBLIC cxx_std_17)
2 changes: 2 additions & 0 deletions mvkGitRevDerived.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Auto-generated by MoltenVK
static const char* mvkRevString = "@MVK_GIT_REV@";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to avoid cluttering the top level directory if possible. Can we find a different home for this file? Maybe under Templates?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll move it there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file should be moved to a new Templates/cmake directory.