aboutsummaryrefslogtreecommitdiff
path: root/cube/macOS/cubepp/cubepp.cmake
blob: 874ed25f6ab923ccb9e0d0daf973bb29f4da80bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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)