Browse Source

Improved Intel Compiler detection

Christophe Riccio 13 years ago
parent
commit
1cebfa7bda
3 changed files with 44 additions and 6 deletions
  1. 22 3
      CMakeLists.txt
  2. 17 3
      glm/core/setup.hpp
  3. 5 0
      readme.txt

+ 22 - 3
CMakeLists.txt

@@ -11,8 +11,14 @@ if(NOT GLM_TEST_ENABLE)
 	message(FATAL_ERROR "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
 	message(FATAL_ERROR "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
 endif()
 endif()
 
 
+option(GLM_USE_INTEL "Use Intel Compiler" OFF)
+
 option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
 option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
 if(GLM_TEST_ENABLE_CXX_11)
 if(GLM_TEST_ENABLE_CXX_11)
+	if(GLM_USE_INTEL)
+		add_definitions(/Qstd=c++0x)
+	endif()
+
 	if(CMAKE_COMPILER_IS_GNUCXX)
 	if(CMAKE_COMPILER_IS_GNUCXX)
 		add_definitions(-std=c++0x)
 		add_definitions(-std=c++0x)
 	endif()
 	endif()
@@ -22,14 +28,25 @@ elseif(NOT GLM_TEST_ENABLE_CXX_11)
 	endif()
 	endif()
 endif()
 endif()
 
 
-option(GLM_TEST_ENABLE_MS_EXTENSIONS "Enable MS extensions" OFF)
-if(GLM_TEST_ENABLE_MS_EXTENSIONS)
+option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
+if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
+	if(GLM_USE_INTEL)
+		add_definitions(/Qintel-extensions)
+		add_definitions(-intel-extensions)
+	endif()
+
 	if(CMAKE_COMPILER_IS_GNUCXX)
 	if(CMAKE_COMPILER_IS_GNUCXX)
 		#Doesn't seem to work...
 		#Doesn't seem to work...
 		#add_definitions(-fms-extensions)
 		#add_definitions(-fms-extensions)
 		#add_definitions(-D_MSC_EXTENSIONS)
 		#add_definitions(-D_MSC_EXTENSIONS)
 	endif()
 	endif()
-elseif(NOT GLM_TEST_ENABLE_MS_EXTENSIONS)
+
+elseif(NOT GLM_TEST_ENABLE_LANG_EXTENSIONS)
+	if(GLM_USE_INTEL)
+		add_definitions(/Qintel-extensions-)
+		add_definitions(-no-intel-extensions)
+	endif()
+
 	if(CMAKE_COMPILER_IS_GNUCXX)
 	if(CMAKE_COMPILER_IS_GNUCXX)
 		add_definitions(-std=c++98)
 		add_definitions(-std=c++98)
 		add_definitions(-pedantic)
 		add_definitions(-pedantic)
@@ -46,6 +63,8 @@ option(GLM_TEST_ENABLE_SIMD "Enable SIMD optimizations" OFF)
 if(GLM_TEST_ENABLE_SIMD)
 if(GLM_TEST_ENABLE_SIMD)
 	if(CMAKE_COMPILER_IS_GNUCXX)
 	if(CMAKE_COMPILER_IS_GNUCXX)
 		add_definitions(-msse2)
 		add_definitions(-msse2)
+	elseif(GLM_USE_INTEL)
+		add_definitions(/QxAVX)
 	elseif(MSVC10)
 	elseif(MSVC10)
 		add_definitions(/arch:AVX)	
 		add_definitions(/arch:AVX)	
 	elseif(MSVC)
 	elseif(MSVC)

+ 17 - 3
glm/core/setup.hpp

@@ -471,6 +471,20 @@
 #				define GLM_LANG GLM_LANG_CXX98
 #				define GLM_LANG GLM_LANG_CXX98
 #			endif
 #			endif
 #		endif
 #		endif
+#	elif(GLM_COMPILER & GLM_COMPILER_INTEL)
+#		if(defined(_MSC_EXTENSIONS))
+#			if(GLM_COMPILER >= GLM_COMPILER_INTEL13_0)
+#				define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
+#			else
+#				define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
+#			endif
+#		else
+#			if(GLM_COMPILER >= GLM_COMPILER_INTEL13_0)
+#				define GLM_LANG (GLM_LANG_CXX0X)
+#			else
+#				define GLM_LANG (GLM_LANG_CXX98)
+#			endif
+#		endif
 #	elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG) 
 #	elif((GLM_COMPILER & GLM_COMPILER_CLANG) == GLM_COMPILER_CLANG) 
 #		define GLM_LANG GLM_LANG_CXX98
 #		define GLM_LANG GLM_LANG_CXX98
 #	else
 #	else
@@ -481,9 +495,9 @@
 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
 #if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
 #	define GLM_MESSAGE_LANG_DISPLAYED
 #	define GLM_MESSAGE_LANG_DISPLAYED
 #	if(GLM_LANG & GLM_LANG_CXXGNU_FLAG)
 #	if(GLM_LANG & GLM_LANG_CXXGNU_FLAG)
-#		pragma message("GLM: C++ with GNU language extensions")
+#		pragma message("GLM: C++ with language extensions")
 #	elif(GLM_LANG & GLM_LANG_CXXMS_FLAG)
 #	elif(GLM_LANG & GLM_LANG_CXXMS_FLAG)
-#		pragma message("GLM: C++ with VC language extensions")
+#		pragma message("GLM: C++ with language extensions")
 #	elif(GLM_LANG & GLM_LANG_CXX11_FLAG)
 #	elif(GLM_LANG & GLM_LANG_CXX11_FLAG)
 #		pragma message("GLM: C++11")
 #		pragma message("GLM: C++11")
 #	elif(GLM_LANG & GLM_LANG_CXX0X_FLAG)
 #	elif(GLM_LANG & GLM_LANG_CXX0X_FLAG)
@@ -611,7 +625,7 @@
 	(GLM_LANG & GLM_LANG_CXX98_FLAG)
 	(GLM_LANG & GLM_LANG_CXX98_FLAG)
 
 
 #define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
 #define GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE() \
-	(GLM_LANG & GLM_LANG_CXXMS_FLAG)
+	((GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC))
 
 
 #define GLM_SUPPORT_SWIZZLE_OPERATOR() \
 #define GLM_SUPPORT_SWIZZLE_OPERATOR() \
 	(defined(GLM_SWIZZLE) && GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())
 	(defined(GLM_SWIZZLE) && GLM_SUPPORT_ANONYMOUS_UNION_OF_STRUCTURE())

+ 5 - 0
readme.txt

@@ -36,6 +36,11 @@ GLM is a header only library, there is nothing to build, just include it.
 More informations in GLM manual:
 More informations in GLM manual:
 http://glm.g-truc.net/glm.pdf
 http://glm.g-truc.net/glm.pdf
 
 
+================================================================================
+GLM 0.9.5.X: 2013-XX-XX
+--------------------------------------------------------------------------------
+- Improved Intel Compiler detection
+
 ================================================================================
 ================================================================================
 GLM 0.9.4.2: 2013-01-XX
 GLM 0.9.4.2: 2013-01-XX
 --------------------------------------------------------------------------------
 --------------------------------------------------------------------------------