Add support for Intel C++ compiler for Linux (icc 15)
authorkhizmax <libcds.dev@gmail.com>
Tue, 30 Sep 2014 18:50:40 +0000 (22:50 +0400)
committerkhizmax <libcds.dev@gmail.com>
Tue, 30 Sep 2014 18:50:40 +0000 (22:50 +0400)
19 files changed:
build/build.sh
cds/compiler/icl/compiler_barriers.h
cds/compiler/icl/defs.h
cds/container/striped_map/std_hash_map.h
cds/container/striped_set/std_hash_set.h
cds/details/defs.h
cds/threading/details/msvc_manager.h
tests/test-hdr/map/hdr_refinable_hashmap_hashmap_std.cpp
tests/test-hdr/map/hdr_refinable_hashmap_hashmap_vc.cpp
tests/test-hdr/map/hdr_striped_hashmap_hashmap_std.cpp
tests/test-hdr/map/hdr_striped_hashmap_hashmap_vc.cpp
tests/test-hdr/misc/hash_tuple.cpp
tests/test-hdr/set/hdr_refinable_hashset_hashset_std.cpp
tests/test-hdr/set/hdr_refinable_hashset_hashset_vc.cpp
tests/test-hdr/set/hdr_striped_hashset_hashset_std.cpp
tests/test-hdr/set/hdr_striped_hashset_hashset_vc.cpp
tests/unit/map2/map_types.h
tests/unit/set2/set_types.h
tests/unit/set2/std_hash_set.h

index 5048d6a..7e79549 100644 (file)
@@ -18,7 +18,7 @@ usage()
     echo "Usage: build.sh \"options\""
     echo "       where options may be any of the following:"
     echo "       -t make target"
-    echo "       -c <C compiler name> Possible values are: gcc,clang"
+    echo "       -c <C compiler name> Possible values are: gcc,clang,icc"
     echo "       -x <C++ compiler name> (e.g. g++, CC)"
     echo "       -p <Processor architecture> Possible values are:"
     echo "             x86, amd64 (x86_64), sparc, ia64"
@@ -208,6 +208,11 @@ case $ccompiler in
                        cppcompiler=clang++
                fi
                ;;
+       icc)
+               if test $cppcompiler = ''; then
+                       cppcompiler=icc
+               fi
+               ;;
        *)
                echo "ERROR: Unknown compiler: $ccompiler"
                exit $ERROR_EXIT_CODE
@@ -389,13 +394,49 @@ case $ccompiler in
            ;;
        esac
 
-       cppcompiler_version=`$cppcompiler -dumpversion`
-       echo g++ version=$gcc_version
+       #cppcompiler_version=`$cppcompiler -dumpversion`
+       #echo compiler version=$cppcompiler $cppcompiler_version
 
        # Setup target options
        # buildCXXflags="-std=gnu++0x $buildCXXflags"
-       cxx_debug_options="-D_DEBUG -O0 -g $cxx_debug_options"
-       cxx_release_options="-DNDEBUG $cxx_release_optimization $cxx_release_options"
+       #cxx_debug_options="-D_DEBUG -O0 -g $cxx_debug_options"
+       #cxx_release_options="-DNDEBUG $cxx_release_optimization $cxx_release_options"
+       ;;
+    icc)
+       case $processor_arch in
+       amd64)
+           case $OS_FAMILY in
+           linux)
+               buildCXXflags="-fPIC -march=$ArchFlag $amd64_cxx_options"
+               buildCflags="-fPIC -march=$ArchFlag $amd64_cxx_options"
+               buildLDflags="-fPIC"
+               buildTestLDflags="-fPIC"
+               ;;
+           *)
+               echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
+               #exit ${ERROR_EXIT_CODE}
+               ;;
+           esac
+           ;;
+       x86)
+           case $OS_FAMILY in
+               linux)
+                   buildCXXflags="-fPIC -march=$ArchFlag"
+                   buildCflags="-fPIC -march=$ArchFlag"
+                   buildLDflags="-fPIC"
+                   buildTestLDflags="-fPIC"
+                   ;;
+               *)
+                   echo "Warning: cannot determine compiler flags for processor $processor_arch, OS $OS_FAMILY, and compiler $ccompiler"
+                   #exit ${ERROR_EXIT_CODE}
+                   ;;
+           esac
+           ;;
+       *)
+           echo "Warning: cannot determine compiler flags for processor $processor_arch and compiler $ccompiler"
+           #exit ${ERROR_EXIT_CODE}
+           ;;
+       esac
        ;;
     *)
        echo "ERROR: Unknown compiler: $ccompiler"
@@ -403,6 +444,15 @@ case $ccompiler in
        ;;
 esac
 
