blob: 5baf35526971659a0b04b6087893be47b8222abf [file] [log] [blame]
# 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)
add_library (qubjson STATIC
qubjson.cpp
)
add_gtest (qubjson_test qubjson_test.cpp)
target_link_libraries (qubjson_test qubjson)
set(qapitrace_SRCS
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/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
)
# https://cmake.org/cmake/help/v3.11/policy/CMP0071.html
if (POLICY CMP0071)
cmake_policy (SET CMP0071 NEW)
endif()
set (CMAKE_AUTOMOC ON)
# Workaround https://github.com/apitrace/apitrace/issues/528
if (${CMAKE_VERSION} VERSION_LESS 3.9.0 OR
${CMAKE_VERSION} VERSION_EQUAL 3.9.5 OR
${CMAKE_VERSION} VERSION_GREATER 3.9.5)
# Silence `Note: No relevant classes found. No output generated.`
set (CMAKE_AUTOMOC_MOC_OPTIONS "-nn")
endif ()
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}/lib/image
${CMAKE_SOURCE_DIR}/lib/ubjson
)
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 (DEFINED ENV{VCINSTALLDIR})
set (VCINSTALLDIR "$ENV{VCINSTALLDIR}" CACHE PATH "VC installation directory")
elseif (MSVC14)
# https://developercommunity.visualstudio.com/solutions/21956/view.html
get_filename_component (VSINSTALLDIR [HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\VisualStudio\\SxS\\VS7;15.0] REALPATH CACHE)
if (IS_DIRECTORY "${VSINSTALLDIR}")
set (VCINSTALLDIR "${VSINSTALLDIR}/VC" CACHE PATH "VC installation directory")
endif ()
else ()
message (FATAL_ERROR "Unsupported MSVC version ${MSVC_VERSION}")
endif ()
message (STATUS "VCINSTALLDIR: ${VCINSTALLDIR}")
install (CODE "
message (STATUS \"Running Qt Deploy Tool...\")
if (CMAKE_INSTALL_CONFIG_NAME STREQUAL \"Debug\")
list (APPEND QT_WINDEPLOYQT_FLAGS --debug)
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 ()