From 48c76a0b46559704ede85b1737c00812a57cf450 Mon Sep 17 00:00:00 2001 From: Dr-Shadow Date: Tue, 9 Feb 2016 14:27:39 +0100 Subject: [PATCH 1/5] Compile only engine through cmake --- CMakeLists.txt | 35 +++++++++++++++ cmake_modules/Findassimp.cmake | 81 ++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100755 CMakeLists.txt create mode 100755 cmake_modules/Findassimp.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..23e7068 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,35 @@ +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) + +SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH}) +SET(OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) + +find_package(assimp REQUIRED) + +FILE(GLOB_RECURSE SOURCES_D3D12_ENGINE ./DirectX12FromScratch/src/*.cpp) + +FILE(GLOB_RECURSE HEADERS_D3D12_ENGINE ./DirectX12FromScratch/include/*.h) + +ADD_EXECUTABLE(D3D12Engine ${SOURCES_D3D12_ENGINE} ${HEADERS_D3D12_ENGINE}) + +TARGET_LINK_LIBRARIES(D3D12Engine ${ASSIMP_LIBRARY} d3dcompiler dxgi d3d12) + +TARGET_INCLUDE_DIRECTORIES(D3D12Engine PUBLIC ${ASSIMP_INCLUDE_DIR}) +TARGET_INCLUDE_DIRECTORIES(D3D12Engine PUBLIC ./DirectX12FromScratch/include/) + +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) + install(CODE "include(BundleUtilities) + FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"\" \"${ASSIMP_LIBRARY_DIR}\")") +endif () \ No newline at end of file diff --git a/cmake_modules/Findassimp.cmake b/cmake_modules/Findassimp.cmake new file mode 100755 index 0000000..95f3250 --- /dev/null +++ b/cmake_modules/Findassimp.cmake @@ -0,0 +1,81 @@ +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ASSIMP_ARCHITECTURE "64") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(ASSIMP_ARCHITECTURE "32") +endif(CMAKE_SIZEOF_VOID_P EQUAL 8) + +if(WIN32) + set(ASSIMP_ROOT_DIR CACHE PATH "ASSIMP root directory") + + # Find path of each library + find_path(ASSIMP_INCLUDE_DIR + NAMES + assimp/anim.h + HINTS + ${ASSIMP_ROOT_DIR}/include + ) + + if(MSVC12) + set(ASSIMP_MSVC_VERSION "vc120") + elseif(MSVC14) + set(ASSIMP_MSVC_VERSION "vc140") + endif(MSVC12) + + if(MSVC12 OR MSVC14) + + find_path(ASSIMP_LIBRARY_DIR + NAMES + assimp-${ASSIMP_MSVC_VERSION}-mt.lib + HINTS + ${ASSIMP_ROOT_DIR}/lib${ASSIMP_ARCHITECTURE} + ) + + find_library(ASSIMP_LIBRARY_RELEASE assimp-${ASSIMP_MSVC_VERSION}-mt.lib PATHS ${ASSIMP_LIBRARY_DIR}) + find_library(ASSIMP_LIBRARY_DEBUG assimp-${ASSIMP_MSVC_VERSION}-mtd.lib PATHS ${ASSIMP_LIBRARY_DIR}) + + set(ASSIMP_LIBRARY + optimized ${ASSIMP_LIBRARY_RELEASE} + debug ${ASSIMP_LIBRARY_DEBUG} + ) + + set(ASSIMP_LIBRARIES "ASSIMP_LIBRARY_RELEASE" "ASSIMP_LIBRARY_DEBUG") + + FUNCTION(ASSIMP_COPY_BINARIES TargetDirectory) + ADD_CUSTOM_TARGET(AssimpCopyBinaries + COMMAND ${CMAKE_COMMAND} -E copy ${ASSIMP_ROOT_DIR}/bin${ASSIMP_ARCHITECTURE}/assimp-${ASSIMP_MSVC_VERSION}-mtd.dll ${TargetDirectory}/Debug/assimp-${ASSIMP_MSVC_VERSION}-mtd.dll + COMMAND ${CMAKE_COMMAND} -E copy ${ASSIMP_ROOT_DIR}/bin${ASSIMP_ARCHITECTURE}/assimp-${ASSIMP_MSVC_VERSION}-mt.dll ${TargetDirectory}/Release/assimp-${ASSIMP_MSVC_VERSION}-mt.dll + COMMENT "Copying Assimp binaries to '${TargetDirectory}'" + VERBATIM) + ENDFUNCTION(ASSIMP_COPY_BINARIES) + + endif() + +else(WIN32) + + find_path( + assimp_INCLUDE_DIRS + NAMES postprocess.h scene.h version.h config.h cimport.h + PATHS /usr/local/include/ + ) + + find_library( + assimp_LIBRARIES + NAMES assimp + PATHS /usr/local/lib/ + ) + + if (assimp_INCLUDE_DIRS AND assimp_LIBRARIES) + SET(assimp_FOUND TRUE) + ENDIF (assimp_INCLUDE_DIRS AND assimp_LIBRARIES) + + if (assimp_FOUND) + if (NOT assimp_FIND_QUIETLY) + message(STATUS "Found asset importer library: ${assimp_LIBRARIES}") + endif (NOT assimp_FIND_QUIETLY) + else (assimp_FOUND) + if (assimp_FIND_REQUIRED) + message(FATAL_ERROR "Could not find asset importer library") + endif (assimp_FIND_REQUIRED) + endif (assimp_FOUND) + +endif(WIN32) \ No newline at end of file From 92f36a3bce62e7943e2c342cb3d61bac48a538f2 Mon Sep 17 00:00:00 2001 From: Dr-Shadow Date: Tue, 9 Feb 2016 15:40:27 +0100 Subject: [PATCH 2/5] CMake : Better handling of assimp library - D3D12Engine has his own CMakeLists.txt from now --- CMakeLists.txt | 38 +++++++++-------------------- DirectX12FromScratch/CMakeLists.txt | 27 ++++++++++++++++++++ cmake_modules/Findassimp.cmake | 14 +++++++++-- 3 files changed, 50 insertions(+), 29 deletions(-) create mode 100755 DirectX12FromScratch/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 23e7068..1688150 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,30 +6,14 @@ SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH} SET(OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) find_package(assimp REQUIRED) - -FILE(GLOB_RECURSE SOURCES_D3D12_ENGINE ./DirectX12FromScratch/src/*.cpp) - -FILE(GLOB_RECURSE HEADERS_D3D12_ENGINE ./DirectX12FromScratch/include/*.h) - -ADD_EXECUTABLE(D3D12Engine ${SOURCES_D3D12_ENGINE} ${HEADERS_D3D12_ENGINE}) - -TARGET_LINK_LIBRARIES(D3D12Engine ${ASSIMP_LIBRARY} d3dcompiler dxgi d3d12) - -TARGET_INCLUDE_DIRECTORIES(D3D12Engine PUBLIC ${ASSIMP_INCLUDE_DIR}) -TARGET_INCLUDE_DIRECTORIES(D3D12Engine PUBLIC ./DirectX12FromScratch/include/) - -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) - install(CODE "include(BundleUtilities) - FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"\" \"${ASSIMP_LIBRARY_DIR}\")") -endif () \ No newline at end of file +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() + +add_subdirectory(DirectX12FromScratch) \ No newline at end of file diff --git a/DirectX12FromScratch/CMakeLists.txt b/DirectX12FromScratch/CMakeLists.txt new file mode 100755 index 0000000..70d4da1 --- /dev/null +++ b/DirectX12FromScratch/CMakeLists.txt @@ -0,0 +1,27 @@ +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/) + +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) + install(CODE "include(BundleUtilities) + FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"\" \"${ASSIMP_BINARY_DIR}\")") +endif () \ No newline at end of file diff --git a/cmake_modules/Findassimp.cmake b/cmake_modules/Findassimp.cmake index 95f3250..b483491 100755 --- a/cmake_modules/Findassimp.cmake +++ b/cmake_modules/Findassimp.cmake @@ -5,7 +5,11 @@ elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) endif(CMAKE_SIZEOF_VOID_P EQUAL 8) if(WIN32) - set(ASSIMP_ROOT_DIR CACHE PATH "ASSIMP root directory") + if (NOT "$ENV{ASSIMP_ROOT_DIR}" STREQUAL "") + set(ASSIMP_ROOT_DIR "$ENV{ASSIMP_ROOT_DIR}" CACHE PATH "ASSIMP root directory" FORCE) + else() + set(ASSIMP_ROOT_DIR CACHE PATH "ASSIMP root directory") + endif() # Find path of each library find_path(ASSIMP_INCLUDE_DIR @@ -38,6 +42,8 @@ if(WIN32) debug ${ASSIMP_LIBRARY_DEBUG} ) + set(ASSIMP_BINARY_DIR ${ASSIMP_ROOT_DIR}/bin) + set(ASSIMP_LIBRARIES "ASSIMP_LIBRARY_RELEASE" "ASSIMP_LIBRARY_DEBUG") FUNCTION(ASSIMP_COPY_BINARIES TargetDirectory) @@ -49,7 +55,11 @@ if(WIN32) ENDFUNCTION(ASSIMP_COPY_BINARIES) endif() - + + if (ASSIMP_INCLUDE_DIR AND ASSIMP_LIBRARY) + SET(ASSIMP_FOUND TRUE) + ENDIF (ASSIMP_INCLUDE_DIR AND ASSIMP_LIBRARY) + else(WIN32) find_path( From f9e630c7f991714e2a138a10606e372756bc379b Mon Sep 17 00:00:00 2001 From: Dr-Shadow Date: Tue, 9 Feb 2016 18:21:04 +0100 Subject: [PATCH 3/5] Compile WINDOW_SFML now - Only debug is supported from now --- CMakeLists.txt | 19 +- DirectX12FromScratch/CMakeLists.txt | 5 +- WINDOW_SFML/CMakeLists.txt | 22 ++ cmake_modules/FindSFML.cmake | 368 ++++++++++++++++++++++++++++ 4 files changed, 412 insertions(+), 2 deletions(-) create mode 100755 WINDOW_SFML/CMakeLists.txt create mode 100755 cmake_modules/FindSFML.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1688150..a1c06a7 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,21 @@ else() MESSAGE(FATAL_ERROR "Assimp not found, please set ASSIMP_ROOT_DIR and check lib32/lib64 contents") endif() -add_subdirectory(DirectX12FromScratch) \ No newline at end of file +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) \ No newline at end of file diff --git a/DirectX12FromScratch/CMakeLists.txt b/DirectX12FromScratch/CMakeLists.txt index 70d4da1..c43ebcb 100755 --- a/DirectX12FromScratch/CMakeLists.txt +++ b/DirectX12FromScratch/CMakeLists.txt @@ -10,6 +10,8 @@ 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}) @@ -22,6 +24,7 @@ endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES) install(DIRECTORY ${PROJECT_SOURCE_DIR}/DirectX12FromScratch/Assets DESTINATION ${OUTPUT_DIR}) if (MSVC) + SET(DIRS ${ASSIMP_BINARY_DIR} ${SFML_BINARY_DIR}) install(CODE "include(BundleUtilities) - FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"\" \"${ASSIMP_BINARY_DIR}\")") + FIXUP_BUNDLE(\"${PROJECT_BINARY_DIR}/bin/D3D12Engine.exe\" \"${OUTPUT_DIR}/WINDOW_SFML.dll\" \"${DIRS}\")") endif () \ No newline at end of file diff --git a/WINDOW_SFML/CMakeLists.txt b/WINDOW_SFML/CMakeLists.txt new file mode 100755 index 0000000..42ca44b --- /dev/null +++ b/WINDOW_SFML/CMakeLists.txt @@ -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) \ No newline at end of file diff --git a/cmake_modules/FindSFML.cmake b/cmake_modules/FindSFML.cmake new file mode 100755 index 0000000..871f866 --- /dev/null +++ b/cmake_modules/FindSFML.cmake @@ -0,0 +1,368 @@ +# This script locates the SFML library +# ------------------------------------ +# +# Usage +# ----- +# +# When you try to locate the SFML libraries, you must specify which modules you want to use (system, window, graphics, network, audio, main). +# If none is given, the SFML_LIBRARIES variable will be empty and you'll end up linking to nothing. +# example: +# find_package(SFML COMPONENTS graphics window system) // find the graphics, window and system modules +# +# You can enforce a specific version, either MAJOR.MINOR or only MAJOR. +# If nothing is specified, the version won't be checked (i.e. any version will be accepted). +# example: +# find_package(SFML COMPONENTS ...) // no specific version required +# find_package(SFML 2 COMPONENTS ...) // any 2.x version +# find_package(SFML 2.4 COMPONENTS ...) // version 2.4 or greater +# +# By default, the dynamic libraries of SFML will be found. To find the static ones instead, +# you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...). +# Since you have to link yourself all the SFML dependencies when you link it statically, the following +# additional variables are defined: SFML_XXX_DEPENDENCIES and SFML_DEPENDENCIES (see their detailed +# description below). +# In case of static linking, the SFML_STATIC macro will also be defined by this script. +# example: +# set(SFML_STATIC_LIBRARIES TRUE) +# find_package(SFML 2 COMPONENTS network system) +# +# On Mac OS X if SFML_STATIC_LIBRARIES is not set to TRUE then by default CMake will search for frameworks unless +# CMAKE_FIND_FRAMEWORK is set to "NEVER" for example. Please refer to CMake documentation for more details. +# Moreover, keep in mind that SFML frameworks are only available as release libraries unlike dylibs which +# are available for both release and debug modes. +# +# If SFML is not installed in a standard path, you can use the SFML_ROOT CMake (or environment) variable +# to tell CMake where SFML is. +# +# Output +# ------ +# +# This script defines the following variables: +# - For each specified module XXX (system, window, graphics, network, audio, main): +# - SFML_XXX_LIBRARY_DEBUG: the name of the debug library of the xxx module (set to SFML_XXX_LIBRARY_RELEASE is no debug version is found) +# - SFML_XXX_LIBRARY_RELEASE: the name of the release library of the xxx module (set to SFML_XXX_LIBRARY_DEBUG is no release version is found) +# - SFML_XXX_LIBRARY: the name of the library to link to for the xxx module (includes both debug and optimized names if necessary) +# - SFML_XXX_FOUND: true if either the debug or release library of the xxx module is found +# - SFML_XXX_DEPENDENCIES: the list of libraries the module depends on, in case of static linking +# - SFML_LIBRARIES: the list of all libraries corresponding to the required modules +# - SFML_FOUND: true if all the required modules are found +# - SFML_INCLUDE_DIR: the path where SFML headers are located (the directory containing the SFML/Config.hpp file) +# - SFML_DEPENDENCIES: the list of libraries SFML depends on, in case of static linking +# +# example: +# find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED) +# include_directories(${SFML_INCLUDE_DIR}) +# add_executable(myapp ...) +# target_link_libraries(myapp ${SFML_LIBRARIES}) + +# define the SFML_STATIC macro if static build was chosen +if(SFML_STATIC_LIBRARIES) + add_definitions(-DSFML_STATIC) +endif() + +# define the list of search paths for headers and libraries +set(FIND_SFML_PATHS + ${SFML_ROOT} + $ENV{SFML_ROOT} + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt) + +# find the SFML include directory +find_path(SFML_INCLUDE_DIR SFML/Config.hpp + PATH_SUFFIXES include + PATHS ${FIND_SFML_PATHS}) + +# check the version number +set(SFML_VERSION_OK TRUE) +if(SFML_FIND_VERSION AND SFML_INCLUDE_DIR) + # extract the major and minor version numbers from SFML/Config.hpp + # we have to handle framework a little bit differently: + if("${SFML_INCLUDE_DIR}" MATCHES "SFML.framework") + set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/Headers/Config.hpp") + else() + set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/SFML/Config.hpp") + endif() + FILE(READ "${SFML_CONFIG_HPP_INPUT}" SFML_CONFIG_HPP_CONTENTS) + STRING(REGEX REPLACE ".*#define SFML_VERSION_MAJOR ([0-9]+).*" "\\1" SFML_VERSION_MAJOR "${SFML_CONFIG_HPP_CONTENTS}") + STRING(REGEX REPLACE ".*#define SFML_VERSION_MINOR ([0-9]+).*" "\\1" SFML_VERSION_MINOR "${SFML_CONFIG_HPP_CONTENTS}") + STRING(REGEX REPLACE ".*#define SFML_VERSION_PATCH ([0-9]+).*" "\\1" SFML_VERSION_PATCH "${SFML_CONFIG_HPP_CONTENTS}") + if (NOT "${SFML_VERSION_PATCH}" MATCHES "^[0-9]+$") + set(SFML_VERSION_PATCH 0) + endif() + math(EXPR SFML_REQUESTED_VERSION "${SFML_FIND_VERSION_MAJOR} * 10000 + ${SFML_FIND_VERSION_MINOR} * 100 + ${SFML_FIND_VERSION_PATCH}") + + # if we could extract them, compare with the requested version number + if (SFML_VERSION_MAJOR) + # transform version numbers to an integer + math(EXPR SFML_VERSION "${SFML_VERSION_MAJOR} * 10000 + ${SFML_VERSION_MINOR} * 100 + ${SFML_VERSION_PATCH}") + + # compare them + if(SFML_VERSION LESS SFML_REQUESTED_VERSION) + set(SFML_VERSION_OK FALSE) + endif() + else() + # SFML version is < 2.0 + if (SFML_REQUESTED_VERSION GREATER 10900) + set(SFML_VERSION_OK FALSE) + set(SFML_VERSION_MAJOR 1) + set(SFML_VERSION_MINOR x) + set(SFML_VERSION_PATCH x) + endif() + endif() +endif() + +# find the requested modules +set(SFML_FOUND TRUE) # will be set to false if one of the required modules is not found +foreach(FIND_SFML_COMPONENT ${SFML_FIND_COMPONENTS}) + string(TOLOWER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_LOWER) + string(TOUPPER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_UPPER) + set(FIND_SFML_COMPONENT_NAME sfml-${FIND_SFML_COMPONENT_LOWER}) + + # no suffix for sfml-main, it is always a static library + if(FIND_SFML_COMPONENT_LOWER STREQUAL "main") + # release library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE + NAMES ${FIND_SFML_COMPONENT_NAME} + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + + # debug library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG + NAMES ${FIND_SFML_COMPONENT_NAME}-d + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + else() + # static release library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE + NAMES ${FIND_SFML_COMPONENT_NAME}-s + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + + # static debug library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG + NAMES ${FIND_SFML_COMPONENT_NAME}-s-d + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + + # dynamic release library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE + NAMES ${FIND_SFML_COMPONENT_NAME} + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + + # dynamic debug library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG + NAMES ${FIND_SFML_COMPONENT_NAME}-d + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_PATHS}) + + # choose the entries that fit the requested link type + if(SFML_STATIC_LIBRARIES) + if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE}) + endif() + if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG}) + endif() + else() + if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE}) + endif() + if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG}) + endif() + endif() + endif() + + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG OR SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + # library found + set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND TRUE) + + # if both are found, set SFML_XXX_LIBRARY to contain both + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY debug ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG} + optimized ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + endif() + + # if only one debug/release variant is found, set the other to be equal to the found one + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + # debug and not release + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}) + endif() + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG) + # release and not debug + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + endif() + else() + # library not found + set(SFML_FOUND FALSE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND FALSE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY "") + set(FIND_SFML_MISSING "${FIND_SFML_MISSING} SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY") + endif() + + # mark as advanced + MARK_AS_ADVANCED(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG) + + # add to the global list of libraries + set(SFML_LIBRARIES ${SFML_LIBRARIES} "${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY}") +endforeach() + +# in case of static linking, we must also define the list of all the dependencies of SFML libraries +if(SFML_STATIC_LIBRARIES) + + # detect the OS + if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(FIND_SFML_OS_WINDOWS 1) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(FIND_SFML_OS_LINUX 1) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + set(FIND_SFML_OS_FREEBSD 1) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(FIND_SFML_OS_MACOSX 1) + endif() + + # start with an empty list + set(SFML_DEPENDENCIES) + set(FIND_SFML_DEPENDENCIES_NOTFOUND) + + # macro that searches for a 3rd-party library + macro(find_sfml_dependency output friendlyname) + # No lookup in environment variables (PATH on Windows), as they may contain wrong library versions + find_library(${output} NAMES ${ARGN} PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib NO_SYSTEM_ENVIRONMENT_PATH) + if(${${output}} STREQUAL "${output}-NOTFOUND") + unset(output) + set(FIND_SFML_DEPENDENCIES_NOTFOUND "${FIND_SFML_DEPENDENCIES_NOTFOUND} ${friendlyname}") + endif() + endmacro() + + # sfml-system + list(FIND SFML_FIND_COMPONENTS "system" FIND_SFML_SYSTEM_COMPONENT) + if(NOT ${FIND_SFML_SYSTEM_COMPONENT} EQUAL -1) + + # update the list -- these are only system libraries, no need to find them + if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_MACOSX) + set(SFML_SYSTEM_DEPENDENCIES "pthread") + endif() + if(FIND_SFML_OS_LINUX) + set(SFML_SYSTEM_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} "rt") + endif() + if(FIND_SFML_OS_WINDOWS) + set(SFML_SYSTEM_DEPENDENCIES "winmm") + endif() + set(SFML_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} ${SFML_DEPENDENCIES}) + endif() + + # sfml-network + list(FIND SFML_FIND_COMPONENTS "network" FIND_SFML_NETWORK_COMPONENT) + if(NOT ${FIND_SFML_NETWORK_COMPONENT} EQUAL -1) + + # update the list -- these are only system libraries, no need to find them + if(FIND_SFML_OS_WINDOWS) + set(SFML_NETWORK_DEPENDENCIES "ws2_32") + endif() + set(SFML_DEPENDENCIES ${SFML_NETWORK_DEPENDENCIES} ${SFML_DEPENDENCIES}) + endif() + + # sfml-window + list(FIND SFML_FIND_COMPONENTS "window" FIND_SFML_WINDOW_COMPONENT) + if(NOT ${FIND_SFML_WINDOW_COMPONENT} EQUAL -1) + + # find libraries + if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD) + find_sfml_dependency(X11_LIBRARY "X11" X11) + find_sfml_dependency(LIBXCB_LIBRARIES "XCB" xcb libxcb) + find_sfml_dependency(X11_XCB_LIBRARY "X11-xcb" X11-xcb libX11-xcb) + find_sfml_dependency(XCB_RANDR_LIBRARY "xcb-randr" xcb-randr libxcb-randr) + find_sfml_dependency(XCB_IMAGE_LIBRARY "xcb-image" xcb-image libxcb-image) + endif() + + if(FIND_SFML_OS_LINUX) + find_sfml_dependency(UDEV_LIBRARIES "UDev" udev libudev) + endif() + + # update the list + if(FIND_SFML_OS_WINDOWS) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "opengl32" "winmm" "gdi32") + elseif(FIND_SFML_OS_LINUX) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} ${UDEV_LIBRARIES}) + elseif(FIND_SFML_OS_FREEBSD) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} "usbhid") + elseif(FIND_SFML_OS_MACOSX) + set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "-framework OpenGL -framework Foundation -framework AppKit -framework IOKit -framework Carbon") + endif() + set(SFML_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${SFML_DEPENDENCIES}) + endif() + + # sfml-graphics + list(FIND SFML_FIND_COMPONENTS "graphics" FIND_SFML_GRAPHICS_COMPONENT) + if(NOT ${FIND_SFML_GRAPHICS_COMPONENT} EQUAL -1) + + # find libraries + find_sfml_dependency(FREETYPE_LIBRARY "FreeType" freetype) + find_sfml_dependency(JPEG_LIBRARY "libjpeg" jpeg) + + # update the list + set(SFML_GRAPHICS_DEPENDENCIES ${FREETYPE_LIBRARY} ${JPEG_LIBRARY}) + set(SFML_DEPENDENCIES ${SFML_GRAPHICS_DEPENDENCIES} ${SFML_DEPENDENCIES}) + endif() + + # sfml-audio + list(FIND SFML_FIND_COMPONENTS "audio" FIND_SFML_AUDIO_COMPONENT) + if(NOT ${FIND_SFML_AUDIO_COMPONENT} EQUAL -1) + + # find libraries + find_sfml_dependency(OPENAL_LIBRARY "OpenAL" openal openal32) + find_sfml_dependency(OGG_LIBRARY "Ogg" ogg) + find_sfml_dependency(VORBIS_LIBRARY "Vorbis" vorbis) + find_sfml_dependency(VORBISFILE_LIBRARY "VorbisFile" vorbisfile) + find_sfml_dependency(VORBISENC_LIBRARY "VorbisEnc" vorbisenc) + find_sfml_dependency(FLAC_LIBRARY "FLAC" FLAC) + + # update the list + set(SFML_AUDIO_DEPENDENCIES ${OPENAL_LIBRARY} ${FLAC_LIBRARY} ${VORBISENC_LIBRARY} ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY} ${OGG_LIBRARY}) + set(SFML_DEPENDENCIES ${SFML_DEPENDENCIES} ${SFML_AUDIO_DEPENDENCIES}) + endif() + +endif() + +# handle errors +if(NOT SFML_VERSION_OK) + # SFML version not ok + set(FIND_SFML_ERROR "SFML found but version too low (requested: ${SFML_FIND_VERSION}, found: ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH})") + set(SFML_FOUND FALSE) +elseif(SFML_STATIC_LIBRARIES AND FIND_SFML_DEPENDENCIES_NOTFOUND) + set(FIND_SFML_ERROR "SFML found but some of its dependencies are missing (${FIND_SFML_DEPENDENCIES_NOTFOUND})") + set(SFML_FOUND FALSE) +elseif(NOT SFML_FOUND) + # include directory or library not found + set(FIND_SFML_ERROR "Could NOT find SFML (missing: ${FIND_SFML_MISSING})") +endif() +if (NOT SFML_FOUND) + if(SFML_FIND_REQUIRED) + # fatal error + message(FATAL_ERROR ${FIND_SFML_ERROR}) + elseif(NOT SFML_FIND_QUIETLY) + # error but continue + message("${FIND_SFML_ERROR}") + endif() +endif() + +# handle success +if(SFML_FOUND AND NOT SFML_FIND_QUIETLY) + message(STATUS "Found SFML ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH} in ${SFML_INCLUDE_DIR}") +endif() From 256bb94acdb2aa6b0eed02d0a46ba2ba50a6aeee Mon Sep 17 00:00:00 2001 From: Dr-Shadow Date: Wed, 10 Feb 2016 14:07:47 +0100 Subject: [PATCH 4/5] Add default launcher and launcher for D3D12Engine executable with correct working directory --- .gitmodules | 3 +++ CMakeLists.txt | 7 +++++-- DirectX12FromScratch/CMakeLists.txt | 6 ++++++ rpavlik_cmake_modules | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .gitmodules create mode 160000 rpavlik_cmake_modules diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..860976e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "rpavlik_cmake_modules"] + path = rpavlik_cmake_modules + url = https://github.com/rpavlik/cmake-modules.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a1c06a7..9a0b7de 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,11 @@ 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) -SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH}) -SET(OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) +cmake_policy(SET CMP0026 OLD) + +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) diff --git a/DirectX12FromScratch/CMakeLists.txt b/DirectX12FromScratch/CMakeLists.txt index c43ebcb..e9ce1df 100755 --- a/DirectX12FromScratch/CMakeLists.txt +++ b/DirectX12FromScratch/CMakeLists.txt @@ -24,6 +24,12 @@ 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}\")") diff --git a/rpavlik_cmake_modules b/rpavlik_cmake_modules new file mode 160000 index 0000000..faf198f --- /dev/null +++ b/rpavlik_cmake_modules @@ -0,0 +1 @@ +Subproject commit faf198fb8593936b16584f569f6d9e7c61edbb62 From 32f34615d0d249a5059315f675af8a23bc931dac Mon Sep 17 00:00:00 2001 From: Dr-Shadow Date: Thu, 11 Feb 2016 10:55:29 +0100 Subject: [PATCH 5/5] Add git submodule init/update --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a0b7de..1959535 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,14 @@ 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)