]> git.cworth.org Git - apitrace/blob - wrappers/CMakeLists.txt
93be8e8f252963fb357108c25c0f9a4127589a49
[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/d3dcommon.py
167                 ${CMAKE_SOURCE_DIR}/specs/dxgi.py
168                 ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
169                 ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
170                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
171                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
172         )
173         add_library (dxgitrace SHARED
174             ${DXGITRACE_DEF}
175             dxgitrace.cpp
176             d3dcommonshader.cpp
177         )
178         target_link_libraries (dxgitrace
179             common_trace
180             common
181             ${ZLIB_LIBRARIES}
182             ${SNAPPY_LIBRARIES}
183         )
184         set_target_properties (dxgitrace
185             PROPERTIES PREFIX ""
186         )
187         install (TARGETS dxgitrace
188             RUNTIME DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
189             LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
190         )
191
192         # dxgi.dll (empty stub for dxgitrace.dll)
193         add_library (dxgistubs MODULE
194             dxgi.def
195             dxgistubs.cpp
196             d3dkmtstubs.cpp
197         )
198         target_link_libraries (dxgistubs dxgitrace)
199         set_target_properties (dxgistubs
200             PROPERTIES PREFIX ""
201             OUTPUT_NAME dxgi
202         )
203         install (TARGETS dxgistubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
204
205         # d3d10.dll (empty stub for dxgitrace.dll)
206         add_library (d3d10stubs MODULE
207             d3d10.def
208             d3d10stubs.cpp
209         )
210         target_link_libraries (d3d10stubs dxgitrace)
211         set_target_properties (d3d10stubs
212             PROPERTIES PREFIX ""
213             OUTPUT_NAME d3d10
214         )
215         install (TARGETS d3d10stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
216
217         # d3d10_1.dll (empty stub for dxgitrace.dll)
218         if (DirectX_D3D10_1_INCLUDE_DIR)
219             add_library (d3d10_1stubs MODULE
220                 d3d10_1.def
221                 d3d10stubs.cpp
222             )
223             target_link_libraries (d3d10_1stubs dxgitrace)
224             set_target_properties (d3d10_1stubs
225                 PROPERTIES PREFIX ""
226                 OUTPUT_NAME d3d10_1
227             )
228             install (TARGETS d3d10_1stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
229         endif ()
230         
231         # d3d11.dll (empty stub for dxgitrace.dll)
232         if (DirectX_D3D11_INCLUDE_DIR)
233             add_library (d3d11stubs MODULE
234                 d3d11.def
235                 d3d11stubs.cpp
236                 d3dkmtstubs.cpp
237             )
238             target_link_libraries (d3d11stubs dxgitrace)
239             set_target_properties (d3d11stubs
240                 PROPERTIES PREFIX ""
241                 OUTPUT_NAME d3d11
242             )
243             install (TARGETS d3d11stubs LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
244         endif ()
245     endif ()
246
247     # d2d1.dll, dwrite.dll
248     if (DirectX_D2D1_INCLUDE_DIR)
249         include_directories (BEFORE SYSTEM ${DirectX_D2D1_INCLUDE_DIR})
250
251         add_custom_command (
252             OUTPUT d2d1trace.cpp
253             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d2d1trace.py > ${CMAKE_CURRENT_BINARY_DIR}/d2d1trace.cpp
254             DEPENDS
255                 d2d1trace.py
256                 trace.py
257                 ${CMAKE_SOURCE_DIR}/specs/d2d1.py
258                 ${CMAKE_SOURCE_DIR}/specs/d2d1.py
259                 ${CMAKE_SOURCE_DIR}/specs/d2dbasetypes.py
260                 ${CMAKE_SOURCE_DIR}/specs/d2derr.py
261                 ${CMAKE_SOURCE_DIR}/specs/dwrite.py
262                 ${CMAKE_SOURCE_DIR}/specs/dcommon.py
263                 ${CMAKE_SOURCE_DIR}/specs/dxgi.py
264                 ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
265                 ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
266                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
267                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
268         )
269         add_library (d2d1trace SHARED d2d1.def d2d1trace.cpp)
270         target_link_libraries (d2d1trace
271             common_trace
272             common
273             ${ZLIB_LIBRARIES}
274             ${SNAPPY_LIBRARIES}
275         )
276         set_target_properties (d2d1trace
277             PROPERTIES PREFIX ""
278             OUTPUT_NAME d2d1
279         )
280         # http://www.cmake.org/pipermail/cmake/2009-March/028221.html
281         install (TARGETS d2d1trace
282             RUNTIME DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
283             LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
284         )
285
286         # dwrite.dll is just an empty stub for d2d1.dll
287         add_library (dwritetrace MODULE dwrite.def dwritetrace.cpp)
288         target_link_libraries (dwritetrace d2d1trace)
289         set_target_properties (dwritetrace
290             PROPERTIES PREFIX ""
291             OUTPUT_NAME dwrite
292         )
293         install (TARGETS dwritetrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
294     endif (DirectX_D2D1_INCLUDE_DIR)
295
296     # opengl32.dll
297     add_custom_command (
298         OUTPUT wgltrace.cpp
299         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/wgltrace.cpp
300         DEPENDS
301                 wgltrace.py
302                 gltrace.py
303                 trace.py
304                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
305                 ${CMAKE_SOURCE_DIR}/specs/wglapi.py
306                 ${CMAKE_SOURCE_DIR}/specs/wglenum.py
307                 ${CMAKE_SOURCE_DIR}/specs/glapi.py
308                 ${CMAKE_SOURCE_DIR}/specs/glparams.py
309                 ${CMAKE_SOURCE_DIR}/specs/gltypes.py
310                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
311                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
312     )
313     add_library (wgltrace MODULE opengl32.def
314         wgltrace.cpp
315         glcaps.cpp
316         gltrace_state.cpp
317     )
318     add_dependencies (wgltrace glproc)
319     target_link_libraries (wgltrace
320         glproc_gl
321         common_trace
322         common
323         ${ZLIB_LIBRARIES}
324         ${SNAPPY_LIBRARIES}
325     )
326     set_target_properties (wgltrace PROPERTIES
327         PREFIX ""
328         OUTPUT_NAME opengl32
329     )
330     install (TARGETS wgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
331
332 elseif (APPLE)
333     # OpenGL framework
334     add_custom_command (
335         OUTPUT cgltrace.cpp
336         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cgltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/cgltrace.cpp
337         DEPENDS
338             cgltrace.py
339             gltrace.py
340             trace.py
341             ${CMAKE_SOURCE_DIR}/specs/cglapi.py
342             ${CMAKE_SOURCE_DIR}/specs/glapi.py
343             ${CMAKE_SOURCE_DIR}/specs/glparams.py
344             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
345             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
346     )
347
348     add_library (cgltrace SHARED
349         cgltrace.cpp
350         glcaps.cpp
351         gltrace_state.cpp
352     )
353
354     add_dependencies (cgltrace glproc)
355
356     set_target_properties (cgltrace PROPERTIES
357         # OpenGL framework name
358         PREFIX "" OUTPUT_NAME "OpenGL" SUFFIX ""
359         # Specificy the version and reexport GLU symbols
360         LINK_FLAGS "-compatibility_version 1 -current_version 1.0.0 -Wl,-reexport_library,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib"
361     )
362
363     target_link_libraries (cgltrace
364         glproc_gl
365         common_trace
366         common
367         ${ZLIB_LIBRARIES}
368         ${SNAPPY_LIBRARIES}
369         ${CMAKE_THREAD_LIBS_INIT}
370         dl
371     )
372
373     install (TARGETS cgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
374 elseif (X11_FOUND)
375     # libGL.so
376     add_custom_command (
377         OUTPUT glxtrace.cpp
378         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glxtrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glxtrace.cpp
379         DEPENDS
380             glxtrace.py
381             gltrace.py
382             trace.py
383             ${CMAKE_SOURCE_DIR}/specs/glxapi.py
384             ${CMAKE_SOURCE_DIR}/specs/glapi.py
385             ${CMAKE_SOURCE_DIR}/specs/glparams.py
386             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
387             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
388     )
389
390     add_library (glxtrace SHARED
391         glxtrace.cpp
392         glcaps.cpp
393         gltrace_state.cpp
394     )
395
396     add_dependencies (glxtrace glproc)
397
398     set_target_properties (glxtrace PROPERTIES
399         # avoid the default "lib" prefix
400         PREFIX ""
401         # Prevent symbol relocations internal to our wrapper library to be
402         # overwritten by the application.
403         LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
404     )
405
406     target_link_libraries (glxtrace
407         glproc_gl
408         common_trace
409         common
410         ${ZLIB_LIBRARIES}
411         ${SNAPPY_LIBRARIES}
412         ${CMAKE_THREAD_LIBS_INIT}
413         dl
414     )
415
416     install (TARGETS glxtrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
417 endif ()
418
419
420 if (ENABLE_EGL AND NOT WIN32 AND NOT APPLE)
421     # libEGL.so/libGL.so
422     add_custom_command (
423         OUTPUT egltrace.cpp
424         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/egltrace.py > ${CMAKE_CURRENT_BINARY_DIR}/egltrace.cpp
425         DEPENDS
426             egltrace.py
427             gltrace.py
428             trace.py
429             ${CMAKE_SOURCE_DIR}/specs/eglapi.py
430             ${CMAKE_SOURCE_DIR}/specs/glesapi.py
431             ${CMAKE_SOURCE_DIR}/specs/glapi.py
432             ${CMAKE_SOURCE_DIR}/specs/glparams.py
433             ${CMAKE_SOURCE_DIR}/specs/gltypes.py
434             ${CMAKE_SOURCE_DIR}/specs/stdapi.py
435     )
436
437     add_library (egltrace SHARED
438         egltrace.cpp
439         glcaps.cpp
440         gltrace_state.cpp
441         ${CMAKE_SOURCE_DIR}/helpers/eglsize.cpp
442     )
443
444     add_dependencies (egltrace glproc)
445
446     set_target_properties (egltrace PROPERTIES
447         # avoid the default "lib" prefix
448         PREFIX ""
449         # Prevent symbol relocations internal to our wrapper library to be
450         # overwritten by the application.
451         LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions"
452     )
453
454     target_link_libraries (egltrace
455         glproc_egl
456         common_trace
457         common
458         ${ZLIB_LIBRARIES}
459         ${SNAPPY_LIBRARIES}
460         ${CMAKE_THREAD_LIBS_INIT}
461         dl
462     )
463
464     install (TARGETS egltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
465 endif ()