############################################################################### cmake_minimum_required(VERSION 3.7.0) project(cruft-vulkan CXX) ############################################################################### find_package (Vulkan REQUIRED) find_package (PythonInterp 3 REQUIRED) find_package (glfw3 REQUIRED) find_program (GLSLANG glslangValidator) if (NOT GLSLANG) message (FATAL_ERROR "could not locate glslangValidator") endif () ############################################################################### include_directories ("${CMAKE_CURRENT_BINARY_DIR}") ##----------------------------------------------------------------------------- add_custom_command ( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vk.hpp" COMMENT "[spec.py] vk.hpp" COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tools/spec.py" "${CMAKE_CURRENT_SOURCE_DIR}/vk.xml" "${CMAKE_CURRENT_BINARY_DIR}/vk.hpp" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tools/spec.py" "${CMAKE_CURRENT_SOURCE_DIR}/vk.xml" ) ##----------------------------------------------------------------------------- list (APPEND sources vk.hpp fwd.hpp object.cpp object.hpp buffer.cpp buffer.hpp callback.hpp command_buffer.cpp command_buffer.hpp command_pool.cpp command_pool.hpp device.cpp device.hpp device_memory.cpp device_memory.hpp event.cpp event.hpp except.cpp except.hpp fence.cpp fence.hpp framebuffer.cpp framebuffer.hpp instance.cpp instance.hpp image.cpp image.hpp image_view.hpp ostream.cpp ostream.hpp physical_device.cpp physical_device.hpp pipeline.cpp pipeline.hpp pipeline_cache.cpp pipeline_cache.hpp pipeline_layout.cpp pipeline_layout.hpp queue.cpp queue.hpp render_pass.cpp render_pass.hpp semaphore.cpp semaphore.hpp shader_module.cpp shader_module.hpp surface.cpp surface.hpp swapchain.hpp traits.cpp traits.hpp ) ##----------------------------------------------------------------------------- add_library (cruft-vk STATIC ${sources}) target_link_libraries (cruft-vk cruft-util vulkan) ############################################################################### list (APPEND shaders tools/hello/shader.vert tools/hello/shader.frag ) foreach (src ${shaders}) set(src "${CMAKE_CURRENT_SOURCE_DIR}/${src}") get_filename_component(ext ${src} EXT) get_filename_component(name ${src} DIRECTORY) get_filename_component(name ${name} NAME) set(label "${name}${ext}.spv") set(dst "${CMAKE_CURRENT_BINARY_DIR}/tools/${label}") add_custom_command( OUTPUT ${dst} COMMAND ${GLSLANG} -s -o ${dst} -V100 ${src} DEPENDS ${src} COMMENT "[glslang] ${label}" VERBATIM ) add_custom_target(${label} DEPENDS ${dst}) endforeach () ############################################################################### get_directory_property (HAS_PARENT PARENT_DIRECTORY) if (HAS_PARENT) set (CRUFT_VK_FOUND 1 PARENT_SCOPE) endif () ############################################################################### foreach (t info hello) add_executable (vk_${t} "tools/${t}.cpp") set_target_properties(vk_${t} PROPERTIES OUTPUT_NAME ${t}) set_target_properties(vk_${t} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tools") target_link_libraries (vk_${t} cruft-vk glfw) endforeach () ##----------------------------------------------------------------------------- add_dependencies (vk_hello hello.vert.spv hello.frag.spv) ############################################################################### configure_file(libcruft-vk-system.pc.in libcruft-vk.pc) configure_file(Doxyfile.in Doxyfile)