set (GLMINC_PREFIX ${PROJECT_SOURCE_DIR}/libs)
macro(generate_dispatch_table out)
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${out}
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate-dispatch-table.py ${CMAKE_CURRENT_SOURCE_DIR}/${out}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate-dispatch-table.py
)
endmacro()
macro(glsl_to_spirv src)
add_custom_command(OUTPUT ${src}.h
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glsl-to-spirv ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${src}.h ${GLSLANG_VALIDATOR}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/glsl-to-spirv ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${GLSLANG_VALIDATOR}
)
endmacro()
generate_dispatch_table(HelpersDispatchTable.h)
generate_dispatch_table(HelpersDispatchTable.cpp)
glsl_to_spirv(Smoke.frag)
glsl_to_spirv(Smoke.vert)
glsl_to_spirv(Smoke.push_constant.vert)
set(sources
Game.cpp
Game.h
Helpers.h
HelpersDispatchTable.cpp
HelpersDispatchTable.h
Smoke.cpp
Smoke.h
Smoke.frag.h
Smoke.vert.h
Smoke.push_constant.vert.h
Main.cpp
Meshes.cpp
Meshes.h
Meshes.teapot.h
Simulation.cpp
Simulation.h
Shell.cpp
Shell.h
)
set(definitions
PRIVATE -DVK_NO_PROTOTYPES
PRIVATE -DGLM_FORCE_RADIANS)
set(includes
PRIVATE ${GLMINC_PREFIX}
PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
set(libraries PRIVATE ${CMAKE_THREAD_LIBS_INIT})
if(TARGET vulkan)
list(APPEND definitions PRIVATE -DUNINSTALLED_LOADER="$<TARGET_FILE:vulkan>")
endif()
if(WIN32)
list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
list(APPEND definitions PRIVATE -DWIN32_LEAN_AND_MEAN)
list(APPEND sources ShellWin32.cpp ShellWin32.h)
else()
list(APPEND libraries PRIVATE -ldl -lrt)
if(BUILD_WSI_XCB_SUPPORT AND DEMOS_WSI_SELECTION STREQUAL "XCB")
find_package(XCB REQUIRED)
list(APPEND sources ShellXcb.cpp ShellXcb.h)
list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_XCB_KHR)
list(APPEND includes PRIVATE ${XCB_INCLUDES})
list(APPEND libraries PRIVATE ${XCB_LIBRARIES})
elseif(BUILD_WSI_WAYLAND_SUPPORT AND DEMOS_WSI_SELECTION STREQUAL "WAYLAND")
find_package(Wayland REQUIRED)
list(APPEND sources ShellWayland.cpp ShellWayland.h)
list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WAYLAND_KHR)
list(APPEND includes PRIVATE ${WAYLAND_CLIENT_INCLUDE_DIR})
list(APPEND libraries PRIVATE ${WAYLAND_CLIENT_LIBRARIES})
endif()
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
add_executable(smoketest ${sources})
target_compile_definitions(smoketest ${definitions})
target_include_directories(smoketest ${includes})
target_link_libraries(smoketest ${libraries})
if(UNIX)
if(INSTALL_LVL_FILES)
install(TARGETS smoketest DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
endif()