diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4537e13 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.9) + +project(VulkanMemoryAllocator) + +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) + +find_package(Vulkan REQUIRED) + +# Put binaries into bin folder +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) + +add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..aea26cf --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,112 @@ +add_subdirectory(Shaders) +add_subdirectory(VmaReplay) + +set(VMA_LIBRARY_SOURCE_FILES + VmaUsage.cpp +) + +# Use folder structure as filters in project map +foreach(FILE ${VMA_LIBRARY_SOURCE_FILES}) + get_filename_component(PARENT_DIR "${FILE}" PATH) + + string(REPLACE "/" "\\" GROUP "${PARENT_DIR}") + + if("${FILE}" MATCHES ".*\\.cpp") + set(GROUP "Source Files\\${GROUP}") + elseif("${FILE}" MATCHES ".*\\.hpp") + set(GROUP "Header Files\\${GROUP}") + endif() + + source_group("${GROUP}" FILES "${FILE}") +endforeach() + +add_library(VmaLibrary ${VMA_LIBRARY_SOURCE_FILES}) + +set_target_properties( + VmaLibrary PROPERTIES + + CXX_EXTENSIONS OFF + # Use C++14 + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON +) + +target_include_directories( + VmaLibrary + + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + +target_link_libraries( + VmaLibrary + + PUBLIC + Vulkan::Vulkan +) + +set(VMA_EXAMPLE_SOURCE_FILES + Common.cpp + SparseBindingTest.cpp + Tests.cpp + VulkanSample.cpp +) + +# Use folder structure as filters in project map +foreach(FILE ${VMA_EXAMPLE_SOURCE_FILES}) + get_filename_component(PARENT_DIR "${FILE}" PATH) + + string(REPLACE "/" "\\" GROUP "${PARENT_DIR}") + + if("${FILE}" MATCHES ".*\\.cpp") + set(GROUP "Source Files\\${GROUP}") + elseif("${FILE}" MATCHES ".*\\.hpp") + set(GROUP "Header Files\\${GROUP}") + endif() + + source_group("${GROUP}" FILES "${FILE}") +endforeach() + +IF (WIN32) + add_executable(VmaExample ${VMA_EXAMPLE_SOURCE_FILES}) + + # Make sure to compile shaders when compiling the example + add_dependencies(VmaExample VmaShaders) + + # Visual Studio specific settings + if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") + # Use Unicode instead of multibyte set + add_definitions(-DUNICODE -D_UNICODE) + + # Set VmaExample as startup project + set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT "VmaExample") + + # Enable multithreaded compiling + target_compile_options(VmaExample PRIVATE "/MP") + + # Set working directory for Visual Studio debugger + set_target_properties( + VmaExample + PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" + ) + endif() + + set_target_properties( + VmaExample PROPERTIES + + CXX_EXTENSIONS OFF + # Use C++14 + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON + ) + + target_link_libraries( + VmaExample + + PRIVATE + VmaLibrary + ) + +ELSE() + message(STATUS "VmaExample application is not supported to Linux") +ENDIF() diff --git a/src/Shaders/CMakeLists.txt b/src/Shaders/CMakeLists.txt new file mode 100644 index 0000000..dfc2483 --- /dev/null +++ b/src/Shaders/CMakeLists.txt @@ -0,0 +1,30 @@ +find_program(GLSL_VALIDATOR glslangValidator REQUIRED) + +if(NOT GLSL_VALIDATOR) + message(FATAL_ERROR "glslangValidator not found!") +endif() + +set(SHADERS + Shader.vert + Shader.frag + SparseBindingTest.comp +) + +# Compile each shader using glslangValidator +foreach(SHADER ${SHADERS}) + get_filename_component(FILE_NAME ${SHADER} NAME) + + # Put the .spv files into the bin folder + set(SPIRV ${PROJECT_SOURCE_DIR}/bin/${FILE_NAME}.spv) + + add_custom_command( + OUTPUT ${SPIRV} + # Use the same file name and append .spv to the compiled shader + COMMAND ${GLSL_VALIDATOR} -V ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER} -o ${SPIRV} + DEPENDS ${SHADER} + ) + + list(APPEND SPIRV_FILES ${SPIRV}) +endforeach() + +add_custom_target(VmaShaders DEPENDS ${SPIRV_FILES}) diff --git a/src/VmaReplay/CMakeLists.txt b/src/VmaReplay/CMakeLists.txt new file mode 100644 index 0000000..a4d41d5 --- /dev/null +++ b/src/VmaReplay/CMakeLists.txt @@ -0,0 +1,19 @@ +IF (WIN32) + set(VMA_REPLAY_SOURCE_FILES + Common.cpp + Constants.cpp + VmaReplay.cpp + VmaUsage.cpp + ) + + add_executable(VmaReplay ${VMA_REPLAY_SOURCE_FILES}) + + target_link_libraries( + VmaReplay + + PRIVATE + Vulkan::Vulkan + ) +ELSE() + message(STATUS "VmaReplay is not supported on Linux") +ENDIF()