Common.cmake 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # Adds a library as a dependency to a target. The dependency is assumed to have separate libraries for release and debug builds.
  2. function(add_library_per_config target_name lib_name release_name debug_name)
  3. add_library(${lib_name} STATIC IMPORTED)
  4. 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})
  5. 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})
  6. 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})
  7. target_link_libraries(${target_name} PRIVATE ${lib_name})
  8. endfunction()
  9. # Adds a library as a dependency to a target. The dependency is assumed to have separate libraries for release and debug builds. The libraries
  10. # are assumed to be named differently from its dependency folder (which happens if a single dependency consists of multiple libraries).
  11. function(add_library_per_config_multi target_name lib_name file_name release_name debug_name)
  12. add_library(${lib_name} STATIC IMPORTED)
  13. 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})
  14. 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})
  15. 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})
  16. target_link_libraries(${target_name} PRIVATE ${lib_name})
  17. endfunction()
  18. function(add_engine_dependencies target_name)
  19. if(RENDER_API_MODULE MATCHES "DirectX 11")
  20. add_dependencies(${target_name} BansheeD3D11RenderAPI)
  21. elseif(RENDER_API_MODULE MATCHES "Vulkan")
  22. add_dependencies(${target_name} BansheeVulkanRenderAPI)
  23. else()
  24. add_dependencies(${target_name} BansheeGLRenderAPI)
  25. endif()
  26. if(AUDIO_MODULE MATCHES "FMOD")
  27. add_dependencies(${target_name} BansheeFMOD)
  28. else() # Default to OpenAudio
  29. add_dependencies(${target_name} BansheeOpenAudio)
  30. endif()
  31. add_dependencies(${target_name} BansheeMono BansheeSL BansheeOISInput BansheePhysX RenderBeast SBansheeEngine)
  32. endfunction()
  33. function(add_subdirectory_optional subdir_name)
  34. get_filename_component(fullPath ${subdir_name} ABSOLUTE)
  35. if(EXISTS ${fullPath}/CMakeLists.txt)
  36. add_subdirectory(${subdir_name})
  37. endif()
  38. endfunction()
  39. MACRO(add_imported_library LIB_NAME RELEASE_NAME DEBUG_NAME)
  40. add_library(${LIB_NAME} STATIC IMPORTED)
  41. if(CMAKE_CONFIGURATION_TYPES) # Multiconfig generator?
  42. set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION_DEBUG "${DEBUG_NAME}")
  43. set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION_OPTIMIZEDDEBUG "${RELEASE_NAME}")
  44. set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION_RELEASE "${RELEASE_NAME}")
  45. else()
  46. set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION "${RELEASE_NAME}")
  47. endif()
  48. ENDMACRO()
  49. MACRO(find_imported_library2 FOLDER_NAME LIB_NAME DEBUG_LIB_NAME)
  50. find_library(${LIB_NAME}_LIBRARY_RELEASE NAMES ${LIB_NAME} PATHS ${${FOLDER_NAME}_LIBRARY_RELEASE_SEARCH_DIRS})
  51. if(${FOLDER_NAME}_LIBRARY_DEBUG_SEARCH_DIRS)
  52. find_library(${LIB_NAME}_LIBRARY_DEBUG NAMES ${DEBUG_LIB_NAME} PATHS ${${FOLDER_NAME}_LIBRARY_DEBUG_SEARCH_DIRS})
  53. else()
  54. find_library(${LIB_NAME}_LIBRARY_DEBUG NAMES ${DEBUG_LIB_NAME} PATHS ${${FOLDER_NAME}_LIBRARY_RELEASE_SEARCH_DIRS})
  55. endif()
  56. if(${LIB_NAME}_LIBRARY_RELEASE AND ${LIB_NAME}_LIBRARY_DEBUG)
  57. add_imported_library(${FOLDER_NAME}::${LIB_NAME} "${${LIB_NAME}_LIBRARY_RELEASE}" "${${LIB_NAME}_LIBRARY_DEBUG}")
  58. else()
  59. set(${FOLDER_NAME}_FOUND FALSE)
  60. message("Cannot find imported library: ${LIB_NAME} ${${LIB_NAME}_LIBRARY_RELEASE}")
  61. endif()
  62. list(APPEND ${FOLDER_NAME}_LIBRARIES ${FOLDER_NAME}::${LIB_NAME})
  63. mark_as_advanced(${LIB_NAME}_LIBRARY_RELEASE ${LIB_NAME}_LIBRARY_DEBUG)
  64. ENDMACRO()
  65. MACRO(find_imported_library FOLDER_NAME LIB_NAME)
  66. find_imported_library2(${FOLDER_NAME} ${LIB_NAME} ${LIB_NAME})
  67. ENDMACRO()
  68. function(update_binary_deps)
  69. # Clean and create a temporary folder
  70. execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../Temp)
  71. execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/../Temp)
  72. set(BINARY_DEPENDENCIES_URL http://data.banshee3d.com/BansheeDependencies_VS2015_Master.zip)
  73. file(DOWNLOAD ${BINARY_DEPENDENCIES_URL} ${PROJECT_SOURCE_DIR}/../Temp/Dependencies.zip SHOW_PROGRESS)
  74. message(STATUS "Exacting files. Please wait...")
  75. execute_process(
  76. COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/../Temp/Dependencies.zip
  77. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/../Temp
  78. )
  79. # Copy executables and dynamic libraries
  80. execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../bin)
  81. execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../Temp/Built/bin ${PROJECT_SOURCE_DIR}/../bin)
  82. # Copy static libraries, headers and tools
  83. execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../Dependencies)
  84. execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../Temp/Built/Dependencies ${PROJECT_SOURCE_DIR}/../Dependencies)
  85. # Clean up
  86. execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/../Temp)
  87. endfunction()