blob: d5823447978b5f2402a5742990a8c0d8ef330b3e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
# CMake will throw a cryptic message if an user unwittingly invokes it from
# this directory.
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
message (FATAL_ERROR
"qapitrace must be built from the top source directory.\n"
"Read docs/INSTALL.markdown for detailed build instructions."
)
endif ()
add_definitions (-DQT_FORCE_ASSERTS)
if (APPLE)
# Recent builds of Qt no longer support i386 architecture
set (CMAKE_OSX_ARCHITECTURES "x86_64")
endif()
add_library (qubjson STATIC
qubjson.cpp
)
add_gtest (qubjson_test qubjson_test.cpp)
target_link_libraries (qubjson_test qubjson)
set(qapitrace_SRCS
androiddevicedialog.cpp
androidfiledialog.cpp
androidretracer.cpp
androidutils.cpp
apisurface.cpp
apitrace.cpp
apicalldelegate.cpp
apitracecall.cpp
apitracefilter.cpp
apitracemodel.cpp
argumentseditor.cpp
glsledit.cpp
imageviewer.cpp
jumpwidget.cpp
mainwindow.cpp
main.cpp
pixelwidget.cpp
profiledialog.cpp
profiletablemodel.cpp
retracer.cpp
saverthread.cpp
searchwidget.cpp
settingsdialog.cpp
shaderssourcewidget.cpp
tracedialog.cpp
traceloader.cpp
traceprocess.cpp
trimprocess.cpp
vertexdatainterpreter.cpp
leaktracethread.cpp
graphing/frameaxiswidget.cpp
graphing/graphwidget.cpp
graphing/graphaxiswidget.cpp
graphing/graphview.cpp
graphing/heatmapview.cpp
graphing/heatmapverticalaxiswidget.cpp
graphing/histogramview.cpp
graphing/timeaxiswidget.cpp
)
qt5_add_resources(qapitrace_SRCS qapitrace.qrc)
set(qapitrace_UIS
ui/androidfiledialog.ui
ui/androiddevicedialog.ui
ui/argumentseditor.ui
ui/imageviewer.ui
ui/jumpwidget.ui
ui/mainwindow.ui
ui/profiledialog.ui
ui/profilereplaydialog.ui
ui/retracerdialog.ui
ui/settings.ui
ui/tracedialog.ui
ui/searchwidget.ui
ui/shaderssourcewidget.ui
)
set (CMAKE_AUTOMOC ON)
# Silence `Note: No relevant classes found. No output generated.`
set (CMAKE_AUTOMOC_MOC_OPTIONS "-nn")
QT5_WRAP_UI(qapitrace_UIS_H ${qapitrace_UIS})
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#add_app_icon(qapitrace_SRCS ../icons/hi*-qapitrace.png)
include_directories(
${CMAKE_SOURCE_DIR} # for image/*
)
add_executable (qapitrace ${qapitrace_SRCS} ${qapitrace_UIS_H})
# Avoid qt5_use_modules. See also:
# - https://bugreports.qt.io/browse/QTBUG-39457
# - http://doc.qt.io/qt-5/cmake-manual.html
# - http://www.kdab.com/using-cmake-with-qt-5/
if (Qt5Core_VERSION_STRING VERSION_LESS 5.2.0)
qt5_use_modules (qubjson Widgets)
qt5_use_modules (qubjson_test Widgets)
qt5_use_modules (qapitrace Widgets Network)
else ()
target_link_libraries (qubjson Qt5::Widgets)
target_link_libraries (qubjson_test Qt5::Widgets)
target_link_libraries (qapitrace Qt5::Widgets Qt5::Network)
endif ()
target_link_libraries (qapitrace
qubjson
image
common
${ZLIB_LIBRARIES}
${SNAPPY_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
)
if (WIN32 AND NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
# Use Windows subsystem (i.e., no console).
set_target_properties (qapitrace PROPERTIES CMAKE_WIN32_EXECUTABLE TRUE)
if (MSVC)
# When the Windows subsystem is chosen by default MSVC expects WinMain()
# entry point, but we rather use plain old main() everywhere.
set_target_properties (qapitrace PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup")
endif ()
endif ()
########### install files ###############
install (TARGETS qapitrace RUNTIME DESTINATION bin)
install_pdb (qapitrace RUNTIME DESTINATION bin)
#install (FILES qapitrace.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
# Deployt Qt dependencies
#
# See:
# - http://doc.qt.io/qt-5/windows-deployment.html
#
# XXX: windeployqt can fail if there's weird stuff in the Path env var, so we
# invoke it with a sanitized Path, via `cmake -E env` that was introduced in
# CMake 3.1.
if (WIN32 AND NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_VERSION VERSION_LESS 3.1)
# http://stackoverflow.com/a/24676432
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
get_filename_component (QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
find_program (QT_WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}")
if (QT_WINDEPLOYQT_EXECUTABLE)
file (TO_NATIVE_PATH "${QT_BIN_DIR}" QT_BIN_DIR_NATIVE)
# It's safer to use `\` separateors in the Path, but we need to escape them
string (REPLACE "\\" "\\\\" QT_BIN_DIR_NATIVE "${QT_BIN_DIR_NATIVE}")
# windeployqt needs VCINSTALLDIR to copy MSVC Runtime files, but it's
# usually not define with MSBuild builds.
if ($ENV{VCINSTALLDIR})
set (VCINSTALLDIR "$ENV{VCINSTALLDIR}")
elseif (MSVC12)
set (VCINSTALLDIR "\$ENV{VS120COMNTOOLS}/../../VC")
elseif (MSVC14)
set (VCINSTALLDIR "\$ENV{VS140COMNTOOLS}/../../VC")
else ()
message (FATAL_ERROR "Unsupported MSVC version ${MSVC_VERSION}")
endif ()
install (CODE "
message (STATUS \"Running Qt Deploy Tool...\")
if (CMAKE_INSTALL_CONFIG_NAME STREQUAL \"Debug\")
list (APPEND QT_WINDEPLOYQT_FLAGS --debug)
elseif (CMAKE_INSTALL_CONFIG_NAME STREQUAL \"RelWithDebInfo\")
list (APPEND QT_WINDEPLOYQT_FLAGS --release-with-debug-info)
else ()
list (APPEND QT_WINDEPLOYQT_FLAGS --release)
endif ()
execute_process (COMMAND
\"${CMAKE_COMMAND}\" -E env
\"Path=${QT_BIN_DIR_NATIVE};\$ENV{SystemRoot}\\\\System32;\$ENV{SystemRoot}\"
\"VCINSTALLDIR=${VCINSTALLDIR}\"
\"${QT_WINDEPLOYQT_EXECUTABLE}\"
\${QT_WINDEPLOYQT_FLAGS}
\"\${CMAKE_INSTALL_PREFIX}/bin/qapitrace.exe\"
)
")
endif ()
endif ()
|