/*
This file is a part of libcds - Concurrent Data Structures library
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
-
+
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CDSLIB_DEFS_H
#define CDSLIB_DEFS_H
#include <stddef.h>
+#include <stdlib.h>
#include <assert.h>
#include <cstdint>
#include <exception>
Supported compilers:
- GCC 4.8+
- - Clang 3.3+
+ - Clang 3.6+
- MS Visual C++ 2013 Update 4 and above
- Intel C++ Compiler 15
int plugin_entry_point()
{
// Attach the thread if it is not attached yet
- if ( !cds::threading::Manager::isThreadAttached() )
+ if ( !cds::threading::Manager::isThreadAttached())
cds::threading::Manager::attachThread();
// Do some work with HP-related containers
\par How to build
The <b>cds</b> is mostly header-only library. Only small part of library related to GC core functionality
- should be compiled.
+ should be compiled. <b>cds</b> depends on C++ standard library only.
+
+ Test suite depends on:
+ - \p boost.thread (thread-loal storage support), boost.system
+ - \p google-test
+
+ Some parts of libcds may depend on DCAS (double-width compare-and-swap) atomic primitive if
+ the target architecture supports it. For x86, cmake build script enables -mcx16 compiler flag that
+ switches DCAS support on. You may manually disable DCAS support with the following command line flags
+ in GCC/clang (for MS VC++ compiler DCAS is not supported):
+ - \p -DCDS_DISABLE_128BIT_ATOMIC - for 64bit build
+ - \p -DCDS_DISABLE_64BIT_ATOMIC - for 32bit build
- The test projects depends on the following static library from \p boost:
- - \p boost.thread
- - \p boost.system
+ @warning All your projects AND libcds MUST be compiled with the same flags - either with DCAS support or without it.
\par Windows build
- <a href="http://www.boost.org/">boost library</a> 1.51 and above. You should create environment variable
\p BOOST_PATH containing full path to \p boost root directory (for example, <tt>C:\\libs\\boost_1_57_0</tt>).
- Open solution file <tt>cds\projects\vc14\cds.sln</tt> with Microsoft VisualStudio 2015.
+ Open solution file <tt>cds\projects\vc141\cds.sln</tt> with Microsoft VisualStudio 2017.
The solution contains \p cds project and a lot of test projects. Just build the library using solution.
<b>Warning</b>: the solution depends on \p BOOST_PATH environment variable that specifies full path
- for 32bit: <tt>\$(BOOST_PATH)/stage/lib</tt>, <tt>\$(BOOST_PATH)/stage32/lib</tt>, and <tt>\$(BOOST_PATH)/bin</tt>.
- for 64bit: <tt>\$(BOOST_PATH)/stage64/lib</tt> and <tt>\$(BOOST_PATH)/bin</tt>.
+ All tests are based on googletest framework. The following environment variables specify
+ where to find gtest include and library directories:
+ - \p GTEST_ROOT - gtest root directory. <tt>\$(GTEST_ROOT)/include</tt> specifies full path to
+ gtest include files;
+ - \p GTEST_LIB64 - the path to 64bit gtest library dir;
+ - \p GTEST_LIB32 - the path to 32bit gtest library dir.
+
\par *NIX build
For Unix-like systems GCC and Clang compilers are supported.
- Use GCC 4.8+ compiler or Clang 3.3+ to build <b>cds</b> library with CMake.
+ Use GCC 4.8+ compiler or Clang 3.6+ to build <b>cds</b> library with CMake.
See accompanying file <tt>/build/cmake/readme.md</tt> for more info.
-
- @note Important for GCC compiler: all your projects that use \p libcds must be compiled with <b>-fno-strict-aliasing</b>
- compiler flag.
-
*/
- CDS_PROCESSOR_SPARC Sparc
- CDS_PROCESSOR_PPC64 PowerPC64
- CDS_PROCESSOR_ARM7 ARM v7
+ - CDS_PROCESSOR_ARM8 ARM v8
- CDS_PROCESSOR_UNKNOWN undefined processor architecture
CDS_PROCESSOR__NAME The name (string) of processor architecture
#define CDS_PROCESSOR_AMD64 4
#define CDS_PROCESSOR_PPC64 5 // PowerPC 64bit
#define CDS_PROCESSOR_ARM7 7
+#define CDS_PROCESSOR_ARM8 8
#define CDS_PROCESSOR_UNKNOWN -1
// Supported OS interfaces
// CDS_VERIFY: Debug - assert(_expr); Release - _expr
#ifdef CDS_DEBUG
-# define CDS_VERIFY( _expr ) assert( _expr )
+# define CDS_VERIFY( _expr ) assert( _expr )
+# define CDS_VERIFY_FALSE( _expr ) assert( !( _expr ))
# define CDS_DEBUG_ONLY( _expr ) _expr
+# define CDS_VERIFY_EQ( expr, val ) assert( expr == val )
#else
# define CDS_VERIFY( _expr ) _expr
+# define CDS_VERIFY_FALSE( _expr ) _expr
# define CDS_DEBUG_ONLY( _expr )
+# define CDS_VERIFY_EQ( expr, val ) expr
#endif
#ifdef CDS_STRICT
# define CDS_STRICT_DO( _expr )
#endif
+#ifdef CDS_DEBUG
+# define cds_assert( expr ) assert( expr )
+#else
+ static inline void cds_assert( bool expr ) {
+ if ( !expr )
+ abort();
+ }
+#endif
// Compiler-specific defines
#include <cds/compiler/defs.h>