]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
Refine the gcc optimizations in the build tools
authorkecsup <kecsup@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Sun, 11 Jan 2009 08:52:16 +0000 (08:52 +0000)
committerkecsup <kecsup@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Sun, 11 Jan 2009 08:52:16 +0000 (08:52 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@1476 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/CMakeLists.txt
opencv/configure.in

index 8f3a3effd1bc8b1dbf36587423a4bd15c563be69..86a21662b065eb8c36205aa8715226fb26903442 100644 (file)
@@ -142,13 +142,29 @@ set(OPENCV_ENABLE_OPENMP OFF CACHE BOOL "")
 
 if(CMAKE_COMPILER_IS_GNUCXX)
     set(OPENCV_ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")
-    if (NOT MINGW AND NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
-       if (${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
-           set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
-       elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
-           set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
-       endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
-    endif (NOT MINGW AND NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
+    set(OPENCV_USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")
+    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
+        # We can use only -O2 because the -O3 causes gcc crash
+        set(OPENCV_USE_O2 ON CACHE BOOL "Enable -O2 for GCC")
+        set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
+    endif()
+    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
+        set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
+        set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
+        set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
+        set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
+        set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
+    endif()
+    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)
+        set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
+        set(OPENCV_USE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC")
+    endif ()
+    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86)
+        set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
+        set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
+        set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
+        set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
+    endif ()
 endif()
 
 # ===================================================
@@ -361,14 +377,39 @@ if(CMAKE_COMPILER_IS_GNUCXX)
         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
     endif()
 
-    # GCC optimization for floating math
-    set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
-
     # Whole program optimization
     if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION)
         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fwhole-program --combine")
     endif()
 
+    # Other optimizations
+    if(OPENCV_USE_OMIT_FRAME_POINTER)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")
+    endif()
+    if(OPENCV_USE_O2)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O2")
+    endif()
+    if(OPENCV_USE_O3)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O3")
+    endif()
+    if(OPENCV_USE_FAST_MATH)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
+    endif()
+    if(OPENCV_USE_POWERPC)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")
+    endif()
+    if(OPENCV_USE_MMX AND NOT MINGW)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mmmx")
+    endif()
+    # SSE should be disabled under MingW because it generates compiler errors
+    if(OPENCV_USE_SSE AND NOT MINGW)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")
+    endif()
+    # SSE2 should be disabled under MingW because it generates compiler errors
+    if(OPENCV_USE_SSE2 AND NOT MINGW)
+       set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")
+    endif()
+
     # Profiling?
     if(OPENCV_ENABLE_PROFILING)
         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")
@@ -386,15 +427,9 @@ if(CMAKE_COMPILER_IS_GNUCXX)
 
     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")
     set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
-
-    if(OPENCV_USE_SSE)
-          set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -msse")
-    endif()
-    if(OPENCV_USE_SSE2)
-          set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -msse2")
-    endif()
 endif()
 
+
 # Add user supplied extra options (optimization, etc...)
 # ==========================================================
 set(OPENCV_EXTRA_C_FLAGS ${EXTRA_C_FLAGS} CACHE STRING "Extra compiler options")
index 62b4dc8837cb5e4f869e63fa1a4373ea90966bbf..9a807f87283eb6581a49ed52ee75c038e5ab1459 100644 (file)
@@ -279,36 +279,35 @@ else
     i*86-apple-*)
         if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
             # apples g++ fails with '-march=i686' and there are no apple machines older than prescott/core anyway
-            DEFAULT_CXXFLAGS="-g -march=prescott -ffast-math -fomit-frame-pointer $DEFAULT_CXXFLAGS"
+            DEFAULT_CXXFLAGS="-O3 -g -march=prescott -ffast-math -fomit-frame-pointer $DEFAULT_CXXFLAGS"
         fi
         ;;
     i686-*-*)
         if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
           # default to i686/pentiumpro -- people can override this
-          DEFAULT_CXXFLAGS="-g -march=i686 -ffast-math -fomit-frame-pointer $DEFAULT_CXXFLAGS"
+          DEFAULT_CXXFLAGS="-O3 -g -march=i686 -ffast-math -fomit-frame-pointer $DEFAULT_CXXFLAGS"
         fi
         ;;
     amd64-*-* | x86_64-*-*)
         if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
           # default to i686/pentiumpro -- people can override this
-          DEFAULT_CXXFLAGS="-g $DEFAULT_CXXFLAGS"
+          DEFAULT_CXXFLAGS="-O3 -g -ffast-math -fomit-frame-pointer $DEFAULT_CXXFLAGS"
         fi
         ;;
     powerpc-*-*)
         if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
             # default to G3 processors -- people can override this
-            DEFAULT_CXXFLAGS="-g -mcpu=G3 -mtune=G5 -fomit-frame-pointer $DEFAULT_CXXFLAGS"
+            DEFAULT_CXXFLAGS="-O3 -g -mcpu=G3 -mtune=G5 -fomit-frame-pointer $DEFAULT_CXXFLAGS"
         fi
         ;;
     *-*-*)
         if test x"$ac_cv_c_compiler_gnu" = "xyes"; then
-            DEFAULT_CXXFLAGS="-fomit-frame-pointer $DEFAULT_CXXFLAGS"
+            DEFAULT_CXXFLAGS="-O2 -fomit-frame-pointer $DEFAULT_CXXFLAGS"
         fi
         ;;
     esac
 
     CPPFLAGS="-DNDEBUG $CPPFLAGS"
-    DEFAULT_CXXFLAGS="-O3 $DEFAULT_CXXFLAGS"
 fi
 
 if test x"$ac_cv_c_compiler_gnu" = "xyes"; then