Revision: 45963
          http://brlcad.svn.sourceforge.net/brlcad/?rev=45963&view=rev
Author:   starseeker
Date:     2011-08-13 04:19:45 +0000 (Sat, 13 Aug 2011)

Log Message:
-----------
Use a variation on the three way option trick to get more sophisticated about 
turning on/off the optimization flags as a function of CMAKE_BUILD_TYPE - if 
Auto, optimization flags are on for Release and off for Debug, but 'hard' 
setting BRLCAD_FLAGS_OPTIMIZATION to ON or OFF will override the build-type 
based decision.  Also, clear the compile flags before we do our thing to 
eliminate any flags CMake automatically adds for a given build type - that's 
why NDEBUG was in the Release compile flags even when we wanted to add debug 
flags explicitly.

Modified Paths:
--------------
    brlcad/trunk/CMakeLists.txt
    brlcad/trunk/misc/CMake/CompilerFlags.cmake

Modified: brlcad/trunk/CMakeLists.txt
===================================================================
--- brlcad/trunk/CMakeLists.txt 2011-08-13 03:50:08 UTC (rev 45962)
+++ brlcad/trunk/CMakeLists.txt 2011-08-13 04:19:45 UTC (rev 45963)
@@ -390,7 +390,7 @@
 # The location in which to install BRLCAD. Need a good Debug location
 # for Windows.  Only do this if CMAKE_INSTALL_PREFIX hasn't been set
 # already, to try and allow parent builds (if any) some control.
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX)
        IF(NOT WIN32)
                IF ("${CMAKE_BUILD_TYPE}" MATCHES "Release")
                        SET(CMAKE_INSTALL_PREFIX 
"/usr/brlcad/rel-${BRLCAD_VERSION}")
@@ -402,9 +402,20 @@
        ENDIF(NOT WIN32)
        SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE STRING "BRL-CAD 
install prefix" FORCE)
        SET(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 0)
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX)
 SET(BRLCAD_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE STRING "BRL-CAD install 
prefix")
 
+# One thing we will warn about is a Release build with the Debug install path
+# or a Debug build with the Release install path - generally speaking a BAD
+# idea.
+IF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND ${CMAKE_INSTALL_PREFIX} 
STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}")
+       MESSAGE(WARNING "Build Type is Release but CMAKE_INSTALL_PREFIX is set 
to the Debug install path! To correct this, clear CMAKE_INSTALL_PREFIX and 
re-configure.")
+ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND ${CMAKE_INSTALL_PREFIX} 
STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}")
+IF("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND ${CMAKE_INSTALL_PREFIX} STREQUAL 
"/usr/brlcad/rel-${BRLCAD_VERSION}")
+       MESSAGE(WARNING "Build Type is Debug but CMAKE_INSTALL_PREFIX is set to 
the Release install path! To correct this, clear CMAKE_INSTALL_PREFIX and 
re-configure.")
+ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND ${CMAKE_INSTALL_PREFIX}        
STREQUAL "/usr/brlcad/rel-${BRLCAD_VERSION}")
+
+
 #---------------------------------------------------------------------
 # The following logic is what allows binaries to run successfully in
 # the build directory AND install directory.  Thanks to plplot for
@@ -738,15 +749,29 @@
 ENDIF(BRLCAD-ENABLE_STRICT)
 
 # Build with O3 compiler optimization.  This should be on for release builds
