]> git.cworth.org Git - apitrace/blobdiff - CMakeLists.txt
Implement missing threading primitive for Windows.
[apitrace] / CMakeLists.txt
index 855d73fc1aa19fa923b48da87d01b72dc6c0d980..6329689d614fe5a809ecaa6046945b044707c1de 100644 (file)
@@ -70,7 +70,7 @@ include (CheckCXXCompilerFlag)
 
 if (WIN32)
     # http://msdn.microsoft.com/en-us/library/aa383745.aspx
-    add_definitions (-D_WIN32_WINNT=0x0500 -DWINVER=0x0500)
+    add_definitions (-D_WIN32_WINNT=0x0601 -DWINVER=0x0601)
 else (WIN32)
     CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" CXX_COMPILER_FLAG_VISIBILITY)
     if (CXX_COMPILER_FLAG_VISIBILITY)
@@ -92,13 +92,15 @@ if (MSVC)
     add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS)
     add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS)
     add_definitions (-W4)
+    # XXX: it's safer to use ssize_t everywhere instead of disabling warning
+    add_definitions (-wd4018) # signed/unsigned mismatch
     add_definitions (-wd4063) # not a valid value for switch of enum
+    add_definitions (-wd4100) # unreferenced formal parameter
     add_definitions (-wd4127) # conditional expression is constant
     add_definitions (-wd4244) # conversion from 'type1' to 'type2', possible loss of data
     add_definitions (-wd4505) # unreferenced local function has been removed
+    add_definitions (-wd4512) # assignment operator could not be generated
     add_definitions (-wd4800) # forcing value to bool 'true' or 'false' (performance warning)
-    # XXX: it's safer to use ssize_t everywhere instead of disabling warning
-    add_definitions (-wd4018) # signed/unsigned mismatch
     
     # Use static runtime
     # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
@@ -115,6 +117,19 @@ else ()
     add_definitions (-Wall)
     # XXX: it's safer to use ssize_t everywhere instead of disabling warning
     add_definitions (-Wno-sign-compare) # comparison between signed and unsigned integer expressions
+
+    # Use GDB extensions if available
+    if (CMAKE_COMPILER_IS_GNUC)
+        set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -O0")
+        set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb")
+    endif ()
+    if (CMAKE_COMPILER_IS_GNUCXX)
+        set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -O0")
+        set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ggdb")
+    endif ()
+
+    # Be nice to Eclipse
+    add_definitions (-fmessage-length=0)
 endif ()
 
 if (MINGW)
@@ -200,21 +215,37 @@ endif ()
 # also avoids missing/inconsistent declarations in system headers.
 include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/khronos)
 
+
 ##############################################################################
 # Installation directories
 
+if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+    # Debian multiarch support
+    execute_process(COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH
+        OUTPUT_VARIABLE ARCH_SUBDIR
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+endif()
+
 if (WIN32 OR APPLE)
     # On Windows/MacOSX, applications are usually installed on a directory of
     # their own
     set (DOC_INSTALL_DIR doc)
     set (LIB_INSTALL_DIR lib)
+    set (LIB_ARCH_INSTALL_DIR lib)
 else ()
     set (DOC_INSTALL_DIR share/doc/${CMAKE_PROJECT_NAME})
     set (LIB_INSTALL_DIR lib/${CMAKE_PROJECT_NAME})
+    if (ARCH_SUBDIR)
+        set (LIB_ARCH_INSTALL_DIR lib/${ARCH_SUBDIR}/${CMAKE_PROJECT_NAME})
+    else ()
+        set (LIB_ARCH_INSTALL_DIR lib/${CMAKE_PROJECT_NAME})
+    endif ()
 endif ()
 
-set(SCRIPTS_INSTALL_DIR ${LIB_INSTALL_DIR}/scripts)
-set(WRAPPER_INSTALL_DIR ${LIB_INSTALL_DIR}/wrappers)
+set (SCRIPTS_INSTALL_DIR ${LIB_INSTALL_DIR}/scripts)
+set (WRAPPER_INSTALL_DIR ${LIB_ARCH_INSTALL_DIR}/wrappers)
 
 # Expose the binary/install directories to source
 #
@@ -224,7 +255,8 @@ set(WRAPPER_INSTALL_DIR ${LIB_INSTALL_DIR}/wrappers)
 add_definitions(
     -DAPITRACE_BINARY_DIR="${CMAKE_BINARY_DIR}"
     -DAPITRACE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}"
-    -DAPITRACE_WRAPPER_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${WRAPPER_INSTALL_DIR}"
+    -DAPITRACE_SCRIPTS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${SCRIPTS_INSTALL_DIR}"
+    -DAPITRACE_WRAPPERS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${WRAPPER_INSTALL_DIR}"
 )
 
 
@@ -237,17 +269,6 @@ include_directories (
     ${CMAKE_CURRENT_SOURCE_DIR}/common
 )
 
-add_custom_command (
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glproc.py > ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp
-    DEPENDS glproc.py dispatch.py specs/wglapi.py specs/glxapi.py specs/cglapi.py specs/eglapi.py specs/glesapi.py specs/glapi.py specs/gltypes.py specs/stdapi.py
-)
-
-# Wrap glproc.hpp as a target to prevent the command from being executed
-# multiple times simulatenously, when the targets that depend on it are built
-# in parallel.
-add_custom_target (glproc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/glproc.hpp)
-
 if (WIN32)
     set (os os_win32.cpp)
     set (glws_os glws_wgl.cpp)
