X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=CMakeLists.txt;h=d84f0427d6eabb7d6f183fb85272a623e103405f;hp=f99774659e67d3e574daf41a855ea8b9b172606a;hb=d68d75c2a5bf479e5bb1c6dab3f052de3fb2e873;hpb=67ef1e478845fc44a8fccba025103c7a4314e369 diff --git a/CMakeLists.txt b/CMakeLists.txt index f9977465..d84f0427 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,16 +97,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 #------------------------------------------------------------------------------- @@ -120,7 +169,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) @@ -167,6 +216,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 @@ -216,7 +266,6 @@ set(pulseview_SOURCES 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 @@ -231,6 +280,7 @@ set(pulseview_HEADERS pv/session.hpp pv/storesession.hpp pv/binding/device.hpp + pv/data/signalbase.hpp pv/dialogs/about.hpp pv/dialogs/connect.hpp pv/dialogs/inputoutputoptions.hpp @@ -244,6 +294,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 @@ -267,7 +318,6 @@ set(pulseview_HEADERS 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 @@ -329,7 +379,7 @@ if(Qt5Core_FOUND) 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) @@ -386,6 +436,7 @@ set(PULSEVIEW_LINK_LIBS ${Boost_LIBRARIES} ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + ${LIBATOMIC_LIBRARY} ) if(STATIC_PKGDEPS_LIBS)