Imported Upstream version 3.23.0
[platform/upstream/cmake.git] / CompileFlags.cmake
1 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
3
4 #-----------------------------------------------------------------------------
5 # set some special flags for different compilers
6 #
7 if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Intel")
8   set(_INTEL_WINDOWS 1)
9 endif()
10
11 if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Clang"
12    AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
13   set(_CLANG_MSVC_WINDOWS 1)
14 endif()
15
16 # Disable deprecation warnings for standard C functions.
17 # really only needed for newer versions of VS, but should
18 # not hurt other versions, and this will work into the
19 # future
20 if(MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS)
21   add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
22 else()
23 endif()
24
25 if(MSVC)
26   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000")
27 endif()
28
29 # MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it.
30 if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28)
31   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105")
32   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd5105")
33 endif()
34
35 if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
36   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000")
37 endif()
38
39 #silence duplicate symbol warnings on AIX
40 if(CMAKE_SYSTEM_NAME MATCHES "AIX")
41   if(NOT CMAKE_COMPILER_IS_GNUCXX)
42     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -bhalt:5 ")
43   endif()
44 endif()
45
46 if(CMAKE_SYSTEM MATCHES "OSF1-V")
47   if(NOT CMAKE_COMPILER_IS_GNUCXX)
48     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ")
49   endif()
50 endif()
51
52 # Workaround for short jump tables on PA-RISC
53 if(CMAKE_SYSTEM_PROCESSOR MATCHES "^parisc")
54   if(CMAKE_COMPILER_IS_GNUCC)
55     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-calls")
56   endif()
57   if(CMAKE_COMPILER_IS_GNUCXX)
58     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlong-calls")
59   endif()
60 endif()
61
62 # Use 64-bit off_t on 32-bit Linux
63 if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
64   # ensure 64bit offsets are used for filesystem accesses for 32bit compilation
65   add_definitions(-D_FILE_OFFSET_BITS=64)
66 endif()
67
68 # Workaround for TOC Overflow on ppc64
69 set(bigTocFlag "")
70 if(CMAKE_SYSTEM_NAME STREQUAL "AIX" AND
71    CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
72   set(bigTocFlag "-Wl,-bbigtoc")
73 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND
74    CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64")
75   set(bigTocFlag "-Wl,--no-multi-toc")
76 endif()
77 if(bigTocFlag)
78   include(CheckCXXLinkerFlag)
79   check_cxx_linker_flag(${bigTocFlag} BIG_TOC_FLAG_SUPPORTED)
80   if(BIG_TOC_FLAG_SUPPORTED)
81     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${bigTocFlag}")
82   endif()
83 endif()
84
85 if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro AND
86     NOT DEFINED CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION)
87   if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
88     if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD EQUAL 98)
89       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03")
90     elseif(CMAKE_VERSION VERSION_LESS 3.8.20170502)
91       # CMake knows how to add this flag for compilation as C++11,
92       # but has not been taught that SunPro needs it for linking too.
93       # Add it in a place that will be used for both.
94       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
95     endif()
96   else()
97     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4")
98   endif()
99 endif()
100
101 foreach(lang C CXX)
102   # Suppress warnings from PGI compiler.
103   if (CMAKE_${lang}_COMPILER_ID STREQUAL "PGI")
104     set(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS} -w")
105   endif()
106 endforeach()
107
108 # use the ansi CXX compile flag for building cmake
109 if (CMAKE_ANSI_CXXFLAGS)
110   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_ANSI_CXXFLAGS}")
111 endif ()
112
113 if (CMAKE_ANSI_CFLAGS)
114   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
115 endif ()
116
117 # Allow per-translation-unit parallel builds when using MSVC
118 if(CMAKE_GENERATOR MATCHES "Visual Studio" AND
119    (CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel" OR
120    CMAKE_CXX_COMPILER_ID MATCHES "MSVC|Intel"))
121
122   set(CMake_MSVC_PARALLEL ON CACHE STRING "\
123 Enables /MP flag for parallel builds using MSVC. Specify an \
124 integer value to control the number of threads used (Only \
125 works on some older versions of Visual Studio). Setting to \
126 ON lets the toolchain decide how many threads to use. Set to \
127 OFF to disable /MP completely." )
128
129   if(CMake_MSVC_PARALLEL)
130     if(CMake_MSVC_PARALLEL GREATER 0)
131       string(APPEND CMAKE_C_FLAGS " /MP${CMake_MSVC_PARALLEL}")
132       string(APPEND CMAKE_CXX_FLAGS " /MP${CMake_MSVC_PARALLEL}")
133     else()
134       string(APPEND CMAKE_C_FLAGS " /MP")
135       string(APPEND CMAKE_CXX_FLAGS " /MP")
136     endif()
137   endif()
138 endif()