-IF("${CMAKE_BUILD_TYPE}" MATCHES "Release")
-       OPTION(BRLCAD-ENABLE_OPTIMIZED_BUILD "Use optimized compiler settings" 
ON)
-ELSE("${CMAKE_BUILD_TYPE}" MATCHES "Release")
-       OPTION(BRLCAD-ENABLE_OPTIMIZED_BUILD "Use optimized compiler settings" 
OFF)
-ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Release")
-MARK_AS_ADVANCED(BRLCAD-ENABLE_OPTIMIZED_BUILD)
-IF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT 
BRLCAD-ENABLE_OPTIMIZED_BUILD)
-       MESSAGE("Warning - build type is Release but optimization has been 
disabled")
-ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT 
BRLCAD-ENABLE_OPTIMIZED_BUILD)
+STRING(LENGTH "${BRLCAD_FLAGS_OPTIMIZATION}" BRLCAD_FLAGS_OPTIMIZATION_SET)
+IF(NOT BRLCAD_FLAGS_OPTIMIZATION_SET)
+       SET(BRLCAD_FLAGS_OPTIMIZATION "Auto" CACHE STRING "Use optimized 
compiler settings" FORCE)
+ENDIF(NOT BRLCAD_FLAGS_OPTIMIZATION_SET)
+set_property(CACHE BRLCAD_FLAGS_OPTIMIZATION PROPERTY STRINGS Auto "ON" "OFF")
+# If the "parent" setting isn't Auto, do what it says
+IF(NOT ${BRLCAD_FLAGS_OPTIMIZATION} STREQUAL "Auto")
+       SET(BRLCAD_OPTIMIZED_BUILD ${BRLCAD_FLAGS_OPTIMIZATION})
+ENDIF(NOT ${BRLCAD_FLAGS_OPTIMIZATION} STREQUAL "Auto")
+# If we we don't understand the build type and have an Auto setting for the
+# optimization flags, leave them off
+IF(NOT "${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT "${CMAKE_BUILD_TYPE}" 
MATCHES "Debug")
+       IF(NOT ${BRLCAD_FLAGS_OPTIMIZATION} STREQUAL "Auto")
+               SET(BRLCAD_OPTIMIZED_BUILD OFF)
+       ENDIF(NOT ${BRLCAD_FLAGS_OPTIMIZATION} STREQUAL "Auto")
+ENDIF(NOT "${CMAKE_BUILD_TYPE}" MATCHES "Release" AND NOT 
"${CMAKE_BUILD_TYPE}" MATCHES "Debug")
+# If we DO understand the build type and have Auto, be smart
+IF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND ${BRLCAD_FLAGS_OPTIMIZATION} 
STREQUAL "Auto")
+       SET(BRLCAD_OPTIMIZED_BUILD ON)
+ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND ${BRLCAD_FLAGS_OPTIMIZATION} 
STREQUAL "Auto")
+IF("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND ${BRLCAD_FLAGS_OPTIMIZATION} 
STREQUAL "Auto")
+       SET(BRLCAD_OPTIMIZED_BUILD OFF)
+ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND ${BRLCAD_FLAGS_OPTIMIZATION} 
STREQUAL "Auto")
 
 # By default, we don't want any error reports at all from src/other
 OPTION(BRLCAD-DISABLE_SRC_OTHER_WARN "Disable warnings for src/other" ON)
@@ -1325,7 +1350,7 @@
                set(BRLCAD_ARCH_BITSETTING "OFF (${platform_bit_type} bit)")
        endif (BRLCAD-ENABLE_64BIT)
        SET(BRLCAD_ARCH_BITSETTING_LABEL "Build 64-bit release ")
-       SET(BRLCAD-ENABLE_OPTIMIZED_BUILD_LABEL "Build optimized release ")
+       SET(BRLCAD_OPTIMIZED_BUILD_LABEL "Build optimized release ")
        SET(BRLCAD-ENABLE_DEBUG_FLAGS_LABEL "Build debuggable release")
        SET(BRLCAD-ENABLE_PROFILING_LABEL "Build profile release ")
        SET(BRLCAD-ENABLE_SMP_LABEL "Build SMP-capable release ")
