From df71c9ad8c2751672b8ae85915cc7f74f3db08c8 Mon Sep 17 00:00:00 2001 From: Gil Date: Tue, 16 Jan 2018 10:17:27 -0800 Subject: Enable warnings in the CMake build (#669) * Enable warnings when building with GCC or clang * Fix warnings --- cmake/CompilerSetup.cmake | 92 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 cmake/CompilerSetup.cmake (limited to 'cmake') diff --git a/cmake/CompilerSetup.cmake b/cmake/CompilerSetup.cmake new file mode 100644 index 0000000..8bcfa76 --- /dev/null +++ b/cmake/CompilerSetup.cmake @@ -0,0 +1,92 @@ +# Copyright 2018 Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# C++ Compiler setup + +# We use C++11 +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CLANG ON) +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(GNU ON) +endif() + +if(CLANG OR GNU) + set( + common_flags + -Wall -Wextra -Wconversion -Werror + + # Be super pedantic about format strings + -Wformat + + # Avoid use of uninitialized values + -Wuninitialized + -fno-common + + # Delete unused things + -Wunused-function -Wunused-value -Wunused-variable + + # Cut down on symbol clutter + # TODO(wilhuff) try -fvisibility=hidden + -fvisibility-inlines-hidden + ) + + set( + c_flags + -Wstrict-prototypes + ) + + if(CLANG) + list( + APPEND common_flags + -Wconditional-uninitialized -Werror=return-type -Winfinite-recursion -Wmove + -Wrange-loop-analysis -Wunreachable-code + ) + endif() + + foreach(flag ${common_flags} ${c_flags}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") + endforeach() + + foreach(flag ${common_flags}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") + endforeach() +endif() + +if(APPLE) + # CMake has no special support for Objective-C as a distinct language but + # enabling modules and other clang extensions would apply even to regular C++ + # sources which is nonportable. Keep these flags separate to avoid misuse. + set( + OBJC_FLAGS + -Werror=deprecated-objc-isa-usage + -Werror=non-modular-include-in-framework-module + -Werror=objc-root-class + + -Wblock-capture-autoreleasing + -Wimplicit-atomic-properties + -Wnon-modular-include-in-framework-module + + -fobjc-arc + -fmodules + -fno-autolink + + -F${FIREBASE_INSTALL_DIR}/Frameworks + ) +endif(APPLE) -- cgit v1.2.3