Jose Fonseca | d335cfb | 2016-04-08 17:37:30 +0100 | [diff] [blame] | 1 | if (MSVC) |
Jose Fonseca | 67f0581 | 2017-10-05 15:09:30 +0100 | [diff] [blame] | 2 | cmake_minimum_required (VERSION 3.7.0) |
Jose Fonseca | d335cfb | 2016-04-08 17:37:30 +0100 | [diff] [blame] | 3 | else () |
| 4 | cmake_minimum_required (VERSION 2.8.11) |
| 5 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 6 | |
José Fonseca | 76efdcb | 2012-10-24 13:43:06 +0100 | [diff] [blame] | 7 | |
José Fonseca | f2ad618 | 2014-12-02 11:33:07 +0000 | [diff] [blame] | 8 | if (CMAKE_GENERATOR STREQUAL "Xcode") |
| 9 | message (FATAL_ERROR "Xcode generator is not supported. Please build with \"Unix Makefiles\" or \"Ninja\" generators.") |
| 10 | endif () |
| 11 | |
José Fonseca | 9adffcf | 2014-12-04 22:07:48 +0000 | [diff] [blame] | 12 | # http://www.cmake.org/cmake/help/v3.0/policy/CMP0042.html |
| 13 | if (POLICY CMP0042) |
| 14 | cmake_policy (SET CMP0042 NEW) |
| 15 | endif() |
| 16 | |
José Fonseca | 76efdcb | 2012-10-24 13:43:06 +0100 | [diff] [blame] | 17 | |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 18 | project (apitrace) |
| 19 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 20 | |
| 21 | ############################################################################## |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 22 | # Options |
José Fonseca | 5971d6a | 2011-09-27 14:13:56 +0100 | [diff] [blame] | 23 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 24 | # We use a cached string variable instead of the standard (boolean) OPTION |
| 25 | # command so that we can default to auto-detecting optional depencies, while |
| 26 | # still providing a mechanism to force/disable these optional dependencies, as |
José Fonseca | ab310da | 2011-07-28 19:07:50 +0100 | [diff] [blame] | 27 | # prescribed in http://www.gentoo.org/proj/en/qa/automagic.xml |
Zack Rusin | a842652 | 2011-07-29 00:07:43 -0400 | [diff] [blame] | 28 | set (ENABLE_GUI "AUTO" CACHE STRING "Enable Qt GUI.") |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 29 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 30 | option (ENABLE_CLI "Enable command Line interface." ON) |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 31 | |
Adrian Negreanu | 9b9eb3d | 2018-05-23 17:23:26 +0300 | [diff] [blame] | 32 | option (ENABLE_X11 "Enable X11 support." ON) |
| 33 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 34 | option (ENABLE_EGL "Enable EGL support." ON) |
José Fonseca | 82da242 | 2011-11-17 15:45:10 +0000 | [diff] [blame] | 35 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 36 | option (ENABLE_WAFFLE "Enable WAFFLE support." OFF) |
José Fonseca | 7c38848 | 2013-11-29 19:32:54 +0000 | [diff] [blame] | 37 | |
Jose Fonseca | 0a1967d | 2017-11-23 15:05:13 +0000 | [diff] [blame] | 38 | option (ENABLE_SSE42 "Enable SSE 4.2 intrinsics." OFF) |
| 39 | |
Jose Fonseca | 6a9a432 | 2015-01-24 19:23:57 +0000 | [diff] [blame] | 40 | option (ENABLE_FRAME_POINTER "Disable frame pointer omission" ON) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 41 | |
Jose Fonseca | 49dfaaf | 2016-04-16 15:08:43 +0100 | [diff] [blame] | 42 | option (ENABLE_ASAN "Enable Address Sanitizer" OFF) |
| 43 | |
Jose Fonseca | cbb48c5 | 2017-06-01 14:37:12 +0100 | [diff] [blame] | 44 | option (ENABLE_TESTS "Enable additional tests" OFF) |
| 45 | |
Jose Fonseca | e3509be | 2017-04-11 14:18:47 +0100 | [diff] [blame] | 46 | if (ANDROID) |
Jose Fonseca | 2264546 | 2017-06-03 21:59:09 +0100 | [diff] [blame] | 47 | message (FATAL_ERROR "Android is no longer supported (https://git.io/vH2gW)") |
Jose Fonseca | e3509be | 2017-04-11 14:18:47 +0100 | [diff] [blame] | 48 | endif () |
| 49 | |
Jose Fonseca | 21e685f | 2015-03-12 23:27:56 +0000 | [diff] [blame] | 50 | # Proprietary Linux games often ship their own libraries (zlib, libstdc++, |
| 51 | # etc.) in order to ship a single set of binaries across multiple |
| 52 | # distributions. Given that apitrace wrapper modules will be loaded into those |
| 53 | # processes, they must not depend on any shared object that could also be |
| 54 | # provided by such applications. See also |
| 55 | # http://lists.freedesktop.org/archives/mesa-dev/2015-March/079121.html |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 56 | if (NOT ANDROID) |
| 57 | option (ENABLE_STATIC_SNAPPY "Statically link against snappy" ON) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 58 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
Jose Fonseca | bdd03ca | 2015-04-26 21:43:01 +0100 | [diff] [blame] | 59 | option (ENABLE_STATIC_LIBGCC "Statically link LD_PRELOAD wrappers against libgcc" ON) |
| 60 | option (ENABLE_STATIC_LIBSTDCXX "Statically link LD_PRELOAD wrappers against libstdc++" ON) |
| 61 | if (NOT (ENABLE_STATIC_LIBGCC AND |
| 62 | ENABLE_STATIC_LIBSTDCXX AND |
| 63 | ENABLE_STATIC_SNAPPY)) |
| 64 | # XXX: Should probably throw a run-time too. |
| 65 | message (WARNING |
| 66 | "LD_PRELOAD wrappers not statically linked against all " |
| 67 | "dependencies, therefore will fail to work with many " |
| 68 | "third-party applications built on different Linux " |
| 69 | "distributions and that ship their own shared-object " |
| 70 | "dependencies." |
| 71 | ) |
| 72 | endif () |
Jose Fonseca | 0e781b6 | 2015-11-19 22:45:15 +0000 | [diff] [blame] | 73 | option (ENABLE_STATIC_EXE "Statically link executables" OFF) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 74 | endif () |
Jose Fonseca | 21e685f | 2015-03-12 23:27:56 +0000 | [diff] [blame] | 75 | endif () |
| 76 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 77 | |
| 78 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 79 | # Find dependencies |
| 80 | |
Jose Fonseca | c7ad25b | 2017-01-24 11:56:31 +0000 | [diff] [blame] | 81 | include (CheckCXXSourceCompiles) |
| 82 | |
José Fonseca | 8917aea | 2013-04-23 10:12:12 +0100 | [diff] [blame] | 83 | # Check for compiler TLS support. We don't use compiler TLS support on Windows |
| 84 | # because, even if the compiler supports it, Windows XP does not support TLS on |
| 85 | # DLLs. |
| 86 | if (NOT WIN32) |
José Fonseca | 7e41fcf | 2015-03-26 23:03:56 +0000 | [diff] [blame] | 87 | check_cxx_source_compiles ("__thread int i; int main() { return 0; }" HAVE_COMPILER_TLS) |
| 88 | if (NOT HAVE_COMPILER_TLS) |
| 89 | message (FATAL_ERROR "C++ compiler does not support __thread keyword.") |
José Fonseca | 8917aea | 2013-04-23 10:12:12 +0100 | [diff] [blame] | 90 | endif () |
| 91 | endif () |
| 92 | |
Yann E. MORIN | afa31e5 | 2017-03-04 14:16:58 +0100 | [diff] [blame] | 93 | list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) |
José Fonseca | c56b9ac | 2014-06-25 13:46:35 +0100 | [diff] [blame] | 94 | include (ConvenienceLibrary) |
José Fonseca | 01e5c85 | 2014-10-02 15:48:35 +0100 | [diff] [blame] | 95 | include (InstallPDB) |
José Fonseca | b460bf3 | 2010-11-19 18:57:51 +0000 | [diff] [blame] | 96 | |
George Wright | a4a643e | 2012-02-23 14:54:49 -0500 | [diff] [blame] | 97 | if (ANDROID) |
| 98 | set (ENABLE_GUI false) |
George Wright | a4a643e | 2012-02-23 14:54:49 -0500 | [diff] [blame] | 99 | else () |
| 100 | macro (find_host_package) |
| 101 | find_package (${ARGN}) |
| 102 | endmacro() |
| 103 | endif () |
| 104 | |
Robert Tarasov | 6ccf5bb | 2020-01-10 12:31:25 -0800 | [diff] [blame] | 105 | if (CMAKE_VERSION VERSION_LESS 3.12) |
| 106 | find_host_package (PythonInterp 3 REQUIRED) |
| 107 | if (NOT PYTHON_VERSION_MAJOR EQUAL 3) |
| 108 | message (FATAL_ERROR "Python 3.x required and requested, but Python ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} found.") |
| 109 | endif () |
| 110 | set (Python3_EXECUTABLE "${PYTHON_EXECUTABLE}") |
| 111 | else () |
| 112 | find_host_package (Python3 REQUIRED) |
Jose Fonseca | e91fb54 | 2019-04-14 22:22:24 +0900 | [diff] [blame] | 113 | endif () |
José Fonseca | 994fa9a | 2014-06-03 16:03:45 +0100 | [diff] [blame] | 114 | |
José Fonseca | e86846f | 2012-03-10 16:02:49 +0000 | [diff] [blame] | 115 | find_package (Threads) |
| 116 | |
Jose Fonseca | 0e781b6 | 2015-11-19 22:45:15 +0000 | [diff] [blame] | 117 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ENABLE_STATIC_EXE) |
José Fonseca | 39072d2 | 2014-11-11 22:22:57 +0000 | [diff] [blame] | 118 | find_package (procps) |
Jose Fonseca | cc41a48 | 2015-03-13 10:35:27 +0000 | [diff] [blame] | 119 | if (PROCPS_FOUND) |
José Fonseca | 39072d2 | 2014-11-11 22:22:57 +0000 | [diff] [blame] | 120 | add_definitions (-DHAVE_READPROC_H) |
| 121 | endif () |
| 122 | endif () |
| 123 | |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 124 | if (ENABLE_GUI) |
| 125 | if (NOT (ENABLE_GUI STREQUAL "AUTO")) |
| 126 | set (REQUIRE_GUI REQUIRED) |
| 127 | endif () |
José Fonseca | 3f4cd30 | 2015-01-14 12:02:06 +0000 | [diff] [blame] | 128 | if (POLICY CMP0020) |
| 129 | cmake_policy (SET CMP0020 NEW) |
| 130 | endif() |
| 131 | find_package (Qt5Widgets ${REQUIRE_GUI}) |
Jose Fonseca | 3b7e9c0 | 2016-03-21 14:20:55 +0000 | [diff] [blame] | 132 | find_package (Qt5Network ${REQUIRE_GUI}) |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 133 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 134 | |
Jose Fonseca | 38d9d4d | 2015-08-10 14:13:05 +0100 | [diff] [blame] | 135 | if (MSVC) |
Jose Fonseca | 67f0581 | 2017-10-05 15:09:30 +0100 | [diff] [blame] | 136 | if (${MSVC_VERSION} LESS 1910) |
| 137 | message (FATAL_ERROR "Visual Studio 2017 or later required") |
Jose Fonseca | 38d9d4d | 2015-08-10 14:13:05 +0100 | [diff] [blame] | 138 | endif () |
Jose Fonseca | 38d9d4d | 2015-08-10 14:13:05 +0100 | [diff] [blame] | 139 | endif () |
| 140 | |
José Fonseca | e8fec0f | 2011-06-06 21:06:29 +0100 | [diff] [blame] | 141 | if (WIN32) |
Jose Fonseca | 7e3f22a | 2016-04-10 15:56:46 +0100 | [diff] [blame] | 142 | # http://msdn.microsoft.com/en-us/library/aa383745.aspx |
Jose Fonseca | 16b76a2 | 2017-03-20 12:50:52 +0000 | [diff] [blame] | 143 | # Windows 8 |
| 144 | add_definitions (-D_WIN32_WINNT=0x0602 -DWINVER=0x0602) |
Jose Fonseca | 7e3f22a | 2016-04-10 15:56:46 +0100 | [diff] [blame] | 145 | |
José Fonseca | e8fec0f | 2011-06-06 21:06:29 +0100 | [diff] [blame] | 146 | find_package (DirectX) |
Jose Fonseca | 4713c3b | 2015-08-12 11:06:34 +0100 | [diff] [blame] | 147 | |
Jose Fonseca | a0870ec | 2018-12-05 10:45:00 +0000 | [diff] [blame] | 148 | if (MSVC) |
| 149 | # Log Windows SDK version |
| 150 | unset (WINDOWS_SDK_VERSION) |
| 151 | if (DEFINED CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION) |
| 152 | set (WINDOWS_SDK_VERSION ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}) |
| 153 | elseif (DEFINED ENV{WindowsSDKLibVersion}) |
| 154 | string (REGEX REPLACE "\\\\$" "" WINDOWS_SDK_VERSION "$ENV{WindowsSDKLibVersion}") |
| 155 | endif () |
| 156 | if (DEFINED WINDOWS_SDK_VERSION) |
| 157 | message (STATUS "Using Windows SDK ${WINDOWS_SDK_VERSION}") |
| 158 | endif () |
Jose Fonseca | 9b91d13 | 2017-10-13 13:35:41 +0100 | [diff] [blame] | 159 | |
Jose Fonseca | a0870ec | 2018-12-05 10:45:00 +0000 | [diff] [blame] | 160 | # https://developer.microsoft.com/en-us/windows/projects/campaigns/windows-dev-essentials-how-windows-10-sdks-ship |
| 161 | set (REQUIRED_WINDOWS_SDK 10.0.14393.0) |
| 162 | if (NOT DirectX_D3D11_4_INCLUDE_FOUND) |
| 163 | if (CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION) |
| 164 | message (SEND_ERROR |
| 165 | "Windows ${REQUIRED_WINDOWS_SDK} SDK required, but ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} found.\n" |
| 166 | "Install it then select it by configuring with -DCMAKE_SYSTEM_VERSION=${REQUIRED_WINDOWS_SDK} option.") |
| 167 | |
| 168 | else () |
| 169 | message (SEND_ERROR |
| 170 | "Windows ${REQUIRED_WINDOWS_SDK} SDK required.\n" |
| 171 | "Install it then select it by invoking `vcvarsall.bat <arch> ${REQUIRED_WINDOWS_SDK}`" |
| 172 | ) |
| 173 | endif () |
Jose Fonseca | 9b91d13 | 2017-10-13 13:35:41 +0100 | [diff] [blame] | 174 | endif () |
Jose Fonseca | 4713c3b | 2015-08-12 11:06:34 +0100 | [diff] [blame] | 175 | endif () |
| 176 | |
José Fonseca | e319ab4 | 2012-03-10 15:37:43 +0000 | [diff] [blame] | 177 | set (ENABLE_EGL false) |
José Fonseca | f4608e3 | 2011-10-10 20:17:35 +0100 | [diff] [blame] | 178 | elseif (APPLE) |
José Fonseca | e319ab4 | 2012-03-10 15:37:43 +0000 | [diff] [blame] | 179 | set (ENABLE_EGL false) |
Jose Fonseca | fa104c7 | 2018-12-06 12:13:42 +0000 | [diff] [blame] | 180 | add_definitions (-DGL_SILENCE_DEPRECATION) |
Adrian Negreanu | 9b9eb3d | 2018-05-23 17:23:26 +0300 | [diff] [blame] | 181 | elseif (ENABLE_X11) |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 182 | find_package (X11) |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 183 | |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 184 | if (X11_FOUND) |
| 185 | include_directories (${X11_INCLUDE_DIR}) |
| 186 | add_definitions (-DHAVE_X11) |
José Fonseca | 8d1d532 | 2012-10-28 10:48:22 +0000 | [diff] [blame] | 187 | else () |
| 188 | # Print a clear message when X11 is not found |
| 189 | include (FindPackageMessage) |
| 190 | find_package_message (X11 "Could not find X11" "") |
Arnaud Vrac | 6ac796e | 2011-12-19 02:44:24 +0100 | [diff] [blame] | 191 | endif () |
José Fonseca | a62e12f | 2011-10-07 15:33:48 +0100 | [diff] [blame] | 192 | endif () |
José Fonseca | e8fec0f | 2011-06-06 21:06:29 +0100 | [diff] [blame] | 193 | |
Jose Fonseca | b68e16a | 2015-09-14 18:32:16 +0100 | [diff] [blame] | 194 | if (ENABLE_EGL AND ENABLE_WAFFLE) |
| 195 | # Use Waffle for eglretrace |
Jose Fonseca | 6507ac5 | 2019-11-26 13:13:50 +0000 | [diff] [blame] | 196 | find_package (Waffle REQUIRED) |
José Fonseca | 7c38848 | 2013-11-29 19:32:54 +0000 | [diff] [blame] | 197 | endif () |
| 198 | |
Robert Tarasov | 6ccf5bb | 2020-01-10 12:31:25 -0800 | [diff] [blame] | 199 | if (ENABLE_EGL AND NOT ENABLE_X11) |
| 200 | add_definitions (-DEGL_NO_X11) |
| 201 | endif () |
| 202 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 203 | |
| 204 | ############################################################################## |
| 205 | # Set global build options |
| 206 | |
| 207 | include (CheckCXXCompilerFlag) |
José Fonseca | 1c6c2bc | 2014-02-25 15:28:03 +0000 | [diff] [blame] | 208 | include (CheckIncludeFileCXX) |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 209 | |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 210 | macro (add_compiler_flags) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 211 | string (REPLACE ";" " " _FLAGS "${ARGV}") |
| 212 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAGS}") |
| 213 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAGS}") |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 214 | endmacro () |
| 215 | |
José Fonseca | cb084e1 | 2014-09-11 18:13:58 +0100 | [diff] [blame] | 216 | macro (add_linker_flags) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 217 | string (REPLACE ";" " " _FLAGS "${ARGV}") |
| 218 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_FLAGS}") |
| 219 | set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_FLAGS}") |
| 220 | set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_FLAGS}") |
José Fonseca | cb084e1 | 2014-09-11 18:13:58 +0100 | [diff] [blame] | 221 | endmacro () |
| 222 | |
Jose Fonseca | 4ba12ac | 2015-05-18 15:17:05 +0100 | [diff] [blame] | 223 | add_definitions ( |
| 224 | -D__STDC_LIMIT_MACROS |
Jose Fonseca | 27d8073 | 2015-08-13 12:21:46 +0100 | [diff] [blame] | 225 | -D__STDC_FORMAT_MACROS |
Jose Fonseca | 4ba12ac | 2015-05-18 15:17:05 +0100 | [diff] [blame] | 226 | ) |
| 227 | |
José Fonseca | 5aff9b0 | 2010-11-22 13:00:54 +0000 | [diff] [blame] | 228 | if (WIN32) |
José Fonseca | 2369129 | 2011-04-22 10:40:25 +0100 | [diff] [blame] | 229 | else (WIN32) |
| 230 | CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" CXX_COMPILER_FLAG_VISIBILITY) |
| 231 | if (CXX_COMPILER_FLAG_VISIBILITY) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 232 | add_compiler_flags (-fvisibility=hidden) |
José Fonseca | 5b6fb75 | 2012-04-14 14:56:45 +0100 | [diff] [blame] | 233 | endif () |
| 234 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 235 | |
| 236 | if (MSVC) |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 237 | # No RTTI required |
José Fonseca | aec3083 | 2014-05-13 17:29:40 +0100 | [diff] [blame] | 238 | string (REGEX REPLACE "/GR *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 239 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-") |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 240 | |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 241 | # Disable C++ exceptions |
| 242 | add_definitions (-D_HAS_EXCEPTIONS=0) |
| 243 | string (REGEX REPLACE "/EHsc *" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 244 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHs-c-") |
| 245 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 246 | # Enable math constants defines |
| 247 | add_definitions (-D_USE_MATH_DEFINES) |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 248 | |
José Fonseca | 2af485a | 2011-04-15 20:49:21 +0100 | [diff] [blame] | 249 | # No min/max macros |
| 250 | add_definitions (-DNOMINMAX) |
| 251 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 252 | # Adjust warnings |
| 253 | add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) |
| 254 | add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS) |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 255 | add_compiler_flags (-W3) |
José Fonseca | af7fc5c | 2012-04-23 12:19:53 +0100 | [diff] [blame] | 256 | # 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] | 257 | add_compiler_flags (-wd4018) # signed/unsigned mismatch |
| 258 | add_compiler_flags (-wd4063) # not a valid value for switch of enum |
| 259 | add_compiler_flags (-wd4100) # unreferenced formal parameter |
| 260 | add_compiler_flags (-wd4127) # conditional expression is constant |
| 261 | add_compiler_flags (-wd4244) # conversion from 'type1' to 'type2', possible loss of data |
| 262 | add_compiler_flags (-wd4267) # conversion from 'type1' to 'type2', possible loss of data |
| 263 | add_compiler_flags (-wd4505) # unreferenced local function has been removed |
| 264 | add_compiler_flags (-wd4512) # assignment operator could not be generated |
Jose Fonseca | 67f0581 | 2017-10-05 15:09:30 +0100 | [diff] [blame] | 265 | add_compiler_flags (-wd4577) # 'noexcept' used with no exception handling mode specified |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 266 | 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] | 267 | |
| 268 | # Use static runtime |
| 269 | # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F |
| 270 | foreach (flag_var |
| 271 | CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO |
| 272 | CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO |
| 273 | ) |
| 274 | if (${flag_var} MATCHES "/MD") |
| 275 | string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") |
José Fonseca | 5b6fb75 | 2012-04-14 14:56:45 +0100 | [diff] [blame] | 276 | endif () |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 277 | endforeach (flag_var) |
José Fonseca | 1791f62 | 2010-11-15 16:09:40 +0000 | [diff] [blame] | 278 | else () |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 279 | # Enable and require C++11 |
| 280 | # |
| 281 | # 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] | 282 | # __STRICT_ANSI__ which prevents _isnan from being declared with MinGW. |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 283 | # |
| 284 | # See also: |
| 285 | # - https://gcc.gnu.org/projects/cxx0x.html |
| 286 | # - http://clang.llvm.org/cxx_status.html |
| 287 | check_cxx_compiler_flag ("-std=gnu++11" CXX_COMPILER_FLAG_STD_GNUXX11) |
José Fonseca | 1a1e326 | 2015-03-12 14:20:19 +0000 | [diff] [blame] | 288 | if (CXX_COMPILER_FLAG_STD_GNUXX11) |
Jose Fonseca | 02c5d50 | 2015-03-08 20:51:11 +0000 | [diff] [blame] | 289 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") |
José Fonseca | 47de2eb | 2015-03-12 14:15:30 +0000 | [diff] [blame] | 290 | else () |
| 291 | 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] | 292 | endif () |
| 293 | |
Jose Fonseca | 5de6856 | 2015-08-13 19:33:08 +0100 | [diff] [blame] | 294 | # We require at least GCC 4.9 for decent C++11 support |
| 295 | if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND |
| 296 | CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") |
Jose Fonseca | 2940c64 | 2016-05-09 17:24:25 -0700 | [diff] [blame] | 297 | message (FATAL_ERROR "GCC 4.9 or later required -- https://github.com/apitrace/apitrace/wiki/GCC") |
Jose Fonseca | 5de6856 | 2015-08-13 19:33:08 +0100 | [diff] [blame] | 298 | endif () |
| 299 | |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 300 | # Adjust warnings |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 301 | add_compiler_flags (-Wall) |
José Fonseca | 03f6361 | 2010-12-04 10:59:52 +0000 | [diff] [blame] | 302 | # 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] | 303 | 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] | 304 | |
Jose Fonseca | 8e5e379 | 2015-03-15 07:49:36 +0000 | [diff] [blame] | 305 | # Disable strict aliasing assumptions. We generate a lot of C++ code, and |
| 306 | # it's not always easy to guarantee or spot when strict aliasing |
| 307 | # assumptions are violated. Above all, the benefit is not worth the risk. |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 308 | add_compiler_flags (-fno-strict-aliasing) |
Jose Fonseca | 8e5e379 | 2015-03-15 07:49:36 +0000 | [diff] [blame] | 309 | |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 310 | # No RTTI required |
José Fonseca | 5cebfd8 | 2015-03-20 07:00:53 +0000 | [diff] [blame] | 311 | # XXX: there's a dynamic_cast in Android |
| 312 | if (NOT ANDROID) |
| 313 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") |
| 314 | endif () |
Nigel Stewart | 673d32a | 2013-07-19 09:32:47 -0500 | [diff] [blame] | 315 | |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 316 | # Disable C++ exceptions |
Jose Fonseca | 2d70fdf | 2015-12-03 10:50:55 +0000 | [diff] [blame] | 317 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") |
José Fonseca | c354ea0 | 2015-03-20 07:01:16 +0000 | [diff] [blame] | 318 | |
Jose Fonseca | 49dfaaf | 2016-04-16 15:08:43 +0100 | [diff] [blame] | 319 | # Enable Address Sanitizer |
| 320 | if (ENABLE_ASAN) |
| 321 | add_compiler_flags (-fsanitize=address) |
| 322 | add_linker_flags (-fsanitize=address) |
José Fonseca | 4c3da7c | 2014-09-12 08:36:06 +0100 | [diff] [blame] | 323 | endif () |
| 324 | |
José Fonseca | 7ddb070 | 2014-08-29 18:24:19 +0100 | [diff] [blame] | 325 | # Enable SSE2 intrinsics on x86 |
Jose Fonseca | d94ea96 | 2015-10-27 11:42:46 +0000 | [diff] [blame] | 326 | if (MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4) |
Jose Fonseca | 16c8fc6 | 2016-02-01 14:52:32 +0000 | [diff] [blame] | 327 | add_compiler_flags (-msse2 -mfpmath=sse) |
José Fonseca | d591f96 | 2015-01-29 16:01:53 +0000 | [diff] [blame] | 328 | |
Jose Fonseca | 16c8fc6 | 2016-02-01 14:52:32 +0000 | [diff] [blame] | 329 | # And tell GCC to assume 4 bytes alignment, many Linux/Windows |
| 330 | # applications only guarantee that, but not on systems where ABI |
| 331 | # clearly states otherwise. |
| 332 | # |
| 333 | # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496 |
| 334 | if (CMAKE_CXX_COMPILER_ID MATCHES Clang) |
| 335 | add_compiler_flags (-mstackrealign) |
| 336 | else () |
| 337 | add_compiler_flags (-mincoming-stack-boundary=2) |
| 338 | endif () |
José Fonseca | 7ddb070 | 2014-08-29 18:24:19 +0100 | [diff] [blame] | 339 | endif () |
| 340 | |
Jose Fonseca | 0a1967d | 2017-11-23 15:05:13 +0000 | [diff] [blame] | 341 | if (ENABLE_SSE42) |
| 342 | if (MINGW) |
| 343 | add_compiler_flags (-msse4.2) |
| 344 | endif () |
| 345 | add_definitions (-DENABLE_SSE42) |
| 346 | endif () |
| 347 | |
José Fonseca | 43894cb | 2012-10-19 18:43:46 +0100 | [diff] [blame] | 348 | # Be nice to Eclipse |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 349 | add_compiler_flags (-fmessage-length=0) |
José Fonseca | 1791f62 | 2010-11-15 16:09:40 +0000 | [diff] [blame] | 350 | endif () |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 351 | |
Jose Fonseca | c7ad25b | 2017-01-24 11:56:31 +0000 | [diff] [blame] | 352 | if (APPLE) |
| 353 | check_cxx_source_compiles ("#include <AvailabilityMacros.h>\n#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200\nint main() { return 0; }\n#endif" HAVE_MACOSX_10_12_SDK) |
| 354 | if (NOT HAVE_MACOSX_10_12_SDK) |
| 355 | message (FATAL_ERROR "macOS 10.12 SDK or newer (i.e. Xcode 8.0 or newer) required") |
| 356 | endif () |
Jose Fonseca | d172b02 | 2015-06-07 21:02:58 +0100 | [diff] [blame] | 357 | endif () |
| 358 | |
José Fonseca | aa5681e | 2011-10-11 19:32:30 +0100 | [diff] [blame] | 359 | if (MINGW) |
| 360 | # Avoid depending on MinGW runtime DLLs |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 361 | add_linker_flags (-static-libgcc -static-libstdc++) |
Jose Fonseca | 0e781b6 | 2015-11-19 22:45:15 +0000 | [diff] [blame] | 362 | elseif (ENABLE_STATIC_EXE) |
| 363 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") |
José Fonseca | aa5681e | 2011-10-11 19:32:30 +0100 | [diff] [blame] | 364 | endif () |
| 365 | |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 366 | if (ENABLE_FRAME_POINTER) |
| 367 | # disable frame pointer omission |
| 368 | if (MSVC) |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 369 | add_compiler_flags (/Oy-) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 370 | else () |
José Fonseca | 7ed2ef3 | 2015-01-29 15:51:22 +0000 | [diff] [blame] | 371 | add_compiler_flags (-fno-omit-frame-pointer) |
José Fonseca | 42945ef | 2014-09-03 22:32:18 +0100 | [diff] [blame] | 372 | endif () |
| 373 | endif () |
| 374 | |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 375 | if (WIN32) |
Jose Fonseca | 4252663 | 2017-10-05 16:22:39 +0100 | [diff] [blame] | 376 | # Increase number of sections in obj files |
| 377 | if (MSVC) |
| 378 | add_compiler_flags (-bigobj) |
| 379 | else () |
| 380 | add_compiler_flags (-Wa,-mbig-obj) |
| 381 | endif () |
| 382 | |
Jose Fonseca | 849af14 | 2016-12-09 14:25:00 +0000 | [diff] [blame] | 383 | # Enable Data Execution Prevention and Address Space Layout Randomization |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 384 | if (MSVC) |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 385 | add_linker_flags (/NXCOMPAT /DYNAMICBASE) |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 386 | else () |
Jose Fonseca | 6d437fb | 2015-03-27 10:53:06 +0000 | [diff] [blame] | 387 | add_linker_flags (-Wl,--nxcompat -Wl,--dynamicbase) |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 388 | endif () |
Jose Fonseca | 849af14 | 2016-12-09 14:25:00 +0000 | [diff] [blame] | 389 | |
| 390 | # Use more than 2GB virtual memory address space for 32-bits processes |
| 391 | # where available (3GB on 32-bits Windows with 4GT, 4GB on 64-bits Windows) |
| 392 | if (CMAKE_SIZEOF_VOID_P EQUAL 4) |
| 393 | if (MSVC) |
| 394 | add_linker_flags (/LARGEADDRESSAWARE) |
| 395 | else () |
| 396 | add_linker_flags (-Wl,--large-address-aware) |
| 397 | endif () |
| 398 | endif () |
José Fonseca | e632a70 | 2014-09-11 18:14:32 +0100 | [diff] [blame] | 399 | endif () |
| 400 | |
Jose Fonseca | 94c0b7c | 2015-03-12 21:13:05 +0000 | [diff] [blame] | 401 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
José Fonseca | 6c38311 | 2013-05-04 09:33:41 +0100 | [diff] [blame] | 402 | # For RTLD_DEFAULT and RTLD_NEXT |
| 403 | add_definitions (-D_GNU_SOURCE) |
| 404 | endif () |
| 405 | |
Jose Fonseca | f67e3c1 | 2015-05-01 17:42:03 +0100 | [diff] [blame] | 406 | include (TestBigEndian) |
| 407 | test_big_endian (HAVE_BIGENDIAN) |
| 408 | if (HAVE_BIGENDIAN) |
| 409 | add_definitions (-DHAVE_BIGENDIAN) |
| 410 | endif () |
| 411 | |
Jose Fonseca | 50d5e20 | 2016-03-26 13:01:21 +0000 | [diff] [blame] | 412 | # Force certain components to always be built as release |
| 413 | macro (force_release_build) |
| 414 | if (MSVC) |
| 415 | # TODO: Needs special care due since runtime must match |
| 416 | else () |
| 417 | set (CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_RELWITHDEBINFO}) |
| 418 | set (CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) |
| 419 | endif () |
| 420 | endmacro () |
| 421 | |
José Fonseca | 4472129 | 2011-04-21 08:24:57 +0100 | [diff] [blame] | 422 | # Put all executables into the same top level build directory, regardless of |
| 423 | # which subdirectory they are declared |
José Fonseca | 5d4e2a1 | 2011-07-01 11:58:16 +0100 | [diff] [blame] | 424 | set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) |
José Fonseca | 4472129 | 2011-04-21 08:24:57 +0100 | [diff] [blame] | 425 | |
Jose Fonseca | e11395e | 2016-01-27 12:12:32 +0000 | [diff] [blame] | 426 | enable_testing () |
| 427 | if (CMAKE_CROSSCOMPILING) |
| 428 | add_custom_target (check) |
| 429 | elseif (DEFINED CMAKE_BUILD_TYPE) |
| 430 | # Single configuration |
| 431 | add_custom_target (check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure) |
| 432 | else () |
| 433 | # Multiple configuration |
| 434 | add_custom_target (check COMMAND ${CMAKE_CTEST_COMMAND} -C "$<CONFIG>" --output-on-failure) |
| 435 | endif () |
| 436 | |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 437 | |
| 438 | ############################################################################## |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 439 | # Installation directories |
| 440 | |
Jose Fonseca | 94c0b7c | 2015-03-12 21:13:05 +0000 | [diff] [blame] | 441 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 442 | # Debian multiarch support |
| 443 | execute_process(COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH |
| 444 | OUTPUT_VARIABLE ARCH_SUBDIR |
| 445 | ERROR_QUIET |
| 446 | OUTPUT_STRIP_TRAILING_WHITESPACE |
| 447 | ) |
| 448 | endif() |
| 449 | |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 450 | if (WIN32 OR APPLE) |
| 451 | # On Windows/MacOSX, applications are usually installed on a directory of |
| 452 | # their own |
Jose Fonseca | 686fc5a | 2016-04-13 10:35:12 +0100 | [diff] [blame] | 453 | set (DOC_DEFAULT_INSTALL_DIR doc) |
José Fonseca | ab6ded7 | 2012-03-02 10:31:19 +0000 | [diff] [blame] | 454 | set (LIB_INSTALL_DIR lib) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 455 | set (LIB_ARCH_INSTALL_DIR lib) |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 456 | else () |
Jose Fonseca | 686fc5a | 2016-04-13 10:35:12 +0100 | [diff] [blame] | 457 | set (DOC_DEFAULT_INSTALL_DIR share/doc/${CMAKE_PROJECT_NAME}) |
Sandro Mani | 4124585 | 2013-11-20 21:27:29 +0100 | [diff] [blame] | 458 | set (LIB_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 459 | if (ARCH_SUBDIR) |
| 460 | set (LIB_ARCH_INSTALL_DIR lib/${ARCH_SUBDIR}/${CMAKE_PROJECT_NAME}) |
| 461 | else () |
Sandro Mani | 4124585 | 2013-11-20 21:27:29 +0100 | [diff] [blame] | 462 | set (LIB_ARCH_INSTALL_DIR lib${LIB_SUFFIX}/${CMAKE_PROJECT_NAME}) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 463 | endif () |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 464 | endif () |
| 465 | |
Jose Fonseca | 686fc5a | 2016-04-13 10:35:12 +0100 | [diff] [blame] | 466 | # Allow customization of the doc installation dir (Slackware uses different |
| 467 | # location) |
| 468 | set (DOC_INSTALL_DIR "${DOC_DEFAULT_INSTALL_DIR}" CACHE STRING "Documentation installation directory") |
| 469 | |
José Fonseca | 7c3ea25 | 2012-05-08 15:02:51 +0100 | [diff] [blame] | 470 | set (SCRIPTS_INSTALL_DIR ${LIB_INSTALL_DIR}/scripts) |
Michal Suchanek | 96851e0 | 2012-05-07 16:07:16 +0200 | [diff] [blame] | 471 | set (WRAPPER_INSTALL_DIR ${LIB_ARCH_INSTALL_DIR}/wrappers) |
Carl Worth | 26cca9b | 2011-11-04 15:42:02 -0700 | [diff] [blame] | 472 | |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 473 | |
| 474 | ############################################################################## |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 475 | # Bundled dependencies |
| 476 | # |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 477 | # We prefer to bundle and statically link against many dependencies: |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 478 | # - on Windows to make it easy to deploy the wrappers DLLs |
| 479 | # - on unices to prevent symbol collisions when tracing applications that link |
| 480 | # against other versions of these libraries |
| 481 | |
Jose Fonseca | 71a85c9 | 2016-02-25 21:37:42 +0000 | [diff] [blame] | 482 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/compat) |
| 483 | |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 484 | if (NOT ENABLE_STATIC_SNAPPY) |
| 485 | find_package (SNAPPY) |
| 486 | endif () |
| 487 | if (ENABLE_STATIC_SNAPPY OR NOT SNAPPY_FOUND) |
Jose Fonseca | e1a50a2 | 2015-09-01 23:45:43 +0100 | [diff] [blame] | 488 | message (STATUS "Using bundled SNAPPY") |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 489 | set (SNAPPY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/snappy) |
| 490 | set (SNAPPY_LIBRARIES snappy_bundled) |
| 491 | add_subdirectory (thirdparty/snappy) |
| 492 | endif () |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 493 | include_directories (${SNAPPY_INCLUDE_DIRS}) |
| 494 | |
Jose Fonseca | da5c63c | 2018-02-14 11:36:14 +0000 | [diff] [blame] | 495 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/brotli/c/include) |
Jose Fonseca | 1d9af7a | 2016-03-23 12:40:09 +0000 | [diff] [blame] | 496 | add_subdirectory (thirdparty/brotli) |
| 497 | |
Jose Fonseca | 0e781b6 | 2015-11-19 22:45:15 +0000 | [diff] [blame] | 498 | if (NOT WIN32 AND NOT ENABLE_STATIC_EXE) |
Jose Fonseca | 33d5be1 | 2015-03-15 19:09:13 +0000 | [diff] [blame] | 499 | # zlib 1.2.4-1.2.5 made it impossible to read the last block of incomplete |
| 500 | # gzip traces (e.g., apitrace-tests/traces/zlib-no-eof.trace). |
| 501 | find_package (ZLIB 1.2.6) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 502 | endif () |
Jose Fonseca | 63e5f39 | 2015-03-15 10:33:32 +0000 | [diff] [blame] | 503 | if (NOT ZLIB_FOUND) |
Jose Fonseca | e1a50a2 | 2015-09-01 23:45:43 +0100 | [diff] [blame] | 504 | message (STATUS "Using bundled ZLIB") |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 505 | set (ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/zlib) |
| 506 | set (ZLIB_LIBRARIES z_bundled) |
| 507 | add_subdirectory (thirdparty/zlib) |
| 508 | endif () |
| 509 | include_directories (${ZLIB_INCLUDE_DIRS}) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 510 | |
Jose Fonseca | 40f5ce1 | 2015-03-15 22:35:22 +0000 | [diff] [blame] | 511 | # FindPNG.cmake will search ZLIB internally (without requiring any particular |
| 512 | # version), adding its include dirs and libraries, and overwriting ZLIB_FOUND. |
| 513 | # So if the system's ZLIB was did not meet the our requirements, then there's |
| 514 | # no safe way to use the system's PNG library. |
Jose Fonseca | d83ab10 | 2017-01-12 23:41:37 +0000 | [diff] [blame] | 515 | if (NOT WIN32 AND NOT APPLE AND NOT ENABLE_STATIC_EXE AND ZLIB_FOUND) |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 516 | find_package (PNG) |
| 517 | endif () |
Jose Fonseca | 63e5f39 | 2015-03-15 10:33:32 +0000 | [diff] [blame] | 518 | if (NOT PNG_FOUND) |
Jose Fonseca | e1a50a2 | 2015-09-01 23:45:43 +0100 | [diff] [blame] | 519 | message (STATUS "Using bundled PNG") |
Jose Fonseca | b132f86 | 2015-03-12 23:53:10 +0000 | [diff] [blame] | 520 | set (PNG_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libpng) |
| 521 | set (PNG_DEFINITIONS "") |
| 522 | set (PNG_LIBRARIES png_bundled) |
| 523 | add_subdirectory (thirdparty/libpng) |
| 524 | endif () |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 525 | |
| 526 | if (MSVC) |
| 527 | add_subdirectory (thirdparty/getopt) |
| 528 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/getopt) |
| 529 | set (GETOPT_LIBRARIES getopt_bundled) |
| 530 | endif () |
| 531 | |
| 532 | if (WIN32) |
José Fonseca | 3b74a95 | 2015-02-09 11:52:29 +0000 | [diff] [blame] | 533 | add_subdirectory (thirdparty/dxerr) |
José Fonseca | d7c738e | 2013-03-06 11:46:41 +0000 | [diff] [blame] | 534 | add_subdirectory (thirdparty/directxtex) |
José Fonseca | e5b9a91 | 2014-09-25 21:28:59 +0100 | [diff] [blame] | 535 | add_subdirectory (thirdparty/devcon) |
Jose Fonseca | 6e1b4f8 | 2016-09-03 10:06:54 +0100 | [diff] [blame] | 536 | add_subdirectory (thirdparty/mhook) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 537 | endif () |
| 538 | |
José Fonseca | 620060f | 2015-02-23 16:49:21 +0000 | [diff] [blame] | 539 | add_subdirectory (thirdparty/crc32c) |
| 540 | |
Alexander Monakov | 9c8be7c | 2013-05-19 00:23:58 +0400 | [diff] [blame] | 541 | if (CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF") |
| 542 | add_subdirectory (thirdparty/libbacktrace) |
| 543 | include_directories (${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libbacktrace) |
i.Dark_Templar | 1294f69 | 2019-04-30 22:19:08 +0300 | [diff] [blame] | 544 | include_directories (${CMAKE_CURRENT_BINARY_DIR}/thirdparty/libbacktrace) |
Harald Fernengel | 35d2750 | 2015-06-22 15:19:20 +0100 | [diff] [blame] | 545 | set (LIBBACKTRACE_LIBRARIES ${CMAKE_DL_LIBS} backtrace) |
José Fonseca | d6c02fd | 2013-09-20 10:50:45 +0100 | [diff] [blame] | 546 | add_definitions (-DHAVE_BACKTRACE=1) |
Alexander Monakov | 9c8be7c | 2013-05-19 00:23:58 +0400 | [diff] [blame] | 547 | endif () |
| 548 | |
Meng Mengmeng | 093cf11 | 2014-01-22 12:49:20 +0000 | [diff] [blame] | 549 | add_subdirectory (thirdparty/md5) |
| 550 | set (MD5_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/md5) |
| 551 | set (MD5_LIBRARIES md5_bundled) |
| 552 | |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 553 | # We use bundled headers for all Khronos APIs, to guarantee support for both |
| 554 | # OpenGL and OpenGL ES at build time, because the OpenGL and OpenGL ES 1 APIs |
| 555 | # are so intertwined that conditional compilation extremely difficult. This |
| 556 | # also avoids missing/inconsistent declarations in system headers. |
| 557 | include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/khronos) |
| 558 | |
Jose Fonseca | 6ab8d30 | 2015-05-22 00:05:11 +0100 | [diff] [blame] | 559 | # We use non-standard C++ flags, so we can't just use GTest's CMakeLists.txt |
Jose Fonseca | 4417242 | 2018-02-14 13:20:56 +0000 | [diff] [blame] | 560 | add_definitions (-DGTEST_HAS_TR1_TUPLE=0) |
David Aguilar | 85cf7c8 | 2018-04-18 13:34:08 -0700 | [diff] [blame] | 561 | include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/include) |
Jose Fonseca | 6ab8d30 | 2015-05-22 00:05:11 +0100 | [diff] [blame] | 562 | add_library (gtest ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest/src/gtest-all.cc) |
| 563 | set_property (TARGET gtest APPEND PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gtest) |
| 564 | target_link_libraries (gtest ${CMAKE_THREAD_LIBS_INIT}) |
| 565 | |
Jose Fonseca | 1ee5efd | 2015-08-14 10:02:18 +0100 | [diff] [blame] | 566 | # Convenience macro for adding unit tests |
| 567 | macro (add_gtest) |
| 568 | add_executable (${ARGV}) |
| 569 | target_link_libraries (${ARGV0} gtest) |
| 570 | add_dependencies (check ${ARGV0}) |
| 571 | add_test (NAME ${ARGV0} COMMAND $<TARGET_FILE:${ARGV0}>) |
| 572 | endmacro () |
| 573 | |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 574 | |
| 575 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 576 | # Common libraries / utilities |
José Fonseca | 83178a0 | 2010-11-14 00:35:05 +0000 | [diff] [blame] | 577 | |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 578 | include_directories ( |
Jose Fonseca | 5e9a2b1 | 2016-05-05 15:20:03 +0100 | [diff] [blame] | 579 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/trace |
Jose Fonseca | efc5d91 | 2016-05-05 13:55:29 +0100 | [diff] [blame] | 580 | ${CMAKE_CURRENT_SOURCE_DIR}/lib/os |
Jose Fonseca | 71a85c9 | 2016-02-25 21:37:42 +0000 | [diff] [blame] | 581 | ${CMAKE_CURRENT_SOURCE_DIR}/compat |
José Fonseca | a8c164c | 2011-09-21 07:46:50 +0100 | [diff] [blame] | 582 | ) |
José Fonseca | 5d4e2a1 | 2011-07-01 11:58:16 +0100 | [diff] [blame] | 583 | |
Jose Fonseca | 79b8e8d | 2016-05-05 10:51:19 +0100 | [diff] [blame] | 584 | add_subdirectory (lib) |
José Fonseca | 4f242f4 | 2012-04-14 18:13:25 +0100 | [diff] [blame] | 585 | add_subdirectory (dispatch) |
José Fonseca | 3b18682 | 2012-11-27 15:25:21 +0000 | [diff] [blame] | 586 | add_subdirectory (helpers) |
José Fonseca | 452d325 | 2012-04-14 15:55:40 +0100 | [diff] [blame] | 587 | add_subdirectory (wrappers) |
José Fonseca | 9d27a54 | 2012-04-14 17:22:57 +0100 | [diff] [blame] | 588 | add_subdirectory (retrace) |
José Fonseca | 7e32902 | 2010-11-19 17:05:18 +0000 | [diff] [blame] | 589 | |
José Fonseca | 8e3c2c0 | 2012-01-23 00:30:35 +0000 | [diff] [blame] | 590 | |
Carl Worth | 6d543af | 2011-10-19 18:02:33 -0700 | [diff] [blame] | 591 | ############################################################################## |
| 592 | # CLI |
| 593 | |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 594 | if (ENABLE_CLI) |
José Fonseca | bd4937e | 2012-12-04 13:23:03 +0000 | [diff] [blame] | 595 | if (WIN32) |
| 596 | add_subdirectory (inject) |
| 597 | endif () |
José Fonseca | 17a4541 | 2012-11-28 09:44:01 +0000 | [diff] [blame] | 598 | add_subdirectory (cli) |
Jose Fonseca | c4ff127 | 2016-01-27 08:25:20 +0000 | [diff] [blame] | 599 | add_subdirectory (scripts) |
José Fonseca | ef0c697 | 2012-03-10 16:05:09 +0000 | [diff] [blame] | 600 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 601 | |
Carl Worth | 32420d2 | 2011-11-04 15:45:09 -0700 | [diff] [blame] | 602 | |
| 603 | ############################################################################## |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 604 | # GUI |
| 605 | |
Jose Fonseca | 3b7e9c0 | 2016-03-21 14:20:55 +0000 | [diff] [blame] | 606 | if (ENABLE_GUI AND Qt5Widgets_FOUND AND Qt5Network_FOUND) |
Jose Fonseca | cbb48c5 | 2017-06-01 14:37:12 +0100 | [diff] [blame] | 607 | add_subdirectory (gui) |
| 608 | endif () |
| 609 | |
| 610 | |
| 611 | ############################################################################## |
| 612 | # Additional tests |
| 613 | |
| 614 | if (ENABLE_TESTS) |
| 615 | if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt") |
| 616 | message (EMIT_ERROR |
| 617 | "tests/CMakeLists.txt is missing, please do\n" |
| 618 | " git clone https://github.com/apitrace/apitrace-tests tests") |
| 619 | else () |
| 620 | add_subdirectory (tests) |
| 621 | endif () |
José Fonseca | e68c87f | 2011-07-28 00:32:54 +0100 | [diff] [blame] | 622 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 623 | |
| 624 | |
| 625 | ############################################################################## |
| 626 | # Packaging |
| 627 | |
José Fonseca | 05ba419 | 2011-09-17 21:18:57 +0100 | [diff] [blame] | 628 | install ( |
| 629 | FILES |
José Fonseca | 2127819 | 2015-01-20 14:27:04 +0000 | [diff] [blame] | 630 | README.markdown |
José Fonseca | c345e0d | 2015-01-20 14:22:54 +0000 | [diff] [blame] | 631 | docs/BUGS.markdown |
| 632 | docs/NEWS.markdown |
José Fonseca | 2127819 | 2015-01-20 14:27:04 +0000 | [diff] [blame] | 633 | docs/USAGE.markdown |
José Fonseca | 2744092 | 2011-11-01 08:27:12 +0000 | [diff] [blame] | 634 | DESTINATION ${DOC_INSTALL_DIR} |
Carl Worth | e923607 | 2011-10-18 16:06:05 -0700 | [diff] [blame] | 635 | ) |
José Fonseca | 8fae49d | 2012-12-11 07:22:16 +0000 | [diff] [blame] | 636 | install ( |
| 637 | FILES LICENSE |
| 638 | DESTINATION ${DOC_INSTALL_DIR} |
| 639 | RENAME LICENSE.txt |
| 640 | ) |
José Fonseca | 0dc8485 | 2011-05-14 10:46:24 +0100 | [diff] [blame] | 641 | |
Jose Fonseca | 8bea5be | 2020-05-09 15:33:14 +0100 | [diff] [blame] | 642 | set (CPACK_PACKAGE_VERSION "latest") |
| 643 | # https://www.appveyor.com/docs/environment-variables/ |
| 644 | if (($ENV{APPVEYOR}) AND ($ENV{APPVEYOR_REPO_TAG})) |
| 645 | set (CPACK_PACKAGE_VERSION "$ENV{APPVEYOR_REPO_TAG_NAME}") |
| 646 | endif () |
| 647 | # https://docs.travis-ci.com/user/environment-variables/#default-environment-variables |
| 648 | if (($ENV{TRAVIS}) AND NOT "$ENV{TRAVIS_TAG}" STREQUAL "") |
| 649 | set (CPACK_PACKAGE_VERSION "$ENV{TRAVIS_TAG}") |
| 650 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 651 | |
José Fonseca | 63c02f3 | 2012-02-29 10:55:55 +0000 | [diff] [blame] | 652 | # cpack mistakenly detects Mingw-w64 as win32 |
| 653 | if (MINGW) |
| 654 | if (CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 655 | set (CPACK_SYSTEM_NAME win64) |
| 656 | endif () |
| 657 | endif () |
| 658 | |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 659 | # See http://www.vtk.org/Wiki/CMake:CPackPackageGenerators |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 660 | if (WIN32) |
José Fonseca | 99ff4a7 | 2015-03-18 15:13:30 +0000 | [diff] [blame] | 661 | if (CMAKE_VERSION VERSION_LESS 3.1) |
| 662 | set (CPACK_GENERATOR "ZIP") |
| 663 | else () |
| 664 | set (CPACK_GENERATOR "7Z") |
| 665 | endif () |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 666 | elseif (APPLE) |
| 667 | set (CPACK_GENERATOR "DragNDrop") |
| 668 | else () |
José Fonseca | 7e0b44f | 2011-06-06 19:36:37 +0100 | [diff] [blame] | 669 | set (CPACK_GENERATOR "TBZ2") |
José Fonseca | fa54c8a | 2011-06-02 14:48:38 +0100 | [diff] [blame] | 670 | endif () |
José Fonseca | 17311e8 | 2011-05-08 11:12:08 +0100 | [diff] [blame] | 671 | |
| 672 | include(CPack) |