@@ -1347,7 +1372,7 @@
 
        SET(SETTINGLIST1 BRLCAD_BUILD_TCL BRLCAD_BUILD_TK BRLCAD_BUILD_INCRTCL 
BRLCAD_BUILD_IWIDGETS BRLCAD_BUILD_TKHTML BRLCAD_BUILD_TKPNG 
BRLCAD_BUILD_TKTABLE BRLCAD_BUILD_PNG BRLCAD_BUILD_REGEX BRLCAD_BUILD_ZLIB 
BRLCAD_BUILD_TERMLIB BRLCAD_BUILD_UTAHRLE BRLCAD_BUILD_OPENNURBS 
BRLCAD_BUILD_SCL)
        SET(SETTINGLIST2 BRLCAD-ENABLE_X11 BRLCAD-ENABLE_OPENGL 
BRLCAD-ENABLE_RTSERVER BRLCAD-ENABLE_RUNTIME_DEBUG )
-       SET(SETTINGLIST3 BRLCAD_ARCH_BITSETTING BRLCAD-ENABLE_OPTIMIZED_BUILD
+       SET(SETTINGLIST3 BRLCAD_ARCH_BITSETTING BRLCAD_OPTIMIZED_BUILD
                BRLCAD-ENABLE_DEBUG_FLAGS BRLCAD-ENABLE_PROFILING 
BRLCAD-ENABLE_SMP BUILD_STATIC_LIBS BUILD_SHARED_LIBS 
BRLCAD-ENABLE_COMPILER_WARNINGS BRLCAD-ENABLE_VERBOSE_PROGRESS 
BRLCAD-INSTALL_EXAMPLE_GEOMETRY BRLCAD-BUILD_DOCBUILD_MSG)
        SET(ARRAYLIST SETTINGLIST1 SETTINGLIST2 SETTINGLIST3)
        SET(SETTING_LABEL_LENGTH 0)

Modified: brlcad/trunk/misc/CMake/CompilerFlags.cmake
===================================================================
--- brlcad/trunk/misc/CMake/CompilerFlags.cmake 2011-08-13 03:50:08 UTC (rev 
45962)
+++ brlcad/trunk/misc/CMake/CompilerFlags.cmake 2011-08-13 04:19:45 UTC (rev 
45963)
@@ -103,6 +103,13 @@
        ENDIF(${UPPER_FLAG}_COMPILER_FLAG)
 ENDMACRO()
 
+# Clear out any CMake-assigned defaults - We're managing
+# our own compile flags, and don't (for example) want NDEBUG
+# if we have debugging flags enabled for a Release build.
+STRING(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE)
+SET(CMAKE_C_FLAGS_${BUILD_TYPE} "")
+SET(CMAKE_CXX_FLAGS_${BUILD_TYPE} "")
+
 # try to use -pipe to speed up the compiles
 CHECK_C_FLAG(pipe)
 CHECK_CXX_FLAG(pipe)
@@ -216,7 +223,7 @@
 # -fast provokes a stack corruption in the shadow computations because
 # of strict aliasing getting enabled.  we _require_
 # -fno-strict-aliasing until someone changes how lists are managed.
-IF(BRLCAD-ENABLE_OPTIMIZED_BUILD)
+IF(${BRLCAD_OPTIMIZED_BUILD} STREQUAL "ON")
        CHECK_C_FLAG_GATHER(O3 OPTIMIZE_FLAGS)
        #CHECK_C_FLAG_GATHER(ffast-math OPTIMIZE_FLAGS)
        CHECK_C_FLAG_GATHER(fstrength-reduce OPTIMIZE_FLAGS)
@@ -228,9 +235,9 @@
        ELSE(NOT ${CMAKE_BUILD_TYPE} MATCHES "^Debug$" AND NOT 
BRLCAD-ENABLE_DEBUG AND NOT BRLCAD-ENABLE_PROFILING)
                CHECK_C_FLAG_GATHER(fno-omit-frame-pointer OPTIMIZE_FLAGS)
        ENDIF(NOT ${CMAKE_BUILD_TYPE} MATCHES "^Debug$" AND NOT 
BRLCAD-ENABLE_DEBUG AND NOT BRLCAD-ENABLE_PROFILING)
-       ADD_NEW_FLAG(C OPTIMIZE_FLAG)
-       ADD_NEW_FLAG(CXX OPTIMIZE_FLAG)
-ENDIF(BRLCAD-ENABLE_OPTIMIZED_BUILD)
+       ADD_NEW_FLAG(C OPTIMIZE_FLAGS)
+       ADD_NEW_FLAG(CXX OPTIMIZE_FLAGS)
+ENDIF(${BRLCAD_OPTIMIZED_BUILD} STREQUAL "ON")
 MARK_AS_ADVANCED(OPTIMIZE_FLAGS)
 #need to strip out non-debug-compat flags after the fact based on build type, 
or do something else
 #that will restore them if build type changes


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
FREE DOWNLOAD - uberSVN with Social Coding for Subversion.
Subversion made easy with a complete admin console. Easy 
to use, easy to manage, easy to install, easy to extend. 
Get a Free download of the new open ALM Subversion platform now.
http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to