blob: 1537262fc0ee947b3b09d24bed3699eaa3884a12 [file] [log] [blame]
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
"${PROJECT_SOURCE_DIR}/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()
install(TARGETS D3D12MemoryAllocator
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()
option(D3D12MA_OPTIONS16_SUPPORTED "Set if using Agility SDK 1.710.0-preview or newer that defines D3D12_FEATURE_DATA_D3D12_OPTIONS16." OFF)
if(D3D12MA_OPTIONS16_SUPPORTED)
target_compile_definitions(D3D12MemoryAllocator PRIVATE D3D12MA_OPTIONS16_SUPPORTED=1)
if(${D3D12MA_BUILD_SAMPLE} AND ${WIN32})
target_compile_definitions(D3D12Sample PRIVATE D3D12MA_OPTIONS16_SUPPORTED=1)
endif()
endif()