summaryrefslogtreecommitdiff
path: root/CMake/AbseilConfigureCopts.cmake
blob: 96e0390b9dc852353b25afc83474415be6357ccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Abseil-specific compiler flags.  See absl/copts.bzl for description.
# DO NOT CHANGE THIS FILE WITHOUT THE CORRESPONDING CHANGE TO absl/copts.bzl

list(APPEND GCC_FLAGS
  -Wall
  -Wextra
  -Wcast-qual
  -Wconversion-null
  -Wmissing-declarations
  -Woverlength-strings
  -Wpointer-arith
  -Wunused-local-typedefs
  -Wunused-result
  -Wvarargs
  -Wwrite-strings
  -Wno-sign-compare
)

list(APPEND GCC_TEST_FLAGS
  -Wno-conversion-null
  -Wno-missing-declarations
  -Wno-sign-compare
  -Wno-unused-function
  -Wno-unused-parameter
  -Wno-unused-private-field
)

list(APPEND LLVM_FLAGS
  -Wall
  -Wextra
  -Weverything
  -Wno-c++98-compat-pedantic
  -Wno-conversion
  -Wno-covered-switch-default
  -Wno-deprecated
  -Wno-disabled-macro-expansion
  -Wno-double-promotion
  -Wno-comma
  -Wno-extra-semi
  -Wno-packed
  -Wno-padded
  -Wno-sign-compare
  -Wno-float-conversion
  -Wno-float-equal
  -Wno-format-nonliteral
  -Wno-gcc-compat
  -Wno-global-constructors
  -Wno-exit-time-destructors
  -Wno-nested-anon-types
  -Wno-non-modular-include-in-module
  -Wno-old-style-cast
  -Wno-range-loop-analysis
  -Wno-reserved-id-macro
  -Wno-shorten-64-to-32
  -Wno-switch-enum
  -Wno-thread-safety-negative
  -Wno-undef
  -Wno-unknown-warning-option
  -Wno-unreachable-code
  -Wno-unused-macros
  -Wno-weak-vtables
  -Wbitfield-enum-conversion
  -Wbool-conversion
  -Wconstant-conversion
  -Wenum-conversion
  -Wint-conversion
  -Wliteral-conversion
  -Wnon-literal-null-conversion
  -Wnull-conversion
  -Wobjc-literal-conversion
  -Wno-sign-conversion
  -Wstring-conversion
)

list(APPEND LLVM_TEST_FLAGS
  -Wno-c99-extensions
  -Wno-missing-noreturn
  -Wno-missing-prototypes
  -Wno-missing-variable-declarations
  -Wno-null-conversion
  -Wno-shadow
  -Wno-shift-sign-overflow
  -Wno-sign-compare
  -Wno-unused-function
  -Wno-unused-member-function
  -Wno-unused-parameter
  -Wno-unused-private-field
  -Wno-unused-template
  -Wno-used-but-marked-unused
  -Wno-zero-as-null-pointer-constant
  -Wno-gnu-zero-variadic-macro-arguments
)

list(APPEND MSVC_FLAGS
  /W3
  /wd4005
  /wd4018
  /wd4068
  /wd4180
  /wd4244
  /wd4267
  /wd4800
  /DNOMINMAX
  /DWIN32_LEAN_AND_MEAN
  /D_CRT_SECURE_NO_WARNINGS
  /D_SCL_SECURE_NO_WARNINGS
  /D_ENABLE_EXTENDED_ALIGNED_STORAGE
)

list(APPEND MSVC_TEST_FLAGS
  /wd4101
  /wd4503
)

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  set(ABSL_DEFAULT_COPTS "${GCC_FLAGS}")
  set(ABSL_TEST_COPTS "${GCC_FLAGS};${GCC_TEST_FLAGS}")
  set(ABSL_EXCEPTIONS_FLAG "-fexceptions")
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
  # MATCHES so we get both Clang and AppleClang
  set(ABSL_DEFAULT_COPTS "${LLVM_FLAGS}")
  set(ABSL_TEST_COPTS "${LLVM_FLAGS};${LLVM_TEST_FLAGS}")
  set(ABSL_EXCEPTIONS_FLAG "-fexceptions")
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  set(ABSL_DEFAULT_COPTS "${MSVC_FLAGS}")
  set(ABSL_TEST_COPTS "${MSVC_FLAGS};${MSVC_TEST_FLAGS}")
  set(ABSL_EXCEPTIONS_FLAG "/U_HAS_EXCEPTIONS;/D_HAS_EXCEPTIONS=1;/EHsc")
else()
  message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER}.  Building with no default flags")
  set(ABSL_DEFAULT_COPTS "")
  set(ABSL_TEST_COPTS "")
  set(ABSL_EXCEPTIONS_FLAG "")
endif()

# This flag is used internally for Bazel builds and is kept here for consistency
set(ABSL_EXCEPTIONS_FLAG_LINKOPTS "")

if("${CMAKE_CXX_STANDARD}" EQUAL 98)
  message(FATAL_ERROR "Abseil requires at least C++11")
elseif(NOT "${CMAKE_CXX_STANDARD}")
  message(STATUS "No CMAKE_CXX_STANDARD set, assuming 11")
  set(ABSL_CXX_STANDARD 11)
else()
  set(ABSL_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
endif()