]> git.cworth.org Git - apitrace/blob - wrappers/CMakeLists.txt
459e1ee238ad268953450061f51c5ab5954047c2
[apitrace] / wrappers / CMakeLists.txt
1 ##############################################################################
2 # API tracers
3
4
5 include_directories (
6     ${CMAKE_CURRENT_SOURCE_DIR}
7     ${CMAKE_SOURCE_DIR}/helpers
8     ${CMAKE_BINARY_DIR}/dispatch
9     ${CMAKE_SOURCE_DIR}/dispatch
10 )
11
12 add_library (common_trace STATIC
13     trace.cpp
14 )
15
16 set_target_properties (common_trace PROPERTIES
17     # Ensure it can be statically linked in shared libraries
18     COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}"
19 )
20
21 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
22
23 if (WIN32)
24     if (MINGW)
25         # Silence warnings about @nn suffix mismatch
26         set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup")
27         set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--enable-stdcall-fixup")
28     endif ()
29
30     # ddraw.dll
31     if (DirectX_D3D_INCLUDE_DIR)
32         include_directories (BEFORE SYSTEM ${DirectX_D3D_INCLUDE_DIR})
33         add_custom_command (
34             OUTPUT ddrawtrace.cpp
35             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ddrawtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/ddrawtrace.cpp
36             DEPENDS
37                 ddrawtrace.py
38                 dlltrace.py
39                 trace.py
40                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
41                 ${CMAKE_SOURCE_DIR}/specs/d3d.py
42                 ${CMAKE_SOURCE_DIR}/specs/d3dtypes.py
43                 ${CMAKE_SOURCE_DIR}/specs/d3dcaps.py
44                 ${CMAKE_SOURCE_DIR}/specs/ddraw.py
45                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
46                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
47         )
48         add_library (ddrawtrace MODULE ddraw.def ddrawtrace.cpp)
49         target_link_libraries (ddrawtrace
50             common_trace
51             common
52             ${ZLIB_LIBRARIES}
53             ${SNAPPY_LIBRARIES}
54         )
55         set_target_properties (ddrawtrace PROPERTIES
56             PREFIX ""
57             OUTPUT_NAME ddraw
58         )
59         install (TARGETS ddrawtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
60     endif ()
61
62     # d3d8.dll
63     if (DirectX_D3D8_INCLUDE_DIR AND DirectX_D3DX9_INCLUDE_DIR)
64         include_directories (BEFORE SYSTEM ${DirectX_D3DX9_INCLUDE_DIR} ${DirectX_D3D8_INCLUDE_DIR})
65         add_custom_command (
66             OUTPUT d3d8trace.cpp
67             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d8trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d8trace.cpp
68             DEPENDS
69                 d3d8trace.py
70                 dlltrace.py
71                 trace.py
72                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
73                 ${CMAKE_SOURCE_DIR}/specs/d3d8.py
74                 ${CMAKE_SOURCE_DIR}/specs/d3d8types.py
75                 ${CMAKE_SOURCE_DIR}/specs/d3d8caps.py
76                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
77                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
78         )
79         add_library (d3d8trace MODULE d3d8.def d3d8trace.cpp d3d9shader.cpp)
80         target_link_libraries (d3d8trace
81             common_trace
82             common
83             ${ZLIB_LIBRARIES}
84             ${SNAPPY_LIBRARIES}
85         )
86         set_target_properties (d3d8trace PROPERTIES
87             PREFIX ""
88             OUTPUT_NAME d3d8
89         )
90         install (TARGETS d3d8trace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
91     endif ()
92
93     # d3d9.dll
94     if (DirectX_D3DX9_INCLUDE_DIR)
95         include_directories (BEFORE SYSTEM ${DirectX_D3DX9_INCLUDE_DIR})
96         add_custom_command (
97             OUTPUT d3d9trace.cpp
98             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d9trace.cpp
99             DEPENDS
100                 d3d9trace.py
101                 dlltrace.py
102                 trace.py
103                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
104                 ${CMAKE_SOURCE_DIR}/specs/d3d9.py
105                 ${CMAKE_SOURCE_DIR}/specs/d3d9types.py
106                 ${CMAKE_SOURCE_DIR}/specs/d3d9caps.py
107                 ${CMAKE_SOURCE_DIR}/specs/d3d9dxva2.py
108                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
109                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
110         )
111         add_library (d3d9trace MODULE d3d9.def d3d9trace.cpp d3d9shader.cpp)
112         target_link_libraries (d3d9trace
113             common_trace
114             common
115             ${ZLIB_LIBRARIES}
116             ${SNAPPY_LIBRARIES}
117         )
118         set_target_properties (d3d9trace PROPERTIES
119             PREFIX ""
120             OUTPUT_NAME d3d9
121         )
122         install (TARGETS d3d9trace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
123     endif ()
124
125     # dxgi.dll, d3d10.dll, d3d10_1.dll, d3d11.dll
126     set (DXGI_MODULES)
127     if (DirectX_D3D10_INCLUDE_DIR)
128         set (DXGITRACE_DEF ${CMAKE_CURRENT_BINARY_DIR}/dxgitrace.def)
129         file (WRITE  ${DXGITRACE_DEF} "EXPORTS\n")
130         file (APPEND ${DXGITRACE_DEF} "CreateDXGIFactory\n")
131         file (APPEND ${DXGITRACE_DEF} "CreateDXGIFactory1\n")
132         file (APPEND ${DXGITRACE_DEF} "D3D10CreateDevice\n")
133         file (APPEND ${DXGITRACE_DEF} "D3D10CreateDeviceAndSwapChain\n")
134
135         include_directories (BEFORE SYSTEM ${DirectX_D3D10_INCLUDE_DIR})
136         set (DXGI_MODULES d3d10)
137         if (DirectX_D3D10_1_INCLUDE_DIR)
138             include_directories (BEFORE SYSTEM ${DirectX_D3D10_1_INCLUDE_DIR})
139             set (DXGI_MODULES ${DXGI_MODULES} d3d10_1)
140             file (APPEND ${DXGITRACE_DEF} "D3D10CreateDevice1\n")
141             file (APPEND ${DXGITRACE_DEF} "D3D10CreateDeviceAndSwapChain1\n")
142         endif ()
143         if (DirectX_D3D11_INCLUDE_DIR)
144             include_directories (BEFORE SYSTEM ${DirectX_D3D11_INCLUDE_DIR})
145             set (DXGI_MODULES ${DXGI_MODULES} d3d11)
146             if (DirectX_D3D11_1_INCLUDE_DIR)
147                 include_directories (BEFORE SYSTEM ${DirectX_D3D11_1_INCLUDE_DIR})
148                 set (DXGI_MODULES ${DXGI_MODULES} d3d11_1)
149             endif ()
150             file (APPEND ${DXGITRACE_DEF} "D3D11CreateDevice\n")
151             file (APPEND ${DXGITRACE_DEF} "D3D11CreateDeviceAndSwapChain\n")
152         endif ()
153         
154         add_custom_command (
155             OUTPUT dxgitrace.cpp
156             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dxgitrace.py ${DXGI_MODULES} > ${CMAKE_CURRENT_BINARY_DIR}/dxgitrace.cpp
157             DEPENDS
158                 dxgitrace.py
159                 dlltrace.py
160                 trace.py
161                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
162                 ${CMAKE_SOURCE_DIR}/specs/d3d10_1.py
163                 ${CMAKE_SOURCE_DIR}/specs/d3d10.py
164                 ${CMAKE_SOURCE_DIR}/specs/d3d10misc.py
165                 ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py
166                 ${CMAKE_SOURCE_DIR}/specs/d3d10shader.py
167                 ${CMAKE_SOURCE_DIR}/specs/d3d10effect.py
168                 ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py
169                 ${CMAKE_SOURCE_DIR}/specs/dxgi.py
170                 ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
171                 ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
172                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
173                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
174         )
175         add_library (dxgitrace SHARED
176             ${DXGITRACE_DEF}
177             dxgitrace.cpp
178             d3dcommonshader.cpp
179         )
180         target_link_libraries (dxgitrace
181             common_trace
182             common
183             ${ZLIB_LIBRARIES}
184             ${SNAPPY_LIBRARIES}
185         )
186         set_target_properties (dxgitrace
187             PROPERTIES PREFIX ""
188         )
189         install (TARGETS dxgitrace
190             RUNTIME DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
191             LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
192         )
193
194         # dxgi.dll (empty stub for dxgitrace.dll)
195         add_library (dxgistubs MODULE
196             dxgi.def
197             dxgistubs.cpp
198             d3dkmtstubs.cpp
199         )
200         target_link_libraries (dxgistubs dxgitrace)
201         set_target_properties (dxgistubs
202             PROPERTIES PREFIX ""
203             OUTPUT_NAME dxgi
204         )
205         install (TARGETS dxgistubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
206
207         # d3d10.dll (empty stub for dxgitrace.dll)
208         add_library (d3d10stubs MODULE
209             d3d10.def
210             d3d10stubs.cpp
211         )
212         target_link_libraries (d3d10stubs dxgitrace)
213         set_target_properties (d3d10stubs
214             PROPERTIES PREFIX ""
215             OUTPUT_NAME d3d10
216         )
217         install (TARGETS d3d10stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
218
219         # d3d10_1.dll (empty stub for dxgitrace.dll)
220         if (DirectX_D3D10_1_INCLUDE_DIR)
221             add_library (d3d10_1stubs MODULE
222                 d3d10_1.def
223                 d3d10stubs.cpp
224             )
225             target_link_libraries (d3d10_1stubs dxgitrace)
226             set_target_properties (d3d10_1stubs
227                 PROPERTIES PREFIX ""
228                 OUTPUT_NAME d3d10_1
229             )
230             install (TARGETS d3d10_1stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
231         endif ()
232         
233         # d3d11.dll (empty stub for dxgitrace.dll)
234         if (DirectX_D3D11_INCLUDE_DIR)
235             add_library (d3d11stubs MODULE
236                 d3d11.def
237                 d3d11stubs.cpp
238                 d3dkmtstubs.cpp
239             )
240             target_link_libraries (d3d11stubs dxgitrace)
241             set_target_properties (d3d11stubs
242                 PROPERTIES PREFIX ""
243                 OUTPUT_NAME d3d11
244             )
245             install (TARGETS d3d11stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
246         endif ()
247     endif ()
248
249     # d2d1.dll, dwrite.dll
250     if (DirectX_D2D1_INCLUDE_DIR)
251         include_directories (BEFORE SYSTEM ${DirectX_D2D1_INCLUDE_DIR})
252
253         add_custom_command (
254             OUTPUT d2d1trace.cpp
255             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d2d1trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d2d1trace.cpp
256             DEPENDS
257                 d2d1trace.py
258                 trace.py
259                 ${CMAKE_SOURCE_DIR}/specs/d2d1.py
260                 ${CMAKE_SOURCE_DIR}/specs/d2d1.py
261                 ${CMAKE_SOURCE_DIR}/specs/d2dbasetypes.py
262                 ${CMAKE_SOURCE_DIR}/specs/d2derr.py
263                 ${CMAKE_SOURCE_DIR}/specs/dwrite.py
264                 ${CMAKE_SOURCE_DIR}/specs/dcommon.py
265                 ${CMAKE_SOURCE_DIR}/specs/dxgi.py
266                 ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
267                 ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
268                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
269                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
270         )
271         add_library (d2d1trace SHARED d2d1.def d2d1trace.cpp)
272         target_link_libraries (d2d1trace
273             common_trace
274             common
275             ${ZLIB_LIBRARIES}
276             ${SNAPPY_LIBRARIES}
277         )
278         set_target_properties (d2d1trace
279             PROPERTIES PREFIX ""
280             OUTPUT_NAME d2d1
281         )
282         # http://www.cmake.org/pipermail/cmake/2009-March/028221.html
283         install (TARGETS d2d1trace
284             RUNTIME DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
285             LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
286         )
287
288         # dwrite.dll is just an empty stub for d2d1.dll
289         add_library (dwritetrace MODULE dwrite.def dwritetrace.cpp)
290         target_link_libraries (dwritetrace d2d1trace)
291         set_target_properties (dwritetrace
292             PROPERTIES PREFIX ""
293             OUTPUT_NAME dwrite
294         )
295         install (TARGETS dwritetrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
296     endif (DirectX_D2D1_INCLUDE_DIR)
297
298     # opengl32.dll
299     add_custom_command (
300         OUTPUT wgltrace.cpp
301         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/wgltrace.cpp
302         DEPENDS
303                 wgltrace.py
304                 gltrace.py
305                 trace.py
306                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
307                 ${CMAKE_SOURCE_DIR}/specs/wglapi.py
308                 ${CMAKE_SOURCE_DIR}/specs/wglenum.py
309                 ${CMAKE_SOURCE_DIR}/specs/glapi.py
310                 ${CMAKE_SOURCE_DIR}/specs/glparams.py
311                 ${CMAKE_SOURCE_DIR}/specs/gltypes.py
312                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
313                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
314     )
315     add_library (wgltrace MODULE opengl32.def
316         wgltrace.cpp
317         glcaps.cpp
318         gltrace_state.cpp
319     )
320     add_dependencies (wgltrace glproc)
321     target_link_libraries (wgltrace
322         glproc_gl
323         common_trace
324         common
325         ${ZLIB_LIBRARIES}
326         ${SNAPPY_LIBRARIES}
327     )
328     set_target_properties (wgltrace PROPERTIES
329         PREFIX ""
330         OUTPUT_NAME opengl32
331     )
332     install (TARGETS wgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
333
334 elseif (APPLE)
335     # OpenGL framework
336     add_custom_command (
337         OUTPUT cgltrace.cpp
338         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/cgltrace.cpp
339         DEPENDS
340             cgltrace.py
341             gltrace.py
342             trace.py
343             ${CMAKE_SOURCE_DIR}/specs/cglapi.py
344             ${CMAKE_SOURCE_DIR}/specs/glapi.py
345             ${CMAKE_SOURCE_DIR}/specs/glparams.py
346             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
347             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
348     )
349
350     add_library (cgltrace SHARED
351         cgltrace.cpp
352         glcaps.cpp
353         gltrace_state.cpp
354     )
355
356     add_dependencies (cgltrace glproc)
357
358     set_target_properties (cgltrace PROPERTIES
359         # OpenGL framework name
360         PREFIX "" OUTPUT_NAME "OpenGL" SUFFIX ""
361         # Specificy the version and reexport GLU symbols
362         LINK_FLAGS "-compatibility_version 1 -current_version 1.0.0 -Wl,-reexport_library,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib"
363     )
364
365     target_link_libraries (cgltrace
366         glproc_gl
367         common_trace
368         common
369         ${ZLIB_LIBRARIES}
370         ${SNAPPY_LIBRARIES}
371         ${CMAKE_THREAD_LIBS_INIT}
372         dl
373     )
374
375     install (TARGETS cgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
376 elseif (X11_FOUND)
377     # libGL.so
378     add_custom_command (
379         OUTPUT glxtrace.cpp
380         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glxtrace.cpp
381         DEPENDS
382             glxtrace.py
383             gltrace.py
384             trace.py
385             ${CMAKE_SOURCE_DIR}/specs/glxapi.py
386             ${CMAKE_SOURCE_DIR}/specs/glapi.py
387             ${CMAKE_SOURCE_DIR}/specs/glparams.py
388             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
389             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
390     )
391
392     add_library (glxtrace SHARED
393         glxtrace.cpp
394         glcaps.cpp
395         gltrace_state.cpp
396     )
397
398     add_dependencies (glxtrace glproc)
399
400     set_target_properties (glxtrace PROPERTIES
401         # avoid the default "lib" prefix
402         PREFIX ""
403         # Prevent symbol relocations internal to our wrapper library to be
404         # overwritten by the application.
405         LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
406     )
407
408     target_link_libraries (glxtrace
409         glproc_gl
410         common_trace
411         common
412         ${ZLIB_LIBRARIES}
413         ${SNAPPY_LIBRARIES}
414         ${CMAKE_THREAD_LIBS_INIT}
415         dl
416     )
417
418     install (TARGETS glxtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
419 endif ()
420
421
422 if (ENABLE_EGL AND NOT WIN32 AND NOT APPLE)
423     # libEGL.so/libGL.so
424     add_custom_command (
425         OUTPUT egltrace.cpp
426         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/egltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/egltrace.cpp
427         DEPENDS
428             egltrace.py
429             gltrace.py
430             trace.py
431             ${CMAKE_SOURCE_DIR}/specs/eglapi.py
432             ${CMAKE_SOURCE_DIR}/specs/glesapi.py
433             ${CMAKE_SOURCE_DIR}/specs/glapi.py
434             ${CMAKE_SOURCE_DIR}/specs/glparams.py
435             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
436             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
437     )
438
439     add_library (egltrace SHARED
440         egltrace.cpp
441         glcaps.cpp
442         gltrace_state.cpp
443         ${CMAKE_SOURCE_DIR}/helpers/eglsize.cpp
444     )
445
446     add_dependencies (egltrace glproc)
447
448     set_target_properties (egltrace PROPERTIES
449         # avoid the default "lib" prefix
450         PREFIX ""
451         # Prevent symbol relocations internal to our wrapper library to be
452         # overwritten by the application.
453         LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
454     )
455
456     target_link_libraries (egltrace
457         glproc_egl
458         common_trace
459         common
460         ${ZLIB_LIBRARIES}
461         ${SNAPPY_LIBRARIES}
462         ${CMAKE_THREAD_LIBS_INIT}
463         dl
464     )
465
466     install (TARGETS egltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
467 endif ()