| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- cmake_minimum_required (VERSION 3.6.1)
- project (Banshee)
- # Version
- set (BS_VERSION_MAJOR 0)
- set (BS_VERSION_MINOR 3)
- # Configuration types
- if(CMAKE_CONFIGURATION_TYPES) # Multiconfig generator?
- set(CMAKE_CONFIGURATION_TYPES "Debug;OptimizedDebug;Release;" CACHE INTERNAL "")
- else()
- if(NOT CMAKE_BUILD_TYPE)
- message("Defaulting to release build.")
- set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "")
- endif()
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build")
- # Set the valid options for cmake-gui drop-down list
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug OptimizedDebug Release)
- endif()
- if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
- set(BS_64BIT true)
- endif()
- # Options
- set(AUDIO_MODULE "OpenAudio" CACHE STRING "Audio backend to use.")
- set_property(CACHE AUDIO_MODULE PROPERTY STRINGS OpenAudio FMOD)
- set(PHYSICS_MODULE "PhysX" CACHE STRING "Physics backend to use.")
- set_property(CACHE PHYSICS_MODULE PROPERTY STRINGS PhysX)
- set(INPUT_MODULE "OIS" CACHE STRING "Input backend to use.")
- set_property(CACHE INPUT_MODULE PROPERTY STRINGS OIS)
- if(WIN32)
- set(RENDER_API_MODULE "DirectX 11" CACHE STRING "Render API to use.")
- set_property(CACHE RENDER_API_MODULE PROPERTY STRINGS "DirectX 11" "DirectX 9" "OpenGL")
- else()
- set(RENDER_API_MODULE "OpenGL" CACHE STRING "Render API to use.")
- set_property(CACHE RENDER_API_MODULE PROPERTY STRINGS "OpenGL")
- endif()
- set(RENDERER_MODULE "RenderBeast" CACHE STRING "Renderer backend to use.")
- set_property(CACHE RENDERER_MODULE PROPERTY STRINGS RenderBeast)
- set(BUILD_EDITOR ON CACHE BOOL "If true both the engine and the editor will be built.")
- mark_as_advanced(CMAKE_INSTALL_PREFIX)
- # External code
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake/Modules/")
- # Global compile & linker flags
- ## Compiler-agnostic settings
- ### Target at least C++11
- set(CMAKE_CXX_STANDARD 11)
- ## Compiler-specific settings
- if(MSVC)
- # Linker
- set(BS_LINKER_FLAGS_COMMON "/DYNAMICBASE /NOLOGO")
- set(BS_LINKER_FLAGS_DEBUG "${BS_LINKER_FLAGS_COMMON} /DEBUG")
- set(BS_LINKER_FLAGS_OPTIMIZEDDEBUG "${BS_LINKER_FLAGS_COMMON} /LTCG:incremental /INCREMENTAL:NO /OPT:REF /DEBUG")
- set(BS_LINKER_FLAGS_RELEASE "${BS_LINKER_FLAGS_COMMON} /LTCG /INCREMENTAL:NO /OPT:REF")
-
- if(BS_64BIT)
- set(BS_LINKER_FLAGS_OPTIMIZEDDEBUG "${BS_LINKER_FLAGS_OPTIMIZEDDEBUG} /OPT:ICF")
- set(BS_LINKER_FLAGS_RELEASE "${BS_LINKER_FLAGS_RELEASE} /OPT:ICF")
- endif()
-
- set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/DLL ${BS_LINKER_FLAGS_DEBUG}")
- set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/DLL ${BS_LINKER_FLAGS_DEBUG}")
- set(CMAKE_EXE_LINKER_FLAGS_DEBUG ${BS_LINKER_FLAGS_DEBUG})
-
- set(CMAKE_SHARED_LINKER_FLAGS_OPTIMIZEDDEBUG "/DLL ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG}")
- set(CMAKE_MODULE_LINKER_FLAGS_OPTIMIZEDDEBUG "/DLL ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG}")
- set(CMAKE_EXE_LINKER_FLAGS_OPTIMIZEDDEBUG ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG})
-
- set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DLL ${BS_LINKER_FLAGS_RELEASE}")
- set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/DLL ${BS_LINKER_FLAGS_RELEASE}")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE ${BS_LINKER_FLAGS_RELEASE})
-
- # Compiler
- set(BS_COMPILER_FLAGS_COMMON "/GS- /W3 /GR- /WX- /nologo /bigobj /wd\"4577\"")
- set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS")
-
- set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} /Gm /Od /RTC1 /MDd")
-
- if(BS_64BIT) # Debug edit and continue for 64-bit
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZI")
- else() # Normal debug for 32-bit
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zi")
- endif()
-
- set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} /GL /Gy /Zi /Gm /O2 /Oi /MD")
- set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} /GL /Gy /O2 /Oi /MD")
-
- # Global defines
- add_definitions(-D_HAS_EXCEPTIONS=0)
-
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- # Note: Optionally add -ffunction-sections, -fdata-sections, but with linker option --gc-sections
- set(BS_COMPILER_FLAGS_COMMON "-fpic -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-ms-compatibility -fms-extensions")
-
- set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} -g -O0")
- set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} -gline-tables-only -O2")
- set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} -g0 -O2")
- elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- set(BS_COMPILER_FLAGS_COMMON "-fpic -fno-exceptions -fno-strict-aliasing -fno-rtti")
-
- set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} -g -O0")
- set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} -gline-tables-only -O2")
- set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} -g0 -O2")
- else()
- # TODO_OTHER_COMPILERS_GO_HERE
- endif()
- # Output
- set(CMAKE_BINARY_DIR "${PROJECT_SOURCE_DIR}/../Build/${CMAKE_GENERATOR}/")
- if(BS_64BIT)
- set(BS_OUTPUT_DIR_PREFIX x64)
- else()
- set(BS_OUTPUT_DIR_PREFIX x86)
- endif()
- set(BS_BINARY_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/../bin/${BS_OUTPUT_DIR_PREFIX})
- set(BS_LIBRARY_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/../lib/${BS_OUTPUT_DIR_PREFIX})
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BS_BINARY_OUTPUT_DIR}/Debug)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_BINARY_OUTPUT_DIR}/OptimizedDebug)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BS_BINARY_OUTPUT_DIR}/Release)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BS_BINARY_OUTPUT_DIR}/Debug)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_BINARY_OUTPUT_DIR}/OptimizedDebug)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BS_BINARY_OUTPUT_DIR}/Release)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BS_LIBRARY_OUTPUT_DIR}/Debug)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_LIBRARY_OUTPUT_DIR}/OptimizedDebug)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BS_LIBRARY_OUTPUT_DIR}/Release)
- if(WIN32)
- set(BS_LIBRARY_EXTENSION ".lib")
- else()
- set(BS_LIBRARY_EXTENSION ".a")
- endif()
- function(add_library_per_config target_name lib_name release_name debug_name)
- add_library(${lib_name} STATIC IMPORTED)
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_DEBUG ${PROJECT_SOURCE_DIR}/../Dependencies/${lib_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${debug_name}${BS_LIBRARY_EXTENSION})
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_OPTIMIZEDDEBUG ${PROJECT_SOURCE_DIR}/../Dependencies/${lib_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${release_name}${BS_LIBRARY_EXTENSION})
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_RELEASE ${PROJECT_SOURCE_DIR}/../Dependencies/${lib_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${release_name}${BS_LIBRARY_EXTENSION})
-
- target_link_libraries(${target_name} PRIVATE ${lib_name})
- endfunction()
- function(add_library_per_config_multi target_name lib_name file_name release_name debug_name)
- add_library(${lib_name} STATIC IMPORTED)
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_DEBUG ${PROJECT_SOURCE_DIR}/../Dependencies/${file_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${debug_name}${BS_LIBRARY_EXTENSION})
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_OPTIMIZEDDEBUG ${PROJECT_SOURCE_DIR}/../Dependencies/${file_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${release_name}${BS_LIBRARY_EXTENSION})
- set_target_properties(${lib_name} PROPERTIES IMPORTED_LOCATION_RELEASE ${PROJECT_SOURCE_DIR}/../Dependencies/${file_name}/lib/${BS_OUTPUT_DIR_PREFIX}/${release_name}${BS_LIBRARY_EXTENSION})
-
- target_link_libraries(${target_name} PRIVATE ${lib_name})
- endfunction()
- function(add_engine_dependencies target_name)
- if(RENDER_API_MODULE MATCHES "DirectX 11")
- add_dependencies(${target_name} BansheeD3D11RenderAPI)
- elseif(RENDER_API_MODULE MATCHES "DirectX 9")
- add_dependencies(${target_name} BansheeD3D9RenderAPI)
- else()
- add_dependencies(${target_name} BansheeGLRenderAPI)
- endif()
- if(AUDIO_MODULE MATCHES "FMOD")
- add_dependencies(${target_name} BansheeFMOD)
- else() # Default to OpenAudio
- add_dependencies(${target_name} BansheeOpenAudio)
- endif()
-
- add_dependencies(${target_name} BansheeMono BansheeSL BansheeOISInput BansheePhysX RenderBeast SBansheeEngine)
- endfunction()
- set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
- # Sub-directories
- ## Layers
- add_subdirectory(BansheeUtility)
- add_subdirectory(BansheeCore)
- add_subdirectory(BansheeEngine)
- if(BUILD_EDITOR OR MSVC)
- add_subdirectory(BansheeEditor)
- endif()
- ## Plugins
- ### If using MSVC include all plugins in the solution (which ones actually build is controlled by dependencies)
- if(MSVC)
- add_subdirectory(BansheeD3D11RenderAPI)
- add_subdirectory(BansheeD3D9RenderAPI)
- add_subdirectory(BansheeGLRenderAPI)
- add_subdirectory(BansheeFMOD)
- add_subdirectory(BansheeOpenAudio)
- else() # Otherwise include only chosen ones
- if(RENDER_API_MODULE MATCHES "DirectX 11")
- add_subdirectory(BansheeD3D11RenderAPI)
- elseif(RENDER_API_MODULE MATCHES "DirectX 9")
- add_subdirectory(BansheeD3D9RenderAPI)
- else()
- add_subdirectory(BansheeGLRenderAPI)
- endif()
- if(AUDIO_MODULE MATCHES "FMOD")
- add_subdirectory(BansheeFMOD)
- else() # Default to OpenAudio
- add_subdirectory(BansheeOpenAudio)
- endif()
- endif()
- add_subdirectory(RenderBeast)
- add_subdirectory(BansheeOISInput)
- add_subdirectory(BansheePhysX)
- add_subdirectory(BansheeFBXImporter)
- add_subdirectory(BansheeFontImporter)
- add_subdirectory(BansheeFreeImgImporter)
- add_subdirectory(BansheeMono)
- add_subdirectory(BansheeSL)
- ## Script interop
- add_subdirectory(SBansheeEngine)
- if(BUILD_EDITOR OR MSVC)
- add_subdirectory(SBansheeEditor)
- endif()
- ## Executables
- add_subdirectory(Game)
- add_subdirectory(ExampleProject)
- if(BUILD_EDITOR OR MSVC)
- add_subdirectory(BansheeEditorExec)
- endif()
- ## Managed projects
- if(MSVC)
- include_external_msproject(MBansheeEngine ${PROJECT_SOURCE_DIR}/MBansheeEngine/MBansheeEngine.csproj)
- add_dependencies(Game MBansheeEngine)
-
- set_property(TARGET MBansheeEngine PROPERTY FOLDER Script)
- if(BUILD_EDITOR)
- include_external_msproject(MBansheeEditor ${PROJECT_SOURCE_DIR}/MBansheeEditor/MBansheeEditor.csproj)
- add_dependencies(BansheeEditorExec MBansheeEngine MBansheeEditor)
- set_property(TARGET MBansheeEditor PROPERTY FOLDER Script)
- set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT BansheeEditorExec)
- endif()
- else()
- # TODO - Use Mono compiler to build the managed code as a pre-build step
- endif()
- # Config file
- ## Set names of libraries used in the config file
- if(RENDER_API_MODULE MATCHES "DirectX 11")
- set(RENDER_API_MODULE_LIB BansheeD3D11RenderAPI)
- elseif(RENDER_API_MODULE MATCHES "DirectX 9")
- set(RENDER_API_MODULE_LIB BansheeD3D9RenderAPI)
- else()
- set(RENDER_API_MODULE_LIB BansheeGLRenderAPI)
- endif()
- if(AUDIO_MODULE MATCHES "FMOD")
- set(AUDIO_MODULE_LIB BansheeFMOD)
- else() # Default to OpenAudio
- set(AUDIO_MODULE_LIB BansheeOpenAudio)
- endif()
- set(RENDERER_MODULE_LIB RenderBeast)
- set(INPUT_MODULE_LIB BansheeOISInput)
- set(PHYSICS_MODULE_LIB BansheePhysX)
- ## Generate config file
- configure_file("${PROJECT_SOURCE_DIR}/CMake/BsEngineConfig.h.in" "${PROJECT_SOURCE_DIR}/BansheeEngine/Include/BsEngineConfig.h")
|