CocosBuildHelpers.cmake 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. include(CMakeParseArguments)
  2. macro(pre_build TARGET_NAME)
  3. add_custom_target( ${TARGET_NAME}_PRE_BUILD ALL )
  4. add_custom_command(
  5. TARGET ${TARGET_NAME}_PRE_BUILD
  6. ${ARGN}
  7. PRE_BUILD
  8. COMMENT "${TARGET_NAME}_PRE_BUILD ..."
  9. )
  10. add_custom_target(${TARGET_NAME}_CORE_PRE_BUILD)
  11. add_dependencies(${TARGET_NAME}_PRE_BUILD ${TARGET_NAME}_CORE_PRE_BUILD)
  12. add_dependencies(${TARGET_NAME} ${TARGET_NAME}_PRE_BUILD)
  13. endmacro()
  14. function(cocos_mark_resources)
  15. set(oneValueArgs BASEDIR RESOURCEBASE)
  16. set(multiValueArgs FILES)
  17. cmake_parse_arguments(opt "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  18. if(NOT opt_RESOURCEBASE)
  19. set(opt_RESOURCEBASE Resources)
  20. endif()
  21. get_filename_component(BASEDIR_ABS ${opt_BASEDIR} ABSOLUTE)
  22. foreach(RES_FILE ${opt_FILES} ${opt_UNPARSED_ARGUMENTS})
  23. get_filename_component(RES_FILE_ABS ${RES_FILE} ABSOLUTE)
  24. file(RELATIVE_PATH RES ${BASEDIR_ABS} ${RES_FILE_ABS})
  25. get_filename_component(RES_LOC ${RES} PATH)
  26. set_source_files_properties(${RES_FILE} PROPERTIES
  27. MACOSX_PACKAGE_LOCATION "${opt_RESOURCEBASE}/${RES_LOC}"
  28. HEADER_FILE_ONLY 1
  29. )
  30. endforeach()
  31. endfunction()
  32. # cocos_find_package(pkg args...)
  33. # works same as find_package, but do additional care to properly find
  34. # prebuilt libs for cocos
  35. macro(cocos_find_package pkg_name pkg_prefix)
  36. if(NOT USE_PREBUILT_LIBS OR NOT ${pkg_prefix}_FOUND)
  37. find_package(${pkg_name} ${ARGN})
  38. endif()
  39. if(NOT ${pkg_prefix}_INCLUDE_DIRS AND ${pkg_prefix}_INCLUDE_DIR)
  40. set(${pkg_prefix}_INCLUDE_DIRS ${${pkg_prefix}_INCLUDE_DIR})
  41. endif()
  42. if(NOT ${pkg_prefix}_LIBRARIES AND ${pkg_prefix}_LIBRARY)
  43. set(${pkg_prefix}_LIBRARIES ${${pkg_prefix}_LIBRARY})
  44. endif()
  45. message(STATUS "${pkg_name} include dirs: ${${pkg_prefix}_INCLUDE_DIRS}")
  46. endmacro()
  47. # cocos_use_pkg(pkg) function.
  48. # This function applies standard package variables (after find_package(pkg) call) to current scope
  49. # Recognized variables: <pkg>_INCLUDE_DIRS, <pkg>_LIBRARIES, <pkg>_LIBRARY_DIRS
  50. # Also if BUILD_SHARED_LIBS variable off, it is try to use <pkg>_STATIC_* vars before
  51. function(cocos_use_pkg target pkg)
  52. set(prefix ${pkg})
  53. set(_include_dirs)
  54. if(NOT _include_dirs)
  55. set(_include_dirs ${${prefix}_INCLUDE_DIRS})
  56. endif()
  57. if(NOT _include_dirs)
  58. # backward compat with old package-find scripts
  59. set(_include_dirs ${${prefix}_INCLUDE_DIR})
  60. endif()
  61. if(_include_dirs)
  62. include_directories(${_include_dirs})
  63. message(STATUS "${pkg} add to include_dirs: ${_include_dirs}")
  64. endif()
  65. set(_library_dirs)
  66. if(NOT _library_dirs)
  67. set(_library_dirs ${${prefix}_LIBRARY_DIRS})
  68. endif()
  69. if(_library_dirs)
  70. link_directories(${_library_dirs})
  71. message(STATUS "${pkg} add to link_dirs: ${_library_dirs}")
  72. endif()
  73. set(_libs)
  74. if(NOT _libs)
  75. set(_libs ${${prefix}_LIBRARIES})
  76. endif()
  77. if(NOT _libs)
  78. set(_libs ${${prefix}_LIBRARY})
  79. endif()
  80. if(_libs)
  81. target_link_libraries(${target} ${_libs})
  82. message(STATUS "${pkg} libs added to '${target}': ${_libs}")
  83. endif()
  84. set(_defs)
  85. if(NOT _defs)
  86. set(_defs ${${prefix}_DEFINITIONS})
  87. endif()
  88. if(_defs)
  89. add_definitions(${_defs})
  90. message(STATUS "${pkg} add definitions: ${_defs}")
  91. endif()
  92. endfunction()
  93. #cmake has some strange defaults, this should help us a lot
  94. #Please use them everywhere
  95. #WINDOWS = Windows Desktop
  96. #WINRT = Windows RT
  97. #WP8 = Windows Phone 8
  98. #ANDROID = Android
  99. #IOS = iOS
  100. #MACOSX = MacOS X
  101. #LINUX = Linux
  102. if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
  103. if(WINRT)
  104. set(SYSTEM_STRING "Windows RT")
  105. elseif(WP8)
  106. set(SYSTEM_STRING "Windows Phone 8")
  107. else()
  108. set(WINDOWS TRUE)
  109. set(SYSTEM_STRING "Windows Desktop")
  110. endif()
  111. elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
  112. if(ANDROID)
  113. set(SYSTEM_STRING "Android")
  114. else()
  115. set(LINUX TRUE)
  116. set(SYSTEM_STRING "Linux")
  117. endif()
  118. elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  119. if(IOS)
  120. set(SYSTEM_STRING "IOS")
  121. else()
  122. set(MACOSX TRUE)
  123. set(APPLE TRUE)
  124. set(SYSTEM_STRING "Mac OSX")
  125. endif()
  126. endif()
  127. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  128. set(COMPILER_STRING ${CMAKE_CXX_COMPILER_ID})
  129. set(CLANG TRUE)
  130. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  131. if(MINGW)
  132. set(COMPILER_STRING "Mingw GCC")
  133. else()
  134. set(COMPILER_STRING "GCC")
  135. endif()
  136. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
  137. set(COMPILER_STRING "${CMAKE_CXX_COMPILER_ID} C++")
  138. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  139. set(COMPILER_STRING "Visual Studio C++")
  140. endif()
  141. if(CMAKE_CROSSCOMPILING)
  142. set(BUILDING_STRING "It appears you are cross compiling for ${SYSTEM_STRING} with ${COMPILER_STRING}")
  143. else()
  144. set(BUILDING_STRING "It appears you are building natively for ${SYSTEM_STRING} with ${COMPILER_STRING}")
  145. endif()