diff options
| author | Jeremy Kniager <jeremyk@lunarg.com> | 2018-05-17 11:15:43 -0600 |
|---|---|---|
| committer | jeremyk-lunarg <jeremyk@lunarg.com> | 2018-05-21 15:50:49 -0600 |
| commit | ba8dbbfe37a76d473703ee5123bc048cee9d096f (patch) | |
| tree | 6bed4832162e3e9a0759ed1b8e418f4c35d6935c | |
| parent | 9f377cd6236f47bc5403431f81e323c2b8a489b2 (diff) | |
| download | usermoji-ba8dbbfe37a76d473703ee5123bc048cee9d096f.tar.xz | |
cmake: Update CMake files to build for MacOS
Updated CMake scripts to add building for MacOS
Change-Id: I413f79e337d33f37891092da97380597e28c8257
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | cube/CMakeLists.txt | 46 | ||||
| -rw-r--r-- | cube/macOS/cube/cube.cmake | 12 | ||||
| -rw-r--r-- | cube/macOS/cubepp/cubepp.cmake | 14 | ||||
| -rw-r--r-- | mac_common.cmake (renamed from cube/macOS/common.cmake) | 16 | ||||
| -rw-r--r-- | vulkaninfo/CMakeLists.txt | 56 | ||||
| -rw-r--r-- | vulkaninfo/macOS/vulkaninfo.cmake | 26 |
7 files changed, 96 insertions, 77 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 240ec707..32c91d4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,6 +107,9 @@ if(UNIX) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() +if(APPLE) + include(mac_common.cmake) +endif() if(BUILD_CUBE) add_subdirectory(cube) endif() diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt index f907a9a8..c90ab904 100644 --- a/cube/CMakeLists.txt +++ b/cube/CMakeLists.txt @@ -138,31 +138,27 @@ file(COPY ${TEXTURES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -if(APPLE) - # TODO: Set libs for apple -else() - if(DEFINED LOADER_REPO_ROOT) - message(STATUS "Using user-supplied path to locate Vulkan") - if(WIN32) - set (LOADER_SEARCH_PATHS - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" - ) - elseif(UNIX) - set (LOADER_SEARCH_PATHS - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" - ) - endif() - - find_library(LIBVK NAMES vulkan vulkan-1 - HINTS ${LOADER_SEARCH_PATHS} +if(DEFINED LOADER_REPO_ROOT) + message(STATUS "Using user-supplied path to locate Vulkan") + if(WIN32) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" ) - message(STATUS "Found Vulkan: ${LIBVK}") else() - message(STATUS "Using find_package to locate Vulkan") - find_package(Vulkan) - set (LIBVK "Vulkan::Vulkan") + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" + ) endif() + + find_library(LIBVK NAMES vulkan vulkan-1 + HINTS ${LOADER_SEARCH_PATHS} + ) + message(STATUS "Found Vulkan: ${LIBVK}") +else() + message(STATUS "Using find_package to locate Vulkan") + find_package(Vulkan) + set (LIBVK "Vulkan::Vulkan") endif() if(WIN32) @@ -200,9 +196,9 @@ if(WIN32) endif() # MacOS setup -if(APPLE) - include(macOS/common.cmake) -endif() +#if(APPLE) +# include(macOS/common.cmake) +#endif() include_directories( ${CUBE_INCLUDE_DIRS} diff --git a/cube/macOS/cube/cube.cmake b/cube/macOS/cube/cube.cmake index b298933b..11be95f4 100644 --- a/cube/macOS/cube/cube.cmake +++ b/cube/macOS/cube/cube.cmake @@ -11,7 +11,7 @@ set(cube_HDRS ) set(cube_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lunarg.ppm - ${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json + ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cube/Resources/LunarGIcon.icns ) @@ -50,7 +50,7 @@ target_include_directories(cube PRIVATE ${MOLTENVK_DIR}/MoltenVK/include ) -target_link_libraries(cube ${LIBRARIES} "-framework Cocoa -framework QuartzCore") +target_link_libraries(cube ${LIBVK} "-framework Cocoa -framework QuartzCore") set_target_properties(cube PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cube/Info.plist @@ -64,20 +64,20 @@ set_target_properties(cube PROPERTIES set_source_files_properties(${cube_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" ) -set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json" PROPERTIES +set_source_files_properties("${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/vulkan/icd.d" ) # Copy the MoltenVK lib into the bundle. if(${CMAKE_GENERATOR} MATCHES "^Xcode.*") add_custom_command(TARGET cube POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/cube.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) else() add_custom_command(TARGET cube POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/cube.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) @@ -86,7 +86,7 @@ endif() # Fix up the library search path in the executable to find (loader) libraries in the bundle. install(CODE " include(BundleUtilities) - fixup_bundle(${CMAKE_INSTALL_PREFIX}/demos/cube.app \"\" \"\") + fixup_bundle(${CMAKE_INSTALL_PREFIX}/cube/cube.app \"\" \"\") " COMPONENT Runtime ) diff --git a/cube/macOS/cubepp/cubepp.cmake b/cube/macOS/cubepp/cubepp.cmake index 874ed25f..e61736ef 100644 --- a/cube/macOS/cubepp/cubepp.cmake +++ b/cube/macOS/cubepp/cubepp.cmake @@ -11,7 +11,7 @@ set(cubepp_HDRS ) set(cubepp_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lunarg.ppm - ${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json + ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Resources/LunarGIcon.icns ) @@ -50,7 +50,7 @@ target_include_directories(cubepp PRIVATE ${MOLTENVK_DIR}/MoltenVK/include ) -target_link_libraries(cubepp ${LIBRARIES} "-framework Cocoa -framework QuartzCore") +target_link_libraries(cubepp ${LIBVK} "-framework Cocoa -framework QuartzCore") set_target_properties(cubepp PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Info.plist @@ -64,12 +64,12 @@ set_target_properties(cubepp PROPERTIES set_source_files_properties(${cubepp_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" ) -set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json" PROPERTIES +set_source_files_properties("${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/vulkan/icd.d" ) # Direct the MoltenVK library to the right place. -install(FILES "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" +install(FILES "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" DESTINATION "demos/cubepp.app/Contents/Frameworks" COMPONENT Runtime ) @@ -77,13 +77,13 @@ install(FILES "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" # Copy the MoltenVK lib into the bundle. if(${CMAKE_GENERATOR} MATCHES "^Xcode.*") add_custom_command(TARGET cubepp POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/cubepp.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) else() add_custom_command(TARGET cubepp POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/cubepp.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) @@ -92,7 +92,7 @@ endif() # Fix up the library search path in the executable to find (loader) libraries in the bundle. install(CODE " include(BundleUtilities) - fixup_bundle(${CMAKE_INSTALL_PREFIX}/demos/cubepp.app \"\" \"\") + fixup_bundle(${CMAKE_INSTALL_PREFIX}/cube/cubepp.app \"\" \"\") " COMPONENT Runtime ) diff --git a/cube/macOS/common.cmake b/mac_common.cmake index 6a35db95..4b74614e 100644 --- a/cube/macOS/common.cmake +++ b/mac_common.cmake @@ -1,24 +1,30 @@ # Set up common settings for building all demos on Apple platforms. # Source for the MoltenVK ICD library and JSON file -set(MOLTENVK_DIR "${PROJECT_SOURCE_DIR}/external/MoltenVK") +set(MOLTENVK_DIR ${MOLTENVK_REPO_ROOT}) # MoltenVK JSON File +execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/staging-json) +execute_process( + COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$" ${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json + OUTPUT_FILE ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json +) + # Modify the ICD JSON file to adjust the library path. # The ICD JSON file goes in the Resources/vulkan/icd.d directory, so adjust the # library_path to the relative path to the Frameworks directory in the bundle.. # The regex does: substitute ':<whitespace>"<whitespace><all occurences of . and />' with: # ': "../../../Frameworks/' add_custom_target(MoltenVK_icd-staging-json ALL - COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/staging-json + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/staging-json COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$" ${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json > - ${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json + ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json VERBATIM DEPENDS "${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json" ) -set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES +set_source_files_properties(${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES GENERATED TRUE ) @@ -30,7 +36,7 @@ if (NOT ${CMAKE_GENERATOR} MATCHES "^Xcode.*") # skip generation of this project find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin") if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND") - message(SEND_ERROR + message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. " "It should have been installed with the Apple developer tools. " "The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin." diff --git a/vulkaninfo/CMakeLists.txt b/vulkaninfo/CMakeLists.txt index ed7dcd9a..81a3896f 100644 --- a/vulkaninfo/CMakeLists.txt +++ b/vulkaninfo/CMakeLists.txt @@ -12,32 +12,40 @@ else() endif() if(APPLE) - target_link_libraries(${API_LOWERCASE}info ${LIBRARIES} "-framework AppKit -framework QuartzCore") - target_include_directories(${API_LOWERCASE}info PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) -else() - if(DEFINED LOADER_REPO_ROOT) - message(STATUS "Using user-supplied path to locate Vulkan") - if(WIN32) - set (LOADER_SEARCH_PATHS - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" - ) - elseif(UNIX) - set (LOADER_SEARCH_PATHS - "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" - ) - endif() +endif() - find_library(LIBVK NAMES vulkan vulkan-1 - HINTS ${LOADER_SEARCH_PATHS} +if(DEFINED LOADER_REPO_ROOT) + message(STATUS "Using user-supplied path to locate Vulkan") + if(WIN32) + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}" + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}" ) - message(STATUS "Found Vulkan: ${LIBVK}") + else() + set (LOADER_SEARCH_PATHS + "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader" + ) + endif() + + find_library(LIBVK NAMES vulkan vulkan-1 + HINTS ${LOADER_SEARCH_PATHS} + ) + message(STATUS "Found Vulkan: ${LIBVK}") + if(APPLE) + target_link_libraries(vulkaninfo ${LIBVK} "-framework AppKit -framework QuartzCore") + target_include_directories(vulkaninfo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) + else() target_link_libraries(vulkaninfo ${LIBVK}) + endif() + else() + message(STATUS "Using find_package to locate Vulkan") + find_package(Vulkan) + set (LIBVK "Vulkan::Vulkan") + if(APPLE) + target_link_libraries(vulkaninfo ${LIBVK} "-framework AppKit -framework QuartzCore") + target_include_directories(vulkaninfo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) else() - message(STATUS "Using find_package to locate Vulkan") - find_package(Vulkan) - set (LIBVK "Vulkan::Vulkan") - target_link_libraries(vulkaninfo Vulkan::Vulkan) + target_link_libraries(vulkaninfo ${LIBVK}) endif() endif() @@ -50,7 +58,7 @@ endif() # Create vulkaninfo application bundle for MacOS if(APPLE) - include(macOS/vulkaninfo/vulkaninfo.cmake) + include(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.cmake) endif() if(WIN32) @@ -65,6 +73,8 @@ if(WIN32) endforeach() file(COPY vulkaninfo.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/demos) +elseif(APPLE) + add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") diff --git a/vulkaninfo/macOS/vulkaninfo.cmake b/vulkaninfo/macOS/vulkaninfo.cmake index d5da172c..5299f918 100644 --- a/vulkaninfo/macOS/vulkaninfo.cmake +++ b/vulkaninfo/macOS/vulkaninfo.cmake @@ -6,40 +6,44 @@ # Note that the executable is a script that launches Terminal to see the output. add_executable(vulkaninfo-bundle MACOSX_BUNDLE vulkaninfo.c - ${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json - ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/vulkaninfo.sh - ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/Resources/LunarGIcon.icns + ${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json + ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.sh + ${CMAKE_CURRENT_SOURCE_DIR}/macOS/Resources/LunarGIcon.icns ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/metal_view.m ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/metal_view.h ) set_target_properties(vulkaninfo-bundle PROPERTIES OUTPUT_NAME vulkaninfo - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/Info.plist + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist ) -target_link_libraries(vulkaninfo-bundle ${LIBRARIES} "-framework AppKit -framework QuartzCore") +target_link_libraries(vulkaninfo-bundle ${LIBVK} "-framework AppKit -framework QuartzCore") target_include_directories(vulkaninfo-bundle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) add_dependencies(vulkaninfo-bundle MoltenVK_icd-staging-json) -set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/vulkaninfo.sh PROPERTIES +set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.sh PROPERTIES MACOSX_PACKAGE_LOCATION "MacOS" ) -set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo/Resources/LunarGIcon.icns PROPERTIES +set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/Resources/LunarGIcon.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" ) +set_source_files_properties(${CMAKE_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources/vulkan/icd.d" +) + # Direct the MoltenVK library to the right place. -install(FILES "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" +install(FILES "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" DESTINATION "demos/vulkaninfo.app/Contents/Frameworks" COMPONENT Runtime ) # Xcode projects need some extra help with what would be install steps. if(${CMAKE_GENERATOR} MATCHES "^Xcode.*") add_custom_command(TARGET vulkaninfo-bundle POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vulkaninfo.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) else() add_custom_command(TARGET vulkaninfo-bundle POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" + COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/MoltenVK/macOS/libMoltenVK.dylib" ${CMAKE_CURRENT_BINARY_DIR}/vulkaninfo.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) @@ -51,6 +55,6 @@ endif() # Instead pass it the explicit name of the executable. install(CODE " include(BundleUtilities) - fixup_bundle(${CMAKE_INSTALL_PREFIX}/demos/vulkaninfo.app/Contents/MacOS/vulkaninfo \"\" \"\") + fixup_bundle(${CMAKE_INSTALL_PREFIX}/vulkaninfo/vulkaninfo.app/Contents/MacOS/vulkaninfo \"\" \"\") " COMPONENT Runtime ) |
