aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2018-01-16 10:17:27 -0800
committerGravatar zxu <zxu@google.com>2018-01-16 13:17:27 -0500
commitdf71c9ad8c2751672b8ae85915cc7f74f3db08c8 (patch)
treea9ff559e2f3190279d1442a6e3217a77c2e916d8 /cmake
parent2700198d93647da858714d3d80fe2b66fe4aac54 (diff)
Enable warnings in the CMake build (#669)
* Enable warnings when building with GCC or clang * Fix warnings
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CompilerSetup.cmake92
1 files changed, 92 insertions, 0 deletions
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)