CMakeLists.txt 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. enable_testing()
  6. option(GLM_QUIET "No CMake Message" OFF)
  7. option(BUILD_SHARED_LIBS "Build shared library" ON)
  8. option(BUILD_STATIC_LIBS "Build static library" ON)
  9. option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
  10. option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
  11. option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
  12. option(GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF)
  13. option(GLM_TEST_ENABLE_CXX_20 "Enable C++ 20" OFF)
  14. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  15. if(GLM_TEST_ENABLE_CXX_20)
  16. set(CMAKE_CXX_STANDARD 20)
  17. add_definitions(-DGLM_FORCE_CXX2A)
  18. if(NOT GLM_QUIET)
  19. message(STATUS "GLM: Build with C++20 features")
  20. endif()
  21. elseif(GLM_TEST_ENABLE_CXX_17)
  22. set(CMAKE_CXX_STANDARD 17)
  23. add_definitions(-DGLM_FORCE_CXX17)
  24. if(NOT GLM_QUIET)
  25. message(STATUS "GLM: Build with C++17 features")
  26. endif()
  27. elseif(GLM_TEST_ENABLE_CXX_14)
  28. set(CMAKE_CXX_STANDARD 14)
  29. add_definitions(-DGLM_FORCE_CXX14)
  30. if(NOT GLM_QUIET)
  31. message(STATUS "GLM: Build with C++14 features")
  32. endif()
  33. elseif(GLM_TEST_ENABLE_CXX_11)
  34. set(CMAKE_CXX_STANDARD 11)
  35. add_definitions(-DGLM_FORCE_CXX11)
  36. if(NOT GLM_QUIET)
  37. message(STATUS "GLM: Build with C++11 features")
  38. endif()
  39. elseif(GLM_TEST_ENABLE_CXX_98)
  40. set(CMAKE_CXX_STANDARD 98)
  41. add_definitions(-DGLM_FORCE_CXX98)
  42. if(NOT GLM_QUIET)
  43. message(STATUS "GLM: Build with C++98 features")
  44. endif()
  45. endif()
  46. option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
  47. option(GLM_DISABLE_AUTO_DETECTION "Enable language extensions" OFF)
  48. if(GLM_DISABLE_AUTO_DETECTION)
  49. add_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)
  50. endif()
  51. if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
  52. set(CMAKE_CXX_EXTENSIONS ON)
  53. if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
  54. add_compile_options(-fms-extensions)
  55. endif()
  56. message(STATUS "GLM: Build with C++ language extensions")
  57. else()
  58. set(CMAKE_CXX_EXTENSIONS OFF)
  59. if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  60. add_compile_options(/Za)
  61. if(MSVC15)
  62. add_compile_options(/permissive-)
  63. endif()
  64. endif()
  65. endif()
  66. option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
  67. if(GLM_TEST_ENABLE_FAST_MATH)
  68. if(NOT GLM_QUIET)
  69. message(STATUS "GLM: Build with fast math optimizations")
  70. endif()
  71. if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
  72. add_compile_options(-ffast-math)
  73. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  74. add_compile_options(/fp:fast)
  75. endif()
  76. else()
  77. if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  78. add_compile_options(/fp:precise)
  79. endif()
  80. endif()
  81. option(GLM_TEST_ENABLE "Build unit tests" ON)
  82. option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
  83. option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
  84. option(GLM_TEST_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF)
  85. option(GLM_TEST_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF)
  86. option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF)
  87. option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
  88. option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
  89. option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
  90. if(GLM_TEST_FORCE_PURE)
  91. add_definitions(-DGLM_FORCE_PURE)
  92. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  93. add_compile_options(-mfpmath=387)
  94. endif()
  95. message(STATUS "GLM: No SIMD instruction set")
  96. elseif(GLM_TEST_ENABLE_SIMD_AVX2)
  97. add_definitions(-DGLM_FORCE_PURE)
  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. add_definitions(-DGLM_FORCE_INTRINSICS)
  108. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  109. add_compile_options(-mavx)
  110. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  111. add_compile_options(/QxAVX)
  112. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  113. add_compile_options(/arch:AVX)
  114. endif()
  115. message(STATUS "GLM: AVX instruction set")
  116. elseif(GLM_TEST_ENABLE_SIMD_SSE4_2)
  117. add_definitions(-DGLM_FORCE_INTRINSICS)
  118. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  119. add_compile_options(-msse4.2)
  120. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  121. add_compile_options(/QxSSE4.2)
  122. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  123. add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2
  124. endif()
  125. message(STATUS "GLM: SSE4.2 instruction set")
  126. elseif(GLM_TEST_ENABLE_SIMD_SSE4_1)
  127. add_definitions(-DGLM_FORCE_INTRINSICS)
  128. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  129. add_compile_options(-msse4.1)
  130. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  131. add_compile_options(/QxSSE4.1)
  132. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  133. add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1
  134. endif()
  135. message(STATUS "GLM: SSE4.1 instruction set")
  136. elseif(GLM_TEST_ENABLE_SIMD_SSSE3)
  137. add_definitions(-DGLM_FORCE_INTRINSICS)
  138. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  139. add_compile_options(-mssse3)
  140. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  141. add_compile_options(/QxSSSE3)
  142. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  143. add_compile_options(/arch:SSE2) # VC doesn't support SSSE3
  144. endif()
  145. message(STATUS "GLM: SSSE3 instruction set")
  146. elseif(GLM_TEST_ENABLE_SIMD_SSE3)
  147. add_definitions(-DGLM_FORCE_INTRINSICS)
  148. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  149. add_compile_options(-msse3)
  150. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  151. add_compile_options(/QxSSE3)
  152. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  153. add_compile_options(/arch:SSE2) # VC doesn't support SSE3
  154. endif()
  155. message(STATUS "GLM: SSE3 instruction set")
  156. elseif(GLM_TEST_ENABLE_SIMD_SSE2)
  157. add_definitions(-DGLM_FORCE_INTRINSICS)
  158. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
  159. add_compile_options(-msse2)
  160. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  161. add_compile_options(/QxSSE2)
  162. elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
  163. add_compile_options(/arch:SSE2)
  164. endif()
  165. message(STATUS "GLM: SSE2 instruction set")
  166. endif()
  167. # Compiler and default options
  168. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  169. if(NOT GLM_QUIET)
  170. message("GLM: Clang - ${CMAKE_CXX_COMPILER_ID} compiler")
  171. endif()
  172. add_compile_options(-Werror -Weverything)
  173. 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)
  174. 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)
  175. elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  176. if(NOT GLM_QUIET)
  177. message("GLM: GCC - ${CMAKE_CXX_COMPILER_ID} compiler")
  178. endif()
  179. add_compile_options(-O2)
  180. add_compile_options(-Wno-long-long)
  181. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
  182. if(NOT GLM_QUIET)
  183. message("GLM: Intel - ${CMAKE_CXX_COMPILER_ID} compiler")
  184. endif()
  185. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  186. if(NOT GLM_QUIET)
  187. message("GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler")
  188. endif()
  189. add_compile_options(/W4 /WX)
  190. add_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365)
  191. add_definitions(-D_CRT_SECURE_NO_WARNINGS)
  192. endif()
  193. include_directories("${PROJECT_SOURCE_DIR}")
  194. add_subdirectory(glm)
  195. add_subdirectory(test)