#
# This file is used as a basis for the following compilers:
#
# - The GNU C++ compiler (g++)
# - LLVM
# - Clang
#
# Platform-specific options shared by these compilers are put into:
#
# - gcc-base-mac.conf
# - gcc-base-unix.conf
#
# These base files are then combined with configurations for each compiler:
#
# - g++-base.conf
# - g++-macx.conf
# - g++-unix.conf
# - llvm.conf
# - clang.conf
#
# The combination happens in the top level mkspec, by including a platform-
# specific version of the base-file, for example gcc-base-mac.conf, and then
# a (possibly platform-specific) version of the actual compiler configuration,
# for example g++-macx.conf.
#
# If you are making changes to any of these files, please consider the
# possible effect it may have due to these include-rules, and whether it
# might make more sense to share the rule or make it more specific.
#
# To verify that your change has the desired effect on the final configuration
# you can use the manual test in tests/manual/mkspecs.
#

QMAKE_CFLAGS_OPTIMIZE      = -O2
QMAKE_CFLAGS_OPTIMIZE_FULL = -O3
QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Og
QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os

!equals(QMAKE_HOST.os, Windows): QMAKE_CFLAGS += -pipe
QMAKE_CFLAGS_DEPS          += -M
QMAKE_CFLAGS_WARN_ON       += -Wall -W
QMAKE_CFLAGS_WARN_OFF      += -w
QMAKE_CFLAGS_RELEASE       += $$QMAKE_CFLAGS_OPTIMIZE
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g
QMAKE_CFLAGS_DEBUG         += -g
QMAKE_CFLAGS_SHLIB         += $$QMAKE_CFLAGS_PIC
QMAKE_CFLAGS_STATIC_LIB    += $$QMAKE_CFLAGS_PIC
QMAKE_CFLAGS_APP           += $$QMAKE_CFLAGS_PIC
QMAKE_CFLAGS_ISYSTEM        =
QMAKE_CFLAGS_YACC          += -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_HIDESYMS      += -fvisibility=hidden
QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions
QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections -fdata-sections
QMAKE_CFLAGS_LTCG           = -flto -fno-fat-lto-objects
QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects
QMAKE_CFLAGS_DISABLE_LTCG   = -fno-lto

QMAKE_CXXFLAGS            += $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS       += $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON    += $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF   += $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE    += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG      += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB      += $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS_APP        += $$QMAKE_CFLAGS_APP
QMAKE_CXXFLAGS_YACC       += $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_HIDESYMS   += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
QMAKE_CXXFLAGS_EXCEPTIONS_OFF += $$QMAKE_CFLAGS_EXCEPTIONS_OFF
QMAKE_CXXFLAGS_RTTI_ON     = -frtti
QMAKE_CXXFLAGS_RTTI_OFF    = -fno-rtti
QMAKE_CXXFLAGS_SPLIT_SECTIONS += $$QMAKE_CFLAGS_SPLIT_SECTIONS
QMAKE_CXXFLAGS_LTCG        = $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_LTCG_FATOBJECTS = $$QMAKE_CFLAGS_LTCG_FATOBJECTS
QMAKE_CXXFLAGS_DISABLE_LTCG   = $$QMAKE_CFLAGS_DISABLE_LTCG

QMAKE_LFLAGS           +=
QMAKE_LFLAGS_DEBUG     +=
QMAKE_LFLAGS_APP       +=
QMAKE_LFLAGS_RELEASE   +=
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +=
QMAKE_LFLAGS_EXCEPTIONS_OFF +=
QMAKE_LFLAGS_LTCG       = $$QMAKE_CFLAGS_LTCG -fuse-linker-plugin

QMAKE_CFLAGS_C99       = -std=c99
QMAKE_CFLAGS_C11       = -std=c11

QMAKE_CFLAGS_SSE2      += -msse2
QMAKE_CFLAGS_SSE3      += -msse3
QMAKE_CFLAGS_SSSE3     += -mssse3
QMAKE_CFLAGS_SSE4_1    += -msse4.1
QMAKE_CFLAGS_SSE4_2    += -msse4.2
QMAKE_CFLAGS_F16C      += -mf16c
QMAKE_CFLAGS_RDRND     += -mrdrnd
QMAKE_CFLAGS_AVX       += -mavx
QMAKE_CFLAGS_AVX2      += -mavx2
QMAKE_CFLAGS_AVX512F   += -mavx512f
QMAKE_CFLAGS_AVX512ER  += -mavx512er
QMAKE_CFLAGS_AVX512CD  += -mavx512cd
QMAKE_CFLAGS_AVX512PF  += -mavx512pf
QMAKE_CFLAGS_AVX512DQ  += -mavx512dq
QMAKE_CFLAGS_AVX512BW  += -mavx512bw
QMAKE_CFLAGS_AVX512VL  += -mavx512vl
QMAKE_CFLAGS_AVX512IFMA += -mavx512ifma
QMAKE_CFLAGS_AVX512VBMI += -mavx512vbmi
QMAKE_CFLAGS_AESNI     += -maes
QMAKE_CFLAGS_SHANI     += -msha
QMAKE_CFLAGS_NEON      += -mfpu=neon
QMAKE_CFLAGS_MIPS_DSP  += -mdsp
QMAKE_CFLAGS_MIPS_DSPR2 += -mdspr2

# -march=haswell is supported as of GCC 4.9 and Clang 3.6
QMAKE_CFLAGS_ARCH_HASWELL           = -march=core-avx2

# Wrapper tools that understand .o/.a files with GIMPLE instead of machine code
QMAKE_AR_LTCG           = gcc-ar cqs
QMAKE_NM_LTCG           = gcc-nm -P
QMAKE_RANLIB_LTCG       = true          # No need to run since gcc-ar has "s"

include(sanitize.conf)
