X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=CMakeLists.txt;h=49c35cae15f6ab318f6d161b61c22d98e31be107;hp=3bf7366dde346f209ddb628d97a057e7f7fd9841;hb=cddf172d4b96a5bf6e89bd27d50545f4be50a43d;hpb=51ae69ae74d4868e52785875daa5fa1360e638a6 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bf7366d..49c35cae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,6 @@ cmake_minimum_required(VERSION 2.8.6) -include(FindPkgConfig) include(GNUInstallDirs) project(pulseview) @@ -99,15 +98,64 @@ else() endif() if(ENABLE_TESTS) - find_package(Boost 1.48 COMPONENTS filesystem system thread unit_test_framework REQUIRED) + find_package(Boost 1.53 COMPONENTS filesystem system thread unit_test_framework REQUIRED) else() - find_package(Boost 1.48 COMPONENTS filesystem system thread REQUIRED) + find_package(Boost 1.53 COMPONENTS filesystem system thread REQUIRED) endif() # 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 +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) @@ -245,6 +293,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 @@ -330,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) @@ -387,6 +436,7 @@ set(PULSEVIEW_LINK_LIBS ${Boost_LIBRARIES} ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + ${LIBATOMIC_LIBRARY} ) if(STATIC_PKGDEPS_LIBS)