mesa-demos: NOTE! Default branch is now main
[mesa-demos.git] / CMakeLists.txt
blobc65105025238f69321e5361269b57b6fb8d87663
1 cmake_minimum_required (VERSION 2.8)
3 project (mesademos)
5 include (FindPkgConfig)
6 include (CheckCCompilerFlag)
7 include (CheckSymbolExists)
9 find_package (OpenGL REQUIRED)
10 find_package (GLUT REQUIRED)
11 find_package (X11)
13 set (GLAD_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/glad/include)
15 if (PKG_CONFIG_FOUND AND NOT WIN32)
16         pkg_check_modules (EGL egl)
17         pkg_check_modules (GLESV1 glesv1_cm)
18         pkg_check_modules (GLESV2 glesv2)
19         pkg_check_modules (VG vg)
20         pkg_check_modules (OSMESA osmesa)
21 endif ()
23 # Check for FreeGLUT 2.6 or later
24 set (CMAKE_REQUIRED_INCLUDES "${GLUT_INCLUDE_DIR}")
25 set (CMAKE_REQUIRED_LIBRARIES "${GLUT_glut_LIBRARY}")
26 check_symbol_exists ("glutInitContextProfile" "GL/glut.h;GL/freeglut.h" HAVE_FREEGLUT)
27 if (HAVE_FREEGLUT)
28         add_definitions (-DHAVE_FREEGLUT)
29 endif ()
31 if (UNIX)
32         link_libraries(m)
33 endif (UNIX)
35 # On Mac OS X, GLX is provided as a separate OpenGL implementation, different
36 # from the standard OpenGL framework which provides support for GLUT and native
37 # Mac OS X applications.
38 if (X11_FOUND)
39         if (APPLE)
40                 find_path (X11_GL_INCLUDE_PATH GL/glx.h ${X11_INC_SEARCH_PATH})
41                 if (NOT X11_GL_INCLUDE_PATH)
42                         message (WARNING "Could not find GL/glx.h")
43                         set (X11_FOUND FALSE)
44                 endif (NOT X11_GL_INCLUDE_PATH)
45                 set (X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_GL_INCLUDE_PATH})
47                 find_library (X11_GL_LIB GL ${X11_LIB_SEARCH_PATH})
48                 if (NOT X11_GL_LIB)
49                         message (WARNING "Could not find libGL.dylib")
50                         set (X11_FOUND FALSE)
51                 endif (NOT X11_GL_LIB)
53                 find_library (X11_GLU_LIB GLU ${X11_LIB_SEARCH_PATH})
54                 if (NOT X11_GLU_LIB)
55                         message (WARNING "Could not find libGLU.dylib")
56                         set (X11_FOUND FALSE)
57                 endif (NOT X11_GLU_LIB)
58         else ()
59                 set (X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR})
60                 set (X11_GL_LIB ${OPENGL_gl_LIBRARY})
61                 set (X11_GLU_LIB ${OPENGL_glu_LIBRARY})
62         endif ()
63 endif (X11_FOUND)
65 if (CMAKE_COMPILER_IS_GNUCC)
66         add_definitions(
67                 -Wall
68                 -Wpointer-arith
69                 -Wmissing-declarations
70                 -fno-strict-aliasing
71                 #-Wold-style-definition
72                 #-Wdeclaration-after-statement
73         )
74         set (CMAKE_C_FLAGS "-Wmissing-prototypes -Wnested-externs -Wbad-function-cast ${CMAKE_CXX_FLAGS}")
75 endif ()
77 if (WIN32)
78         # Nobody likes to include windows.h:
79         # - Microsoft's GL/gl.h header depends on windows.h but doesn't include it;
80         # - certain GLUT distributions don't include it;
81         # - most of our programs are meant to be portable so don't include it.
82         #
83         # We could try to replicate the windows.h definitions required by
84         # GL/gl.h, but the build time savings don't compensate the constant
85         # headaches that brings, so instead we force windows.h to be included
86         # on every file.
87         if (MSVC)
88                 add_definitions (-FIwindows.h)
89         else (MSVC)
90                 add_definitions (--include windows.h)
91         endif (MSVC)
93         # Don't define min/max macros
94         add_definitions (-DNOMINMAX)
96         # MSVC & MinGW only define & use APIENTRY
97         add_definitions (-DGLAPIENTRY=__stdcall)
99         link_libraries (winmm)
100 endif (WIN32)
102 if (MSVC)
103         message (WARNING "MSVC builds are unmainted.  MinGW-w64 is recommended.")
105         # Enable math constants defines
106         add_definitions (-D_USE_MATH_DEFINES)
108         # Silence several MSVC pedantic warnings
109         add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS)
110         add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS)
111         add_definitions (-wd4018) # signed/unsigned mismatch
112         add_definitions (-wd4244) # conversion' conversion from 'type1' to 'type2', possible loss of data
113         add_definitions (-wd4305) # truncation from 'type1' to 'type2'
115         # Use static runtime
116         # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
117         foreach (flag_var
118                 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
119                 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
120         )
121                 if (${flag_var} MATCHES "/MD")
122                         string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
123                 endif ()
124         endforeach (flag_var)
125 endif (MSVC)
127 if (MINGW)
128         # Avoid depending on MinGW runtime DLLs
129         check_c_compiler_flag (-static-libgcc HAVE_STATIC_LIBGCC_FLAG)
130         if (HAVE_STATIC_LIBGCC_FLAG)
131                 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc")
132                 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc")
133                 set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -static-libgcc")
134         endif ()
135         check_c_compiler_flag (-static-libstdc++ HAVE_STATIC_LIBSTDCXX_FLAG)
136         if (HAVE_STATIC_LIBSTDCXX_FLAG)
137                 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
138                 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libstdc++")
139                 set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -static-libstdc++")
140         endif ()
141 endif ()
143 if (APPLE)
144         # Silence deprecated function warnings (we rely on GLUT which is now
145         # declared as deprecated)
146         add_definitions (-Wno-deprecated-declarations)
147 endif ()
149 add_definitions(-DDEMOS_DATA_DIR=\"../data/\")
151 if (BUILD_SHARED_LIBS AND NOT DEFINED LIBDIR)
152         set(LIBDIR lib)
153 endif (BUILD_SHARED_LIBS AND NOT DEFINED LIBDIR)
155 add_subdirectory (src)
158 install (FILES index.html DESTINATION doc)
160 set (CPACK_PACKAGE_NAME "mesa-demos")
161 set (CPACK_PACKAGE_VERSION_MAJOR "8")
162 set (CPACK_PACKAGE_VERSION_MINOR "4")
163 set (CPACK_PACKAGE_VERSION_PATCH "0")
165 if (WIN32)
166     set (CPACK_GENERATOR "ZIP")
167 elseif (APPLE)
168     set (CPACK_GENERATOR "DragNDrop")
169     set (CPACK_DMG_FORMAT "UDBZ")
170 else ()
171     set (CPACK_GENERATOR "TBZ2")
172 endif ()
174 include(CPack)