2020-12-29 10:52:07 +00:00
|
|
|
cmake_minimum_required(VERSION 2.8.12)
|
2019-10-09 11:40:25 +00:00
|
|
|
project("glew")
|
|
|
|
|
|
|
|
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
2020-12-29 12:05:28 +00:00
|
|
|
set(INCLUDE_DIR "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>$<INSTALL_INTERFACE:include>")
|
2019-10-09 11:40:25 +00:00
|
|
|
set(RC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build)
|
|
|
|
|
2020-12-29 10:56:22 +00:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
|
2019-10-09 11:40:25 +00:00
|
|
|
|
2019-10-09 11:40:50 +00:00
|
|
|
include("GeneratePkgConfig.cmake")
|
|
|
|
|
2019-10-09 11:40:25 +00:00
|
|
|
option(glew-cmake_BUILD_SHARED "Build the shared glew library" ON)
|
|
|
|
option(glew-cmake_BUILD_STATIC "Build the static glew library" ON)
|
|
|
|
option(USE_GLU "Use GLU" OFF)
|
2020-12-29 13:56:02 +00:00
|
|
|
option(PKG_CONFIG_REPRESENTATIVE_TARGET "Generate pc file for specified target as glew. libglew_static|libglew_shared" OFF)
|
2019-10-09 11:40:25 +00:00
|
|
|
option(ONLY_LIBS "Do not build executables" OFF)
|
|
|
|
|
|
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*")
|
|
|
|
string(REGEX REPLACE "GLEW_MAJOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MAJOR ${_VERSION_MAJOR_STRING})
|
|
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MINOR_STRING REGEX "GLEW_MINOR[ ]*=[ ]*[0-9]+.*")
|
|
|
|
string(REGEX REPLACE "GLEW_MINOR[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_MINOR ${_VERSION_MINOR_STRING})
|
|
|
|
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_PATCH_STRING REGEX "GLEW_MICRO[ ]*=[ ]*[0-9]+.*")
|
|
|
|
string(REGEX REPLACE "GLEW_MICRO[ ]*=[ ]*([0-9]+)" "\\1" CPACK_PACKAGE_VERSION_PATCH ${_VERSION_PATCH_STRING})
|
|
|
|
set(GLEW_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
|
|
|
|
|
|
|
|
set(LIBGLEW_SRCS ${SRC_DIR}/glew.c)
|
|
|
|
|
|
|
|
set(DEFINITIONS)
|
|
|
|
if(WIN32)
|
|
|
|
list(APPEND DEFINITIONS -DWIN32_MEAN_AND_LEAN -DVC_EXTRALEAN -D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
list(APPEND LIBGLEW_SRCS ${RC_DIR}/glew.rc)
|
|
|
|
endif()
|
|
|
|
|
2020-12-29 13:56:02 +00:00
|
|
|
# Use namespaced libraries when supported
|
|
|
|
if(${CMAKE_VERSION} VERSION_GREATER 3.14)
|
|
|
|
set(USE_NAMESPACED_LIB YES)
|
|
|
|
else()
|
|
|
|
set(USE_NAMESPACED_LIB NO)
|
|
|
|
endif()
|
|
|
|
|
2020-12-29 10:51:14 +00:00
|
|
|
if(POLICY CMP0072)
|
2020-12-29 13:56:02 +00:00
|
|
|
set(OpenGL_GL_PREFERENCE GLVND)
|
2020-12-29 10:51:14 +00:00
|
|
|
endif()
|
|
|
|
|
2019-10-09 11:40:25 +00:00
|
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
|
2020-12-29 13:56:02 +00:00
|
|
|
set(pc_requires)
|
|
|
|
|
2019-10-09 11:40:25 +00:00
|
|
|
if(NOT USE_GLU)
|
|
|
|
list(APPEND DEFINITIONS -DGLEW_NO_GLU)
|
|
|
|
else()
|
|
|
|
if(NOT OPENGL_GLU_FOUND)
|
|
|
|
message(FATAL_ERROR "GLU is not found. but GLU option is enabled")
|
|
|
|
endif()
|
|
|
|
|
2020-12-29 13:56:02 +00:00
|
|
|
list(APPEND pc_requires glu)
|
|
|
|
|
|
|
|
if(USE_NAMESPACED_LIB)
|
|
|
|
list(APPEND LIBRARIES OpenGL::GLU)
|
|
|
|
else()
|
2021-02-08 14:06:11 +00:00
|
|
|
list(APPEND LIBRARIES ${OPENGL_glu_LIBRARY})
|
2020-12-29 13:56:02 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
list(APPEND pc_requires gl)
|
2021-02-08 14:06:11 +00:00
|
|
|
if(POLICY CMP0072)
|
|
|
|
# GLVND
|
|
|
|
if(USE_NAMESPACED_LIB)
|
|
|
|
list(APPEND LIBRARIES OpenGL::GL)
|
|
|
|
if(NOT (WIN32 OR APPLE))
|
|
|
|
list(APPEND LIBRARIES OpenGL::GLX)
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
list(APPEND LIBRARIES ${OPENGL_opengl_LIBRARY})
|
|
|
|
if(NOT (WIN32 OR APPLE))
|
|
|
|
list(APPEND LIBRARIES ${OPENGL_glx_LIBRARY})
|
|
|
|
endif()
|
|
|
|
endif()
|
2019-10-09 11:40:25 +00:00
|
|
|
else()
|
2021-02-08 14:06:11 +00:00
|
|
|
# Non GLVND
|
|
|
|
if(USE_NAMESPACED_LIB)
|
|
|
|
list(APPEND LIBRARIES OpenGL::OpenGL)
|
|
|
|
else()
|
|
|
|
list(APPEND LIBRARIES ${OPENGL_gl_LIBRARY})
|
|
|
|
endif()
|
2020-12-29 13:56:02 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(APPLE)
|
|
|
|
find_library(AGL_LIBRARY AGL)
|
|
|
|
list(APPEND LIBRARIES ${AGL_LIBRARY})
|
|
|
|
elseif(NOT WIN32)
|
|
|
|
find_package(X11 REQUIRED)
|
|
|
|
|
|
|
|
list(APPEND pc_requires x11 xext)
|
|
|
|
if(USE_NAMESPACED_LIB)
|
|
|
|
list(APPEND LIBRARIES X11::X11 X11::Xext)
|
|
|
|
else()
|
2021-02-08 14:06:11 +00:00
|
|
|
list(APPEND LIBRARIES ${X11_X11_LIB} ${X11_Xext_LIB})
|
2020-12-29 13:56:02 +00:00
|
|
|
endif()
|
2019-10-09 11:40:25 +00:00
|
|
|
endif()
|
|
|
|
|
2020-12-29 11:48:07 +00:00
|
|
|
set(GLEW_TARGETS)
|
|
|
|
|
2019-10-09 11:40:25 +00:00
|
|
|
if(glew-cmake_BUILD_STATIC)
|
2020-05-12 05:33:32 +00:00
|
|
|
add_library(libglew_static STATIC ${LIBGLEW_SRCS})
|
2019-10-09 11:40:25 +00:00
|
|
|
|
2020-05-12 05:33:32 +00:00
|
|
|
set_target_properties(libglew_static PROPERTIES
|
|
|
|
OUTPUT_NAME "glew"
|
|
|
|
DEBUG_POSTFIX d)
|
2019-10-09 11:40:25 +00:00
|
|
|
|
2021-02-04 13:10:43 +00:00
|
|
|
target_compile_definitions(libglew_static PUBLIC GLEW_STATIC)
|
2020-12-29 11:48:07 +00:00
|
|
|
list(APPEND GLEW_TARGETS libglew_static)
|
2021-02-04 13:10:43 +00:00
|
|
|
if(NOT WIN32)
|
2021-02-06 07:04:38 +00:00
|
|
|
add_custom_command(TARGET libglew_static POST_BUILD
|
|
|
|
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libglew.a libGLEW.a
|
|
|
|
WORKING_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
|
|
|
|
BYPRODUCTS ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libGLEW.a
|
|
|
|
COMMENT "create libGLEW symbolic link")
|
2021-02-04 13:10:43 +00:00
|
|
|
install(FILES ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libGLEW.a TYPE LIB)
|
|
|
|
endif()
|
2019-10-09 11:40:25 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(glew-cmake_BUILD_SHARED)
|
2020-05-12 05:33:32 +00:00
|
|
|
add_library(libglew_shared SHARED ${LIBGLEW_SRCS})
|
|
|
|
|
2020-12-29 11:18:49 +00:00
|
|
|
if(glew-cmake_BUILD_STATIC)
|
|
|
|
set_target_properties(libglew_shared PROPERTIES
|
|
|
|
OUTPUT_NAME "glew-shared"
|
|
|
|
DEBUG_POSTFIX d)
|
|
|
|
else()
|
|
|
|
set_target_properties(libglew_shared PROPERTIES
|
|
|
|
OUTPUT_NAME "glew"
|
|
|
|
DEBUG_POSTFIX d)
|
2021-02-04 13:10:43 +00:00
|
|
|
if(NOT WIN32)
|
2021-02-06 07:04:38 +00:00
|
|
|
add_custom_command(TARGET libglew_shared POST_BUILD
|
|
|
|
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink libglew.so libGLEW.so
|
|
|
|
WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
|
|
|
|
BYPRODUCTS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libGLEW.so
|
|
|
|
COMMENT "create libGLEW symbolic link")
|
2021-02-04 13:10:43 +00:00
|
|
|
install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libGLEW.so TYPE LIB)
|
|
|
|
endif()
|
2020-12-29 11:18:49 +00:00
|
|
|
endif()
|
2020-05-12 05:33:32 +00:00
|
|
|
|
2020-12-29 13:56:02 +00:00
|
|
|
target_compile_definitions(libglew_shared PRIVATE GLEW_BUILD)
|
2020-12-29 11:48:07 +00:00
|
|
|
list(APPEND GLEW_TARGETS libglew_shared)
|
2019-10-09 11:40:25 +00:00
|
|
|
endif()
|
|
|
|
|
2020-12-29 13:56:02 +00:00
|
|
|
foreach(GLEW_TARGET ${GLEW_TARGETS})
|
|
|
|
target_compile_definitions(${GLEW_TARGET} PUBLIC ${DEFINITIONS})
|
|
|
|
target_include_directories(${GLEW_TARGET} PUBLIC ${INCLUDE_DIR})
|
|
|
|
target_link_libraries(${GLEW_TARGET} ${LIBRARIES})
|
|
|
|
set_target_properties(${GLEW_TARGET} PROPERTIES VERSION ${GLEW_VERSION})
|
|
|
|
endforeach()
|
|
|
|
|
2019-10-09 11:40:50 +00:00
|
|
|
if(PKG_CONFIG_REPRESENTATIVE_TARGET)
|
|
|
|
GeneratePkgConfigFile(${PKG_CONFIG_REPRESENTATIVE_TARGET} "The OpenGL Extension Wrangler library"
|
|
|
|
NAME "glew"
|
|
|
|
LIBRARY_DIR lib
|
2020-12-29 13:56:02 +00:00
|
|
|
REQUIRES ${pc_requires})
|
2019-10-09 11:40:50 +00:00
|
|
|
endif()
|
|
|
|
|
2020-12-29 11:48:07 +00:00
|
|
|
install(TARGETS ${GLEW_TARGETS}
|
|
|
|
EXPORT glew-cmake
|
|
|
|
ARCHIVE DESTINATION lib)
|
|
|
|
install(EXPORT glew-cmake DESTINATION lib/cmake/glew FILE glewConfig.cmake)
|
|
|
|
|
2019-10-09 11:40:25 +00:00
|
|
|
file(GLOB PUBLIC_HEADERS "include/GL/*.h")
|
|
|
|
install(FILES ${PUBLIC_HEADERS} DESTINATION include/GL/)
|
|
|
|
|
|
|
|
if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR} AND NOT ONLY_LIBS)
|
|
|
|
set(GLEWINFO_SRCS ${SRC_DIR}/glewinfo.c)
|
|
|
|
set(VISUALINFO_SRCS ${SRC_DIR}/visualinfo.c)
|
|
|
|
if(MSVS)
|
|
|
|
list(APPEND GLEWINFO_SRCS ${RC_DIR}/glewinfo.rc)
|
|
|
|
list(APPEND VISUALINFO_SRCS ${RC_DIR}/visualinfo.rc)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_executable(glewinfo ${GLEWINFO_SRCS})
|
|
|
|
add_executable(visualinfo ${VISUALINFO_SRCS})
|
|
|
|
|
|
|
|
if(glew-cmake_BUILD_STATIC)
|
|
|
|
target_link_libraries(glewinfo libglew_static)
|
|
|
|
target_link_libraries(visualinfo libglew_static)
|
|
|
|
else()
|
|
|
|
target_link_libraries(glewinfo libglew_shared)
|
|
|
|
target_link_libraries(visualinfo libglew_shared)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
install(TARGETS glewinfo visualinfo DESTINATION bin)
|
|
|
|
endif()
|