]> git.cworth.org Git - apitrace/blob - CMakeLists.txt
Accept zero valued bitmasks.
[apitrace] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.8)
2
3 project (apitrace)
4
5 set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
6
7 # Set default built type
8 if (NOT CMAKE_BUILD_TYPE)
9     set (CMAKE_BUILD_TYPE Debug
10         CACHE
11         STRING "Choose the build type, options are: None, Debug, Release, RelWithDebInfo, or MinSizeRel."
12         FORCE)
13 endif (NOT CMAKE_BUILD_TYPE)
14
15 set (CMAKE_USE_PYTHON_VERSION 2.6)
16
17 find_package (PythonInterp REQUIRED)
18 find_package (OpenGL REQUIRED)
19 find_package (Qt4 COMPONENTS QtCore QtGui QtWebKit)
20 find_package (QJSON)
21
22 if (NOT WIN32)
23     # Always use the bundled zlib and libpng sources on Windows to make it easy
24     # to deploy the wrappers DLLs
25     find_package (ZLIB)
26     find_package (PNG)
27     find_package (X11 REQUIRED)
28 else (NOT WIN32)
29     find_package (DirectX)
30 endif (NOT WIN32)
31
32 if (WIN32)
33     # MSVC & MinGW only define & use APIENTRY
34     add_definitions (-DGLAPIENTRY=__stdcall)
35 endif (WIN32)
36
37 if (MSVC)
38     # C99 includes for msvc
39     include_directories (msvc)
40
41     # Enable math constants defines
42     add_definitions (-D_USE_MATH_DEFINES)
43
44     # Adjust warnings
45     add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS)
46     add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS)
47     add_definitions (-W4)
48     add_definitions (-wd4244) # conversion from 'type1' to 'type2', possible loss of data
49     add_definitions (-wd4505) # unreferenced local function has been removed
50     add_definitions (-wd4800) # forcing value to bool 'true' or 'false' (performance warning)
51     # XXX: it's safer to use ssize_t everywhere instead of disabling warning
52     add_definitions (-wd4018) # signed/unsigned mismatch
53     
54     # Use static runtime
55     # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
56     foreach (flag_var
57         CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
58         CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
59     )
60         if (${flag_var} MATCHES "/MD")
61             string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
62         endif (${flag_var} MATCHES "/MD")
63     endforeach (flag_var)
64 else ()
65     # Adjust warnings
66     add_definitions (-Wall)
67     # XXX: it's safer to use ssize_t everywhere instead of disabling warning
68     add_definitions (-Wno-sign-compare) # comparison between signed and unsigned integer expressions
69 endif ()
70
71 # Use bundled ZLIB if system one can't be found
72 if (ZLIB_FOUND)
73     include_directories (${ZLIB_INCLUDE_DIRS})
74     link_libraries (${ZLIB_LIBRARIES})
75 else (ZLIB_FOUND)
76     add_library (zlib STATIC
77         zlib/adler32.c
78         zlib/compress.c
79         zlib/crc32.c
80         zlib/gzio.c
81         zlib/uncompr.c
82         zlib/deflate.c
83         zlib/trees.c
84         zlib/zutil.c
85         zlib/inflate.c
86         zlib/infback.c
87         zlib/inftrees.c
88         zlib/inffast.c
89     )
90     include_directories (zlib)
91     link_libraries (zlib)
92 endif (ZLIB_FOUND)
93
94 # Use bundled LIBPNG if system one can't be found
95 if (PNG_FOUND)
96     include_directories (${PNG_INCLUDE_DIR})
97     add_definitions (${PNG_DEFINITIONS})
98     link_libraries (${PNG_LIBRARIES})
99 else (PNG_FOUND)
100     add_library (png STATIC
101         libpng/png.c
102         libpng/pngerror.c
103         libpng/pngget.c
104         libpng/pngmem.c
105         libpng/pngpread.c
106         libpng/pngread.c
107         libpng/pngrio.c
108         libpng/pngrtran.c
109         libpng/pngrutil.c
110         libpng/pngset.c
111         libpng/pngtrans.c
112         libpng/pngwio.c
113         libpng/pngwrite.c
114         libpng/pngwtran.c
115         libpng/pngwutil.c
116     )
117     include_directories (libpng)
118     link_libraries (png)
119 endif (PNG_FOUND)
120
121 include_directories (${CMAKE_CURRENT_SOURCE_DIR})
122
123 add_custom_command (
124     OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
125     COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glproc.py > ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
126     DEPENDS glproc.py dispatch.py wglapi.py glxapi.py glapi.py glenum.py stdapi.py
127 )
128
129 if (WIN32)
130     # Put wrappers in a separate directory
131     set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/wrappers)
132
133     # d3d8.dll
134     #if (DirectX_D3D8_FOUND)
135     #    include_directories (${DirectX_D3D8_INCLUDE_DIR})
136     #    add_custom_command (
137     #        OUTPUT d3d8.cpp
138     #        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d8.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d8.cpp
139     #        DEPENDS d3d8.py d3d8types.py d3d8caps.py winapi.py stdapi.py
140     #    )
141     #    add_library (d3d8 SHARED d3d8.def d3d8.cpp trace_write.cpp os_win32.cpp)
142     #    set_target_properties (d3d8 PROPERTIES PREFIX "")
143     #endif (DirectX_D3D8_FOUND)
144
145     # d3d9.dll
146     if (DirectX_D3DX9_FOUND)
147         include_directories (${DirectX_D3DX9_INCLUDE_DIR})
148         add_custom_command (
149             OUTPUT d3d9.cpp
150             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d9.cpp
151             DEPENDS d3d9.py trace.py d3d9types.py d3d9caps.py d3dshader.py winapi.py stdapi.py
152         )
153         add_library (d3d9 SHARED d3d9.def d3d9.cpp trace_write.cpp os_win32.cpp)
154         set_target_properties (d3d9 PROPERTIES PREFIX "")
155     endif (DirectX_D3DX9_FOUND)
156
157     # d3d10.dll
158     #if (DirectX_D3D10_FOUND)
159     #    include_directories (${DirectX_D3D10_INCLUDE_DIR})
160     #    add_custom_command (
161     #        OUTPUT d3d10.cpp
162     #        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d10misc.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d10.cpp
163     #        DEPENDS d3d10misc.py winapi.py stdapi.py
164     #    )
165     #    add_library (d3d10 SHARED d3d10.def d3d10.cpp trace_write.cpp os_win32.cpp)
166     #    set_target_properties (d3d10 PROPERTIES PREFIX "")
167     #endif (DirectX_D3D10_FOUND)
168
169     # opengl32.dll
170     add_custom_command (
171         OUTPUT wgltrace.cpp
172         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/wgltrace.cpp
173         DEPENDS wgltrace.py gltrace.py trace.py wglapi.py wglenum.py glapi.py glenum.py winapi.py stdapi.py
174     )
175     add_library (opengl SHARED opengl32.def wgltrace.cpp trace_write.cpp os_win32.cpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp)
176     set_target_properties (opengl PROPERTIES
177         PREFIX ""
178         OUTPUT_NAME opengl32)
179     if (MINGW)
180         set_target_properties(opengl PROPERTIES LINK_FLAGS "-Wl,--enable-stdcall-fixup ${CMAKE_CURRENT_SOURCE_DIR}/opengl32.def")
181     endif (MINGW)
182
183 else ()
184     include_directories (${X11_INCLUDE_DIR})
185
186     # libGL.so
187     add_custom_command (
188         OUTPUT glxtrace.cpp
189         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glxtrace.cpp
190         DEPENDS glxtrace.py gltrace.py trace.py glxapi.py glapi.py glenum.py stdapi.py
191     )
192
193     add_library (glxtrace SHARED glxtrace.cpp trace_write.cpp os_posix.cpp ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp)
194
195     set_target_properties (glxtrace PROPERTIES
196         PREFIX ""
197     )
198
199     target_link_libraries (glxtrace dl)
200 endif ()
201
202 if (WIN32)
203     set (os os_win32.cpp)
204     set (glws glws_wgl.cpp)
205 else (WIN32)
206     set (os os_posix.cpp)
207     set (glws glws_glx.cpp)
208 endif (WIN32)
209
210 add_library (trace trace_model.cpp trace_parser.cpp ${os})
211
212 add_executable (dump dump.cpp)
213 target_link_libraries (dump trace)
214
215 add_custom_command (
216     OUTPUT glretrace_gl.cpp
217     COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glretrace_gl.cpp
218     DEPENDS glretrace.py retrace.py codegen.py glapi.py glenum.py stdapi.py
219 )
220
221 add_custom_command (
222     OUTPUT glretrace_state.cpp
223     COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glstate.py > ${CMAKE_CURRENT_BINARY_DIR}/glretrace_state.cpp
224     DEPENDS glstate.py glapi.py glenum.py stdapi.py
225 )
226
227 include_directories (
228     ${CMAKE_CURRENT_BINARY_DIR}
229     ${OPENGL_INCLUDE_PATH}
230 )
231
232 add_executable (glretrace
233     glretrace_gl.cpp
234     glretrace_main.cpp
235     glretrace_state.cpp
236     retrace.cpp
237     ${glws}
238     image.cpp 
239     ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
240 )
241
242 set_property (
243     TARGET glretrace
244     APPEND
245     PROPERTY COMPILE_DEFINITIONS "RETRACE"
246 )
247
248 target_link_libraries (glretrace
249     trace
250     ${OPENGL_gl_LIBRARY}
251     ${OPENGL_glu_LIBRARY}
252     ${X11_LIBRARIES}
253 )
254
255 if (NOT WIN32)
256     target_link_libraries (glretrace ${X11_LIBRARIES})
257 endif (NOT WIN32)
258
259 if (QT4_FOUND AND QJSON_FOUND)
260     add_subdirectory(gui)
261 endif (QT4_FOUND AND QJSON_FOUND)