Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "rpavlik_cmake_modules"]
path = rpavlik_cmake_modules
url = https://github.com/rpavlik/cmake-modules.git
47 changes: 47 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.4)
#Because target platform version is only set on cmake v3.4+ (required for directx 12 headers/libs)
PROJECT(DirectX12FromScratch)

cmake_policy(SET CMP0026 OLD)

find_package(Git)
if (GIT_FOUND)
MESSAGE(STATUS "Git found, syncing modules")
execute_process (COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
else()
MESSAGE(WARNING "Git not found, please install git and set environment variables correctly - you have to manually init/update/sync submodules")
endif()

LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules")
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/rpavlik_cmake_modules")
include(CreateLaunchers)

find_package(assimp REQUIRED)
if (ASSIMP_FOUND)
MESSAGE(STATUS "Assimp found")
add_library(assimp UNKNOWN IMPORTED)
set_property(TARGET assimp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ASSIMP_INCLUDE_DIR})
set_property(TARGET assimp PROPERTY IMPORTED_LOCATION_RELEASE ${ASSIMP_LIBRARY_RELEASE})
set_property(TARGET assimp PROPERTY IMPORTED_LOCATION_DEBUG ${ASSIMP_LIBRARY_DEBUG})
else()
MESSAGE(FATAL_ERROR "Assimp not found, please set ASSIMP_ROOT_DIR and check lib32/lib64 contents")
endif()

find_package(SFML 2.3 COMPONENTS system window REQUIRED)
if (SFML_FOUND)
MESSAGE(STATUS "SFML with version >= 2.3 found")
get_filename_component(SFML_BINARY_DIR "${SFML_INCLUDE_DIR}\\..\\bin" ABSOLUTE)
add_library(sfml INTERFACE IMPORTED)
set_property(TARGET sfml PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SFML_INCLUDE_DIR})
add_library(sfml-window UNKNOWN IMPORTED)
set_property(TARGET sfml-window PROPERTY IMPORTED_LOCATION_RELEASE ${SFML_WINDOW_LIBRARY_RELEASE})
set_property(TARGET sfml-window PROPERTY IMPORTED_LOCATION_DEBUG ${SFML_WINDOW_LIBRARY_DEBUG})
add_library(sfml-system UNKNOWN IMPORTED)
set_property(TARGET sfml-system PROPERTY IMPORTED_LOCATION_RELEASE ${SFML_SYSTEM_LIBRARY_RELEASE})
set_property(TARGET sfml-system PROPERTY IMPORTED_LOCATION_DEBUG ${SFML_SYSTEM_LIBRARY_DEBUG})
else()
MESSAGE(FATAL_ERROR "SFML not found, please set SFML_ROOT")
endif()

add_subdirectory(DirectX12FromScratch)
add_subdirectory(WINDOW_SFML)
36 changes: 36 additions & 0 deletions DirectX12FromScratch/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
SET(OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin)

FILE(GLOB_RECURSE SOURCES_D3D12_ENGINE ./src/*.cpp)

FILE(GLOB_RECURSE HEADERS_D3D12_ENGINE ./include/*.h)

ADD_EXECUTABLE(D3D12Engine ${SOURCES_D3D12_ENGINE} ${HEADERS_D3D12_ENGINE})

TARGET_LINK_LIBRARIES(D3D12Engine assimp d3dcompiler dxgi d3d12)

TARGET_INCLUDE_DIRECTORIES(D3D12Engine PUBLIC ./include/)

ADD_DEPENDENCIES(D3D12Engine WINDOW_SFML)

set_property(TARGET D3D12Engine PROPERTY RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set_property(TARGET D3D12Engine PROPERTY LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set_property(TARGET D3D12Engine PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR})
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set_property(TARGET D3D12Engine PROPERTY RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
set_property(TARGET D3D12Engine PROPERTY LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
set_property(TARGET D3D12Engine PROPERTY ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)

install(DIRECTORY ${PROJECT_SOURCE_DIR}/DirectX12FromScratch/Assets DESTINATION ${OUTPUT_DIR})
if (MSVC)
create_default_target_launcher(D3D12Engine
FORWARD_ARGS
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
create_target_launcher(D3D12Engine
FORWARD_ARGS
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
SET(DIRS ${ASSIMP_BINARY_DIR} ${SFML_BINARY_DIR})
install(CODE "include(BundleUtilities)
FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"${OUTPUT_DIR}/WINDOW_SFML.dll\" \"${DIRS}\")")
endif ()
22 changes: 22 additions & 0 deletions WINDOW_SFML/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
SET(OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin)

FILE(GLOB SOURCES_WINDOW_SFML ./*.cpp)

FILE(GLOB HEADERS_WINDOW_SFML ./*.h)

ADD_LIBRARY(WINDOW_SFML MODULE ${SOURCES_WINDOW_SFML} ${HEADERS_WINDOW_SFML})

TARGET_LINK_LIBRARIES(WINDOW_SFML sfml sfml-window sfml-system)

TARGET_INCLUDE_DIRECTORIES(WINDOW_SFML PUBLIC ./)
TARGET_INCLUDE_DIRECTORIES(WINDOW_SFML PUBLIC ${PROJECT_SOURCE_DIR}/DirectX12FromScratch/include/)

set_property(TARGET WINDOW_SFML PROPERTY RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set_property(TARGET WINDOW_SFML PROPERTY LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIR})
set_property(TARGET WINDOW_SFML PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIR})
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set_property(TARGET WINDOW_SFML PROPERTY RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
set_property(TARGET WINDOW_SFML PROPERTY LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
set_property(TARGET WINDOW_SFML PROPERTY ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR})
endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
Loading