cmake: Update CMake files to build for MacOS
authorJeremy Kniager <jeremyk@lunarg.com>
Thu, 17 May 2018 17:15:43 +0000 (11:15 -0600)
committerjeremyk-lunarg <jeremyk@lunarg.com>
Mon, 21 May 2018 21:50:49 +0000 (15:50 -0600)
Updated CMake scripts to add building for MacOS

Change-Id: I413f79e337d33f37891092da97380597e28c8257

CMakeLists.txt
cube/CMakeLists.txt
cube/macOS/cube/cube.cmake
cube/macOS/cubepp/cubepp.cmake
mac_common.cmake [moved from cube/macOS/common.cmake with 72% similarity]
vulkaninfo/CMakeLists.txt
vulkaninfo/macOS/vulkaninfo.cmake

index 240ec70..32c91d4 100644 (file)
@@ -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()
index f907a9a..c90ab90 100644 (file)
@@ -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}
index b298933..11be95f 100644 (file)
@@ -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
 )
 
index 874ed25..e61736e 100644 (file)
@@ -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
 )
 
similarity index 72%
rename from cube/macOS/common.cmake
rename to mac_common.cmake
index 6a35db9..4b74614 100644 (file)
@@ -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."
index ed7dcd9..81a3896 100644 (file)
@@ -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")
index d5da172..5299f91 100644 (file)
@@ -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
 )