#
# Base qmake configuration for ICC on *nix-systems
#
# Before making changes to this file, please read the comment in
# icc-base.conf, to make sure the change goes in the right place.
#
# To verify that your change has the desired effect on the final configuration
# you can use the manual test in tests/manual/mkspecs.
#

MAKEFILE_GENERATOR      = UNIX
QMAKE_COMPILER_DEFINES += __GNUC__

QMAKE_COMPILER          = gcc intel_icc   # icc pretends to be gcc

QMAKE_CFLAGS_OPTIMIZE      = -O2
QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os

QMAKE_CC                = icc
QMAKE_LEX               = flex
QMAKE_LEXFLAGS          =
QMAKE_YACC              = yacc
QMAKE_YACCFLAGS         = -d
QMAKE_CFLAGS            =
QMAKE_CFLAGS_APP        = -fPIC
QMAKE_CFLAGS_DEPS       = -M
QMAKE_CFLAGS_WARN_ON    = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373
QMAKE_CFLAGS_WARN_OFF   = -w
QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE
QMAKE_CFLAGS_DEBUG      = -O0 -g
QMAKE_CFLAGS_SHLIB      = -fPIC
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections -fdata-sections
QMAKE_CFLAGS_LTCG       = -ipo
QMAKE_CFLAGS_DISABLE_LTCG = -no-ipo

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_AVX       += -march=core-avx
QMAKE_CFLAGS_AVX2      += -march=core-avx2
QMAKE_CFLAGS_AVX512F   += -march=broadwell -xCOMMON-AVX512
QMAKE_CFLAGS_AVX512CD  += -march=broadwell -xCOMMON-AVX512
QMAKE_CFLAGS_AVX512ER  += -march=knl
QMAKE_CFLAGS_AVX512PF  += -march=knl
QMAKE_CFLAGS_AVX512DQ  += -march=skylake-avx512
QMAKE_CFLAGS_AVX512BW  += -march=skylake-avx512
QMAKE_CFLAGS_AVX512VL  += -march=skylake-avx512
QMAKE_CFLAGS_AVX512VNNI += -march=cascadelake
QMAKE_CFLAGS_AVX512IFMA += -march=icelake-client    # technically, cannonlake
QMAKE_CFLAGS_AVX512VBMI += -march=icelake-client    # ditto
QMAKE_CFLAGS_AVX512VBMI2 += -march=icelake-client
QMAKE_CFLAGS_AVX512BITALG += -march=icelake-client
QMAKE_CFLAGS_AVX512POPCNTDQ += -march=icelake-client
QMAKE_CFLAGS_AESNI     += -maes
QMAKE_CFLAGS_F16C      += $$QMAKE_CFLAGS_AVX2
QMAKE_CFLAGS_RDRND     += -mrdrnd
QMAKE_CFLAGS_RDSEED    += -mrdseed
QMAKE_CFLAGS_SHANI     += -msha
QMAKE_CFLAGS_VAES      += -mvaes

QMAKE_CXX               = icpc
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_APP      = $$QMAKE_CFLAGS_APP
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_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB    = $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_CXXFLAGS_CXX11    = -std=c++11
QMAKE_CXXFLAGS_CXX14    = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z    = -std=c++17
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG

# pch support
CONFIG += icc_pch_style
QMAKE_PCH_OUTPUT_EXT = .pchi
QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT}
QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE}

# Symbol visibility control
QMAKE_CFLAGS_HIDESYMS   += -fvisibility=hidden
QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden

QMAKE_LINK              = icpc
QMAKE_LINK_SHLIB        = icpc
QMAKE_LFLAGS            =
QMAKE_LFLAGS_RELEASE    =
QMAKE_LFLAGS_DEBUG      =
QMAKE_LFLAGS_THREAD     =
QMAKE_LFLAGS_RPATH      = -Wl,-rpath,
QMAKE_LFLAGS_CXX11      =
QMAKE_LFLAGS_CXX14      =
QMAKE_LFLAGS_CXX1Z      =
QMAKE_LFLAGS_LTCG       = $$QMAKE_CFLAGS_LTCG

QMAKE_INCDIR            =
QMAKE_LIBDIR            =
QMAKE_INCDIR_X11        =
QMAKE_LIBDIR_X11        =
QMAKE_INCDIR_OPENGL     =
QMAKE_LIBDIR_OPENGL     =

QMAKE_CLEAN             = -r $(OBJECTS_DIR)/ti_files
