| cmake_minimum_required(VERSION 3.25) |
| |
| set(D3D12MA_LIBRARY_SOURCE_FILES |
| D3D12MemAlloc.cpp |
| "${PROJECT_SOURCE_DIR}/include/D3D12MemAlloc.h" |
| ) |
| |
| if(WIN32 AND ${CMAKE_GENERATOR} MATCHES "Visual Studio.*") |
| set(D3D12MA_LIBRARY_SOURCE_FILES ${D3D12MA_LIBRARY_SOURCE_FILES} D3D12MemAlloc.natvis) |
| endif() |
| |
| add_library(D3D12MemoryAllocator ${D3D12MA_LIBRARY_SOURCE_FILES}) |
| |
| set_target_properties( |
| D3D12MemoryAllocator PROPERTIES |
| |
| CXX_EXTENSIONS OFF |
| # Use C++14 |
| CXX_STANDARD 14 |
| CXX_STANDARD_REQUIRED ON |
| |
| OUTPUT_NAME "D3D12MA" |
| # Postfix for different profiles |
| DEBUG_POSTFIX "d" |
| RELWITHDEBINFO_POSTFIX "rd" |
| MINSIZEREL_POSTFIX "s" |
| ) |
| |
| target_include_directories(D3D12MemoryAllocator PUBLIC |
| $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:./include> |
| ) |
| |
| target_link_libraries(D3D12MemoryAllocator PUBLIC |
| d3d12.lib |
| dxgi.lib |
| dxguid.lib |
| ) |
| |
| if(BUILD_SHARED_LIBS) |
| target_compile_definitions(D3D12MemoryAllocator PRIVATE |
| D3D12MA_EXPORTS |
| ) |
| |
| target_compile_definitions(D3D12MemoryAllocator INTERFACE |
| D3D12MA_IMPORTS |
| ) |
| endif() |
| |
| set(D3D12MA_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") |
| set(D3D12MA_VERSION_CONFIG "${D3D12MA_GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") |
| set(D3D12MA_PROJECT_CONFIG "${D3D12MA_GENERATED_DIR}/${PROJECT_NAME}Config.cmake") |
| set(D3D12MA_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") |
| set(D3D12MA_CONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}") |
| set(D3D12MA_NAMESPACE "GPUOpen::") |
| set(D3D12MA_VERSION ${PROJECT_VERSION}) |
| |
| include(CMakePackageConfigHelpers) |
| write_basic_package_version_file( |
| "${D3D12MA_VERSION_CONFIG}" VERSION ${D3D12MA_VERSION} COMPATIBILITY SameMajorVersion |
| ) |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in" "${D3D12MA_PROJECT_CONFIG}" @ONLY) |
| |
| # Install cmake config files |
| install( |
| FILES "${D3D12MA_PROJECT_CONFIG}" "${D3D12MA_VERSION_CONFIG}" |
| DESTINATION "${D3D12MA_CONFIG_INSTALL_DIR}") |
| |
| install( |
| EXPORT "${D3D12MA_TARGETS_EXPORT_NAME}" |
| NAMESPACE "${D3D12MA_NAMESPACE}" |
| DESTINATION "${D3D12MA_CONFIG_INSTALL_DIR}") |
| |
| install(TARGETS D3D12MemoryAllocator |
| EXPORT ${D3D12MA_TARGETS_EXPORT_NAME} |
| RUNTIME DESTINATION "bin" |
| ARCHIVE DESTINATION "lib" |
| LIBRARY DESTINATION "lib") |
| install(FILES "${PROJECT_SOURCE_DIR}/include/D3D12MemAlloc.h" DESTINATION "include") |
| |
| if(D3D12MA_BUILD_SAMPLE) |
| if(WIN32) |
| set(SHADER_DIR "Shaders") |
| |
| set(D3D12_SAMPLE_SOURCE_FILES |
| Common.cpp |
| Common.h |
| Tests.cpp |
| Tests.h |
| D3D12Sample.cpp |
| ) |
| |
| set(VERTEX_SHADERS |
| "${SHADER_DIR}/VS.hlsl" |
| ) |
| |
| set(PIXEL_SHADERS |
| "${SHADER_DIR}/PS.hlsl" |
| ) |
| |
| set( SHADERS |
| ${VERTEX_SHADERS} |
| ${PIXEL_SHADERS} |
| ) |
| |
| source_group("Resources\\Shaders" FILES ${SHADERS}) |
| |
| set_source_files_properties(${VERTEX_SHADERS} |
| PROPERTIES |
| VS_SHADER_TYPE Vertex |
| VS_SETTINGS "ExcludedFromBuild=true" |
| ) |
| |
| set_source_files_properties( ${PIXEL_SHADERS} |
| PROPERTIES |
| VS_SHADER_TYPE Pixel |
| VS_SETTINGS "ExcludedFromBuild=true" |
| ) |
| |
| add_executable(D3D12Sample ${D3D12_SAMPLE_SOURCE_FILES} ${SHADERS}) |
| |
| add_dependencies(D3D12Sample D3D12MemoryAllocator) |
| |
| # Visual Studio specific settings |
| if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") |
| # Use Unicode instead of multibyte set |
| add_compile_definitions(UNICODE _UNICODE) |
| |
| # Set VmaSample as startup project |
| set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT "D3D12Sample") |
| |
| # Enable multithreaded compiling |
| target_compile_options(D3D12Sample PRIVATE "/MP") |
| |
| # Set working directory for Visual Studio debugger |
| set_target_properties( |
| D3D12Sample |
| PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" |
| ) |
| endif() |
| |
| set_target_properties( |
| D3D12Sample PROPERTIES |
| |
| CXX_EXTENSIONS OFF |
| # Use C++14 |
| CXX_STANDARD 14 |
| CXX_STANDARD_REQUIRED ON |
| ) |
| |
| target_link_libraries( |
| D3D12Sample |
| |
| PRIVATE D3D12MemoryAllocator |
| PUBLIC d3d12.lib |
| PUBLIC dxgi.lib |
| PUBLIC dxguid.lib |
| PUBLIC Shlwapi.lib |
| ) |
| else() |
| message(STATUS "D3D12Sample application is not supported to Linux") |
| endif() |
| endif() |
| |
| set(D3D12MA_AGILITY_SDK_DIRECTORY "" CACHE STRING "Path to unpacked DX12 Agility SDK. Leave empty to compile without it.") |
| option(D3D12MA_AGILITY_SDK_PREVIEW "Set if DX12 Agility SDK is preview version." OFF) |
| if(D3D12MA_AGILITY_SDK_DIRECTORY) |
| if(EXISTS "${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/include/d3d12.h") |
| message(STATUS "DX12 Agility SDK used from \"${D3D12MA_AGILITY_SDK_DIRECTORY}\".") |
| target_compile_definitions(D3D12MemoryAllocator PRIVATE D3D12MA_USE_AGILITY_SDK=1) |
| target_include_directories(D3D12MemoryAllocator BEFORE PRIVATE "${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/include") |
| if(D3D12MA_AGILITY_SDK_PREVIEW) |
| target_compile_definitions(D3D12MemoryAllocator PRIVATE D3D12MA_USE_AGILITY_SDK_PREVIEW=1) |
| endif() |
| if(${D3D12MA_BUILD_SAMPLE} AND ${WIN32}) |
| target_compile_definitions(D3D12Sample PRIVATE D3D12MA_USE_AGILITY_SDK=1) |
| target_include_directories(D3D12Sample BEFORE PRIVATE "${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/include") |
| if(D3D12MA_AGILITY_SDK_PREVIEW) |
| target_compile_definitions(D3D12Sample PRIVATE D3D12MA_USE_AGILITY_SDK_PREVIEW=1) |
| endif() |
| add_custom_command(TARGET D3D12Sample POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:D3D12Sample>/D3D12" |
| COMMAND ${CMAKE_COMMAND} -E copy_if_different "${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/bin/x64/D3D12Core.dll" |
| "$<TARGET_FILE_DIR:D3D12Sample>/D3D12/" |
| COMMAND ${CMAKE_COMMAND} -E copy_if_different "${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/bin/x64/d3d12SDKLayers.dll" |
| "$<TARGET_FILE_DIR:D3D12Sample>/D3D12/") |
| endif() |
| else() |
| message(FATAL_ERROR "DX12 Agility SDK not found - cannot find file \"${D3D12MA_AGILITY_SDK_DIRECTORY}/build/native/include/d3d12.h\".") |
| endif() |
| else() |
| message(STATUS "DX12 Agility SDK not used.") |
| endif() |