Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: CMake only PR. #1947

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
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
45 changes: 45 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.20)
project(MoltenVK)

set(MVK_GIT_REV "unknown")

function(check_lists_equal list1 list2)
set(DIFF_ITEMS )
# Check if each element in the first list is in the second list
foreach(element IN LISTS ${list1})
if(NOT ${element} IN LISTS ${list2})
LIST(APPEND DIFF_ITEMS ${element})
endif()
endforeach()

if(DIFF_ITEMS)
message(STATUS "glob found the following files ${DIFF_ITEMS} which aren't part of the SRC_LIST in ${CMAKE_CURRENT_LIST_FILE}")
endif ()
endfunction()

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 PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

install ( TARGETS MoltenVK moltenvk_shader_converter EXPORT MotlenVK )
export ( TARGETS MoltenVK moltenvk_shader_converter cereal glslang SPIRV OGLCompiler OSDependent MachineIndependent
GenericCodeGen
FILE ${CMAKE_BINARY_DIR}/MoltenVKConfig.cmake )
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)
billhollings marked this conversation as resolved.
Show resolved Hide resolved
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.

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

file(GLOB_RECURSE MOLTEN_VK_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/MoltenVK *.mm *.m *.cpp)
list(PREPEND MOLTEN_VK_SOURCES ../Common/MVKOSExtensions.mm)

##
## MoltenVK-iOS
##

add_library(MoltenVK STATIC ${MOLTEN_VK_SOURCES})

target_include_directories(MoltenVK
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 PRIVATE cxx_std_17)
target_link_libraries(MoltenVK 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
##
set(SRC_LIST
../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
)

file(GLOB SRCS RELATIVE CONFIGURE_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/MoltenVKShaderConverter *.mm *.cpp *.m)
list(PREPEND SRCS ../Common/MVKOSExtensions.mm)

check_lists_equal(${SRCS}, ${SRC_LIST})

add_library(moltenvk_shader_converter STATIC ${SRC_LIST})

find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
find_library(METAL_LIBRARY Metal REQUIRED)
find_library(APPKIT_LIBRARY AppKit REQUIRED)
find_library(IOKIT_LIBRARY IOKit REQUIRED)
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
find_library(QUARTZCORE_LIBRARY QuartzCore REQUIRED)


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.

Loading