# Cube Application Bundle set(cubepp_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/main.mm ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/AppDelegate.mm ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/DemoViewController.mm ) set(cubepp_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/AppDelegate.h ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/DemoViewController.h ) set(cubepp_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lunarg.ppm ${CMAKE_CURRENT_BINARY_DIR}/staging-json/MoltenVK_icd.json ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Resources/LunarGIcon.icns ) # Have Xcode handle the Storyboard if(${CMAKE_GENERATOR} MATCHES "^Xcode.*") set(cubepp_RESOURCES ${cubepp_RESOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Resources/Main.storyboard ) endif() add_executable(cubepp MACOSX_BUNDLE ${cubepp_SRCS} ${cubepp_HDRS} ${cubepp_RESOURCES} cube.vert.inc cube.frag.inc ) # Handle the Storyboard ourselves if(NOT ${CMAKE_GENERATOR} MATCHES "^Xcode.*") # Compile the storyboard file with the ibtool. add_custom_command(TARGET cubepp POST_BUILD COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text --compile ${CMAKE_CURRENT_BINARY_DIR}/cubepp.app/Contents/Resources/Main.storyboardc ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Resources/Main.storyboard COMMENT "Compiling storyboard" ) endif() add_dependencies(cubepp MoltenVK_icd-staging-json) # Include demo source code dir because the MacOS cubepp's Objective-C source includes # the "original" cubepp application C++ source code. # Also include the MoltenVK helper files. target_include_directories(cubepp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${MOLTENVK_DIR}/MoltenVK/include ) target_link_libraries(cubepp ${LIBRARIES} "-framework Cocoa -framework QuartzCore") set_target_properties(cubepp PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/cubepp/Info.plist ) # The RESOURCE target property cannot be used in conjunction with the MACOSX_PACKAGE_LOCATION # property. We need fine-grained control over the Resource directory, so we have to specify # the destination of all the resource files on a per-destination-directory basis. # If all the files went into the top-level Resource directory, then we could simply set # the RESOURCE property to a list of all the resource files. 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 MACOSX_PACKAGE_LOCATION "Resources/vulkan/icd.d" ) # Direct the MoltenVK library to the right place. install(FILES "${MOLTENVK_DIR}/MoltenVK/MacOS/libMoltenVK.dylib" DESTINATION "demos/cubepp.app/Contents/Frameworks" COMPONENT Runtime ) # 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" ${CMAKE_CURRENT_BINARY_DIR}/$/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" ${CMAKE_CURRENT_BINARY_DIR}/cubepp.app/Contents/Frameworks/libMoltenVK.dylib DEPENDS vulkan ) 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 \"\" \"\") " COMPONENT Runtime ) # Not sure this is needed. When activated, it makes a symlink from # libvulkan.dylib to libvulkan.1.dylib (which in turn symlinks to libvulkan.1.0.xx.dylib.) # install(FILES # "${CMAKE_BINARY_DIR}/loader/libvulkan.dylib" # DESTINATION "demos/cubepp.app/Contents/MacOS" # COMPONENT Runtime)