diff --git a/Tools/CMake/basics.cmake b/Tools/CMake/basics.cmake index 16e7ed27c..aa829fafa 100644 --- a/Tools/CMake/basics.cmake +++ b/Tools/CMake/basics.cmake @@ -61,6 +61,32 @@ macro(addDebugDef def) set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG "${def}") endmacro() +# adds a required definition. Are processed on addExecutable or addStaticLib +macro(addRequiredDefinition def) + #message(STATUS "${PROJECT_NAME} : add def : ${def}") + LIST( APPEND ${PROJECT_NAME}_required_definition ${def} ) +endmacro() +# adds a required debug definition. Are processed on addExecutable or addStaticLib +macro(addRequiredDebugDefinition def) + #message(STATUS "${PROJECT_NAME} : add def : ${def}") + LIST( APPEND ${PROJECT_NAME}_required_debug_definition ${def} ) +endmacro() + +# add definitions to project +macro( _processProjectDefinition ) + foreach( def ${${PROJECT_NAME}_required_definition} ) + addDef( ${def} ) + endforeach() + + foreach( def ${${PROJECT_NAME}_required_debug_definition} ) + addDebugDef( ${def} ) + endforeach() + + #clear required defs + set( ${PROJECT_NAME}_required_definition ) + set( ${PROJECT_NAME}_required_debug_definition ) +endmacro() + # adds an include path macro(addInclude incPath) #message(STATUS "${PROJECT_NAME} : add include path : ${incPath}") @@ -73,6 +99,53 @@ macro(addLib lib) target_link_libraries(${PROJECT_NAME} "${lib}") endmacro() +# adds a library dependency. Are processed on addExecutable or addStaticLib +macro(addRequiredLibrary lib) + #message(STATUS "${PROJECT_NAME} : add lib : ${lib}") + LIST( APPEND ${PROJECT_NAME}_required_library ${lib} ) +endmacro() + +# adds a link dependency. Are processed on addExecutable or addStaticLib +macro(addRequiredLink lib) + #message(STATUS "${PROJECT_NAME} : add lib : ${lib}") + LIST( APPEND ${PROJECT_NAME}_required_link ${lib} ) +endmacro() + +macro( _processProjectLibrary ) + # Append currect project to PROJECT_STACK + LIST( APPEND PROJECT_STACK "${PROJECT_NAME}" ) + + foreach( lib ${${PROJECT_NAME}_required_library} ) + #message( "adding library dependency: ${lib}" ) + include( ${lib} ) + endforeach() + + #clear required libraries + set( ${PROJECT_NAME}_required_library ) + + # pop currect project form PROJECT_STACK + LIST(REMOVE_AT PROJECT_STACK -1) + + # get currect project form stack + if( PROJECT_STACK ) + LIST(GET PROJECT_STACK -1 TEMP_PROJECT) + project( ${TEMP_PROJECT} ) + endif() + + +endmacro() + +macro( _processProjectLinks ) + #message( "_processProjectLinks: ${PROJECT_NAME}" ) + foreach( lib ${${PROJECT_NAME}_required_link} ) + addLib( ${lib} ) + endforeach() + + #clear required libraries + set( ${PROJECT_NAME}_required_link ) +endmacro() + + # adds a path to search for libs macro(addLibPath dir) link_directories(${dir}) @@ -146,6 +219,10 @@ macro(addStaticLib) #foreach(dir ${${PROJECT_NAME}_paths}) addInclude("${firstDir}") #endforeach() + + _processProjectLinks() + _processProjectLibrary() + _processProjectDefinition() endmacro() # macro to add an executable @@ -161,6 +238,10 @@ macro(addExecutable) add_executable("${PROJECT_NAME}" WIN32 ${${PROJECT_NAME}_files}) # omg - only use the first folder ... otehrwise we get lots of header name collisions addInclude("${firstDir}") + + _processProjectLinks() + _processProjectLibrary() + _processProjectDefinition() endmacro() macro(setupVersionNumbers) diff --git a/Tools/CMake/libraries/library_recast.cmake b/Tools/CMake/libraries/library_recast.cmake new file mode 100644 index 000000000..677459606 --- /dev/null +++ b/Tools/CMake/libraries/library_recast.cmake @@ -0,0 +1,18 @@ +# Recast library +project(recast) + +# Source +addPathRec( "${libDir}/recast/DebugUtils/Source" ) +addPathRec( "${libDir}/recast/Recast/Source" ) +addPathRec( "${libDir}/recast/Detour/Source" ) +addPathRec( "${libDir}/recast/DetourCrowd/Source" ) +addPathRec( "${libDir}/recast/DetourTileCache/Source" ) + +# Additional includes +include_directories( "${libDir}/recast/DebugUtils/Include" ) +include_directories( "${libDir}/recast/Recast/Include" ) +include_directories( "${libDir}/recast/Detour/Include" ) +include_directories( "${libDir}/recast/DetourTileCache/Include" ) +include_directories( "${libDir}/recast/DetourCrowd/Include" ) + +addStaticLib() \ No newline at end of file diff --git a/Tools/CMake/modules/module_hydra.cmake b/Tools/CMake/modules/module_hydra.cmake new file mode 100644 index 000000000..a3139e6c2 --- /dev/null +++ b/Tools/CMake/modules/module_hydra.cmake @@ -0,0 +1,19 @@ +# module OculusVR + +# Source +addPathRec( "${srcDir}/platform/input/razerHydra" ) + +# Includes +include_directories( "${TORQUE_RAZERHYDRA_SDK_PATH}/include" ) + +# Install +if( WIN32 ) + # File Copy for Release + INSTALL(FILES "${TORQUE_RAZERHYDRA_SDK_PATH}/bin/win32/release_dll/sixense.dll" DESTINATION "${projectOutDir}") + + # File Copy for Debug + INSTALL(FILES "${TORQUE_RAZERHYDRA_SDK_PATH}/bin/win32/debug_dll/sixensed.dll" DESTINATION "${projectOutDir}" CONFIGURATIONS "Debug" ) + # Only needed by the debug sixense library + INSTALL(FILES "${TORQUE_RAZERHYDRA_SDK_PATH}/samples/win32/sixense_simple3d/DeviceDLL.dll" DESTINATION "${projectOutDir}" CONFIGURATIONS "Debug" ) +endif() + diff --git a/Tools/CMake/modules/module_navigation.cmake b/Tools/CMake/modules/module_navigation.cmake new file mode 100644 index 000000000..512ed42f3 --- /dev/null +++ b/Tools/CMake/modules/module_navigation.cmake @@ -0,0 +1,16 @@ +# Navigation module + +addRequiredDefinition( "TORQUE_NAVIGATION_ENABLED" ) +addRequiredLibrary( "libraries/library_recast.cmake" ) +addRequiredLink( "recast" ) + +# files +addPathRec( "${srcDir}/navigation" ) + +# include paths +include_directories( "${libDir}/recast/DebugUtils/Include" ) +include_directories( "${libDir}/recast/Recast/Include" ) +include_directories( "${libDir}/recast/Detour/Include" ) +include_directories( "${libDir}/recast/DetourTileCache/Include" ) +include_directories( "${libDir}/recast/DetourCrowd/Include" ) + diff --git a/Tools/CMake/modules/module_oculusVR.cmake b/Tools/CMake/modules/module_oculusVR.cmake new file mode 100644 index 000000000..044154f7c --- /dev/null +++ b/Tools/CMake/modules/module_oculusVR.cmake @@ -0,0 +1,15 @@ +# module OculusVR + +# Source +addPathRec( "${srcDir}/platform/input/oculusVR" ) + +# Includes +include_directories( "${TORQUE_OCULUSVR_SDK_PATH}/LibOVR/Include" ) +include_directories( "${TORQUE_OCULUSVR_SDK_PATH}/LibOVR/Src" ) + +# Libs +if( WIN32 ) + link_directories( "${TORQUE_OCULUSVR_SDK_PATH}/LibOVR/Lib/Win32" ) + addRequiredLink( "libovr.lib" ) + addRequiredLink( "libovrd.lib" ) +endif() \ No newline at end of file diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 06845ee22..0f8b99435 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -21,6 +21,26 @@ option(TORQUE_HIFI "HIFI? support" OFF) mark_as_advanced(TORQUE_HIFI) option(TORQUE_EXTENDED_MOVE "Extended move support" OFF) mark_as_advanced(TORQUE_EXTENDED_MOVE) +option(TORQUE_NAVIGATION "Enable Navigation module" OFF) +#mark_as_advanced(TORQUE_NAVIGATION) + +#Oculus VR +option(TORQUE_OCULUSVR "Enable OCULUSVR module" OFF) +mark_as_advanced(TORQUE_OCULUSVR) +if(TORQUE_OCULUSVR) + set(TORQUE_OCULUSVR_SDK_PATH "" CACHE PATH "OCULUSVR library path" FORCE) +else() # hide variable + set(TORQUE_OCULUSVR_SDK_PATH "" CACHE INTERNAL "" FORCE) +endif() + +#Hydra +option(TORQUE_HYDRA "Enable HYDRA module" OFF) +mark_as_advanced(TORQUE_HYDRA) +if(TORQUE_HYDRA) + set(TORQUE_HYDRA_SDK_PATH "" CACHE PATH "HYDRA library path" FORCE) +else() # hide variable + set(TORQUE_HYDRA_SDK_PATH "" CACHE INTERNAL "" FORCE) +endif() ############################################################################### # options @@ -224,6 +244,18 @@ else() addPath("${srcDir}/T3D/gameBase/std") endif() +if(TORQUE_NAVIGATION) + include( "modules/module_navigation.cmake" ) +endif() + +if(TORQUE_OCULUSVR) + include( "modules/module_oculusVR.cmake" ) +endif() + +if(TORQUE_HYDRA) + include( "modules/module_hydra.cmake" ) +endif() + ############################################################################### # platform specific things ############################################################################### @@ -448,10 +480,14 @@ endif() ############################################################################### # Installation ############################################################################### -INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game" DESTINATION "${projectDir}") -if(WIN32) - INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat" DESTINATION "${projectDir}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${projectDir}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteDSOs.bat" DESTINATION "${projectDir}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeletePrefs.bat" DESTINATION "${projectDir}") + +if(TORQUE_TEMPLATE) + message("Prepare Template(${TORQUE_TEMPLATE}) install...") + INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game" DESTINATION "${projectDir}") + if(WIN32) + INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat" DESTINATION "${projectDir}") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${projectDir}") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteDSOs.bat" DESTINATION "${projectDir}") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeletePrefs.bat" DESTINATION "${projectDir}") + endif() endif()