1set (GLMINC_PREFIX ${PROJECT_SOURCE_DIR}/libs) 2 3macro(generate_dispatch_table out) 4 add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${out} 5 COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate-dispatch-table.py ${CMAKE_CURRENT_SOURCE_DIR}/${out} 6 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate-dispatch-table.py 7 ) 8endmacro() 9 10macro(glsl_to_spirv src) 11 add_custom_command(OUTPUT ${src}.h 12 COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glsl-to-spirv ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${src}.h ${GLSLANG_VALIDATOR} 13 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/glsl-to-spirv ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${GLSLANG_VALIDATOR} 14 ) 15endmacro() 16 17generate_dispatch_table(HelpersDispatchTable.h) 18generate_dispatch_table(HelpersDispatchTable.cpp) 19glsl_to_spirv(Smoke.frag) 20glsl_to_spirv(Smoke.vert) 21glsl_to_spirv(Smoke.push_constant.vert) 22 23set(sources 24 Game.h 25 Helpers.h 26 HelpersDispatchTable.cpp 27 HelpersDispatchTable.h 28 Smoke.cpp 29 Smoke.h 30 Smoke.frag.h 31 Smoke.vert.h 32 Smoke.push_constant.vert.h 33 Main.cpp 34 Meshes.cpp 35 Meshes.h 36 Meshes.teapot.h 37 Simulation.cpp 38 Simulation.h 39 Shell.cpp 40 Shell.h 41 ) 42 43set(definitions 44 PRIVATE -DVK_NO_PROTOTYPES 45 PRIVATE -DGLM_FORCE_RADIANS) 46 47set(includes 48 PRIVATE ${GLMINC_PREFIX} 49 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 50 51set(libraries PRIVATE ${CMAKE_THREAD_LIBS_INIT}) 52 53if(TARGET vulkan) 54 list(APPEND definitions PRIVATE -DUNINSTALLED_LOADER="$<TARGET_FILE:vulkan>") 55endif() 56 57if(WIN32) 58 list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WIN32_KHR) 59 list(APPEND definitions PRIVATE -DWIN32_LEAN_AND_MEAN) 60 61 list(APPEND sources ShellWin32.cpp ShellWin32.h) 62else() 63 list(APPEND libraries PRIVATE -ldl -lrt) 64 65 if(BUILD_WSI_XCB_SUPPORT) 66 find_package(XCB REQUIRED) 67 68 list(APPEND sources ShellXcb.cpp ShellXcb.h) 69 list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_XCB_KHR) 70 list(APPEND includes PRIVATE ${XCB_INCLUDES}) 71 list(APPEND libraries PRIVATE ${XCB_LIBRARIES}) 72 elseif(BUILD_WSI_WAYLAND_SUPPORT) 73 find_package(Wayland REQUIRED) 74 75 list(APPEND sources ShellWayland.cpp ShellWayland.h) 76 list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WAYLAND_KHR) 77 list(APPEND includes PRIVATE ${WAYLAND_CLIENT_INCLUDE_DIR}) 78 list(APPEND libraries PRIVATE ${WAYLAND_CLIENT_LIBRARIES}) 79 endif() 80endif() 81 82set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/demos) 83 84add_executable(smoketest ${sources}) 85target_compile_definitions(smoketest ${definitions}) 86target_include_directories(smoketest ${includes}) 87target_link_libraries(smoketest ${libraries}) 88