Findsdformat.cmake.template 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #
  2. # Copyright (c) Contributors to the Open 3D Engine Project.
  3. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. #
  5. # SPDX-License-Identifier: Apache-2.0 OR MIT
  6. #
  7. #
  8. set(LIB_NAME "sdformat")
  9. set(LIB_VERSION_FULL 13.5.0)
  10. set(LIB_VERSION_MAJOR 13)
  11. set(SDFORMAT_O3DE_NAMESPACE "3rdParty::$${LIB_NAME}")
  12. if (TARGET $${SDFORMAT_O3DE_NAMESPACE})
  13. return()
  14. endif()
  15. # if we're not in O3DE, it's also extremely helpful to show a message to logs that indicate that this
  16. # library was successfully picked up, as opposed to the system one.
  17. # A good way to know if you're in O3DE or not is that O3DE sets various cache variables before
  18. # calling find_package, specifically, O3DE_ENGINE_NAME is always set very early:
  19. if (NOT O3DE_ENGINE_NAME)
  20. message(STATUS "Using O3DE's sdformat library from $${CMAKE_CURRENT_LIST_DIR}")
  21. endif()
  22. set($${LIB_NAME}_INCLUDE_DIR_ROOT $${CMAKE_CURRENT_LIST_DIR}/$${LIB_NAME}/include)
  23. set($${LIB_NAME}_INCLUDE_DIRECTORIES $${$${LIB_NAME}_INCLUDE_DIR_ROOT}
  24. $${$${LIB_NAME}_INCLUDE_DIR_ROOT}/gz/$${LIB_NAME}$${LIB_VERSION_MAJOR})
  25. set($${LIB_NAME}_LIBS_DIR $${CMAKE_CURRENT_LIST_DIR}/$${LIB_NAME}/lib)
  26. set($${LIB_NAME}_LIBRARY_RELEASE $${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${LIB_NAME}$${LIB_VERSION_MAJOR}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${LIB_VERSION_FULL})
  27. # The path to the dbg symbol file
  28. set($${LIB_NAME}_LIBRARY_RELEASE_DBG "$${$${LIB_NAME}_LIBRARY_RELEASE}.dbg")
  29. add_library($${SDFORMAT_O3DE_NAMESPACE} SHARED IMPORTED GLOBAL)
  30. # If the find script is being called in an O3DE context use
  31. # the `ly_target_include_system_directories` function
  32. if(COMMAND ly_target_include_system_directories)
  33. ly_target_include_system_directories(TARGET $${SDFORMAT_O3DE_NAMESPACE}
  34. INTERFACE $${$${LIB_NAME}_INCLUDE_DIRECTORIES})
  35. else()
  36. target_include_directories($${SDFORMAT_O3DE_NAMESPACE} SYSTEM
  37. INTERFACE $${$${LIB_NAME}_INCLUDE_DIRECTORIES})
  38. endif()
  39. set_target_properties($${SDFORMAT_O3DE_NAMESPACE} PROPERTIES
  40. IMPORTED_LOCATION $${$${LIB_NAME}_LIBRARY_RELEASE}
  41. )
  42. # If this Find script is run in context of O3DE,
  43. # make sure to copy over the symlinks as well to the cmake binary directory
  44. if (COMMAND ly_add_target_files)
  45. ly_add_target_files(TARGETS $${SDFORMAT_O3DE_NAMESPACE}
  46. FILES
  47. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${LIB_NAME}$${LIB_VERSION_MAJOR}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${LIB_VERSION_MAJOR}"
  48. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${LIB_NAME}$${LIB_VERSION_MAJOR}$${CMAKE_SHARED_LIBRARY_SUFFIX}"
  49. # Copy the debug symbol .dbg into the binary directory as well
  50. "$${$${LIB_NAME}_LIBRARY_RELEASE_DBG}"
  51. )
  52. endif()
  53. # Add the tinyxml2 dependency
  54. set(tinyxml2_libname "tinyxml2")
  55. set(tinyxml2_include_directories "$${$${LIB_NAME}_INCLUDE_DIR_ROOT}")
  56. # Tinyxml2 is built as a STATIC library
  57. set(tinyxml2_lib_release "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_STATIC_LIBRARY_PREFIX}$${tinyxml2_libname}$${CMAKE_STATIC_LIBRARY_SUFFIX}")
  58. # Add the 3rdParty::tinyxml2 target STATIC library
  59. set(tinyxml2_target "tinyxml2")
  60. set(tinyxml2_target_namespace "3rdParty::$${tinyxml2_target}")
  61. add_library($${tinyxml2_target_namespace} STATIC IMPORTED GLOBAL)
  62. # Add the include directories to the 3rdParty::tinyxml2 target
  63. if(COMMAND ly_target_include_system_directories)
  64. ly_target_include_system_directories(TARGET $${tinyxml2_target_namespace}
  65. INTERFACE $${tinyxml2_include_directories})
  66. else()
  67. target_include_directories($${tinyxml2_target_namespace} SYSTEM
  68. INTERFACE $${tinyxml2_include_directories})
  69. endif()
  70. # Associate the libtinyxml2.a file with the library location
  71. set_target_properties($${tinyxml2_target_namespace} PROPERTIES
  72. IMPORTED_LOCATION $${tinyxml2_lib_release})
  73. # Add the gz-utils dependency
  74. set(gz_utils_raw_name "utils2")
  75. set(gz_utils_version_full "2.0.0")
  76. set(gz_utils_version_major "2")
  77. set(gz_utils_libname "gz-$${gz_utils_raw_name}")
  78. set(gz_utils_include_directories "$${$${LIB_NAME}_INCLUDE_DIR_ROOT}/gz/$${gz_utils_raw_name}")
  79. # gz-utils is built as a SHARED library
  80. set(gz_utils_lib_release "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_utils_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${gz_utils_version_full}")
  81. set(gz_utils_lib_release_dbg "$${gz_utils_lib_release}.dbg")
  82. # Add the 3rdParty::gz-utils target library
  83. set(gz_utils_target "gz-utils")
  84. set(gz_utils_target_namespace "3rdParty::$${gz_utils_target}")
  85. add_library($${gz_utils_target_namespace} STATIC IMPORTED GLOBAL)
  86. # Add the include directories to the 3rdParty::gz-utils target
  87. if(COMMAND ly_target_include_system_directories)
  88. ly_target_include_system_directories(TARGET $${gz_utils_target_namespace}
  89. INTERFACE $${gz_utils_include_directories})
  90. else()
  91. target_include_directories($${gz_utils_target_namespace} SYSTEM
  92. INTERFACE $${gz_utils_include_directories})
  93. endif()
  94. # Associate the libgz-utils2.so file with the library location
  95. set_target_properties($${gz_utils_target_namespace} PROPERTIES
  96. IMPORTED_LOCATION $${gz_utils_lib_release})
  97. if (COMMAND ly_add_target_files)
  98. ly_add_target_files(TARGETS $${gz_utils_target_namespace}
  99. FILES
  100. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_utils_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${gz_utils_version_major}"
  101. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_utils_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}"
  102. "$${gz_utils_lib_release_dbg}"
  103. )
  104. endif()
  105. # Add the gz-math dependency
  106. set(gz_math_raw_name "math7")
  107. set(gz_math_version_full "7.2.0")
  108. set(gz_math_version_major "7")
  109. set(gz_math_libname "gz-$${gz_math_raw_name}")
  110. set(gz_math_include_directories "$${$${LIB_NAME}_INCLUDE_DIR_ROOT}/gz/$${gz_math_raw_name}")
  111. # gz-math is built as a SHARED library
  112. set(gz_math_lib_release "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_math_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${gz_math_version_full}")
  113. set(gz_math_lib_release_dbg "$${gz_math_lib_release}.dbg")
  114. # Add the 3rdParty::gz-math target library
  115. set(gz_math_target "gz-math")
  116. set(gz_math_target_namespace "3rdParty::$${gz_math_target}")
  117. add_library($${gz_math_target_namespace} STATIC IMPORTED GLOBAL)
  118. # Add the include directories to the 3rdParty::gz-math target
  119. if(COMMAND ly_target_include_system_directories)
  120. ly_target_include_system_directories(TARGET $${gz_math_target_namespace}
  121. INTERFACE $${gz_math_include_directories})
  122. else()
  123. target_include_directories($${gz_math_target_namespace} SYSTEM
  124. INTERFACE $${gz_math_include_directories})
  125. endif()
  126. # Associate the libgz-math2.so file with the library location
  127. set_target_properties($${gz_math_target_namespace} PROPERTIES
  128. IMPORTED_LOCATION $${gz_math_lib_release})
  129. if (COMMAND ly_add_target_files)
  130. ly_add_target_files(TARGETS $${gz_math_target_namespace}
  131. FILES
  132. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_math_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}.$${gz_math_version_major}"
  133. "$${$${LIB_NAME}_LIBS_DIR}/$${CMAKE_SHARED_LIBRARY_PREFIX}$${gz_math_libname}$${CMAKE_SHARED_LIBRARY_SUFFIX}"
  134. "$${gz_math_lib_release_dbg}"
  135. )
  136. endif()
  137. # Add the dependent libraries as target_link_libraries
  138. target_link_libraries($${SDFORMAT_O3DE_NAMESPACE}
  139. INTERFACE
  140. $${tinyxml_target_namespace}
  141. $${gz_utils_target_namespace}
  142. $${gz_math_target_namespace})
  143. set($${LIB_NAME}_FOUND True)