blob: 874ed25f6ab923ccb9e0d0daf973bb29f4da80bd [file] [log] [blame]
# 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}/$<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"
${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)