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