@@ -277,11 +298,13 @@ add_library (common STATIC
     common/trace_loader.cpp
     common/trace_resource.cpp
     common/trace_tools_trace.cpp
+    common/trace_profiler.cpp
     common/image.cpp
     common/image_bmp.cpp
     common/image_pnm.cpp
     common/image_png.cpp
     common/${os}
+    common/workqueue.cpp
 )
 
 set_target_properties (common PROPERTIES
@@ -296,155 +319,13 @@ endif ()
 
 
 ##############################################################################
-# API tracers
+# Sub-directories
 
+add_subdirectory (dispatch)
 add_subdirectory (wrappers)
+add_subdirectory (retrace)
 
 
-##############################################################################
-# API retracers
-
-add_custom_command (
-    OUTPUT glretrace_gl.cpp
-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/glretrace_gl.cpp
-    DEPENDS glretrace.py retrace.py specs/glapi.py specs/gltypes.py specs/stdapi.py
-)
-
-add_custom_command (
-    OUTPUT glstate_params.cpp
-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/glstate_params.py > ${CMAKE_CURRENT_BINARY_DIR}/glstate_params.cpp
-    DEPENDS glstate_params.py specs/glparams.py specs/gltypes.py specs/stdapi.py
-)
-
-add_library (retrace_common
-    glretrace_gl.cpp
-    glretrace_cgl.cpp
-    glretrace_glx.cpp
-    glretrace_wgl.cpp
-    glretrace_egl.cpp
-    glretrace_main.cpp
-    glstate.cpp
-    glstate_images.cpp
-    glstate_params.cpp
-    glstate_shaders.cpp
-    retrace.cpp
-    retrace_stdc.cpp
-    glws.cpp
-)
-
-add_dependencies (retrace_common glproc)
-
-set_property (
-    TARGET retrace_common
-    APPEND
-    PROPERTY COMPILE_DEFINITIONS "RETRACE"
-)
-
-if (WIN32 OR APPLE OR X11_FOUND)
-    add_executable (glretrace
-        ${glws_os}
-        glproc_gl.cpp
-    )
-
-    add_dependencies (glretrace glproc)
-
-    set_property (
-        TARGET glretrace
-        APPEND
-        PROPERTY COMPILE_DEFINITIONS "RETRACE"
-    )
-
-    target_link_libraries (glretrace
-        retrace_common
-        common
-        ${PNG_LIBRARIES}
-        ${ZLIB_LIBRARIES}
-        ${SNAPPY_LIBRARIES}
-    )
-
-    if (WIN32)
-    else ()
-        if (APPLE)
-            target_link_libraries (glretrace
-                "-framework Cocoa"
-                "-framework ApplicationServices" # CGS*
-                #"-framework OpenGL" # CGL*
-            )
-        else ()
-            target_link_libraries (glretrace ${X11_X11_LIB})
-        endif ()
-
-        target_link_libraries (glretrace
-            # gdb doesn't like when pthreads is loaded through dlopen (which happens
-            # when dlopen'ing libGL), so link pthreads to avoid this issue.  See also
-            # http://stackoverflow.com/questions/2702628/gdb-cannot-find-new-threads-generic-error
-            ${CMAKE_THREAD_LIBS_INIT}
-            dl
-        )
-
-        if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-            target_link_libraries (glretrace rt)
-        endif ()
-
-    endif ()
-
-    install (TARGETS glretrace RUNTIME DESTINATION bin) 
-endif ()
-
-if (ENABLE_EGL AND X11_FOUND AND NOT WIN32 AND NOT APPLE)
-    add_executable (eglretrace
-        glws_egl_xlib.cpp
-        glproc_egl.cpp
-    )
-
-    add_dependencies (eglretrace glproc)
-
-    set_property (
-        TARGET eglretrace
-        APPEND
-        PROPERTY COMPILE_DEFINITIONS "RETRACE"
-    )
-
-    target_link_libraries (eglretrace
-        retrace_common
-        common
-        ${PNG_LIBRARIES}
-        ${ZLIB_LIBRARIES}
-        ${SNAPPY_LIBRARIES}
-        ${X11_X11_LIB}
-        ${CMAKE_THREAD_LIBS_INIT}
-        dl
-    )
-
-    if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-        target_link_libraries (eglretrace rt)
-    endif ()
-
-    install (TARGETS eglretrace RUNTIME DESTINATION bin) 
-endif ()
-
-if (WIN32 AND DirectX_D3DX9_FOUND)
-    add_custom_command (
-        OUTPUT d3dretrace_d3d9.cpp
-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3dretrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d9.cpp
-        DEPENDS d3dretrace.py retrace.py specs/d3d9.py specs/d3d9types.py specs/d3d9caps.py specs/winapi.py specs/stdapi.py
-    )
-
-    include_directories (SYSTEM ${DirectX_D3DX9_INCLUDE_DIR})
-    add_executable (d3dretrace
-        retrace.cpp
-        retrace_stdc.cpp
-        d3dretrace_main.cpp
-        d3dretrace_d3d9.cpp
-    )
-    target_link_libraries (d3dretrace
-        common
-        ${ZLIB_LIBRARIES}
-        ${SNAPPY_LIBRARIES}
-        ${DirectX_D3D9_LIBRARY}
-    )
-endif ()
-
 ##############################################################################
 # CLI