Revision: 70275 http://sourceforge.net/p/brlcad/code/70275 Author: starseeker Date: 2017-09-13 23:26:14 +0000 (Wed, 13 Sep 2017) Log Message: ----------- Consolidate BRLCAD_CompilerFlags.cmake into the toplevel CMakeLists.txt file.
Modified Paths: -------------- brlcad/trunk/CMakeLists.txt brlcad/trunk/misc/CMake/CMakeLists.txt Removed Paths: ------------- brlcad/trunk/misc/CMake/BRLCAD_CompilerFlags.cmake Modified: brlcad/trunk/CMakeLists.txt =================================================================== --- brlcad/trunk/CMakeLists.txt 2017-09-13 23:21:46 UTC (rev 70274) +++ brlcad/trunk/CMakeLists.txt 2017-09-13 23:26:14 UTC (rev 70275) @@ -1903,12 +1903,233 @@ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_BAK}) # ******************************************************************* # +# The following tests are almost entirely for gcc-style flags. +if(NOT MSVC) + # -ffast-math 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. + # -fast-math results in non-IEEE floating point math among a handful + # of other optimizations that cause substantial error in ray tracing + # and tessellation (and probably more). + CHECK_C_FLAG(O3 GROUPS OPTIMIZE_C_FLAGS) + # CHECK_C_FLAG(Ofast GROUPS OPTIMIZE_C_FLAGS) + # CHECK_C_FLAG(march=native GROUPS OPTIMIZE_C_FLAGS) + CHECK_C_FLAG(fstrength-reduce GROUPS OPTIMIZE_C_FLAGS) + CHECK_C_FLAG(fexpensive-optimizations GROUPS OPTIMIZE_C_FLAGS) + CHECK_C_FLAG(finline-functions GROUPS OPTIMIZE_C_FLAGS) + CHECK_C_FLAG("finline-limit=10000 --param inline-unit-growth=300 --param large-function-growth=300" GROUPS OPTIMIZE_C_FLAGS) + CHECK_CXX_FLAG(O3 GROUPS OPTIMIZE_CXX_FLAGS) + # CHECK_CXX_FLAG(Ofast GROUPS OPTIMIZE_CXX_FLAGS) + # CHECK_CXX_FLAG(march=native GROUPS OPTIMIZE_CXX_FLAGS) + CHECK_CXX_FLAG(fstrength-reduce GROUPS OPTIMIZE_CXX_FLAGS) + CHECK_CXX_FLAG(fexpensive-optimizations GROUPS OPTIMIZE_CXX_FLAGS) + CHECK_CXX_FLAG(finline-functions GROUPS OPTIMIZE_CXX_FLAGS) + CHECK_CXX_FLAG("finline-limit=10000 --param inline-unit-growth=300 --param large-function-growth=300" GROUPS OPTIMIZE_CXX_FLAGS) -if(NOT MSVC) - # We could include this, but these tests are almost entirely for - # gcc-style flags. This file is intentionally included after we - # wipe out the various FLAGS variables. - include(BRLCAD_CompilerFlags) + # FIXME: need to conditionally set gcc-ar/gcc-ranlib if we using -flto + ####### + # CHECK_C_FLAG(flto GROUPS OPTIMIZE_C_FLAGS) + # CHECK_CXX_FLAG(flto GROUPS OPTIMIZE_CXX_FLAGS) + # SET(CMAKE_AR "gcc-ar" CACHE FILEPATH "Archiver" FORCE) + # SET(CMAKE_RANLIB "gcc-ranlib" CACHE FILEPATH "Ranlib" FORCE) + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + if(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) + CHECK_C_FLAG(fomit-frame-pointer GROUPS OPTIMIZE_C_FLAGS) + CHECK_CXX_FLAG(fomit-frame-pointer GROUPS OPTIMIZE_CXX_FLAGS) + else(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) + CHECK_C_FLAG(fno-omit-frame-pointer GROUPS OPTIMIZE_C_FLAGS) + CHECK_CXX_FLAG(fno-omit-frame-pointer GROUPS OPTIMIZE_CXX_FLAGS) + endif(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + + if(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") + if(CMAKE_CONFIGURATION_TYPES) + set(opt_conf_list "Release") + else(CMAKE_CONFIGURATION_TYPES) + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + set(opt_conf_list "ALL") + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + endif(CMAKE_CONFIGURATION_TYPES) + else(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + set(opt_conf_list "ALL") + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") + endif(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") + if(opt_conf_list) + ADD_NEW_FLAG(C OPTIMIZE_C_FLAGS "${opt_conf_list}") + ADD_NEW_FLAG(CXX OPTIMIZE_CXX_FLAGS "${opt_conf_list}") + endif(opt_conf_list) + + # enable stack protection for unoptimized debug builds. this is + # intended to help make it easier to identify problematic code but + # only when compiling unoptimized (because the extra barrier checks + # can affect the memory footprint and runtime performance. + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG) + CHECK_C_FLAG(fstack-protector-all) + CHECK_CXX_FLAG(fstack-protector-all) + # checking both in case compiling c/c++ with different compilers + CHECK_C_FLAG(qstackprotect) + CHECK_CXX_FLAG(qstackprotect) + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG) + + # enable memory error detector AddressSanitizer (see + # https://code.google.com/p/address-sanitizer/ for more info.) + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_ADDRESS_SANITIZER) + CHECK_C_FLAG(fsanitize=address) + CHECK_C_FLAG(fno-omit-frame-pointer) + CHECK_CXX_FLAG(fsanitize=address) + CHECK_CXX_FLAG(fno-omit-frame-pointer) + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_ADDRESS_SANITIZER) + + # enable data race detector ThreadSanitizer (see + # https://code.google.com/p/thread-sanitizer/ for more info.) + if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_THREAD_SANITIZER) + CHECK_C_FLAG(fsanitize=thread) + CHECK_CXX_FLAG(fsanitize=thread) + endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_THREAD_SANITIZER) + + # verbose warning flags. we intentionally try to turn on as many as + # possible. adding more is encouraged (as long as all issues are + # fixed first). + if(BRLCAD_ENABLE_COMPILER_WARNINGS OR BRLCAD_ENABLE_STRICT) + # also of interest: + # -Wunreachable-code -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -ansi + # -Wformat=2 (after bu_fopen_uniq() is obsolete) + CHECK_C_FLAG(pedantic) + CHECK_CXX_FLAG(pedantic) + + #Added to make llvm happy on FreeBSD, but a good idea anyway + CHECK_C_FLAG(pedantic-errors) + #CHECK_CXX_FLAG(pedantic-errors) #This line makes poissonrecon break, so disable for now + + # this catches a lot, it's good + CHECK_C_FLAG(Wall) + CHECK_CXX_FLAG(Wall) + + # this catches a lot more, also good + CHECK_C_FLAG(Wextra) + CHECK_CXX_FLAG(Wextra) + + # make sure our preprocessor logic references defined symbol names + CHECK_C_FLAG(Wundef) + CHECK_CXX_FLAG(Wundef) + + # this makes sure we don't try to compare floating point exactly + CHECK_C_FLAG(Wfloat-equal) + CHECK_CXX_FLAG(Wfloat-equal) + + # make sure we're using unambiguous symbol names, no shadowing + CHECK_C_FLAG(Wshadow) + CHECK_CXX_FLAG(Wshadow) + + # make sure we're not dangerously casting return types. C-only for + # gcc, but maybe not for clang or others. + CHECK_C_FLAG(Wbad-function-cast) + CHECK_CXX_FLAG(Wbad-function-cast) + + # this makes sure we don't declare variables mid-scope, helps build on Windows + CHECK_C_FLAG(Wdeclaration-after-statement) + CHECK_CXX_FLAG(Wdeclaration-after-statement) + + # C-only: this makes sure C sources will compile as C++ code + CHECK_C_FLAG(Wc++-compat) + + # FIXME: this one is a lot of work, a work-in-progress, but good to have eventually + # this makes sure prototypes are properly declared, no k&r and no assuming () means (void) + # CHECK_C_FLAG(Wstrict-prototypes) + + # FIXME: shouldn't be throwing away const, should be using it more. ton of work. + # this reports where we throw away const + # CHECK_C_FLAG(Wcast-qual) + # CHECK_CXX_FLAG(Wcast-qual) + + # check for redundant declarations + # CHECK_C_FLAG(Wredundant-decls) + # CHECK_CXX_FLAG(Wredundant-decls) + + # want C inline warnings, but not for c++. versions of g++ (circa + # 4.7) spew unquellable bogus warnings on default constructors that + # we don't have access to (e.g., in opennurbs and boost), so turn + # them off + CHECK_C_FLAG(Winline) + CHECK_CXX_FLAG(Wno-inline) + + # this makes sure we don't warn about using long long. really, it's okay. + CHECK_C_FLAG(Wno-long-long) + CHECK_CXX_FLAG(Wno-long-long) + + # this is for X11 headers, they use variadic macros + CHECK_C_FLAG(Wno-variadic-macros) + CHECK_CXX_FLAG(Wno-variadic-macros) + + # this is used to check Doxygen comment syntax + CHECK_C_FLAG(Wdocumentation) + CHECK_CXX_FLAG(Wdocumentation) + + endif(BRLCAD_ENABLE_COMPILER_WARNINGS OR BRLCAD_ENABLE_STRICT) + + if(BRLCAD_ENABLE_COVERAGE) + CHECK_C_FLAG(ftest-coverage) + CHECK_CXX_FLAG(ftest-coverage) + if(FTEST_COVERAGE_C_FLAG_FOUND) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage -fprofile-arcs") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage -fprofile-arcs") + else(FTEST_COVERAGE_C_FLAG_FOUND) + message(SEND_ERROR "Building with coverage is not supported by BRL-CAD on this platform.") + endif(FTEST_COVERAGE_C_FLAG_FOUND) + endif(BRLCAD_ENABLE_COVERAGE) + + if(BRLCAD_ENABLE_STRICT) + # If we're going strict, suppress C11 warnings about isnan due to + # clang issue: https://llvm.org/bugs/show_bug.cgi?id=17788 + CHECK_C_FLAG(Wno-c11-extensions) + CHECK_CXX_FLAG(Wno-c11-extensions) + + # Add the flag that actually turns warnings into errors + CHECK_C_FLAG(Werror) + CHECK_CXX_FLAG(Werror) + endif(BRLCAD_ENABLE_STRICT) + + # End detection of flags intended for BRL-CAD use. Make sure all variables have + # their appropriate values written to the cache - otherwise, DiffCache will see + # differences and update the COUNT file. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "C Compiler flags used by all targets" FORCE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler flags used by all targets" FORCE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING "Linker flags used by all shared library targets" FORCE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Linker flags used by all exe targets" FORCE) + mark_as_advanced(CMAKE_C_FLAGS) + mark_as_advanced(CMAKE_CXX_FLAGS) + mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS) + mark_as_advanced(CMAKE_EXE_LINKER_FLAGS) + if(CMAKE_BUILD_TYPE) + string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) + set(CMAKE_C_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "C Compiler flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) + set(CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "C++ Compiler flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) + set(CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "Linker flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "Exe linker flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) + mark_as_advanced(CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}) + mark_as_advanced(CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}) + mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER}) + mark_as_advanced(CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER}) + endif(CMAKE_BUILD_TYPE) + + foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) + set(CMAKE_C_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_C_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "C Compiler flags used for ${CFG_TYPE} builds" FORCE) + set(CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "C++ Compiler flags used for ${CFG_TYPE} builds" FORCE) + set(CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "Linker flags used for ${CFG_TYPE} builds" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "Exe linker flags used for ${CFG_TYPE} builds" FORCE) + mark_as_advanced(CMAKE_C_FLAGS_${CFG_TYPE_UPPER}) + mark_as_advanced(CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER}) + mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER}) + mark_as_advanced(CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER}) + endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) + + # TODO - figure out if this should be integrated above + CHECK_COMPILER_FLAG(C "-Wunused-const-variable" HAVE_C_WUNUSED_CONST_VARIABLE) + endif(NOT MSVC) Deleted: brlcad/trunk/misc/CMake/BRLCAD_CompilerFlags.cmake =================================================================== --- brlcad/trunk/misc/CMake/BRLCAD_CompilerFlags.cmake 2017-09-13 23:21:46 UTC (rev 70274) +++ brlcad/trunk/misc/CMake/BRLCAD_CompilerFlags.cmake 2017-09-13 23:26:14 UTC (rev 70275) @@ -1,270 +0,0 @@ -# B R L C A D _ C O M P I L E R F L A G S . C M A K E -# BRL-CAD -# -# Copyright (c) 2011-2016 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -### - -# -ffast-math 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. -# -fast-math results in non-IEEE floating point math among a handful -# of other optimizations that cause substantial error in ray tracing -# and tessellation (and probably more). -CHECK_C_FLAG(O3 GROUPS OPTIMIZE_C_FLAGS) -# CHECK_C_FLAG(Ofast GROUPS OPTIMIZE_C_FLAGS) -# CHECK_C_FLAG(march=native GROUPS OPTIMIZE_C_FLAGS) -CHECK_C_FLAG(fstrength-reduce GROUPS OPTIMIZE_C_FLAGS) -CHECK_C_FLAG(fexpensive-optimizations GROUPS OPTIMIZE_C_FLAGS) -CHECK_C_FLAG(finline-functions GROUPS OPTIMIZE_C_FLAGS) -CHECK_C_FLAG("finline-limit=10000 --param inline-unit-growth=300 --param large-function-growth=300" GROUPS OPTIMIZE_C_FLAGS) -CHECK_CXX_FLAG(O3 GROUPS OPTIMIZE_CXX_FLAGS) -# CHECK_CXX_FLAG(Ofast GROUPS OPTIMIZE_CXX_FLAGS) -# CHECK_CXX_FLAG(march=native GROUPS OPTIMIZE_CXX_FLAGS) -CHECK_CXX_FLAG(fstrength-reduce GROUPS OPTIMIZE_CXX_FLAGS) -CHECK_CXX_FLAG(fexpensive-optimizations GROUPS OPTIMIZE_CXX_FLAGS) -CHECK_CXX_FLAG(finline-functions GROUPS OPTIMIZE_CXX_FLAGS) -CHECK_CXX_FLAG("finline-limit=10000 --param inline-unit-growth=300 --param large-function-growth=300" GROUPS OPTIMIZE_CXX_FLAGS) - -# FIXME: need to conditionally set gcc-ar/gcc-ranlib if we using -flto -####### -# CHECK_C_FLAG(flto GROUPS OPTIMIZE_C_FLAGS) -# CHECK_CXX_FLAG(flto GROUPS OPTIMIZE_CXX_FLAGS) -# SET(CMAKE_AR "gcc-ar" CACHE FILEPATH "Archiver" FORCE) -# SET(CMAKE_RANLIB "gcc-ranlib" CACHE FILEPATH "Ranlib" FORCE) - -if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - if(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) - CHECK_C_FLAG(fomit-frame-pointer GROUPS OPTIMIZE_C_FLAGS) - CHECK_CXX_FLAG(fomit-frame-pointer GROUPS OPTIMIZE_CXX_FLAGS) - else(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) - CHECK_C_FLAG(fno-omit-frame-pointer GROUPS OPTIMIZE_C_FLAGS) - CHECK_CXX_FLAG(fno-omit-frame-pointer GROUPS OPTIMIZE_CXX_FLAGS) - endif(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) -endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - -if(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") - if(CMAKE_CONFIGURATION_TYPES) - set(opt_conf_list "Release") - else(CMAKE_CONFIGURATION_TYPES) - if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - set(opt_conf_list "ALL") - endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - endif(CMAKE_CONFIGURATION_TYPES) -else(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") - if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - set(opt_conf_list "ALL") - endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") -endif(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") -if(opt_conf_list) - ADD_NEW_FLAG(C OPTIMIZE_C_FLAGS "${opt_conf_list}") - ADD_NEW_FLAG(CXX OPTIMIZE_CXX_FLAGS "${opt_conf_list}") -endif(opt_conf_list) - -# enable stack protection for unoptimized debug builds. this is -# intended to help make it easier to identify problematic code but -# only when compiling unoptimized (because the extra barrier checks -# can affect the memory footprint and runtime performance. -if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG) - CHECK_C_FLAG(fstack-protector-all) - CHECK_CXX_FLAG(fstack-protector-all) - # checking both in case compiling c/c++ with different compilers - CHECK_C_FLAG(qstackprotect) - CHECK_CXX_FLAG(qstackprotect) -endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG) - -# enable memory error detector AddressSanitizer (see -# https://code.google.com/p/address-sanitizer/ for more info.) -if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_ADDRESS_SANITIZER) - CHECK_C_FLAG(fsanitize=address) - CHECK_C_FLAG(fno-omit-frame-pointer) - CHECK_CXX_FLAG(fsanitize=address) - CHECK_CXX_FLAG(fno-omit-frame-pointer) -endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_ADDRESS_SANITIZER) - -# enable data race detector ThreadSanitizer (see -# https://code.google.com/p/thread-sanitizer/ for more info.) -if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_THREAD_SANITIZER) - CHECK_C_FLAG(fsanitize=thread) - CHECK_CXX_FLAG(fsanitize=thread) -endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "OFF" AND BRLCAD_FLAGS_DEBUG AND BRLCAD_THREAD_SANITIZER) - - -# verbose warning flags. we intentionally try to turn on as many as -# possible. adding more is encouraged (as long as all issues are -# fixed first). -if(BRLCAD_ENABLE_COMPILER_WARNINGS OR BRLCAD_ENABLE_STRICT) - # also of interest: - # -Wunreachable-code -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -ansi - # -Wformat=2 (after bu_fopen_uniq() is obsolete) - CHECK_C_FLAG(pedantic) - CHECK_CXX_FLAG(pedantic) - - #Added to make llvm happy on FreeBSD, but a good idea anyway - CHECK_C_FLAG(pedantic-errors) - #CHECK_CXX_FLAG(pedantic-errors) #This line makes poissonrecon break, so disable for now - - # this catches a lot, it's good - CHECK_C_FLAG(Wall) - CHECK_CXX_FLAG(Wall) - - # this catches a lot more, also good - CHECK_C_FLAG(Wextra) - CHECK_CXX_FLAG(Wextra) - - # make sure our preprocessor logic references defined symbol names - CHECK_C_FLAG(Wundef) - CHECK_CXX_FLAG(Wundef) - - # this makes sure we don't try to compare floating point exactly - CHECK_C_FLAG(Wfloat-equal) - CHECK_CXX_FLAG(Wfloat-equal) - - # make sure we're using unambiguous symbol names, no shadowing - CHECK_C_FLAG(Wshadow) - CHECK_CXX_FLAG(Wshadow) - - # make sure we're not dangerously casting return types. C-only for - # gcc, but maybe not for clang or others. - CHECK_C_FLAG(Wbad-function-cast) - CHECK_CXX_FLAG(Wbad-function-cast) - - # this makes sure we don't declare variables mid-scope, helps build on Windows - CHECK_C_FLAG(Wdeclaration-after-statement) - CHECK_CXX_FLAG(Wdeclaration-after-statement) - - # C-only: this makes sure C sources will compile as C++ code - CHECK_C_FLAG(Wc++-compat) - - # FIXME: this one is a lot of work, a work-in-progress, but good to have eventually - # this makes sure prototypes are properly declared, no k&r and no assuming () means (void) - # CHECK_C_FLAG(Wstrict-prototypes) - - # FIXME: shouldn't be throwing away const, should be using it more. ton of work. - # this reports where we throw away const - # CHECK_C_FLAG(Wcast-qual) - # CHECK_CXX_FLAG(Wcast-qual) - - # check for redundant declarations - # CHECK_C_FLAG(Wredundant-decls) - # CHECK_CXX_FLAG(Wredundant-decls) - - # want C inline warnings, but not for c++. versions of g++ (circa - # 4.7) spew unquellable bogus warnings on default constructors that - # we don't have access to (e.g., in opennurbs and boost), so turn - # them off - CHECK_C_FLAG(Winline) - CHECK_CXX_FLAG(Wno-inline) - - # this makes sure we don't warn about using long long. really, it's okay. - CHECK_C_FLAG(Wno-long-long) - CHECK_CXX_FLAG(Wno-long-long) - - # this is for X11 headers, they use variadic macros - CHECK_C_FLAG(Wno-variadic-macros) - CHECK_CXX_FLAG(Wno-variadic-macros) - - # this is used to check Doxygen comment syntax - CHECK_C_FLAG(Wdocumentation) - CHECK_CXX_FLAG(Wdocumentation) - -endif(BRLCAD_ENABLE_COMPILER_WARNINGS OR BRLCAD_ENABLE_STRICT) - -if(BRLCAD_ENABLE_COVERAGE) - CHECK_C_FLAG(ftest-coverage) - CHECK_CXX_FLAG(ftest-coverage) - if(FTEST_COVERAGE_C_FLAG_FOUND) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage -fprofile-arcs") - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage -fprofile-arcs") - else(FTEST_COVERAGE_C_FLAG_FOUND) - message(SEND_ERROR "Building with coverage is not supported by BRL-CAD on this platform.") - endif(FTEST_COVERAGE_C_FLAG_FOUND) -endif(BRLCAD_ENABLE_COVERAGE) - -if(BRLCAD_ENABLE_STRICT) - # If we're going strict, suppress C11 warnings about isnan due to - # clang issue: https://llvm.org/bugs/show_bug.cgi?id=17788 - CHECK_C_FLAG(Wno-c11-extensions) - CHECK_CXX_FLAG(Wno-c11-extensions) - - # Add the flag that actually turns warnings into errors - CHECK_C_FLAG(Werror) - CHECK_CXX_FLAG(Werror) -endif(BRLCAD_ENABLE_STRICT) - -# End detection of flags intended for BRL-CAD use. Make sure all variables have -# their appropriate values written to the cache - otherwise, DiffCache will see -# differences and update the COUNT file. -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "C Compiler flags used by all targets" FORCE) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "C++ Compiler flags used by all targets" FORCE) -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING "Linker flags used by all shared library targets" FORCE) -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Linker flags used by all exe targets" FORCE) -mark_as_advanced(CMAKE_C_FLAGS) -mark_as_advanced(CMAKE_CXX_FLAGS) -mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS) -mark_as_advanced(CMAKE_EXE_LINKER_FLAGS) -if(CMAKE_BUILD_TYPE) - string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) - set(CMAKE_C_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "C Compiler flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) - set(CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "C++ Compiler flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) - set(CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "Linker flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) - set(CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER} "${CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER}}" CACHE STRING "Exe linker flags used for ${CMAKE_BUILD_TYPE} builds" FORCE) - mark_as_advanced(CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}) - mark_as_advanced(CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}) - mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS_${BUILD_TYPE_UPPER}) - mark_as_advanced(CMAKE_EXE_LINKER_FLAGS_${BUILD_TYPE_UPPER}) -endif(CMAKE_BUILD_TYPE) - -foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) - set(CMAKE_C_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_C_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "C Compiler flags used for ${CFG_TYPE} builds" FORCE) - set(CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "C++ Compiler flags used for ${CFG_TYPE} builds" FORCE) - set(CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "Linker flags used for ${CFG_TYPE} builds" FORCE) - set(CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER} "${CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER}}" CACHE STRING "Exe linker flags used for ${CFG_TYPE} builds" FORCE) - mark_as_advanced(CMAKE_C_FLAGS_${CFG_TYPE_UPPER}) - mark_as_advanced(CMAKE_CXX_FLAGS_${CFG_TYPE_UPPER}) - mark_as_advanced(CMAKE_SHARED_LINKER_FLAGS_${CFG_TYPE_UPPER}) - mark_as_advanced(CMAKE_EXE_LINKER_FLAGS_${CFG_TYPE_UPPER}) -endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - -# TODO - figure out if this should be integrated above -CHECK_COMPILER_FLAG(C "-Wunused-const-variable" HAVE_C_WUNUSED_CONST_VARIABLE) - - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 Modified: brlcad/trunk/misc/CMake/CMakeLists.txt =================================================================== --- brlcad/trunk/misc/CMake/CMakeLists.txt 2017-09-13 23:21:46 UTC (rev 70274) +++ brlcad/trunk/misc/CMake/CMakeLists.txt 2017-09-13 23:26:14 UTC (rev 70275) @@ -1,7 +1,6 @@ set(cmake_ignore_files BRLCAD_CPackOptions.cmake.in BRLCAD_CheckFunctions.cmake - BRLCAD_CompilerFlags.cmake BRLCAD_Options.cmake BRLCAD_Summary.cmake BRLCAD_Targets.cmake This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits