aboutsummaryrefslogtreecommitdiffstats
path: root/dev/rays/cmake/UseOpenGL.cmake
blob: ac5f55c268895672ca383b494d8359e4c3e36d49 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 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()