X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=CMakeLists.txt;h=f4325bf7dcfdb16928a53a1fc62559e3e3342fda;hp=77b0137db22b7b6cab80d8aee7c97fecb8c542bf;hb=00f6bae935837b38b0d03a5928ba8175d460413f;hpb=f513bec599b8d626f914aa804a01325914bdb5e9 diff --git a/CMakeLists.txt b/CMakeLists.txt index 77b0137d..f4325bf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,6 @@ cmake_minimum_required(VERSION 2.8.6) -include(FindPkgConfig) include(GNUInstallDirs) project(pulseview) @@ -82,6 +81,11 @@ if(FORCE_QT4) set(Qt5Core_FOUND FALSE) else() find_package(Qt5Core QUIET) +if(WIN32) + # MXE workaround: Use pkg-config to find Qt5 libs. + # https://github.com/mxe/mxe/issues/1642 + pkg_check_modules(QT5ALL REQUIRED Qt5Widgets Qt5Gui Qt5Svg) +endif() endif() if(Qt5Core_FOUND) @@ -98,16 +102,65 @@ else() find_package(Qt4 REQUIRED QtCore QtGui QtSvg) endif() +set(BOOSTCOMPS filesystem serialization system thread) if(ENABLE_TESTS) - find_package(Boost 1.48 COMPONENTS filesystem system thread unit_test_framework REQUIRED) -else() - find_package(Boost 1.48 COMPONENTS filesystem system thread REQUIRED) + list(APPEND BOOSTCOMPS unit_test_framework) endif() +find_package(Boost 1.55 COMPONENTS ${BOOSTCOMPS} REQUIRED) # Find the platform's thread library (needed for C++11 threads). # This will set ${CMAKE_THREAD_LIBS_INIT} to the correct, OS-specific value. find_package(Threads REQUIRED) + +# Check for explicit link against libatomic +# +# Depending on the toolchain, linking a program using atomic functions may need +# "-latomic" explicitly passed to the linker +# +# This check first tests if atomics are available in the C-library, if not and +# libatomic exists, then it runs the same test with -latomic added to the +# linker flags. + +# Helper for checking for atomics +function(check_working_cxx_atomics varname additional_lib) + include(CheckCXXSourceCompiles) + include(CMakePushCheckState) + cmake_push_check_state() + set(CMAKE_REQUIRED_FLAGS "-std=c++11") + set(CMAKE_REQUIRED_LIBRARIES "${additional_lib}") + set(CMAKE_REQUIRED_QUIET 1) + CHECK_CXX_SOURCE_COMPILES(" +#include +std::atomic x; +int main() { + return std::atomic_fetch_add_explicit(&x, 1, std::memory_order_seq_cst); +} +" ${varname}) + cmake_pop_check_state() +endfunction(check_working_cxx_atomics) + +# First check if atomics work without the library. +# If not, check if the library exists, and atomics work with it. +check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB "") +if(HAVE_CXX_ATOMICS_WITHOUT_LIB) + message(STATUS "Atomics provided by the C-library - yes") +else() + message(STATUS "Atomics provided by the C-library - no") + find_library(LIBATOMIC_LIBRARY NAMES atomic PATH_SUFFIXES lib) + if(LIBATOMIC_LIBRARY) + check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB "${LIBATOMIC_LIBRARY}") + if (HAVE_CXX_ATOMICS_WITH_LIB) + message(STATUS "Atomics provided by libatomic - yes") + else() + message(STATUS "Atomics provided by libatomic - no") + message(FATAL_ERROR "Compiler must support std::atomic!") + endif() + else() + message(FATAL_ERROR "Compiler appears to require libatomic, but cannot find it.") + endif() +endif() + #=============================================================================== #= System Introspection #------------------------------------------------------------------------------- @@ -121,7 +174,7 @@ memaccess_check_unaligned_le(HAVE_UNALIGNED_LITTLE_ENDIAN_ACCESS) set(PV_TITLE PulseView) set(PV_DESCRIPTION "A GUI for sigrok") -set(PV_VERSION_STRING "0.3.0") +set(PV_VERSION_STRING "0.4.0") include(GetGitRevisionDescription) @@ -157,6 +210,7 @@ set(pulseview_SOURCES main.cpp pv/application.cpp pv/devicemanager.cpp + pv/globalsettings.cpp pv/mainwindow.cpp pv/session.cpp pv/storesession.cpp @@ -168,6 +222,7 @@ set(pulseview_SOURCES pv/data/analogsegment.cpp pv/data/logic.cpp pv/data/logicsegment.cpp + pv/data/signalbase.cpp pv/data/signaldata.cpp pv/data/segment.cpp pv/devices/device.cpp @@ -175,9 +230,9 @@ set(pulseview_SOURCES pv/devices/hardwaredevice.cpp pv/devices/inputfile.cpp pv/devices/sessionfile.cpp - pv/dialogs/about.cpp pv/dialogs/connect.cpp pv/dialogs/inputoutputoptions.cpp + pv/dialogs/settings.cpp pv/dialogs/storeprogress.cpp pv/popups/deviceoptions.cpp pv/popups/channels.cpp @@ -206,17 +261,19 @@ set(pulseview_SOURCES pv/view/tracepalette.cpp pv/view/tracetreeitem.cpp pv/view/tracetreeitemowner.cpp + pv/view/triggermarker.cpp pv/view/view.cpp pv/view/viewitem.cpp pv/view/viewitemowner.cpp pv/view/viewitempaintparams.cpp pv/view/viewport.cpp pv/view/viewwidget.cpp + pv/views/viewbase.cpp + pv/views/trace/standardbar.cpp pv/widgets/colourbutton.cpp pv/widgets/colourpopup.cpp pv/widgets/devicetoolbutton.cpp pv/widgets/exportmenu.cpp - pv/widgets/hidingmenubar.cpp pv/widgets/importmenu.cpp pv/widgets/popup.cpp pv/widgets/popuptoolbutton.cpp @@ -227,13 +284,19 @@ set(pulseview_SOURCES # This list includes only QObject derived class headers. set(pulseview_HEADERS + pv/globalsettings.hpp pv/mainwindow.hpp pv/session.hpp pv/storesession.hpp pv/binding/device.hpp - pv/dialogs/about.hpp + pv/data/analog.hpp + pv/data/analogsegment.hpp + pv/data/logic.hpp + pv/data/logicsegment.hpp + pv/data/signalbase.hpp pv/dialogs/connect.hpp pv/dialogs/inputoutputoptions.hpp + pv/dialogs/settings.hpp pv/dialogs/storeprogress.hpp pv/popups/channels.hpp pv/popups/deviceoptions.hpp @@ -244,6 +307,7 @@ set(pulseview_HEADERS pv/prop/property.hpp pv/prop/string.hpp pv/toolbars/mainbar.hpp + pv/view/analogsignal.hpp pv/view/cursor.hpp pv/view/flag.hpp pv/view/header.hpp @@ -258,15 +322,17 @@ set(pulseview_HEADERS pv/view/trace.hpp pv/view/tracegroup.hpp pv/view/tracetreeitem.hpp + pv/view/triggermarker.hpp pv/view/view.hpp pv/view/viewitem.hpp pv/view/viewport.hpp pv/view/viewwidget.hpp + pv/views/viewbase.hpp + pv/views/trace/standardbar.hpp pv/widgets/colourbutton.hpp pv/widgets/colourpopup.hpp pv/widgets/devicetoolbutton.hpp pv/widgets/exportmenu.hpp - pv/widgets/hidingmenubar.hpp pv/widgets/importmenu.hpp pv/widgets/popup.hpp pv/widgets/popuptoolbutton.hpp @@ -275,10 +341,6 @@ set(pulseview_HEADERS pv/widgets/wellarray.hpp ) -set(pulseview_FORMS - pv/dialogs/about.ui -) - set(pulseview_RESOURCES pulseview.qrc ) @@ -325,14 +387,12 @@ endif() if(Qt5Core_FOUND) qt5_wrap_cpp(pulseview_HEADERS_MOC ${pulseview_HEADERS}) - qt5_wrap_ui(pulseview_FORMS_HEADERS ${pulseview_FORMS}) qt5_add_resources(pulseview_RESOURCES_RCC ${pulseview_RESOURCES}) else() - # Workaroud for QTBUG-22829: -DBOOST_NEXT_PRIOR_HPP_INCLUDED. + # Workaround for QTBUG-22829: -DBOOST_NEXT_PRIOR_HPP_INCLUDED. # https://bugreports.qt.io/browse/QTBUG-22829 qt4_wrap_cpp(pulseview_HEADERS_MOC ${pulseview_HEADERS} OPTIONS -DBOOST_NEXT_PRIOR_HPP_INCLUDED) - qt4_wrap_ui(pulseview_FORMS_HEADERS ${pulseview_FORMS}) qt4_add_resources(pulseview_RESOURCES_RCC ${pulseview_RESOURCES}) include(${QT_USE_FILE}) endif() @@ -345,6 +405,7 @@ add_definitions(${QT_DEFINITIONS} -DQT_NO_KEYWORDS) add_definitions(-D__STDC_LIMIT_MACROS) add_definitions(-Wall -Wextra) add_definitions(-std=c++11) +add_definitions(-DBOOST_MATH_DISABLE_FLOAT128=1) if(ENABLE_DECODE) add_definitions(-DENABLE_DECODE) @@ -385,15 +446,12 @@ set(PULSEVIEW_LINK_LIBS ${Boost_LIBRARIES} ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + ${LIBATOMIC_LIBRARY} ) if(STATIC_PKGDEPS_LIBS) link_directories(${PKGDEPS_STATIC_LIBRARY_DIRS}) - list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_STATIC_LIBRARIES}) -if(WIN32) - # Workaround for a MinGW linking issue. - list(APPEND PULSEVIEW_LINK_LIBS "-llzma -llcms2") -endif() + list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_STATIC_LDFLAGS}) else() link_directories(${PKGDEPS_LIBRARY_DIRS}) list(APPEND PULSEVIEW_LINK_LIBS ${PKGDEPS_LIBRARIES}) @@ -402,10 +460,12 @@ endif() if(WIN32) # On Windows we need to statically link the libqsvg imageformat # plugin (and the QtSvg component) for SVG graphics/icons to work. + # We also need QWindowsIntegrationPlugin, Qt5PlatformSupport, and all + # Qt libs and their dependencies. add_definitions(-DQT_STATICPLUGIN) - link_directories("${QT_PLUGINS_DIR}/imageformats") - list(APPEND PULSEVIEW_LINK_LIBS "-lqsvg") - list(APPEND PULSEVIEW_LINK_LIBS ${QT_QTSVG_LIBRARY}) + list(APPEND PULSEVIEW_LINK_LIBS Qt5::QSvgPlugin) + list(APPEND PULSEVIEW_LINK_LIBS Qt5::QWindowsIntegrationPlugin) + list(APPEND PULSEVIEW_LINK_LIBS -lQt5PlatformSupport ${QT5ALL_LDFLAGS}) endif() if(ANDROID) @@ -416,14 +476,12 @@ if(ANDROID) add_library(${PROJECT_NAME} SHARED ${pulseview_SOURCES} ${pulseview_HEADERS_MOC} - ${pulseview_FORMS_HEADERS} ${pulseview_RESOURCES_RCC} ) else() add_executable(${PROJECT_NAME} ${pulseview_SOURCES} ${pulseview_HEADERS_MOC} - ${pulseview_FORMS_HEADERS} ${pulseview_RESOURCES_RCC} ) endif()