]> sigrok.org Git - pulseview.git/blobdiff - CMakeLists.txt
Revert "cmake: use pkg-config ldflags directly instead of spliting libs and dirs"
[pulseview.git] / CMakeLists.txt
index f99774659e67d3e574daf41a855ea8b9b172606a..49c35cae15f6ab318f6d161b61c22d98e31be107 100644 (file)
@@ -98,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 <atomic>
+std::atomic<int> 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)
 
@@ -244,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
@@ -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)