X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=CMakeLists.txt;h=add9c02f9923464ba02ed981022b49c899ad8b0f;hp=e7d0bf5f1f3a1f9ca19eaa7e4ecc61ae66913aed;hb=883041605ce8536ece950b1de191cfe71068dfba;hpb=b2d9be03f533ec9800b9b35447ab4502807eada5 diff --git a/CMakeLists.txt b/CMakeLists.txt index e7d0bf5f..add9c02f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ ## ## Copyright (C) 2012 Joel Holdsworth ## Copyright (C) 2012-2013 Alexandru Gagniuc +## Copyright (C) 2020 Soeren Apel ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -20,9 +21,9 @@ cmake_minimum_required(VERSION 2.8.12) -include(GNUInstallDirs) +project(pulseview C CXX) -project(pulseview) +include(GNUInstallDirs) # Let AUTOMOC and AUTOUIC process GENERATED files. if(POLICY CMP0071) @@ -40,10 +41,11 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake") #= User Options #------------------------------------------------------------------------------- -option(DISABLE_WERROR "Build without -Werror" FALSE) +option(DISABLE_WERROR "Build without -Werror" TRUE) option(ENABLE_SIGNALS "Build with UNIX signals" TRUE) option(ENABLE_STACKTRACE "Enable stack trace when crashing" FALSE) option(ENABLE_DECODE "Build with libsigrokdecode" TRUE) +option(ENABLE_FLOW "Build with libsigrokflow" FALSE) option(ENABLE_TESTS "Enable unit tests" FALSE) option(STATIC_PKGDEPS_LIBS "Statically link to (pkg-config) libraries" FALSE) @@ -62,6 +64,12 @@ if(NOT CMAKE_BUILD_TYPE) FORCE) endif() +#=============================================================================== +#= Documentation +#------------------------------------------------------------------------------- + +add_subdirectory(manual) + #=============================================================================== #= Dependencies #------------------------------------------------------------------------------- @@ -69,10 +77,16 @@ endif() list(APPEND PKGDEPS glib-2.0>=2.28.0) list(APPEND PKGDEPS glibmm-2.4>=2.28.0) -list(APPEND PKGDEPS libsigrokcxx>=0.6.0) +if(ENABLE_FLOW) + list(APPEND PKGDEPS gstreamermm-1.0>=1.8.0) + list(APPEND PKGDEPS libsigrokflow>=0.1.0) +endif() + +set(LIBSR_CXX_BINDING "libsigrokcxx>=0.5.2") +list(APPEND PKGDEPS "${LIBSR_CXX_BINDING}") if(ENABLE_DECODE) - list(APPEND PKGDEPS libsigrokdecode>=0.6.0) + list(APPEND PKGDEPS libsigrokdecode>=0.5.2) endif() if(ANDROID) @@ -80,18 +94,24 @@ if(ANDROID) endif() find_package(PkgConfig) +pkg_check_modules(LIBSRCXX ${LIBSR_CXX_BINDING}) +if(NOT LIBSRCXX_FOUND OR NOT LIBSRCXX_VERSION) + message(FATAL_ERROR "libsigrok C++ bindings missing, check libsigrok's 'configure' output (missing dependencies?)") +endif() pkg_check_modules(PKGDEPS REQUIRED ${PKGDEPS}) set(CMAKE_AUTOMOC TRUE) -find_package(Qt5 COMPONENTS Core Gui Widgets Svg REQUIRED) +find_package(Qt5 5.3 COMPONENTS Core Gui LinguistTools Widgets Svg REQUIRED) + +message(STATUS "Qt version: ${Qt5_VERSION}") if(WIN32) # MXE workaround: Use pkg-config to find Qt5 libs. # https://github.com/mxe/mxe/issues/1642 # Not required (and doesn't work) on MSYS2. if(NOT DEFINED ENV{MSYSTEM}) - pkg_check_modules(QT5ALL REQUIRED Qt5Widgets Qt5Gui Qt5Svg) + pkg_check_modules(QT5ALL REQUIRED Qt5Widgets>=5.3 Qt5Gui>=5.3 Qt5Svg>=5.3) endif() endif() @@ -103,6 +123,14 @@ if(ENABLE_TESTS) endif() if(ENABLE_STACKTRACE) + include(FindBacktrace) + if (Backtrace_FOUND) + set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp") + list(APPEND BOOSTCOMPS stacktrace_backtrace) + else() + set(_Boost_STACKTRACE_BASIC_HEADERS "boost/stacktrace.hpp") + list(APPEND BOOSTCOMPS stacktrace_basic) + endif() find_package(Boost 1.65.1 COMPONENTS ${BOOSTCOMPS} REQUIRED) else() find_package(Boost 1.55 COMPONENTS ${BOOSTCOMPS} REQUIRED) @@ -186,6 +214,12 @@ if(NOT PV_TAG_VERSION_STRING) string(SUBSTRING "${PV_HASH}" 0 7 PV_SHORTHASH) set(PV_VERSION_STRING "${PV_VERSION_STRING}-git-${PV_SHORTHASH}") endif() + + # Non-tagged releases use the unstable manual + set(PV_MANUAL_VERSION "unstable") +else() + # Tagged releases use a fixed manual version + set(PV_MANUAL_VERSION ${PV_VERSION_STRING}) endif() if(PV_VERSION_STRING MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[-0-9a-z]*)?$") @@ -195,7 +229,7 @@ if(PV_VERSION_STRING MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[-0-9a-z]*)?$") set(PV_VERSION_SUFFIX ${CMAKE_MATCH_4}) endif() -message("-- ${PV_TITLE} version: ${PV_VERSION_STRING}") +message(STATUS "${PV_TITLE} version: ${PV_VERSION_STRING}") configure_file ( ${PROJECT_SOURCE_DIR}/config.h.in @@ -213,6 +247,7 @@ set(pulseview_SOURCES pv/globalsettings.cpp pv/logging.cpp pv/mainwindow.cpp + pv/metadata_obj.cpp pv/session.cpp pv/storesession.cpp pv/util.cpp @@ -223,6 +258,7 @@ set(pulseview_SOURCES pv/data/analogsegment.cpp pv/data/logic.cpp pv/data/logicsegment.cpp + pv/data/mathsignal.cpp pv/data/signalbase.cpp pv/data/signaldata.cpp pv/data/segment.cpp @@ -243,15 +279,16 @@ set(pulseview_SOURCES pv/prop/int.cpp pv/prop/property.cpp pv/prop/string.cpp + pv/subwindows/subwindowbase.cpp pv/toolbars/mainbar.cpp pv/views/trace/analogsignal.cpp pv/views/trace/cursor.cpp pv/views/trace/cursorpair.cpp pv/views/trace/flag.cpp pv/views/trace/header.cpp + pv/views/trace/mathsignal.cpp pv/views/trace/marginwidget.cpp pv/views/trace/logicsignal.cpp - pv/views/trace/rowitem.cpp pv/views/trace/ruler.cpp pv/views/trace/signal.cpp pv/views/trace/timeitem.cpp @@ -274,6 +311,7 @@ set(pulseview_SOURCES pv/widgets/colorpopup.cpp pv/widgets/devicetoolbutton.cpp pv/widgets/exportmenu.cpp + pv/widgets/flowlayout.cpp pv/widgets/importmenu.cpp pv/widgets/popup.cpp pv/widgets/popuptoolbutton.cpp @@ -284,9 +322,11 @@ set(pulseview_SOURCES # This list includes only QObject derived class headers. set(pulseview_HEADERS + pv/exprtk.hpp pv/logging.hpp pv/globalsettings.hpp pv/mainwindow.hpp + pv/metadata_obj.hpp pv/session.hpp pv/storesession.hpp pv/binding/device.hpp @@ -294,6 +334,7 @@ set(pulseview_HEADERS pv/data/analogsegment.hpp pv/data/logic.hpp pv/data/logicsegment.hpp + pv/data/mathsignal.hpp pv/data/signalbase.hpp pv/dialogs/connect.hpp pv/dialogs/inputoutputoptions.hpp @@ -307,14 +348,15 @@ set(pulseview_HEADERS pv/prop/int.hpp pv/prop/property.hpp pv/prop/string.hpp + pv/subwindows/subwindowbase.hpp pv/toolbars/mainbar.hpp pv/views/trace/analogsignal.hpp pv/views/trace/cursor.hpp pv/views/trace/flag.hpp pv/views/trace/header.hpp pv/views/trace/logicsignal.hpp + pv/views/trace/mathsignal.hpp pv/views/trace/marginwidget.hpp - pv/views/trace/rowitem.hpp pv/views/trace/ruler.hpp pv/views/trace/signal.hpp pv/views/trace/timeitem.hpp @@ -333,6 +375,7 @@ set(pulseview_HEADERS pv/widgets/colorpopup.hpp pv/widgets/devicetoolbutton.hpp pv/widgets/exportmenu.hpp + pv/widgets/flowlayout.hpp pv/widgets/importmenu.hpp pv/widgets/popup.hpp pv/widgets/popuptoolbutton.hpp @@ -358,6 +401,13 @@ if(ENABLE_DECODE) pv/data/decode/decoder.cpp pv/data/decode/row.cpp pv/data/decode/rowdata.cpp + pv/subwindows/decoder_selector/item.cpp + pv/subwindows/decoder_selector/model.cpp + pv/subwindows/decoder_selector/subwindow.cpp + pv/views/decoder_binary/view.cpp + pv/views/decoder_binary/QHexView.cpp + pv/views/tabular_decoder/model.cpp + pv/views/tabular_decoder/view.cpp pv/views/trace/decodetrace.cpp pv/widgets/decodergroupbox.cpp pv/widgets/decodermenu.cpp @@ -365,6 +415,10 @@ if(ENABLE_DECODE) list(APPEND pulseview_HEADERS pv/data/decodesignal.hpp + pv/subwindows/decoder_selector/subwindow.hpp + pv/views/decoder_binary/view.hpp + pv/views/decoder_binary/QHexView.hpp + pv/views/tabular_decoder/view.hpp pv/views/trace/decodetrace.hpp pv/widgets/decodergroupbox.hpp pv/widgets/decodermenu.hpp @@ -387,6 +441,21 @@ endif() qt5_add_resources(pulseview_RESOURCES_RCC ${pulseview_RESOURCES}) +#=============================================================================== +#= Translations +#------------------------------------------------------------------------------- + +file(GLOB TS_FILES ${CMAKE_SOURCE_DIR}/l10n/*.ts) +set_property(SOURCE ${TS_FILES} PROPERTY OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/l10n) +if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + configure_file("translations.qrc" "translations.qrc" COPYONLY) +endif () + +qt5_add_translation(QM_FILES ${TS_FILES}) +qt5_create_translation(QM_FILES ${pulseview_SOURCES} ${TS_FILES}) + +qt5_add_resources(pulseview_RESOURCES_RCC ${CMAKE_BINARY_DIR}/translations.qrc) + #=============================================================================== #= Global Definitions #------------------------------------------------------------------------------- @@ -396,6 +465,13 @@ add_definitions(-D__STDC_LIMIT_MACROS) add_definitions(-Wall -Wextra) add_definitions(-std=c++11) add_definitions(-DBOOST_MATH_DISABLE_FLOAT128=1) +if(WIN32) + add_definitions(-Wa,-mbig-obj -O3) +endif() + +if(ENABLE_FLOW) + add_definitions(-DENABLE_FLOW) +endif() if(ENABLE_DECODE) add_definitions(-DENABLE_DECODE) @@ -410,7 +486,10 @@ if(ENABLE_SIGNALS) endif() if(ENABLE_STACKTRACE) - add_definitions(-DENABLE_STACKTRACE) + add_definitions(-DENABLE_STACKTRACE -no-pie -fno-pie) + if (Backtrace_FOUND) + add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE) + endif() endif() #=============================================================================== @@ -465,18 +544,19 @@ if(WIN32) endif() if(ENABLE_STACKTRACE) - # Needed to resolve dladdr. - list(APPEND PULSEVIEW_LINK_LIBS "-ldl") + list(APPEND PULSEVIEW_LINK_LIBS ${CMAKE_DL_LIBS} ${Backtrace_LIBRARIES}) + link_libraries("-no-pie -fno-pie") endif() if(ANDROID) list(APPEND PULSEVIEW_LINK_LIBS "-llog") endif() +set(INPUT_FILES_LIST ${pulseview_SOURCES} ${pulseview_RESOURCES_RCC} ${QM_FILES}) if(ANDROID) - add_library(${PROJECT_NAME} SHARED ${pulseview_SOURCES} ${pulseview_RESOURCES_RCC}) + add_library(${PROJECT_NAME} SHARED ${INPUT_FILES_LIST}) else() - add_executable(${PROJECT_NAME} ${pulseview_SOURCES} ${pulseview_RESOURCES_RCC}) + add_executable(${PROJECT_NAME} ${INPUT_FILES_LIST}) endif() target_link_libraries(${PROJECT_NAME} ${PULSEVIEW_LINK_LIBS}) @@ -507,7 +587,7 @@ install(FILES icons/pulseview.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons install(FILES icons/pulseview.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps) # Generate Windows installer script. -configure_file(contrib/pulseview_cross.nsi.in contrib/pulseview_cross.nsi @ONLY) +configure_file(contrib/pulseview_cross.nsi.in ${CMAKE_CURRENT_BINARY_DIR}/contrib/pulseview_cross.nsi @ONLY) #=============================================================================== #= Packaging (handled by CPack)