0024153: Adding OpenCL to OCCT prerequisites
[occt.git] / CMakeLists.txt
index 70cc241..8184967 100644 (file)
@@ -37,18 +37,24 @@ else()
   set(SCRIPT_EXT sh)
 endif()
 
+# set compiler short name and choose SSE2 option for appropriate MSVC compilers
 if (DEFINED MSVC70)
   SET(COMPILER vc7)
-  add_definitions(/arch:SSE2)
 elseif (DEFINED MSVC80)
   SET(COMPILER vc8)
-  add_definitions(/arch:SSE2)
+  if (${COMPILER_BITNESS} STREQUAL 32)
+    add_definitions(/arch:SSE2)
+  endif()
 elseif (DEFINED MSVC90)
   SET(COMPILER vc9)
-  add_definitions(/arch:SSE2)
+  if (${COMPILER_BITNESS} STREQUAL 32)
+    add_definitions(/arch:SSE2)
+  endif()
 elseif (DEFINED MSVC10)
   SET(COMPILER vc10)
-  add_definitions(/arch:SSE2)
+  if (${COMPILER_BITNESS} STREQUAL 32)
+    add_definitions(/arch:SSE2)
+  endif()
 elseif (DEFINED MSVC11)
   SET(COMPILER vc11)
 else()
@@ -68,6 +74,7 @@ else()
   add_definitions(-fexceptions -fPIC -DOCC_CONVERT_SIGNALS -DHAVE_WOK_CONFIG_H -DHAVE_CONFIG_H -DLIN)
 endif()
 
