aboutsummaryrefslogtreecommitdiff
path: root/cube/macOS/cubepp/cubepp.cmake
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2018-04-11 13:38:11 -0600
committerMark Lobodzinski <mark@lunarg.com>2018-05-11 20:10:23 -0600
commit6e590c31d0ceaf3edc717d4e79aacc9afed46f5c (patch)
treeff9cc5efbb622567d2f1bb823e0a5eb179fdc2e3 /cube/macOS/cubepp/cubepp.cmake
parentb37d3d8477db4ea1dc7ae25539b35a0e8e365a7f (diff)
downloadusermoji-6e590c31d0ceaf3edc717d4e79aacc9afed46f5c.tar.xz
cube: Move cube directory up to top level dir
Change-Id: Ie1116b0b6de742b4f85834a4c9d1927dd641e19b
Diffstat (limited to 'cube/macOS/cubepp/cubepp.cmake')
-rw-r--r--cube/macOS/cubepp/cubepp.cmake104
1 files changed, 104 insertions, 0 deletions
diff --git a/cube/macOS/cubepp/cubepp.cmake b/cube/macOS/cubepp/cubepp.cmake
new file mode 100644
index 00000000..874ed25f
--- /dev/null
+++ b/cube/macOS/cubepp/cubepp.cmake
@@ -0,0 +1,104 @@
+# 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)