Platformer in OpenGL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

277 lines
9.2 KiB

5 years ago
  1. cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
  2. cmake_policy(VERSION 3.2)
  3. set(GLM_VERSION "0.9.9")
  4. project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
  5. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  6. include(GNUInstallDirs)
  7. include(CMakePackageConfigHelpers)
  8. enable_testing()
  9. option(GLM_QUIET "No CMake Message" OFF)
  10. option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
  11. option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
  12. option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
  13. option(GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF)
  14. option(GLM_TEST_ENABLE_CXX_20 "Enable C++ 20" OFF)
  15. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  16. if(GLM_TEST_ENABLE_CXX_20)
  17. set(CMAKE_CXX_STANDARD 20)
  18. add_definitions(-DGLM_FORCE_CXX2A)
  19. if(NOT GLM_QUIET)
  20. message(STATUS "GLM: Build with C++20 features")
  21. endif()
  22. elseif(GLM_TEST_ENABLE_CXX_17)
  23. set(CMAKE_CXX_STANDARD 17)
  24. add_definitions(-DGLM_FORCE_CXX17)
  25. if(NOT GLM_QUIET)
  26. message(STATUS "GLM: Build with C++17 features")
  27. endif()
  28. elseif(GLM_TEST_ENABLE_CXX_14)
  29. set(CMAKE_CXX_STANDARD 14)
  30. add_definitions(-DGLM_FORCE_CXX14)
  31. if(NOT GLM_QUIET)
  32. message(STATUS "GLM: Build with C++14 features")
  33. endif()
  34. elseif(GLM_TEST_ENABLE_CXX_11)
  35. set(CMAKE_CXX_STANDARD 11)
  36. add_definitions(-DGLM_FORCE_CXX11)
  37. if(NOT GLM_QUIET)
  38. message(STATUS "GLM: Build with C++11 features")
  39. endif()
  40. elseif(GLM_TEST_ENABLE_CXX_98)
  41. set(CMAKE_CXX_STANDARD 98)
  42. add_definitions(-DGLM_FORCE_CXX98)
  43. if(NOT GLM_QUIET)
  44. message(STATUS "GLM: Build with C++98 features")
  45. endif()
  46. endif()
  47. option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
  48. option(GLM_DISABLE_AUTO_DETECTION "Enable language extensions" OFF)
  49. if(GLM_DISABLE_AUTO_DETECTION)
  50. add_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)
  51. endif()
  52. if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
  53. set(CMAKE_CXX_EXTENSIONS ON)
  54. if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
  55. add_compile_options(-fms-extensions)
  56. endif()
  57. message(STATUS "GLM: Build with C++ language extensions")
  58. else()
  59. set(CMAKE_CXX_EXTENSIONS OFF)
  60. if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  61. add_compile_options(/Za)
  62. if(MSVC15)
  63. add_compile_options(/permissive-)
  64. endif()
  65. endif()
  66. endif()
  67. option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
  68. if(GLM_TEST_ENABLE_FAST_MATH)
  69. if(NOT GLM_QUIET)
  70. message(STATUS "GLM: Build with fast math optimizations")
  71. endif()
  72. if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
  73. add_compile_options(-ffast-math)
  74. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  75. add_compile_options(/fp:fast)
  76. endif()
  77. else()
  78. if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  79. add_compile_options(/fp:precise)
  80. endif()
  81. endif()
  82. option(GLM_TEST_ENABLE "Build unit tests" ON)
  83. option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
  84. option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
  85. option(GLM_TEST_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF)
  86. option(GLM_TEST_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF)
  87. option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF)
  88. option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
  89. option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
  90. option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
  91. if(GLM_TEST_FORCE_PURE)
  92. add_definitions(-DGLM_FORCE_PURE)
  93. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  94. add_compile_options(-mfpmath=387)
  95. endif()
  96. message(STATUS "GLM: No SIMD instruction set")
  97. elseif(GLM_TEST_ENABLE_SIMD_AVX2)
  98. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  99. add_compile_options(-mavx2)
  100. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  101. add_compile_options(/QxAVX2)
  102. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  103. add_compile_options(/arch:AVX2)
  104. endif()
  105. message(STATUS "GLM: AVX2 instruction set")
  106. elseif(GLM_TEST_ENABLE_SIMD_AVX)
  107. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  108. add_compile_options(-mavx)
  109. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  110. add_compile_options(/QxAVX)
  111. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  112. add_compile_options(/arch:AVX)
  113. endif()
  114. message(STATUS "GLM: AVX instruction set")
  115. elseif(GLM_TEST_ENABLE_SIMD_SSE4_2)
  116. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  117. add_compile_options(-msse4.2)
  118. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  119. add_compile_options(/QxSSE4.2)
  120. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  121. add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2
  122. endif()
  123. message(STATUS "GLM: SSE4.2 instruction set")
  124. elseif(GLM_TEST_ENABLE_SIMD_SSE4_1)
  125. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  126. add_compile_options(-msse4.1)
  127. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  128. add_compile_options(/QxSSE4.1)
  129. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  130. add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1
  131. endif()
  132. message(STATUS "GLM: SSE4.1 instruction set")
  133. elseif(GLM_TEST_ENABLE_SIMD_SSSE3)
  134. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  135. add_compile_options(-mssse3)
  136. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  137. add_compile_options(/QxSSSE3)
  138. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  139. add_compile_options(/arch:SSE2) # VC doesn't support SSSE3
  140. endif()
  141. message(STATUS "GLM: SSSE3 instruction set")
  142. elseif(GLM_TEST_ENABLE_SIMD_SSE3)
  143. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  144. add_compile_options(-msse3)
  145. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  146. add_compile_options(/QxSSE3)
  147. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  148. add_compile_options(/arch:SSE2) # VC doesn't support SSE3
  149. endif()
  150. message(STATUS "GLM: SSE3 instruction set")
  151. elseif(GLM_TEST_ENABLE_SIMD_SSE2)
  152. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  153. add_compile_options(-msse2)
  154. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  155. add_compile_options(/QxSSE2)
  156. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  157. add_compile_options(/arch:SSE2)
  158. endif()
  159. message(STATUS "GLM: SSE2 instruction set")
  160. endif()
  161. # Compiler and default options
  162. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  163. if(NOT GLM_QUIET)
  164. message("GLM: Clang - ${CMAKE_CXX_COMPILER_ID} compiler")
  165. endif()
  166. add_compile_options(-Werror -Weverything)
  167. add_compile_options(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-gnu-anonymous-struct -Wno-nested-anon-types)
  168. add_compile_options(-Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral)
  169. elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  170. if(NOT GLM_QUIET)
  171. message("GLM: GCC - ${CMAKE_CXX_COMPILER_ID} compiler")
  172. endif()
  173. add_compile_options(-O2)
  174. add_compile_options(-Wno-long-long)
  175. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  176. if(NOT GLM_QUIET)
  177. message("GLM: Intel - ${CMAKE_CXX_COMPILER_ID} compiler")
  178. endif()
  179. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  180. if(NOT GLM_QUIET)
  181. message("GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler")
  182. endif()
  183. add_compile_options(/W4 /WX)
  184. add_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365)
  185. add_definitions(-D_CRT_SECURE_NO_WARNINGS)
  186. endif()
  187. include_directories("${PROJECT_SOURCE_DIR}")
  188. add_subdirectory(glm)
  189. add_subdirectory(test)
  190. set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
  191. install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  192. write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
  193. # build tree package config
  194. configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)
  195. # install tree package config
  196. configure_package_config_file(
  197. cmake/glmConfig.cmake.in
  198. ${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
  199. INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
  200. PATH_VARS CMAKE_INSTALL_INCLUDEDIR
  201. NO_CHECK_REQUIRED_COMPONENTS_MACRO)
  202. install(FILES
  203. "${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
  204. "${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
  205. DESTINATION ${GLM_INSTALL_CONFIGDIR})
  206. add_library(glm INTERFACE)
  207. target_include_directories(glm INTERFACE
  208. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  209. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
  210. install(TARGETS glm EXPORT glmTargets)
  211. export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")
  212. install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
  213. # build pkg-config file
  214. configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)
  215. # install pkg-config file
  216. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
  217. export(PACKAGE glm)
  218. if(NOT TARGET uninstall)
  219. configure_file(
  220. ${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in
  221. ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
  222. IMMEDIATE @ONLY)
  223. add_custom_target(uninstall
  224. COMMAND ${CMAKE_COMMAND} -P
  225. ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
  226. endif()