+# enable structured exceptions for MSVC
 string(REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}")
 IF(ISFLAG)
   STRING(REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
@@ -75,13 +82,14 @@ ELSEIF(WIN32)
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -EHa")
 ENDIF()
 
+# enable parallel compilation on MSVC 9 and above
 IF(WIN32)
   IF(NOT DEFINED MSVC70 AND NOT DEFINED MSVC80)
     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP")
   ENDIF()
 ENDIF()
 
-# warning level 4
+# increase compiler warnings level (-W4 for MSVC, -Wall for GCC)
 IF(MSVC)
   if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
     string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
@@ -181,7 +189,7 @@ ELSE()
   SET(DLL_SO_PREFIX "lib")
 ENDIF()
 
-SET(3RDPARTY_DIR "" CACHE PATH "Directory contains required 3rdparty products")
+SET(3RDPARTY_DIR ${CMAKE_SOURCE_DIR} CACHE PATH "Directory contains required 3rdparty products")
 SET(3RDPARTY_INCLUDE_DIRS "")
 SET(3RDPARTY_NOT_INCLUDED)
 
@@ -192,6 +200,7 @@ ENDIF()
 SET(3RDPARTY_USE_GL2PS OFF CACHE BOOL "whether use gl2ps product or not")
 SET(3RDPARTY_USE_FREEIMAGE OFF CACHE BOOL "whether use freeimage product or not")
 SET(3RDPARTY_USE_TBB OFF CACHE BOOL "whether use tbb product or not")
+SET(3RDPARTY_USE_OPENCL OFF CACHE BOOL "whether use OpenCL or not")
 
 SET(INSTALL_TESTS OFF CACHE BOOL "Is tests copy to install directory")
 
@@ -215,32 +224,39 @@ MACRO(THIRDPARTY_PRODUCT PRODUCT_NAME HEADER_NAME LIBRARY_NAME)
     IF("${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND")
       SET(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "Directory contains headers of the ${PRODUCT_NAME} product" FORCE)
       FIND_PATH(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR ${HEADER_NAME} PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/include" NO_DEFAULT_PATH)
-      
-      IF("${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND")
-        FIND_PATH(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR ${HEADER_NAME})
-      ENDIF()
-      
     ENDIF()
     
     IF("${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND")
       SET(3RDPARTY_${PRODUCT_NAME}_LIBRARY "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Directory contains library of the ${PRODUCT_NAME} product" FORCE)
       FIND_LIBRARY(3RDPARTY_${PRODUCT_NAME}_LIBRARY ${LIBRARY_NAME}  PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/lib" NO_DEFAULT_PATH)
-      
-      # check default path for library search
-      IF("${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND")
-        FIND_LIBRARY(3RDPARTY_${PRODUCT_NAME}_LIBRARY ${LIBRARY_NAME})
-      ENDIF()
     ENDIF()
     
     IF("${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND")
       SET(3RDPARTY_${PRODUCT_NAME}_DLL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Directory contains shared library of the ${PRODUCT_NAME} product" FORCE)
       FIND_FILE(3RDPARTY_${PRODUCT_NAME}_DLL "${DLL_SO_PREFIX}${LIBRARY_NAME}.${DLL_SO}"  PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/${DLL_SO_FOLDER}" NO_DEFAULT_PATH)
-      
-      IF("${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND")
-        FIND_FILE(3RDPARTY_${PRODUCT_NAME}_DLL "${DLL_SO_PREFIX}${LIBRARY_NAME}.${DLL_SO}")
-      ENDIF()
     ENDIF()
+    
     MARK_AS_ADVANCED(3RDPARTY_${PRODUCT_NAME}_DIR)
+  ELSE()
+  
+  ENDIF()
+  
+  # check default path (with additions) for header search
+  IF("${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND")
+    SET(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "Directory contains headers of the ${PRODUCT_NAME} product" FORCE)
+    FIND_PATH(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR ${HEADER_NAME} ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_HEADER})
+  ENDIF()
+
+  # check default path (with additions) for library search
+  IF("${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND")
+    SET(3RDPARTY_${PRODUCT_NAME}_LIBRARY "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Directory contains library of the ${PRODUCT_NAME} product" FORCE)
+    FIND_LIBRARY(3RDPARTY_${PRODUCT_NAME}_LIBRARY ${LIBRARY_NAME} ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_LIB})
+  ENDIF()
+
+  # check default path (with additions) for DLL search
+  IF("${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND")
+    SET(3RDPARTY_${PRODUCT_NAME}_DLL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Directory contains shared library of the ${PRODUCT_NAME} product" FORCE)
+    FIND_FILE(3RDPARTY_${PRODUCT_NAME}_DLL "${DLL_SO_PREFIX}${LIBRARY_NAME}.${DLL_SO}" ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_DLL})
   ENDIF()
 
   IF(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR)
@@ -353,6 +369,36 @@ IF(3RDPARTY_USE_GL2PS)
   THIRDPARTY_PRODUCT("GL2PS" "gl2ps.h" "gl2ps${BUILD_SUFFIX}")
 ENDIF()
 
+# OPENCL
+IF(3RDPARTY_USE_OPENCL)
+  ADD_DEFINITIONS(-DHAVE_OPENCL) 
+  
+  SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_HEADER $ENV{AMDAPPSDKROOT}/include
+                                                  $ENV{INTELOCLSDKROOT}/include
+                                                  $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/inc
+                                                  $ENV{ATISTREAMSDKROOT}/include)
+                                                  
+                                                  
+  IF(${COMPILER_BITNESS} STREQUAL 32)
+    SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_LIB $ENV{AMDAPPSDKROOT}/lib/x86
+                                                 $ENV{INTELOCLSDKROOT}/lib/x86
+                                                 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/Win32
+                                                 $ENV{ATISTREAMSDKROOT}/lib/x86)
+  ELSEIF(${COMPILER_BITNESS} STREQUAL 64)
+    SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_LIB $ENV{AMDAPPSDKROOT}/lib/x86_64
+                                                 $ENV{INTELOCLSDKROOT}/lib/x64
+                                                 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/x64
+                                                 $ENV{ATISTREAMSDKROOT}/lib/x86_64)
+  ENDIF()
+  
+  THIRDPARTY_PRODUCT("OPENCL" "CL/cl.h" "OpenCL${BUILD_SUFFIX}")
+  
+  # if CL/cl.h isn't found (and 3RDPARTY_OPENCL_INCLUDE_DIR isn't defined) 
+  # then try to find OpenCL/cl.h (all other variable won't be changed)
+  THIRDPARTY_PRODUCT("OPENCL" "OpenCL/cl.h" "OpenCL${BUILD_SUFFIX}")
+ENDIF()
+
 # TBB
 IF (3RDPARTY_USE_TBB)
   ADD_DEFINITIONS(-DHAVE_TBB)