Files
GP1-DirectX/project/CMakeLists.txt

172 lines
4.7 KiB
CMake

# Source files
set(SOURCES
"src/main.cpp"
"src/pch.cpp"
"src/Renderer.cpp"
"src/Timer.cpp"
"src/Mesh.cpp"
"src/ShadowMesh.cpp"
"src/InstancedMesh.cpp"
"src/Camera.cpp"
"src/Texture.cpp"
"src/GamePadController.cpp"
"src/Utils.cpp"
"src/HitTest.cpp"
"src/Material.cpp"
"src/DirectionalLight.cpp"
"src/Math/Vector2.cpp"
"src/Math/Vector3.cpp"
"src/Math/Vector4.cpp"
"src/Math/Matrix.cpp"
"src/BRDF.h"
"src/Effects/Effect.cpp"
"src/Effects/BaseEffect.cpp"
"src/Effects/FireEffect.cpp"
"src/Effects/ShadowEffect.cpp"
"src/Effects/ShadowDiffuse.cpp"
"src/Singleton.h"
"src/RenderSettings.h"
"src/PerlinNoise.hpp"
"src/Scenes/BaseScene.cpp"
"src/Scenes/MainScene.cpp"
"src/Scenes/DioramaScene.cpp"
"src/Scenes/InstancedScene.cpp"
"src/Scenes/PlanetScene.cpp"
"src/Scenes/ShadowTestScene.cpp"
"src/Buffers/ShadowMapBuffer.cpp"
"src/Buffers/SamplerState.cpp"
"src/Buffers/DepthBuffer.cpp"
"src/Buffers/DX11Viewport.cpp"
)
SET(INCLUDE_DIRS
"src"
"src/Math"
"src/Effects"
"src/Scenes"
"src/Buffers"
)
# Create the executable
add_executable(${PROJECT_NAME} ${SOURCES} ${INCLUDE_DIRS})
include(../LinkTinyObjLoader.cmake)
LinkTinyObjLoader(${PROJECT_NAME} PUBLIC)
# only needed if header files are not in same directory as source files
# target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
find_library(DXGI_LIBRARY dxgi.lib)
find_library(D3D11_LIBRARY d3d11.lib)
if(DXGI_LIBRARY AND D3D11_LIBRARY)
target_link_libraries(${PROJECT_NAME} PRIVATE ${DXGI_LIBRARY} ${D3D11_LIBRARY})
else()
message(FATAL_ERROR "DirectX libraries not found")
endif()
# Copy resources to output folder
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/resources
$<TARGET_FILE_DIR:${PROJECT_NAME}>/resources
)
# Simple Directmedia Layer
set(SDL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/SDL2-2.30.7")
add_library(SDL STATIC IMPORTED)
set_target_properties(SDL PROPERTIES
IMPORTED_LOCATION "${SDL_DIR}/lib/x64/SDL2.lib"
INTERFACE_INCLUDE_DIRECTORIES "${SDL_DIR}/include"
)
target_link_libraries(${PROJECT_NAME} PRIVATE SDL)
file(GLOB_RECURSE DLL_FILES
"${SDL_DIR}/lib/x64/*.dll"
"${SDL_DIR}/lib/x64/*.manifest"
)
foreach(DLL ${DLL_FILES})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${DLL}
$<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach(DLL)
# Simple Directmedia Layer Image
set(SDL_IMAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/SDL2_image-2.8.2")
add_library(SDL_IMAGE STATIC IMPORTED)
set_target_properties(SDL_IMAGE PROPERTIES
IMPORTED_LOCATION "${SDL_IMAGE_DIR}/lib/x64/SDL2_image.lib"
INTERFACE_INCLUDE_DIRECTORIES "${SDL_IMAGE_DIR}/include"
)
target_link_libraries(${PROJECT_NAME} PRIVATE SDL_IMAGE)
file(GLOB_RECURSE DLL_FILES
"${SDL_IMAGE_DIR}/lib/x64/*.dll"
"${SDL_IMAGE_DIR}/lib/x64/*.manifest"
)
foreach(DLL ${DLL_FILES})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${DLL}
$<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach(DLL)
# DirectX Effects
set(FX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/dx11effects")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(FX_LIBRARY "${FX_DIR}/lib/x64/dx11effects_d.lib")
else()
set(FX_LIBRARY "${FX_DIR}/lib/x64/dx11effects.lib")
endif()
add_library(FX STATIC IMPORTED)
set_target_properties(FX PROPERTIES
IMPORTED_LOCATION "${FX_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${FX_DIR}/include"
)
target_link_libraries(${PROJECT_NAME} PRIVATE FX)
# file(GLOB_RECURSE DLL_FILES
# "${FX_DIR}/lib/x64/*.dll"
# "${FX_DIR}/lib/x64/*.manifest"
# )
# foreach(DLL ${DLL_FILES})
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${DLL}
# $<TARGET_FILE_DIR:${PROJECT_NAME}>)
# endforeach(DLL)
# Visual Leak Detector
if(WIN32 AND CMAKE_BUILD_TYPE MATCHES Debug)
add_compile_definitions(ENABLE_VLD=1)
set(VLD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/vld")
add_library(vld STATIC IMPORTED)
set_target_properties(vld PROPERTIES
IMPORTED_LOCATION "${VLD_DIR}/lib/x64/vld.lib"
INTERFACE_INCLUDE_DIRECTORIES "${VLD_DIR}/include"
)
target_link_libraries(${PROJECT_NAME} PRIVATE vld)
set(DLL_SOURCE_DIR "${VLD_DIR}/lib")
file(GLOB_RECURSE DLL_FILES
"${DLL_SOURCE_DIR}/*.dll"
"${DLL_SOURCE_DIR}/*.manifest"
)
foreach(DLL ${DLL_FILES})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${DLL}
$<TARGET_FILE_DIR:${PROJECT_NAME}>)
endforeach(DLL)
endif()