blob: 2ec5ffbd193c411cf523a294612d183bdd32bb32 (
plain) (
tree)
|
|
# This file is part of the MinGfx cmake build system.
# See the main MinGfx/CMakeLists.txt file for authors, copyright, and license info.
# Either finds a pre-installed version or complains.
# Usage: In your CMakeLists.txt, somewhere after you define the target that depends
# on the OpenGL library (typical with something like add_executable(${PROJECT_NAME} ...)
# or add_library(${PROJECT_NAME} ...)), add the following two lines:
# include(UseOpenGL)
# UseOpenGL(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external)
# The second argument can be either PUBLIC, PRIVATE, or INTERFACE, following the keyword
# usage described here:
# https://cmake.org/cmake/help/latest/command/target_include_directories.html
# The third argument is the directory to use for downloading the external project if
# autobuild is used.
macro(UseOpenGL YOUR_TARGET INTERFACE_PUBLIC_OR_PRIVATE DOWNLOAD_DIR)
message(STATUS "Searching for OpenGL...")
# Check to see if the library is already installed on the system
# CMake ships with FindOpenGL.cmake and in CMake 3.9+ it defines
# the imported targets OpenGL::GL and OpenGL::GLU. Using these is
# now the preferred way to link with OpenGL and all of its dependencies.
# See https://cmake.org/cmake/help/v3.9/module/FindOpenGL.html
find_package(OpenGL)
if (NOT ${OPENGL_FOUND})
message(FATAL_ERROR "OpenGL was not found on the system. MinGfx can auto-download and build many dependencies for you, but not OpenGL. It should come pre-installed on your system.")
endif()
message(STATUS "Ok: OpenGL Found.")
message(STATUS "OpenGL headers: ${OPENGL_INCLUDE_DIR}")
message(STATUS "OpenGL libs: ${OPENGL_LIBRARIES}")
message(STATUS "Linking target ${YOUR_TARGET} with ${INTERFACE_PUBLIC_OR_PRIVATE} dependency OpenGL::GL.")
target_link_libraries(${YOUR_TARGET} ${INTERFACE_PUBLIC_OR_PRIVATE} OpenGL::GL)
if (${OPENGL_GLU_FOUND})
message(STATUS "Linking target ${YOUR_TARGET} with ${INTERFACE_PUBLIC_OR_PRIVATE} dependency OpenGL::GLU.")
target_link_libraries(${YOUR_TARGET} ${INTERFACE_PUBLIC_OR_PRIVATE} OpenGL::GLU)
endif()
target_compile_definitions(${YOUR_TARGET} ${INTERFACE_PUBLIC_OR_PRIVATE} -DUSE_OPENGL)
endmacro()
|