CMakeLists.txt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. cmake_minimum_required(VERSION 3.13)
  2. project(cglm
  3. VERSION 0.9.5
  4. HOMEPAGE_URL https://github.com/recp/cglm
  5. DESCRIPTION "OpenGL Mathematics (glm) for C"
  6. LANGUAGES C
  7. )
  8. set(CMAKE_C_STANDARD 11)
  9. set(CMAKE_C_STANDARD_REQUIRED YES)
  10. set(DEFAULT_BUILD_TYPE "Release")
  11. set(CGLM_BUILD)
  12. option(CGLM_SHARED "Shared build" ON)
  13. option(CGLM_STATIC "Static build" OFF)
  14. option(CGLM_USE_C99 "" OFF)
  15. option(CGLM_USE_TEST "Enable Tests" OFF)
  16. if(CMAKE_SYSTEM_NAME STREQUAL WASI)
  17. set(CGLM_STATIC ON CACHE BOOL "Static option" FORCE)
  18. set(CGLM_SHARED OFF CACHE BOOL "Shared option" FORCE)
  19. endif()
  20. if(NOT CGLM_STATIC AND CGLM_SHARED)
  21. set(CGLM_BUILD SHARED)
  22. else(CGLM_STATIC)
  23. set(CGLM_BUILD STATIC)
  24. endif()
  25. if(CGLM_USE_C99)
  26. set(CMAKE_C_STANDARD 99)
  27. endif()
  28. if(MSVC)
  29. add_definitions(-D_WINDOWS -D_USRDLL)
  30. if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
  31. add_definitions(-DNDEBUG)
  32. add_compile_options(/W3 /Ox /Gy /Oi /TC)
  33. foreach(flag_var
  34. CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
  35. CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
  36. string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
  37. endforeach(flag_var)
  38. endif()
  39. else()
  40. add_compile_options(-Wall)
  41. if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
  42. add_compile_options(-O3)
  43. endif()
  44. endif()
  45. get_directory_property(hasParent PARENT_DIRECTORY)
  46. if(NOT hasParent AND NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  47. message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
  48. set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE)
  49. # Set the possible values of build type for cmake-gui
  50. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
  51. endif()
  52. include(GNUInstallDirs)
  53. set(CPACK_PROJECT_NAME ${PROJECT_NAME})
  54. set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
  55. if(NOT CPack_CMake_INCLUDED)
  56. include(CPack)
  57. endif()
  58. # Target Start
  59. add_library(${PROJECT_NAME}
  60. ${CGLM_BUILD}
  61. src/euler.c
  62. src/affine.c
  63. src/io.c
  64. src/quat.c
  65. src/cam.c
  66. src/vec2.c
  67. src/ivec2.c
  68. src/vec3.c
  69. src/ivec3.c
  70. src/vec4.c
  71. src/ivec4.c
  72. src/mat2.c
  73. src/mat2x3.c
  74. src/mat2x4.c
  75. src/mat3.c
  76. src/mat3x2.c
  77. src/mat3x4.c
  78. src/mat4.c
  79. src/mat4x2.c
  80. src/mat4x3.c
  81. src/plane.c
  82. src/noise.c
  83. src/frustum.c
  84. src/box.c
  85. src/aabb2d.c
  86. src/project.c
  87. src/sphere.c
  88. src/ease.c
  89. src/curve.c
  90. src/bezier.c
  91. src/ray.c
  92. src/affine2d.c
  93. src/clipspace/ortho_lh_no.c
  94. src/clipspace/ortho_lh_zo.c
  95. src/clipspace/ortho_rh_no.c
  96. src/clipspace/ortho_rh_zo.c
  97. src/clipspace/persp_lh_no.c
  98. src/clipspace/persp_lh_zo.c
  99. src/clipspace/persp_rh_no.c
  100. src/clipspace/persp_rh_zo.c
  101. src/clipspace/view_lh_no.c
  102. src/clipspace/view_lh_zo.c
  103. src/clipspace/view_rh_no.c
  104. src/clipspace/view_rh_zo.c
  105. src/clipspace/project_no.c
  106. src/clipspace/project_zo.c
  107. )
  108. if(CGLM_SHARED)
  109. add_definitions(-DCGLM_EXPORTS)
  110. else()
  111. target_compile_definitions(${PROJECT_NAME} PUBLIC -DCGLM_STATIC)
  112. endif()
  113. set_target_properties(${PROJECT_NAME} PROPERTIES
  114. VERSION ${PROJECT_VERSION}
  115. SOVERSION ${PROJECT_VERSION_MAJOR})
  116. if(WIN32)
  117. # Because SOVERSION has no effect to file naming on Windows
  118. set_target_properties(${PROJECT_NAME} PROPERTIES
  119. RUNTIME_OUTPUT_NAME ${PROJECT_NAME}-${PROJECT_VERSION_MAJOR})
  120. endif()
  121. target_include_directories(${PROJECT_NAME}
  122. PUBLIC
  123. $<INSTALL_INTERFACE:include>
  124. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  125. PRIVATE
  126. ${CMAKE_CURRENT_SOURCE_DIR}/src
  127. )
  128. # Target for header-only usage
  129. add_library(${PROJECT_NAME}_headers INTERFACE)
  130. target_include_directories(${PROJECT_NAME}_headers INTERFACE
  131. ${CMAKE_CURRENT_SOURCE_DIR}/include)
  132. # Test Configuration
  133. if(CGLM_USE_TEST)
  134. include(CTest)
  135. enable_testing()
  136. add_subdirectory(test)
  137. endif()
  138. # Install
  139. install(TARGETS ${PROJECT_NAME}
  140. EXPORT ${PROJECT_NAME}
  141. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  142. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  143. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  144. install(DIRECTORY include/${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  145. PATTERN ".*" EXCLUDE)
  146. # Config
  147. export(TARGETS ${PROJECT_NAME}
  148. NAMESPACE ${PROJECT_NAME}::
  149. FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
  150. )
  151. install(EXPORT ${PROJECT_NAME}
  152. FILE "${PROJECT_NAME}Config.cmake"
  153. NAMESPACE ${PROJECT_NAME}::
  154. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
  155. set(PACKAGE_NAME ${PROJECT_NAME})
  156. set(prefix ${CMAKE_INSTALL_PREFIX})
  157. set(exec_prefix ${CMAKE_INSTALL_PREFIX})
  158. if (IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
  159. set(includedir "${CMAKE_INSTALL_INCLUDEDIR}")
  160. else()
  161. set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
  162. endif()
  163. if (IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
  164. set(libdir "${CMAKE_INSTALL_LIBDIR}")
  165. else()
  166. set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
  167. endif()
  168. set(PACKAGE_VERSION "${PROJECT_VERSION}")
  169. configure_file(cglm.pc.in cglm.pc @ONLY)
  170. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cglm.pc
  171. DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)