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.

242 lines
7.8KB

  1. if ( NOT DEFINED CMAKE_BUILD_TYPE )
  2. set( CMAKE_BUILD_TYPE Release CACHE STRING "Build type" )
  3. endif ()
  4. project (glew)
  5. cmake_minimum_required (VERSION 2.8.12)
  6. include(GNUInstallDirs)
  7. if (COMMAND cmake_policy)
  8. cmake_policy (SET CMP0003 NEW)
  9. cmake_policy (SET CMP0042 NEW)
  10. endif()
  11. set(CMAKE_DEBUG_POSTFIX d)
  12. option (BUILD_UTILS "utilities" ON)
  13. option (GLEW_REGAL "Regal mode" OFF)
  14. option (GLEW_OSMESA "OSMesa mode" OFF)
  15. if (APPLE)
  16. option (BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF)
  17. endif ()
  18. set (GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..)
  19. # get version from config/version
  20. file (STRINGS ${GLEW_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*")
  21. string (REGEX REPLACE "GLEW_MAJOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MAJOR ${_VERSION_MAJOR_STRING})
  22. file (STRINGS ${GLEW_DIR}/config/version _VERSION_MINOR_STRING REGEX "GLEW_MINOR[ ]*=[ ]*[0-9]+.*")
  23. string (REGEX REPLACE "GLEW_MINOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MINOR ${_VERSION_MINOR_STRING})
  24. file (STRINGS ${GLEW_DIR}/config/version _VERSION_PATCH_STRING REGEX "GLEW_MICRO[ ]*=[ ]*[0-9]+.*")
  25. string (REGEX REPLACE "GLEW_MICRO[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_PATCH ${_VERSION_PATCH_STRING})
  26. set (GLEW_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
  27. set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  28. set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  29. set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
  30. find_package (OpenGL REQUIRED)
  31. # X11 required when builing visualinfo and glewinfo,
  32. # but not for Windows or Apple OSX platforms
  33. if (BUILD_UTILS AND NOT WIN32 AND NOT APPLE)
  34. find_package (X11)
  35. endif()
  36. if (WIN32)
  37. set (GLEW_LIB_NAME glew32)
  38. else ()
  39. set (GLEW_LIB_NAME GLEW)
  40. set (DLL_PREFIX lib)
  41. endif ()
  42. set (GLEW_LIBRARIES ${OPENGL_LIBRARIES})
  43. add_definitions (-DGLEW_NO_GLU)
  44. #### Regal mode ####
  45. if (GLEW_REGAL)
  46. if (WIN32)
  47. set (REGAL_LIB_NAME regal32)
  48. else ()
  49. set (REGAL_LIB_NAME Regal)
  50. endif ()
  51. add_definitions (-DGLEW_REGAL)
  52. set (GLEW_LIBRARIES ${REGAL_LIB_NAME})
  53. endif ()
  54. #### OSMesa mode ####
  55. if (GLEW_OSMESA)
  56. if (WIN32)
  57. set (OSMESA_LIB_NAME osmesa)
  58. else ()
  59. set (OSMESA_LIB_NAME OSMesa)
  60. endif ()
  61. add_definitions (-DGLEW_OSMESA)
  62. set (GLEW_LIBRARIES ${OSMESA_LIB_NAME} ${OPENGL_LIBRARIES})
  63. set (X11_LIBRARIES)
  64. endif ()
  65. #### GLEW ####
  66. include_directories (${GLEW_DIR}/include)
  67. set (GLEW_PUBLIC_HEADERS_FILES ${GLEW_DIR}/include/GL/wglew.h ${GLEW_DIR}/include/GL/glew.h ${GLEW_DIR}/include/GL/glxew.h)
  68. set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c)
  69. if (WIN32)
  70. list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc)
  71. endif ()
  72. add_library (glew SHARED ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES})
  73. set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}"
  74. VERSION ${GLEW_VERSION}
  75. SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR})
  76. add_library (glew_s STATIC ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES})
  77. set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib)
  78. if (MSVC)
  79. # add options from visual studio project
  80. target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN")
  81. target_compile_definitions (glew_s PRIVATE "GLEW_STATIC;VC_EXTRALEAN")
  82. target_link_libraries (glew LINK_PRIVATE -BASE:0x62AA0000)
  83. # kill security checks which are dependent on stdlib
  84. target_compile_options (glew PRIVATE -GS-)
  85. target_compile_options (glew_s PRIVATE -GS-)
  86. # remove stdlib dependency
  87. target_link_libraries (glew LINK_PRIVATE -nodefaultlib -noentry)
  88. string(REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
  89. elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang")))
  90. # remove stdlib dependency on windows with GCC and Clang (for similar reasons
  91. # as to MSVC - to allow it to be used with any Windows compiler)
  92. target_compile_options (glew PRIVATE -fno-builtin -fno-stack-protector)
  93. target_compile_options (glew_s PRIVATE -fno-builtin -fno-stack-protector)
  94. target_link_libraries (glew LINK_PRIVATE -nostdlib)
  95. endif ()
  96. if (BUILD_FRAMEWORK)
  97. set_target_properties(glew PROPERTIES
  98. FRAMEWORK TRUE
  99. FRAMEWORK_VERSION ${GLEW_VERSION}
  100. MACOSX_FRAMEWORK_IDENTIFIER net.sourceforge.glew
  101. MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${GLEW_VERSION}
  102. MACOSX_FRAMEWORK_BUNDLE_VERSION ${GLEW_VERSION}
  103. XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
  104. PUBLIC_HEADER "${GLEW_PUBLIC_HEADERS_FILES}"
  105. OUTPUT_NAME GLEW
  106. )
  107. endif()
  108. target_link_libraries (glew LINK_PUBLIC ${GLEW_LIBRARIES})
  109. target_link_libraries (glew_s ${GLEW_LIBRARIES})
  110. if(CMAKE_VERSION VERSION_LESS 2.8.12)
  111. set(MAYBE_EXPORT "")
  112. else()
  113. target_compile_definitions(glew_s INTERFACE "GLEW_STATIC")
  114. foreach(t glew glew_s)
  115. target_include_directories(${t} PUBLIC $<INSTALL_INTERFACE:include>)
  116. endforeach()
  117. set(MAYBE_EXPORT EXPORT glew-targets)
  118. endif()
  119. set(targets_to_install "")
  120. if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
  121. list(APPEND targets_to_install glew)
  122. endif()
  123. if(NOT DEFINED BUILD_SHARED_LIBS OR NOT BUILD_SHARED_LIBS)
  124. list(APPEND targets_to_install glew_s)
  125. endif()
  126. install ( TARGETS ${targets_to_install}
  127. ${MAYBE_EXPORT}
  128. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  129. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  130. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  131. FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX}
  132. )
  133. if (BUILD_UTILS)
  134. set (GLEWINFO_SRC_FILES ${GLEW_DIR}/src/glewinfo.c)
  135. if (WIN32)
  136. list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc)
  137. endif ()
  138. add_executable (glewinfo ${GLEWINFO_SRC_FILES})
  139. target_link_libraries (glewinfo glew)
  140. if (NOT WIN32)
  141. target_link_libraries(glewinfo ${X11_LIBRARIES})
  142. endif ()
  143. set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c)
  144. if (WIN32)
  145. list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc)
  146. endif ()
  147. add_executable (visualinfo ${VISUALINFO_SRC_FILES})
  148. target_link_libraries (visualinfo glew)
  149. if (NOT WIN32)
  150. target_link_libraries(visualinfo ${X11_LIBRARIES})
  151. endif ()
  152. install ( TARGETS glewinfo visualinfo
  153. DESTINATION ${CMAKE_INSTALL_BINDIR})
  154. endif ()
  155. set (prefix ${CMAKE_INSTALL_PREFIX})
  156. set (exec_prefix ${CMAKE_INSTALL_PREFIX})
  157. set (libdir ${CMAKE_INSTALL_FULL_LIBDIR})
  158. set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
  159. set (version ${GLEW_VERSION})
  160. set (libname ${GLEW_LIB_NAME})
  161. set (cflags)
  162. set (requireslib glu)
  163. # Mac OSX has no glu.pc unless optional X11/GLX is installed
  164. if (APPLE)
  165. set (requireslib)
  166. endif ()
  167. configure_file (${GLEW_DIR}/glew.pc.in ${GLEW_DIR}/glew.pc @ONLY)
  168. install(FILES ${GLEW_DIR}/glew.pc
  169. DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
  170. )
  171. if(WIN32 AND MSVC AND (NOT MSVC_VERSION LESS 1600) AND (NOT CMAKE_VERSION VERSION_LESS "3.1"))
  172. install(
  173. FILES $<TARGET_PDB_FILE:glew>
  174. DESTINATION ${CMAKE_INSTALL_LIBDIR}
  175. CONFIGURATIONS Debug RelWithDebInfo
  176. )
  177. endif()
  178. install (FILES
  179. ${GLEW_DIR}/include/GL/wglew.h
  180. ${GLEW_DIR}/include/GL/glew.h
  181. ${GLEW_DIR}/include/GL/glxew.h
  182. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GL)
  183. if(MAYBE_EXPORT)
  184. install(EXPORT glew-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew
  185. NAMESPACE GLEW::)
  186. install(FILES
  187. ${CMAKE_CURRENT_SOURCE_DIR}/glew-config.cmake
  188. ${CMAKE_CURRENT_SOURCE_DIR}/CopyImportedTargetProperties.cmake
  189. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew)
  190. endif()
  191. if(NOT TARGET uninstall)
  192. configure_file(
  193. ${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in
  194. ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
  195. IMMEDIATE @ONLY)
  196. add_custom_target(uninstall
  197. COMMAND ${CMAKE_COMMAND} -P
  198. ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
  199. endif()