# Use clang on MacOSX. gcc doesn't support __thread key, and Apple has
# abandoned it for clang. This must be done before the project is defined.
-if (APPLE)
+# But DONT force clang if we are cross-compiling to Android.
+if (APPLE AND NOT ANDROID_NDK)
set (CMAKE_C_COMPILER "clang")
set (CMAKE_CXX_COMPILER "clang++")
endif ()
##############################################################################
# Find dependencies
-# Ensure __thread is support
-if (NOT MSVC)
+# Check for compiler TLS support. We don't use compiler TLS support on Windows
+# because, even if the compiler supports it, Windows XP does not support TLS on
+# DLLs.
+if (NOT WIN32)
include (CheckCXXSourceCompiles)
check_cxx_source_compiles("__thread int i; int main() { return 0; }" HAVE_COMPILER_TLS)
- if (NOT HAVE_COMPILER_TLS)
- if (APPLE)
- message (FATAL_ERROR "C++ compiler does not support __thread keyword. Please install XCode 4.5 or higher.")
- else (MINGW32)
- message (FATAL_ERROR "C++ compiler does not support __thread keyword. Please use MinGW g++ version 4.4 or higher")
- else ()
- message (FATAL_ERROR "C++ compiler does not support __thread keyword.")
- endif ()
+ if (HAVE_COMPILER_TLS)
+ add_definitions (-DHAVE_COMPILER_TLS=__thread)
+ else ()
+ message (WARNING "C++ compiler does not support __thread keyword.")
endif ()
endif ()
endif ()
if (MSVC)
- # C99 includes for msvc
- include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/msvc)
+ # C99 includes for MSVC
+ include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/msinttypes)
# Enable math constants defines
add_definitions (-D_USE_MATH_DEFINES)
endif ()
endif ()
+if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ # For RTLD_DEFAULT and RTLD_NEXT
+ add_definitions (-D_GNU_SOURCE)
+endif ()
+
# Put all executables into the same top level build directory, regardless of
# which subdirectory they are declared
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+##############################################################################
+# 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
+ )
+ CHECK_INCLUDE_FILES(proc/readproc.h READPROC_H_FOUND)
+ if (READPROC_H_FOUND)
+ add_definitions (-DHAVE_READPROC_H)
+ find_library (proc_LIBRARY NAMES proc procps)
+ endif ()
+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_ARCH_INSTALL_DIR}/wrappers)
+
+
##############################################################################
# Bundled dependencies
#
set (ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/zlib)
set (ZLIB_LIBRARIES z_bundled)
-add_subdirectory (thirdparty/zlib EXCLUDE_FROM_ALL)
+add_subdirectory (thirdparty/zlib)
include_directories (${ZLIB_INCLUDE_DIRS})
set (SNAPPY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/snappy)
set (SNAPPY_LIBRARIES snappy_bundled)
-add_subdirectory (thirdparty/snappy EXCLUDE_FROM_ALL)
+add_subdirectory (thirdparty/snappy)
include_directories (${SNAPPY_INCLUDE_DIRS})
set (PNG_DEFINITIONS "")
set (PNG_LIBRARIES png_bundled)
-add_subdirectory (thirdparty/libpng EXCLUDE_FROM_ALL)
+add_subdirectory (thirdparty/libpng)
if (MSVC)
- add_subdirectory (thirdparty/getopt EXCLUDE_FROM_ALL)
+ add_subdirectory (thirdparty/getopt)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/getopt)
set (GETOPT_LIBRARIES getopt_bundled)
endif ()
if (WIN32)
add_subdirectory (thirdparty/less)
+ add_subdirectory (thirdparty/directxtex)
+endif ()
+
+if (CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+ add_subdirectory (thirdparty/libbacktrace)
+ include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libbacktrace)
+ set (LIBBACKTRACE_LIBRARIES backtrace)
endif ()
# Always use bundled QJSon.
# binaries at all.
if (QT4_FOUND)
add_definitions (-DQJSON_EXPORT=)
- add_subdirectory (thirdparty/qjson EXCLUDE_FROM_ALL)
+ add_subdirectory (thirdparty/qjson)
set (QJSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty)
set (QJSON_LIBRARY_DIRS)
set (QJSON_LIBRARIES qjson_bundled)
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_ARCH_INSTALL_DIR}/wrappers)
-
-
##############################################################################
# Common libraries / utilities
common/trace_profiler.cpp
common/trace_option.cpp
common/${os}
+ common/trace_backtrace.cpp
)
set_target_properties (common PROPERTIES
- COMPILE_DEFINITIONS APITRACE_SOURCE_DIR="${CMAKE_SOURCE_DIR}"
# Ensure it can be statically linked in shared libraries
COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}"
)
install (
PROGRAMS
- ${CMAKE_CURRENT_SOURCE_DIR}/scripts/tracediff.py
- ${CMAKE_CURRENT_SOURCE_DIR}/scripts/jsondiff.py
- ${CMAKE_CURRENT_SOURCE_DIR}/scripts/snapdiff.py
+ scripts/highlight.py
+ scripts/jsondiff.py
+ scripts/profileshader.py
+ scripts/retracediff.py
+ scripts/snapdiff.py
+ scripts/tracecheck.py
+ scripts/tracediff.py
+ scripts/unpickle.py
DESTINATION ${SCRIPTS_INSTALL_DIR}
)
+if (WIN32)
+ install (
+ PROGRAMS scripts/convert.py
+ DESTINATION ${SCRIPTS_INSTALL_DIR}
+ )
+endif ()
##############################################################################
# GUI
install (
FILES
BUGS.markdown
- LICENSE
NEWS.markdown
README.markdown
DESTINATION ${DOC_INSTALL_DIR}
)
+install (
+ FILES LICENSE
+ DESTINATION ${DOC_INSTALL_DIR}
+ RENAME LICENSE.txt
+)
+if (MSVC)
+ install (
+ FILES thirdparty/msinttypes/LICENSE
+ DESTINATION ${DOC_INSTALL_DIR}
+ RENAME LICENSE-msinttypes.txt
+ )
+endif ()
-set (CPACK_PACKAGE_VERSION_MAJOR "3")
+set (CPACK_PACKAGE_VERSION_MAJOR "4")
set (CPACK_PACKAGE_VERSION_MINOR "0")
# Use current date in YYYYMMDD format as patch number