+cppcompiler_version=`$cppcompiler -dumpversion`
+echo compiler version=$cppcompiler $cppcompiler_version
+
+# Setup target options
+# buildCXXflags="-std=gnu++0x $buildCXXflags"
+cxx_debug_options="-D_DEBUG -O0 -g $cxx_debug_options"
+cxx_release_options="-DNDEBUG $cxx_release_optimization $cxx_release_options"
+
+
 if test $BOOST_INCLUDE_PATH != ''; then
        buildCXXflags="$buildCXXflags -I$BOOST_INCLUDE_PATH"
 fi
index d06e014..66d9675 100644 (file)
@@ -3,28 +3,25 @@
 #ifndef __CDS_COMPILER_ICL_COMPILER_BARRIERS_H
 #define __CDS_COMPILER_ICL_COMPILER_BARRIERS_H
 
-#if _MSC_VER > 0
-#   if _MSC_VER < 1700
-        // VC++ up to vc10
-#       include <intrin.h>
+#if defined(_MSC_VER) && _MSC_VER < 1700
+    // VC++ up to vc10
+#   include <intrin.h>
 
-#       pragma intrinsic(_ReadWriteBarrier)
-#       pragma intrinsic(_ReadBarrier)
-#       pragma intrinsic(_WriteBarrier)
+#   pragma intrinsic(_ReadWriteBarrier)
+#   pragma intrinsic(_ReadBarrier)
+#   pragma intrinsic(_WriteBarrier)
 
-#       define CDS_COMPILER_RW_BARRIER  _ReadWriteBarrier()
-#       define CDS_COMPILER_R_BARRIER   _ReadBarrier()
-#       define CDS_COMPILER_W_BARRIER   _WriteBarrier()
+#   define CDS_COMPILER_RW_BARRIER  _ReadWriteBarrier()
+#   define CDS_COMPILER_R_BARRIER   _ReadBarrier()
+#   define CDS_COMPILER_W_BARRIER   _WriteBarrier()
 
-#   else
-        // MS VC11+
-#       include <atomic>
+#else
+    // MS VC11+, linux
+#   include <atomic>
 
-#       define CDS_COMPILER_RW_BARRIER  std::atomic_thread_fence( std::memory_order_acq_rel )
-#       define CDS_COMPILER_R_BARRIER   CDS_COMPILER_RW_BARRIER
-#       define CDS_COMPILER_W_BARRIER   CDS_COMPILER_RW_BARRIER
-
-#   endif
+#   define CDS_COMPILER_RW_BARRIER  std::atomic_thread_fence( std::memory_order_acq_rel )
+#   define CDS_COMPILER_R_BARRIER   CDS_COMPILER_RW_BARRIER
+#   define CDS_COMPILER_W_BARRIER   CDS_COMPILER_RW_BARRIER
 #endif
 
 #endif  // #ifndef __CDS_COMPILER_ICL_COMPILER_BARRIERS_H
index 9e6e9ec..ebfd417 100644 (file)
 #endif
 
 // Processor architecture
-#if defined(_M_X64) || defined(_M_AMD64)
+#if defined(_M_X64) || defined(_M_AMD64) || defined(__amd64__) || defined(__amd64)
 #   define CDS_BUILD_BITS       64
 #   define CDS_PROCESSOR_ARCH   CDS_PROCESSOR_AMD64
 #   define CDS_PROCESSOR__NAME  "AMD64"
 #   define CDS_PROCESSOR__NICK  "amd64"
-#elif defined(_M_IX86)
+#elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
 #   define CDS_BUILD_BITS       32
 #   define CDS_PROCESSOR_ARCH   CDS_PROCESSOR_X86
 #   define CDS_PROCESSOR__NAME  "Intel x86"
index 7b1fa6b..dbaf22a 100644 (file)
@@ -4,7 +4,7 @@
 #define __CDS_CONTAINER_STRIPED_MAP_STD_HASH_MAP_ADAPTER_H
 
 #include <cds/container/striped_set/adapter.h>
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600    // MS VC 2008
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600    // MS VC 2008
 #   include <cds/container/striped_map/std_hash_map_vc.h>
 #else
 #   include <cds/container/striped_map/std_hash_map_std.h>
index fcfb5e9..7ba35e3 100644 (file)
@@ -4,7 +4,7 @@
 #define __CDS_CONTAINER_STRIPED_SET_STD_HASH_SET_ADAPTER_H
 
 #include <cds/container/striped_set/adapter.h>
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600    // MS VC 2008
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600    // MS VC 2008
 #   include <cds/container/striped_set/std_hash_set_vc.h>
 #else
 #   include <cds/container/striped_set/std_hash_set_std.h>
