José Fonseca | e924260 | 2015-03-09 11:04:53 +0000 | [diff] [blame] | 1 | cmake_minimum_required (VERSION 2.8.11) |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 2 | |
José Fonseca | 76efdcb | 2012-10-24 13:43:06 +0100 | [diff] [blame] | 3 | |
| 4 | # Use clang on MacOSX. gcc doesn't support __thread key, and Apple has |
| 5 | # abandoned it for clang. This must be done before the project is defined. |
Ben Kelly | 7cd8920 | 2013-05-03 21:35:37 -0700 | [diff] [blame] | 6 | # But DONT force clang if we are cross-compiling to Android. |
| 7 | if (APPLE AND NOT ANDROID_NDK) |
José Fonseca | 76efdcb | 2012-10-24 13:43:06 +0100 | [diff] [blame] | 8 | set (CMAKE_C_COMPILER "clang") |
| 9 | set (CMAKE_CXX_COMPILER "clang++") |
| 10 | endif () |
| 11 | |
José Fonseca | f2ad618 | 2014-12-02 11:33:07 +0000 | [diff] [blame] | 12 | if (CMAKE_GENERATOR STREQUAL "Xcode") |
| 13 | message (FATAL_ERROR "Xcode generator is not supported. Please build with \"Unix Makefiles\" or \"Ninja\" generators.") |
| 14 | endif () |
| 15 | |
José Fonseca | 9adffcf | 2014-12-04 22:07:48 +0000 | [diff] [blame] | 16 | # http://www.cmake.org/cmake/help/v3.0/policy/CMP0042.html |
| 17 | if (POLICY CMP0042) |
| 18 | cmake_policy (SET CMP0042 NEW) |
| 19 | endif() |
| 20 | |
José Fonseca | 76efdcb | 2012-10-24 13:43:06 +0100 | [diff] [blame] | 21 | |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 22 | project (apitrace) |
| 23 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 24 | |
| 25 | ############################################################################## |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 26 | # Options |
José Fonseca | 5971d6a | 2011-09-27 14:13:56 +0100 | [diff] [blame] | 27 | |
| 28 | # On Mac OS X build fat binaries with i386 and x86_64 architectures by default. |
| 29 | if (APPLE AND NOT CMAKE_OSX_ARCHITECTURES) |
| 30 | set (CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING "Build architectures for OSX" FORCE) |
| 31 | endif () |
| 32 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 33 | # We use a cached string variable instead of the standard (boolean) OPTION |
| 34 | # command so that we can default to auto-detecting optional depencies, while |
| 35 | # still providing a mechanism to force/disable these optional dependencies, as |
José Fonseca | ab310da | 2011-07-28 19:07:50 +0100 | [diff] [blame] | 36 | # prescribed in http://www.gentoo.org/proj/en/qa/automagic.xml |
Zack Rusin | a842652 | 2011-07-29 00:07:43 -0400 | [diff] [blame] | 37 | set (ENABLE_GUI "AUTO" CACHE STRING "Enable Qt GUI.") |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 38 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 39 | option (ENABLE_CLI "Enable command Line interface." ON) |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 40 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 41 | option (ENABLE_EGL "Enable EGL support." ON) |
José Fonseca | 82da242 | 2011-11-17 15:45:10 +0000 | [diff] [blame] | 42 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 43 | option (ENABLE_WAFFLE "Enable WAFFLE support." OFF) |
José Fonseca | 7c38848 | 2013-11-29 19:32:54 +0000 | [diff] [blame] | 44 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 45 | option (ENABLE_FRAME_POINTER "Disable frame pointer omission" ON) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 46 | |
Jose Fonseca | 21e685f | 2015-03-12 23:27:56 +0000 | [diff] [blame] | 47 | # Proprietary Linux games often ship their own libraries (zlib, libstdc++, |
| 48 | # etc.) in order to ship a single set of binaries across multiple |
| 49 | # distributions. Given that apitrace wrapper modules will be loaded into those |
| 50 | # processes, they must not depend on any shared object that could also be |
| 51 | # provided by such applications. See also |
| 52 | # http://lists.freedesktop.org/archives/mesa-dev/2015-March/079121.html |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 53 | if (NOT ANDROID) |
| 54 | option (ENABLE_STATIC_SNAPPY "Statically link against snappy" ON) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 55 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
Jose Fonseca | bdd03ca | 2015-04-26 21:43:01 +0100 | [diff] [blame] | 56 | option (ENABLE_STATIC_LIBGCC "Statically link LD_PRELOAD wrappers against libgcc" ON) |
| 57 | option (ENABLE_STATIC_LIBSTDCXX "Statically link LD_PRELOAD wrappers against libstdc++" ON) |
| 58 | if (NOT (ENABLE_STATIC_LIBGCC AND |
| 59 | ENABLE_STATIC_LIBSTDCXX AND |
| 60 | ENABLE_STATIC_SNAPPY)) |
| 61 | # XXX: Should probably throw a run-time too. |
| 62 | message (WARNING |
| 63 | "LD_PRELOAD wrappers not statically linked against all " |
| 64 | "dependencies, therefore will fail to work with many " |
| 65 | "third-party applications built on different Linux " |
| 66 | "distributions and that ship their own shared-object " |
| 67 | "dependencies." |
| 68 | ) |
| 69 | endif () |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 70 | endif () |
Jose Fonseca | 21e685f | 2015-03-12 23:27:56 +0000 | [diff] [blame] | 71 | endif () |
| 72 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 73 | |
| 74 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 75 | # Find dependencies |
| 76 | |
José Fonseca | 8917aea | 2013-04-23 10:12:12 +0100 | [diff] [blame] | 77 | # Check for compiler TLS support. We don't use compiler TLS support on Windows |
| 78 | # because, even if the compiler supports it, Windows XP does not support TLS on |
| 79 | # DLLs. |
| 80 | if (NOT WIN32) |
| 81 | include (CheckCXXSourceCompiles) |
José Fonseca | 7e41fcf | 2015-03-26 23:03:56 +0000 | [diff] [blame] | 82 | check_cxx_source_compiles ("__thread int i; int main() { return 0; }" HAVE_COMPILER_TLS) |
| 83 | if (NOT HAVE_COMPILER_TLS) |
| 84 | message (FATAL_ERROR "C++ compiler does not support __thread keyword.") |
José Fonseca | 8917aea | 2013-04-23 10:12:12 +0100 | [diff] [blame] | 85 | endif () |
| 86 | endif () |
| 87 | |
José Fonseca | b460bf3 | 2010-11-19 18:57:51 +0000 | [diff] [blame] | 88 | set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) |
José Fonseca | c56b9ac | 2014-06-25 13:46:35 +0100 | [diff] [blame] | 89 | include (ConvenienceLibrary) |
José Fonseca | 01e5c85 | 2014-10-02 15:48:35 +0100 | [diff] [blame] | 90 | include (InstallPDB) |
José Fonseca | b460bf3 | 2010-11-19 18:57:51 +0000 | [diff] [blame] | 91 | |
George Wright | a4a643e | 2012-02-23 14:54:49 -0500 | [diff] [blame] | 92 | if (ANDROID) |
| 93 | set (ENABLE_GUI false) |
George Wright | a4a643e | 2012-02-23 14:54:49 -0500 | [diff] [blame] | 94 | else () |
| 95 | macro (find_host_package) |
| 96 | find_package (${ARGN}) |
| 97 | endmacro() |
| 98 | endif () |
| 99 | |
José Fonseca | 3734105 | 2014-12-03 16:31:31 +0000 | [diff] [blame] | 100 | find_host_package (PythonInterp 2.7 REQUIRED) |
José Fonseca | 994fa9a | 2014-06-03 16:03:45 +0100 | [diff] [blame] | 101 | if (NOT PYTHON_VERSION_MAJOR EQUAL 2) |
| 102 | message (FATAL_ERROR "Python 2.x required and requested, but Python ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} found.") |
| 103 | endif () |
| 104 | |
José Fonseca | e86846f | 2012-03-10 16:02:49 +0000 | [diff] [blame] | 105 | find_package (Threads) |
| 106 | |
Jose Fonseca | 94c0b7c | 2015-03-12 21:13:05 +0000 | [diff] [blame] | 107 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
José Fonseca | 39072d2 | 2014-11-11 22:22:57 +0000 | [diff] [blame] | 108 | find_package (procps) |
Jose Fonseca | cc41a48 | 2015-03-13 10:35:27 +0000 | [diff] [blame] | 109 | if (PROCPS_FOUND) |
José Fonseca | 39072d2 | 2014-11-11 22:22:57 +0000 | [diff] [blame] | 110 | add_definitions (-DHAVE_READPROC_H) |
| 111 | endif () |
| 112 | endif () |
| 113 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 114 | if (ENABLE_GUI) |
| 115 | if (NOT (ENABLE_GUI STREQUAL "AUTO")) |
| 116 | set (REQUIRE_GUI REQUIRED) |
| 117 | endif () |
José Fonseca | 3f4cd30 | 2015-01-14 12:02:06 +0000 | [diff] [blame] | 118 | if (POLICY CMP0020) |
| 119 | cmake_policy (SET CMP0020 NEW) |
| 120 | endif() |
| 121 | find_package (Qt5Widgets ${REQUIRE_GUI}) |
| 122 | find_package (Qt5WebKitWidgets ${REQUIRE_GUI}) |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 123 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 124 | |
José Fonseca | e8fec0f | 2011-06-06 21:06:29 +0100 | [diff] [blame] | 125 | if (WIN32) |
| 126 | find_package (DirectX) |
José Fonseca | e319ab4 | 2012-03-10 15:37:43 +0000 | [diff] [blame] | 127 | set (ENABLE_EGL false) |
José Fonseca | f4608e3 | 2011-10-10 20:17:35 +0100 | [diff] [blame] | 128 | elseif (APPLE) |
José Fonseca | e319ab4 | 2012-03-10 15:37:43 +0000 | [diff] [blame] | 129 | set (ENABLE_EGL false) |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 130 | else () |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 131 | find_package (X11) |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 132 | |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 133 | if (X11_FOUND) |
| 134 | include_directories (${X11_INCLUDE_DIR}) |
| 135 | add_definitions (-DHAVE_X11) |
José Fonseca | 8d1d532 | 2012-10-28 10:48:22 +0000 | [diff] [blame] | 136 | else () |
| 137 | # Print a clear message when X11 is not found |
| 138 | include (FindPackageMessage) |
| 139 | find_package_message (X11 "Could not find X11" "") |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 140 | endif () |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 141 | endif () |
José Fonseca | e8fec0f | 2011-06-06 21:06:29 +0100 | [diff] [blame] | 142 | |
José Fonseca | 7c38848 | 2013-11-29 19:32:54 +0000 | [diff] [blame] | 143 | if (ENABLE_EGL AND (ANDROID OR ENABLE_WAFFLE)) |
| 144 | # if waffle is found eglretrace will be built for Android. |
| 145 | find_package (Waffle) |
| 146 | endif () |
| 147 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 148 | |
| 149 | ############################################################################## |
| 150 | # Set global build options |
| 151 | |
| 152 | include (CheckCXXCompilerFlag) |
José Fonseca | 1c6c2bc | 2014-02-25 15:28:03 +0000 | [diff] [blame] | 153 | include (CheckIncludeFileCXX) |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 154 | |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 155 | macro (add_compiler_flags) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 156 | string (REPLACE ";" " " _FLAGS "${ARGV}") |
| 157 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAGS}") |
| 158 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAGS}") |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 159 | endmacro () |
| 160 | |
José Fonseca | cb084e1 | 2014-09-11 18:13:58 +0100 | [diff] [blame] | 161 | macro (add_linker_flags) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 162 | string (REPLACE ";" " " _FLAGS "${ARGV}") |
| 163 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_FLAGS}") |
| 164 | set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_FLAGS}") |
| 165 | set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_FLAGS}") |
José Fonseca | cb084e1 | 2014-09-11 18:13:58 +0100 | [diff] [blame] | 166 | endmacro () |
| 167 | |
Jose Fonseca | 4ba12ac | 2015-05-18 15:17:05 +0100 | [diff] [blame] | 168 | add_definitions ( |
| 169 | -D__STDC_LIMIT_MACROS |
| 170 | ) |
| 171 | |
José Fonseca | 5aff9b0 | 2010-11-22 13:00:54 +0000 | [diff] [blame] | 172 | if (WIN32) |
José Fonseca | eb508e6 | 2011-05-08 07:39:31 +0100 | [diff] [blame] | 173 | # http://msdn.microsoft.com/en-us/library/aa383745.aspx |
José Fonseca | f5de61a | 2015-03-27 12:55:19 +0000 | [diff] [blame] | 174 | if (MINGW OR CMAKE_GENERATOR_TOOLSET MATCHES "_xp$") |
José Fonseca | 070a063 | 2014-06-23 18:25:55 +0100 | [diff] [blame] | 175 | # Windows XP |
| 176 | add_definitions (-D_WIN32_WINNT=0x0501 -DWINVER=0x0501) |
| 177 | else () |
| 178 | # Windows 7 |
| 179 | add_definitions (-D_WIN32_WINNT=0x0601 -DWINVER=0x0601) |
| 180 | endif () |
José Fonseca | 2369129 | 2011-04-22 10:40:25 +0100 | [diff] [blame] | 181 | else (WIN32) |
| 182 | CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" CXX_COMPILER_FLAG_VISIBILITY) |
| 183 | if (CXX_COMPILER_FLAG_VISIBILITY) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 184 | add_compiler_flags (-fvisibility=hidden) |
José Fonseca | 5b6fb75 | 2012-04-14 14:56:45 +0100 | [diff] [blame] | 185 | endif () |
| 186 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 187 | |
| 188 | if (MSVC) |
José Fonseca | 15eafa9 | 2015-03-04 21:23:31 +0000 | [diff] [blame] | 189 | if (${MSVC_VERSION} LESS 1800) |
| 190 | message (FATAL_ERROR "Visual Studio 2013 or later required") |
José Fonseca | f827897 | 2014-04-29 10:29:12 +0100 | [diff] [blame] | 191 | endif () |
José Fonseca | 5caf870 | 2011-04-11 21:01:07 +0100 | [diff] [blame] | 192 | |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 193 | # No RTTI required |
José Fonseca | aec3083 | 2014-05-13 17:29:40 +0100 | [diff] [blame] | 194 | string (REGEX REPLACE "/GR *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 195 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-") |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 196 | |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 197 | # Disable C++ exceptions |
| 198 | add_definitions (-D_HAS_EXCEPTIONS=0) |
| 199 | string (REGEX REPLACE "/EHsc *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 200 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-") |
| 201 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 202 | # Enable math constants defines |
| 203 | add_definitions (-D_USE_MATH_DEFINES) |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 204 | |
José Fonseca | 2af485a | 2011-04-15 20:49:21 +0100 | [diff] [blame] | 205 | # No min/max macros |
| 206 | add_definitions (-DNOMINMAX) |
| 207 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 208 | # Adjust warnings |
| 209 | add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) |
| 210 | add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS) |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 211 | add_compiler_flags (-W3) |
José Fonseca | af7fc5c | 2012-04-23 12:19:53 +0100 | [diff] [blame] | 212 | # XXX: it's safer to use ssize_t everywhere instead of disabling warning |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 213 | add_compiler_flags (-wd4018) # signed/unsigned mismatch |
| 214 | add_compiler_flags (-wd4063) # not a valid value for switch of enum |
| 215 | add_compiler_flags (-wd4100) # unreferenced formal parameter |
| 216 | add_compiler_flags (-wd4127) # conditional expression is constant |
| 217 | add_compiler_flags (-wd4244) # conversion from 'type1' to 'type2', possible loss of data |
| 218 | add_compiler_flags (-wd4267) # conversion from 'type1' to 'type2', possible loss of data |
| 219 | add_compiler_flags (-wd4505) # unreferenced local function has been removed |
| 220 | add_compiler_flags (-wd4512) # assignment operator could not be generated |
| 221 | add_compiler_flags (-wd4800) # forcing value to bool 'true' or 'false' (performance warning) |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 222 | |
| 223 | # Use static runtime |
| 224 | # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F |
| 225 | foreach (flag_var |
| 226 | CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO |
| 227 | CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO |
| 228 | ) |
| 229 | if (${flag_var} MATCHES "/MD") |
| 230 | string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") |
José Fonseca | 5b6fb75 | 2012-04-14 14:56:45 +0100 | [diff] [blame] | 231 | endif () |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 232 | endforeach (flag_var) |
José Fonseca | 1791f62 | 2010-11-15 16:09:40 +0000 | [diff] [blame] | 233 | else () |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 234 | # Enable and require C++11 |
| 235 | # |
| 236 | # We must use `-std=gnu++11` instead `-std=c++11` as the latter defines |
Jose Fonseca | eabf02d | 2015-03-08 21:57:30 +0000 | [diff] [blame] | 237 | # __STRICT_ANSI__ which prevents _isnan from being declared with MinGW. |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 238 | # |
| 239 | # See also: |
| 240 | # - https://gcc.gnu.org/projects/cxx0x.html |
| 241 | # - http://clang.llvm.org/cxx_status.html |
| 242 | check_cxx_compiler_flag ("-std=gnu++11" CXX_COMPILER_FLAG_STD_GNUXX11) |
José Fonseca | 1a1e326 | 2015-03-12 14:20:19 +0000 | [diff] [blame] | 243 | if (CXX_COMPILER_FLAG_STD_GNUXX11) |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 244 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") |
José Fonseca | 47de2eb | 2015-03-12 14:15:30 +0000 | [diff] [blame] | 245 | elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 246 | check_cxx_compiler_flag ("-std=gnu++0x" CXX_COMPILER_FLAG_STD_GNUXX0X) |
José Fonseca | 47de2eb | 2015-03-12 14:15:30 +0000 | [diff] [blame] | 247 | if (NOT CXX_COMPILER_FLAG_STD_GNUXX0X OR |
| 248 | CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.6") |
| 249 | message (FATAL_ERROR "GCC 4.6 or later required for adequate C++11 support") |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 250 | else () |
José Fonseca | 47de2eb | 2015-03-12 14:15:30 +0000 | [diff] [blame] | 251 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 252 | endif () |
José Fonseca | 47de2eb | 2015-03-12 14:15:30 +0000 | [diff] [blame] | 253 | else () |
| 254 | message (FATAL_ERROR "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} compiler does not support C++11") |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 255 | endif () |
| 256 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 257 | # Adjust warnings |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 258 | add_compiler_flags (-Wall) |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 259 | # XXX: it's safer to use ssize_t everywhere instead of disabling warning |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 260 | add_compiler_flags (-Wno-sign-compare) # comparison between signed and unsigned integer expressions |
Imre Deak | 33b9a0f | 2012-04-20 16:34:31 +0300 | [diff] [blame] | 261 | |
Jose Fonseca | 8e5e379 | 2015-03-15 07:49:36 +0000 | [diff] [blame] | 262 | # Disable strict aliasing assumptions. We generate a lot of C++ code, and |
| 263 | # it's not always easy to guarantee or spot when strict aliasing |
| 264 | # assumptions are violated. Above all, the benefit is not worth the risk. |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 265 | add_compiler_flags (-fno-strict-aliasing) |
Jose Fonseca | 8e5e379 | 2015-03-15 07:49:36 +0000 | [diff] [blame] | 266 | |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 267 | # No RTTI required |
José Fonseca | 5cebfd8 | 2015-03-20 07:00:53 +0000 | [diff] [blame] | 268 | # XXX: there's a dynamic_cast in Android |
| 269 | if (NOT ANDROID) |
| 270 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") |
| 271 | endif () |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 272 | |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 273 | # Disable C++ exceptions |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 274 | #set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 275 | |
José Fonseca | 4c3da7c | 2014-09-12 08:36:06 +0100 | [diff] [blame] | 276 | # Enable stack protection |
| 277 | if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX) |
José Fonseca | 4c3da7c | 2014-09-12 08:36:06 +0100 | [diff] [blame] | 278 | set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fstack-protector-all") |
| 279 | set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fstack-protector-all") |
| 280 | if (MINGW) |
| 281 | # MinGW doesn't link against libssp automatically, and furthermore |
| 282 | # we want static linking. |
| 283 | set (SSP_LIBRARY "-Wl,-Bstatic -lssp -Wl,-Bdynamic") |
| 284 | set (CMAKE_C_STANDARD_LIBRARIES "${SSP_LIBRARY} ${CMAKE_C_STANDARD_LIBRARIES}") |
| 285 | set (CMAKE_CXX_STANDARD_LIBRARIES "${SSP_LIBRARY} ${CMAKE_CXX_STANDARD_LIBRARIES}") |
| 286 | endif () |
| 287 | endif () |
| 288 | |
José Fonseca | 7ddb070 | 2014-08-29 18:24:19 +0100 | [diff] [blame] | 289 | # Enable SSE2 intrinsics on x86 |
| 290 | if (CMAKE_SIZEOF_VOID_P EQUAL 4) |
José Fonseca | d591f96 | 2015-01-29 16:01:53 +0000 | [diff] [blame] | 291 | check_cxx_compiler_flag ("-msse2" CXX_COMPILER_FLAG_MSSE2) |
| 292 | if (CXX_COMPILER_FLAG_MSSE2) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 293 | add_compiler_flags (-msse2 -mfpmath=sse) |
José Fonseca | d591f96 | 2015-01-29 16:01:53 +0000 | [diff] [blame] | 294 | |
| 295 | # And tell GCC to assume 4 bytes alignment, many Linux/Windows |
| 296 | # applications only guarantee that, but not on systems where ABI |
| 297 | # clearly states otherwise. |
| 298 | # |
| 299 | # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496 |
| 300 | if (NOT ANDROID) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 301 | check_cxx_compiler_flag (-mincoming-stack-boundary=2 CXX_COMPILER_FLAG_MINCOMING_STACK_BOUNDARY) |
José Fonseca | d591f96 | 2015-01-29 16:01:53 +0000 | [diff] [blame] | 302 | if (CXX_COMPILER_FLAG_MINCOMING_STACK_BOUNDARY) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 303 | add_compiler_flags (-mincoming-stack-boundary=2) |
José Fonseca | d591f96 | 2015-01-29 16:01:53 +0000 | [diff] [blame] | 304 | endif () |
| 305 | endif () |
José Fonseca | 7ddb070 | 2014-08-29 18:24:19 +0100 | [diff] [blame] | 306 | endif () |
| 307 | endif () |
| 308 | |
José Fonseca | 43894cb | 2012-10-19 18:43:46 +0100 | [diff] [blame] | 309 | # Be nice to Eclipse |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 310 | add_compiler_flags (-fmessage-length=0) |
José Fonseca | 1791f62 | 2010-11-15 16:09:40 +0000 | [diff] [blame] | 311 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 312 | |
José Fonseca | aa5681e | 2011-10-11 19:32:30 +0100 | [diff] [blame] | 313 | if (MINGW) |
| 314 | # Avoid depending on MinGW runtime DLLs |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 315 | add_linker_flags (-static-libgcc -static-libstdc++) |
José Fonseca | aa5681e | 2011-10-11 19:32:30 +0100 | [diff] [blame] | 316 | endif () |
| 317 | |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 318 | if (ENABLE_FRAME_POINTER) |
| 319 | # disable frame pointer omission |
| 320 | if (MSVC) |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 321 | add_compiler_flags (/Oy-) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 322 | else () |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 323 | add_compiler_flags (-fno-omit-frame-pointer) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 324 | endif () |
| 325 | endif () |
| 326 | |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 327 | # Enable Data Execution Prevention and Address Space Layout Randomization |
| 328 | if (WIN32) |
| 329 | if (MSVC) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 330 | add_linker_flags (/NXCOMPAT /DYNAMICBASE) |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 331 | else () |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 332 | add_linker_flags (-Wl,--nxcompat -Wl,--dynamicbase) |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 333 | endif () |
| 334 | endif () |
| 335 | |
Jose Fonseca | 94c0b7c | 2015-03-12 21:13:05 +0000 | [diff] [blame] | 336 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
José Fonseca | 6c38311 | 2013-05-04 09:33:41 +0100 | [diff] [blame] | 337 | # For RTLD_DEFAULT and RTLD_NEXT |
| 338 | add_definitions (-D_GNU_SOURCE) |
| 339 | endif () |
| 340 | |
Jose Fonseca | f67e3c1 | 2015-05-01 17:42:03 +0100 | [diff] [blame] | 341 | include (TestBigEndian) |
| 342 | test_big_endian (HAVE_BIGENDIAN) |
| 343 | if (HAVE_BIGENDIAN) |
| 344 | add_definitions (-DHAVE_BIGENDIAN) |
| 345 | endif () |
| 346 | |
José Fonseca | 4472129 | 2011-04-21 08:24:57 +0100 | [diff] [blame] | 347 | # Put all executables into the same top level build directory, regardless of |
| 348 | # which subdirectory they are declared |
José Fonseca | 5d4e2a1 | 2011-07-01 11:58:16 +0100 | [diff] [blame] | 349 | set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) |
José Fonseca | 4472129 | 2011-04-21 08:24:57 +0100 | [diff] [blame] | 350 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 351 | |
| 352 | ############################################################################## |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 353 | # Installation directories |
| 354 | |
Jose Fonseca | 94c0b7c | 2015-03-12 21:13:05 +0000 | [diff] [blame] | 355 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 356 | # Debian multiarch support |
| 357 | execute_process(COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH |
| 358 | OUTPUT_VARIABLE ARCH_SUBDIR |
| 359 | ERROR_QUIET |
| 360 | OUTPUT_STRIP_TRAILING_WHITESPACE |
| 361 | ) |
| 362 | endif() |
| 363 | |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 364 | if (WIN32 OR APPLE) |
| 365 | # On Windows/MacOSX, applications are usually installed on a directory of |
| 366 | # their own |
| 367 | set (DOC_INSTALL_DIR doc) |
José Fonseca | ab6ded7 | 2012-03-02 10:31:19 +0000 | [diff] [blame] | 368 | set (LIB_INSTALL_DIR lib) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 369 | set (LIB_ARCH_INSTALL_DIR lib) |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 370 | else () |
| 371 | set (DOC_INSTALL_DIR share/doc/${CMAKE_PROJECT_NAME}) |
Sandro Mani | 4124585 | 2013-11-20 21:27:29 +0100 | [diff] [blame] | 372 | set (LIB_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 373 | if (ARCH_SUBDIR) |
| 374 | set (LIB_ARCH_INSTALL_DIR lib/${ARCH_SUBDIR}/${CMAKE_PROJECT_NAME}) |
| 375 | else () |
Sandro Mani | 4124585 | 2013-11-20 21:27:29 +0100 | [diff] [blame] | 376 | set (LIB_ARCH_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 377 | endif () |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 378 | endif () |
| 379 | |
José Fonseca | 7c3ea25 | 2012-05-08 15:02:51 +0100 | [diff] [blame] | 380 | set (SCRIPTS_INSTALL_DIR ${LIB_INSTALL_DIR}/scripts) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 381 | set (WRAPPER_INSTALL_DIR ${LIB_ARCH_INSTALL_DIR}/wrappers) |
Carl Worth | 26cca9b | 2011-11-04 15:42:02 -0700 | [diff] [blame] | 382 | |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 383 | |
| 384 | ############################################################################## |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 385 | # Bundled dependencies |
| 386 | # |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 387 | # We prefer to bundle and statically link against many dependencies: |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 388 | # - on Windows to make it easy to deploy the wrappers DLLs |
| 389 | # - on unices to prevent symbol collisions when tracing applications that link |
| 390 | # against other versions of these libraries |
| 391 | |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 392 | if (NOT ENABLE_STATIC_SNAPPY) |
| 393 | find_package (SNAPPY) |
| 394 | endif () |
| 395 | if (ENABLE_STATIC_SNAPPY OR NOT SNAPPY_FOUND) |
| 396 | set (SNAPPY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/snappy) |
| 397 | set (SNAPPY_LIBRARIES snappy_bundled) |
| 398 | add_subdirectory (thirdparty/snappy) |
| 399 | endif () |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 400 | include_directories (${SNAPPY_INCLUDE_DIRS}) |
| 401 | |
Jose Fonseca | 63e5f39 | 2015-03-15 10:33:32 +0000 | [diff] [blame] | 402 | if (NOT WIN32) |
Jose Fonseca | 33d5be1 | 2015-03-15 19:09:13 +0000 | [diff] [blame] | 403 | # zlib 1.2.4-1.2.5 made it impossible to read the last block of incomplete |
| 404 | # gzip traces (e.g., apitrace-tests/traces/zlib-no-eof.trace). |
| 405 | find_package (ZLIB 1.2.6) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 406 | endif () |
Jose Fonseca | 63e5f39 | 2015-03-15 10:33:32 +0000 | [diff] [blame] | 407 | if (NOT ZLIB_FOUND) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 408 | set (ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/zlib) |
| 409 | set (ZLIB_LIBRARIES z_bundled) |
| 410 | add_subdirectory (thirdparty/zlib) |
| 411 | endif () |
| 412 | include_directories (${ZLIB_INCLUDE_DIRS}) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 413 | |
Jose Fonseca | 40f5ce1 | 2015-03-15 22:35:22 +0000 | [diff] [blame] | 414 | # FindPNG.cmake will search ZLIB internally (without requiring any particular |
| 415 | # version), adding its include dirs and libraries, and overwriting ZLIB_FOUND. |
| 416 | # So if the system's ZLIB was did not meet the our requirements, then there's |
| 417 | # no safe way to use the system's PNG library. |
| 418 | if (NOT WIN32 AND ZLIB_FOUND) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 419 | find_package (PNG) |
| 420 | endif () |
Jose Fonseca | 63e5f39 | 2015-03-15 10:33:32 +0000 | [diff] [blame] | 421 | if (NOT PNG_FOUND) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 422 | set (PNG_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libpng) |
| 423 | set (PNG_DEFINITIONS "") |
| 424 | set (PNG_LIBRARIES png_bundled) |
| 425 | add_subdirectory (thirdparty/libpng) |
| 426 | endif () |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 427 | |
| 428 | if (MSVC) |
| 429 | add_subdirectory (thirdparty/getopt) |
| 430 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/getopt) |
| 431 | set (GETOPT_LIBRARIES getopt_bundled) |
| 432 | endif () |
| 433 | |
| 434 | if (WIN32) |
José Fonseca | 3b74a95 | 2015-02-09 11:52:29 +0000 | [diff] [blame] | 435 | add_subdirectory (thirdparty/dxerr) |
José Fonseca | d7c738e | 2013-03-06 11:46:41 +0000 | [diff] [blame] | 436 | add_subdirectory (thirdparty/directxtex) |
José Fonseca | e5b9a91 | 2014-09-25 21:28:59 +0100 | [diff] [blame] | 437 | add_subdirectory (thirdparty/devcon) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 438 | endif () |
| 439 | |
Alexander Monakov | 9c8be7c | 2013-05-19 00:23:58 +0400 | [diff] [blame] | 440 | if (CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF") |
| 441 | add_subdirectory (thirdparty/libbacktrace) |
| 442 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libbacktrace) |
Alexander Monakov | 2a5696b | 2013-07-13 00:37:17 +0400 | [diff] [blame] | 443 | set (LIBBACKTRACE_LIBRARIES dl backtrace) |
José Fonseca | d6c02fd | 2013-09-20 10:50:45 +0100 | [diff] [blame] | 444 | add_definitions (-DHAVE_BACKTRACE=1) |
Alexander Monakov | 9c8be7c | 2013-05-19 00:23:58 +0400 | [diff] [blame] | 445 | endif () |
| 446 | |
Meng Mengmeng | 093cf11 | 2014-01-22 12:49:20 +0000 | [diff] [blame] | 447 | add_subdirectory (thirdparty/md5) |
| 448 | set (MD5_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/md5) |
| 449 | set (MD5_LIBRARIES md5_bundled) |
| 450 | |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 451 | # We use bundled headers for all Khronos APIs, to guarantee support for both |
| 452 | # OpenGL and OpenGL ES at build time, because the OpenGL and OpenGL ES 1 APIs |
| 453 | # are so intertwined that conditional compilation extremely difficult. This |
| 454 | # also avoids missing/inconsistent declarations in system headers. |
| 455 | include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/khronos) |
| 456 | |
Jose Fonseca | 6ab8d30 | 2015-05-22 00:05:11 +0100 | [diff] [blame^] | 457 | # We use non-standard C++ flags, so we can't just use GTest's CMakeLists.txt |
| 458 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/include) |
| 459 | add_library (gtest ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/src/gtest-all.cc) |
| 460 | set_property (TARGET gtest APPEND PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest) |
| 461 | target_link_libraries (gtest ${CMAKE_THREAD_LIBS_INIT}) |
| 462 | |
| 463 | enable_testing () |
| 464 | |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 465 | |
| 466 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 467 | # Common libraries / utilities |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 468 | |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 469 | include_directories ( |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 470 | ${CMAKE_CURRENT_SOURCE_DIR}/common |
| 471 | ) |
José Fonseca | 5d4e2a1 | 2011-07-01 11:58:16 +0100 | [diff] [blame] | 472 | |
José Fonseca | 5aff9b0 | 2010-11-22 13:00:54 +0000 | [diff] [blame] | 473 | if (WIN32) |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 474 | set (os os_win32.cpp) |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 475 | else () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 476 | set (os os_posix.cpp) |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 477 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 478 | |
José Fonseca | c56b9ac | 2014-06-25 13:46:35 +0100 | [diff] [blame] | 479 | add_convenience_library (common |
José Fonseca | 225193d | 2012-01-26 19:08:32 +0000 | [diff] [blame] | 480 | common/trace_callset.cpp |
José Fonseca | 946da14 | 2011-12-11 14:32:50 +0000 | [diff] [blame] | 481 | common/trace_dump.cpp |
Carl Worth | 12b41a8 | 2013-03-11 13:05:52 -0700 | [diff] [blame] | 482 | common/trace_fast_callset.cpp |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 483 | common/trace_file.cpp |
José Fonseca | a328553 | 2011-11-27 12:32:00 +0000 | [diff] [blame] | 484 | common/trace_file_read.cpp |
| 485 | common/trace_file_write.cpp |
José Fonseca | 4159a61 | 2011-10-26 23:37:01 +0100 | [diff] [blame] | 486 | common/trace_file_zlib.cpp |
| 487 | common/trace_file_snappy.cpp |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 488 | common/trace_model.cpp |
| 489 | common/trace_parser.cpp |
José Fonseca | 340f569 | 2011-11-30 07:04:44 +0000 | [diff] [blame] | 490 | common/trace_parser_flags.cpp |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 491 | common/trace_writer.cpp |
José Fonseca | 91392da | 2011-10-26 23:39:16 +0100 | [diff] [blame] | 492 | common/trace_writer_local.cpp |
| 493 | common/trace_writer_model.cpp |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 494 | common/trace_loader.cpp |
James Benton | addf7f9 | 2012-07-20 18:56:19 +0100 | [diff] [blame] | 495 | common/trace_profiler.cpp |
Carl Worth | a7e7b27 | 2012-08-12 16:48:10 -0700 | [diff] [blame] | 496 | common/trace_option.cpp |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 497 | common/${os} |
Alexander Monakov | cad5d61 | 2013-07-12 21:26:25 +0400 | [diff] [blame] | 498 | common/os_backtrace.cpp |
José Fonseca | 3f9ed15 | 2014-05-28 00:05:15 +0100 | [diff] [blame] | 499 | common/highlight.cpp |
José Fonseca | 49ff44d | 2011-07-02 14:16:37 +0100 | [diff] [blame] | 500 | ) |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 501 | |
José Fonseca | bd9811f | 2013-09-20 15:37:17 +0100 | [diff] [blame] | 502 | target_link_libraries (common |
| 503 | ${LIBBACKTRACE_LIBRARIES} |
| 504 | ) |
José Fonseca | 2f00d76 | 2015-02-05 11:43:33 +0000 | [diff] [blame] | 505 | if (WIN32) |
| 506 | target_link_libraries (common |
| 507 | shell32 |
| 508 | ) |
| 509 | endif () |
George Wright | 2a4e4b6 | 2012-02-27 15:54:36 -0500 | [diff] [blame] | 510 | if (ANDROID) |
José Fonseca | 17a4541 | 2012-11-28 09:44:01 +0000 | [diff] [blame] | 511 | target_link_libraries (common |
| 512 | log |
| 513 | ) |
George Wright | 2a4e4b6 | 2012-02-27 15:54:36 -0500 | [diff] [blame] | 514 | endif () |
| 515 | |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 516 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 517 | ############################################################################## |
José Fonseca | 4f242f4 | 2012-04-14 18:13:25 +0100 | [diff] [blame] | 518 | # Sub-directories |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 519 | |
José Fonseca | 4f242f4 | 2012-04-14 18:13:25 +0100 | [diff] [blame] | 520 | add_subdirectory (dispatch) |
José Fonseca | 3b18682 | 2012-11-27 15:25:21 +0000 | [diff] [blame] | 521 | add_subdirectory (helpers) |
José Fonseca | 452d325 | 2012-04-14 15:55:40 +0100 | [diff] [blame] | 522 | add_subdirectory (wrappers) |
José Fonseca | e7102bf | 2012-12-07 07:33:05 +0000 | [diff] [blame] | 523 | add_subdirectory (image) |
José Fonseca | 9d27a54 | 2012-04-14 17:22:57 +0100 | [diff] [blame] | 524 | add_subdirectory (retrace) |
José Fonseca | 7e32902 | 2010-11-19 17:05:18 +0000 | [diff] [blame] | 525 | |
José Fonseca | 8e3c2c0 | 2012-01-23 00:30:35 +0000 | [diff] [blame] | 526 | |
Carl Worth | 6d543af | 2011-10-19 18:02:33 -0700 | [diff] [blame] | 527 | ############################################################################## |
| 528 | # CLI |
| 529 | |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 530 | if (ENABLE_CLI) |
José Fonseca | bd4937e | 2012-12-04 13:23:03 +0000 | [diff] [blame] | 531 | if (WIN32) |
| 532 | add_subdirectory (inject) |
| 533 | endif () |
José Fonseca | 17a4541 | 2012-11-28 09:44:01 +0000 | [diff] [blame] | 534 | add_subdirectory (cli) |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 535 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 536 | |
| 537 | ############################################################################## |
Carl Worth | 32420d2 | 2011-11-04 15:45:09 -0700 | [diff] [blame] | 538 | # Scripts (to support the CLI) |
| 539 | |
José Fonseca | 97a199d | 2011-11-29 00:22:41 +0000 | [diff] [blame] | 540 | install ( |
| 541 | PROGRAMS |
José Fonseca | 330135d | 2012-12-11 07:34:45 +0000 | [diff] [blame] | 542 | scripts/highlight.py |
| 543 | scripts/jsondiff.py |
| 544 | scripts/profileshader.py |
| 545 | scripts/retracediff.py |
José Fonseca | 330135d | 2012-12-11 07:34:45 +0000 | [diff] [blame] | 546 | scripts/snapdiff.py |
| 547 | scripts/tracecheck.py |
| 548 | scripts/tracediff.py |
| 549 | scripts/unpickle.py |
José Fonseca | 97a199d | 2011-11-29 00:22:41 +0000 | [diff] [blame] | 550 | DESTINATION ${SCRIPTS_INSTALL_DIR} |
| 551 | ) |
José Fonseca | 2cce192 | 2012-12-11 19:51:26 +0000 | [diff] [blame] | 552 | if (WIN32) |
| 553 | install ( |
| 554 | PROGRAMS scripts/convert.py |
| 555 | DESTINATION ${SCRIPTS_INSTALL_DIR} |
| 556 | ) |
José Fonseca | 393bf3f | 2014-07-22 14:59:03 +0100 | [diff] [blame] | 557 | install ( |
| 558 | FILES scripts/apitrace.PIXExp |
| 559 | DESTINATION ${SCRIPTS_INSTALL_DIR} |
| 560 | ) |
José Fonseca | 2cce192 | 2012-12-11 19:51:26 +0000 | [diff] [blame] | 561 | endif () |
Carl Worth | 32420d2 | 2011-11-04 15:45:09 -0700 | [diff] [blame] | 562 | |
| 563 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 564 | # GUI |
| 565 | |
José Fonseca | 3f4cd30 | 2015-01-14 12:02:06 +0000 | [diff] [blame] | 566 | if (ENABLE_GUI AND Qt5Widgets_FOUND AND Qt5WebKitWidgets_FOUND) |
| 567 | add_subdirectory(gui) |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 568 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 569 | |
| 570 | |
| 571 | ############################################################################## |
| 572 | # Packaging |
| 573 | |
José Fonseca | 05ba419 | 2011-09-17 21:18:57 +0100 | [diff] [blame] | 574 | install ( |
| 575 | FILES |
José Fonseca | 2127819 | 2015-01-20 14:27:04 +0000 | [diff] [blame] | 576 | README.markdown |
José Fonseca | c345e0d | 2015-01-20 14:22:54 +0000 | [diff] [blame] | 577 | docs/BUGS.markdown |
| 578 | docs/NEWS.markdown |
José Fonseca | 2127819 | 2015-01-20 14:27:04 +0000 | [diff] [blame] | 579 | docs/USAGE.markdown |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 580 | DESTINATION ${DOC_INSTALL_DIR} |
Carl Worth | e923607 | 2011-10-18 16:06:05 -0700 | [diff] [blame] | 581 | ) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 582 | install ( |
| 583 | FILES LICENSE |
| 584 | DESTINATION ${DOC_INSTALL_DIR} |
| 585 | RENAME LICENSE.txt |
| 586 | ) |
José Fonseca | 0dc8485 | 2011-05-14 10:46:24 +0100 | [diff] [blame] | 587 | |
Jose Fonseca | a5255fd | 2015-01-26 14:38:39 +0000 | [diff] [blame] | 588 | set (CPACK_PACKAGE_VERSION_MAJOR "7") |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 589 | set (CPACK_PACKAGE_VERSION_MINOR "0") |
| 590 | |
| 591 | # Use current date in YYYYMMDD format as patch number |
| 592 | execute_process ( |
| 593 | COMMAND ${PYTHON_EXECUTABLE} -c "import time, sys; sys.stdout.write(time.strftime('%Y%m%d'))" |
| 594 | OUTPUT_VARIABLE CPACK_PACKAGE_VERSION_PATCH |
| 595 | ) |
| 596 | |
José Fonseca | 63c02f3 | 2012-02-29 10:55:55 +0000 | [diff] [blame] | 597 | # cpack mistakenly detects Mingw-w64 as win32 |
| 598 | if (MINGW) |
| 599 | if (CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 600 | set (CPACK_SYSTEM_NAME win64) |
| 601 | endif () |
| 602 | endif () |
| 603 | |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 604 | # See http://www.vtk.org/Wiki/CMake:CPackPackageGenerators |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 605 | if (WIN32) |
José Fonseca | 99ff4a7 | 2015-03-18 15:13:30 +0000 | [diff] [blame] | 606 | if (CMAKE_VERSION VERSION_LESS 3.1) |
| 607 | set (CPACK_GENERATOR "ZIP") |
| 608 | else () |
| 609 | set (CPACK_GENERATOR "7Z") |
| 610 | endif () |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 611 | elseif (APPLE) |
| 612 | set (CPACK_GENERATOR "DragNDrop") |
| 613 | else () |
José Fonseca | 7e0b44f | 2011-06-06 19:36:37 +0100 | [diff] [blame] | 614 | set (CPACK_GENERATOR "TBZ2") |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 615 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 616 | |
| 617 | include(CPack) |