1# Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
2#
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License, version 2.0,
5# as published by the Free Software Foundation.
6#
7# This program is also distributed with certain software (including
8# but not limited to OpenSSL) that is licensed under separate terms,
9# as designated in a particular file or component or in included license
10# documentation.  The authors of MySQL hereby grant you an additional
11# permission to link the program and your derivative works with the
12# separately licensed software that they have included with MySQL.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License, version 2.0, for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22
23IF(SIZEOF_VOIDP EQUAL 4)
24  SET(32BIT 1)
25ENDIF()
26IF(SIZEOF_VOIDP EQUAL 8)
27  SET(64BIT 1)
28ENDIF()
29
30# Compiler options
31IF(UNIX)
32
33  # Default GCC flags
34  IF(CMAKE_COMPILER_IS_GNUCC)
35    SET(COMMON_C_FLAGS               "-g -fno-omit-frame-pointer -fno-strict-aliasing")
36    # Disable inline optimizations for valgrind testing to avoid false positives
37    IF(WITH_VALGRIND)
38      SET(COMMON_C_FLAGS             "-fno-inline ${COMMON_C_FLAGS}")
39    ENDIF()
40    SET(CMAKE_C_FLAGS_DEBUG          "${COMMON_C_FLAGS}")
41    SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
42  ENDIF()
43  IF(CMAKE_COMPILER_IS_GNUCXX)
44    # GCC 6 has C++14 as default, set it explicitly to the old default.
45    EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
46                    OUTPUT_VARIABLE GXX_VERSION)
47    IF(GXX_VERSION VERSION_EQUAL 6.0 OR GXX_VERSION VERSION_GREATER 6.0)
48      SET(COMMON_CXX_FLAGS             "${COMMON_CXX_FLAGS} -std=gnu++03")
49    ENDIF()
50    SET(COMMON_CXX_FLAGS               "-g -fno-omit-frame-pointer -fno-strict-aliasing")
51    # Disable inline optimizations for valgrind testing to avoid false positives
52    IF(WITH_VALGRIND)
53      SET(COMMON_CXX_FLAGS             "-fno-inline ${COMMON_CXX_FLAGS}")
54    ENDIF()
55    SET(CMAKE_CXX_FLAGS_DEBUG          "${COMMON_CXX_FLAGS}")
56    SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
57  ENDIF()
58
59  # Default Clang flags
60  IF(CMAKE_C_COMPILER_ID MATCHES "Clang")
61    SET(COMMON_C_FLAGS               "-g -fno-omit-frame-pointer -fno-strict-aliasing")
62    SET(CMAKE_C_FLAGS_DEBUG          "${COMMON_C_FLAGS}")
63    SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
64  ENDIF()
65  IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
66    SET(COMMON_CXX_FLAGS               "-g -fno-omit-frame-pointer -fno-strict-aliasing")
67    IF(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6.0 OR
68        CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0)
69      IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
70        SET(COMMON_CXX_FLAGS           "${COMMON_CXX_FLAGS} -std=gnu++03")
71      ENDIF()
72    ENDIF()
73    SET(CMAKE_CXX_FLAGS_DEBUG          "${COMMON_CXX_FLAGS}")
74    SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
75  ENDIF()
76
77  # Solaris flags
78  IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
79    IF(CMAKE_SYSTEM_VERSION VERSION_GREATER "5.9")
80      # Link mysqld with mtmalloc on Solaris 10 and later
81      SET(WITH_MYSQLD_LDFLAGS "-lmtmalloc" CACHE STRING "")
82    ENDIF()
83    IF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
84
85      SET(SUNPRO_CXX_LIBRARY "stlport4" CACHE STRING
86        "What C++ library to use. The server needs stlport4. It is possible to build the client libraries with -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd")
87
88      IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
89        SET(COMMON_C_FLAGS                   "-g -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic")
90        SET(COMMON_CXX_FLAGS                 "-g0 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic")
91        # We have to specify "-xO1" for DEBUG flags here,
92        # see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6879978
93        SET(CMAKE_C_FLAGS_DEBUG              "-xO1 ${COMMON_C_FLAGS}")
94        SET(CMAKE_CXX_FLAGS_DEBUG            "-xO1 ${COMMON_CXX_FLAGS}")
95        IF(32BIT)
96          SET(CMAKE_C_FLAGS_RELWITHDEBINFO   "-xO2 ${COMMON_C_FLAGS}")
97          SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-xO2 ${COMMON_CXX_FLAGS}")
98        ELSEIF(64BIT)
99          SET(CMAKE_C_FLAGS_RELWITHDEBINFO   "-xO3 ${COMMON_C_FLAGS}")
100          SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-xO3 ${COMMON_CXX_FLAGS}")
101        ENDIF()
102      ELSE()
103        # Assume !x86 is SPARC
104        SET(COMMON_C_FLAGS                 "-g -xstrconst -mt")
105        SET(COMMON_CXX_FLAGS               "-g0 -mt")
106        IF(32BIT)
107          SET(COMMON_C_FLAGS               "${COMMON_C_FLAGS} -xarch=sparc")
108          SET(COMMON_CXX_FLAGS             "${COMMON_CXX_FLAGS} -xarch=sparc")
109	ENDIF()
110        SET(CMAKE_C_FLAGS_DEBUG            "${COMMON_C_FLAGS}")
111        SET(CMAKE_CXX_FLAGS_DEBUG          "${COMMON_CXX_FLAGS}")
112        SET(CMAKE_C_FLAGS_RELWITHDEBINFO   "-xO3 ${COMMON_C_FLAGS}")
113        SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-xO3 ${COMMON_CXX_FLAGS}")
114      ENDIF()
115    ENDIF()
116  ENDIF()
117ENDIF()
118