index 97d046b..ff482c1 100644 (file)
@@ -456,7 +456,7 @@ namespace cds {
     {
         if ( !bCond ) {
             char buf[4096];
-#   if CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL
+#   if CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CS_OSI_WINDOWS)
             _snprintf_s( buf, sizeof(buf)/sizeof(buf[0]), _TRUNCATE, pszMsg, pszFile, nLine );
 #   else
             snprintf( buf, sizeof(buf)/sizeof(buf[0]), pszMsg, pszFile, nLine );
index da29e9c..c2f4ef0 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef __CDS_THREADING_DETAILS_MSVC_MANAGER_H
 #define __CDS_THREADING_DETAILS_MSVC_MANAGER_H
 
-#if !( CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL )
+#if !( CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS))
 #   error "threading/details/msvc_manager.h may be used only with Microsoft Visual C++ / Intel C++ compiler"
 #endif
 
index 4572cb1..bba2d1f 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_map.h>
 #include <cds/lock/spinlock.h>
 
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600)
+#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600)
 
 namespace map {
 
index ff1a774..988532c 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_map.h>
 #include <cds/lock/spinlock.h>
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
 
 namespace map {
 
index aa1e582..95f3c10 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_map.h>
 #include <cds/lock/spinlock.h>
 
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600)
+#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600)
 
 namespace map {
 
index d198454..cfc5de7 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_map.h>
 #include <cds/lock/spinlock.h>
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
 
 namespace map {
 
index e9353a7..470d5c7 100644 (file)
@@ -60,7 +60,7 @@ namespace misc {
             CPPUNIT_ASSERT( val[3] == nHash + 4 );
             CPPUNIT_ASSERT( val[4] == nHash + 5 );
 
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER == 1700)
+#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER == 1700)
             // MS VC 11: std::tuple suports up to 5 template params only
 
             cds::opt::hash< std::tuple< hashing, hash2, hash3, hash4, hash5, hash6 > >::pack<cds::opt::none>::hash  h6;
index 769d499..9d7d1ac 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_set.h>
 #include <cds/lock/spinlock.h>
 
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600)
+#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600)
 
 namespace set {
 
index 902f2d1..b12a079 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_set.h>
 #include <cds/lock/spinlock.h>
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
 
 namespace stdext {
     inline size_t hash_value(set::StripedSetHdrTest::item const& _Keyval)
index feb7b25..9f75a3c 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_set.h>
 #include <cds/lock/spinlock.h>
 
-#if !((CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600)
+#if !((CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600)
 
 namespace set {
 
index dbe78e9..1c499ab 100644 (file)
@@ -5,7 +5,7 @@
 #include <cds/container/striped_set.h>
 #include <cds/lock/spinlock.h>
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
 
 namespace stdext {
     inline size_t hash_value(set::StripedSetHdrTest::item const& _Keyval)
index 761a723..add04d4 100644 (file)
@@ -3825,7 +3825,7 @@ namespace map2 {
             , co::less< less >
         > StripedMap_list;
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
         typedef StripedHashMap_ord<
             stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
             , co::hash< hash2 >
@@ -3942,7 +3942,7 @@ namespace map2 {
             , co::hash< hash2 >
         > RefinableMap_map;
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
         typedef RefinableHashMap_ord<
             stdext::hash_map< Key, Value, stdext::hash_compare<Key, less > >
             , co::hash< hash2 >
index a88b860..a2baa7f 100644 (file)
@@ -284,7 +284,7 @@ namespace set2 {
             }
         };
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
         struct hash_less: public stdext::hash_compare< key_type, std::less<key_type> >
         {
             typedef stdext::hash_compare< key_type, std::less<key_type> > base_class;
@@ -3474,7 +3474,7 @@ namespace set2 {
             , co::hash< hash2 >
         > StripedSet_set;
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
         typedef StripedHashSet_ord<
             stdext::hash_set< key_val, hash_less >
             , co::hash< hash2 >
@@ -3609,7 +3609,7 @@ namespace set2 {
             , co::hash< hash2 >
         > RefinableSet_set;
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER < 1600
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER < 1600
         typedef RefinableHashSet_ord<
             stdext::hash_set< key_val, hash_less >
             , co::hash< hash2 >
index 49eabe9..4b89ca0 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef __CDSUNIT_STD_HASH_SET_H
 #define __CDSUNIT_STD_HASH_SET_H
 
-#if (CDS_COMPILER == CDS_COMPILER_MSVC || CDS_COMPILER == CDS_COMPILER_INTEL) && _MSC_VER == 1500
+#if (CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)) && _MSC_VER == 1500
 #   include "set2/std_hash_set_vc9.h"
 #else
 #   include "set2/std_hash_set_std.h"