SOURCES = avx.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_AVX):error("This compiler does not support AVX")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX
SOURCES = avx2.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_AVX2):error("This compiler does not support AVX2")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2
SOURCES = iwmmxt.cpp
CONFIG -= x11 qt
-
+isEmpty(QMAKE_CFLAGS_IWMMXT):error("This compiler does not support iWMMXt")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_IWMMXT
SOURCES = neon.cpp
CONFIG -= x11 qt
+isEmpty(QMAKE_CFLAGS_NEON):error("This compiler does not support Neon")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_NEON
SOURCES = sse2.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_SSE2):error("This compiler does not support SSE2")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2
SOURCES = sse3.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_SSE3):error("This compiler does not support SSE3")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE3
SOURCES = sse4_1.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_SSE4_1):error("This compiler does not support SSE4.1")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_1
SOURCES = sse4_2.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_SSE4_2):error("This compiler does not support SSE4.2")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_2
SOURCES = ssse3.cpp
CONFIG -= x11 qt
mac:CONFIG -= app_bundle
+isEmpty(QMAKE_CFLAGS_SSSE3):error("This compiler does not support SSSE3")
+else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSSE3
# detect sse2 support
if [ "${CFG_SSE2}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse2 "sse2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-msse2"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse2 "sse2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_SSE2=yes
else
CFG_SSE2=no
# detect sse3 support
if [ "${CFG_SSE3}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse3 "sse3" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-msse3"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse3 "sse3" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_SSE3=yes
else
CFG_SSE3=no
# detect ssse3 support
if [ "${CFG_SSSE3}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ssse3 "ssse3" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-mssse3"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ssse3 "ssse3" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_SSSE3=yes
else
CFG_SSSE3=no
# detect sse4.1 support
if [ "${CFG_SSE4_1}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse4_1 "sse4_1" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-msse4.1"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse4_1 "sse4_1" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_SSE4_1=yes
else
CFG_SSE4_1=no
# detect sse4.2 support
if [ "${CFG_SSE4_2}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse4_2 "sse4_2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-msse4.2"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/sse4_2 "sse4_2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_SSE4_2=yes
else
CFG_SSE4_2=no
# detect avx support
if [ "${CFG_AVX}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/avx "avx" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-mavx"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/avx "avx" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
case "$XQMAKESPEC" in
*g++*|*-clang*)
# Some clang versions produce internal compiler errors compiling Qt AVX code
CFG_AVX2=no
fi
if [ "${CFG_AVX2}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/avx2 "avx2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-march=core-avx2"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/avx2 "avx2" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_AVX2=yes
else
CFG_AVX2=no
# check iWMMXt support
if [ "$CFG_IWMMXT" = "yes" ]; then
- "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/iwmmxt "iwmmxt" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-mcpu=iwmmxt"
+ "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/iwmmxt "iwmmxt" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS
if [ $? != "0" ]; then
echo "The iWMMXt functionality test failed!"
echo " Please make sure your compiler supports iWMMXt intrinsics!"
# detect neon support
if [ "$CFG_ARCH" = "arm" ] && [ "${CFG_NEON}" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/neon "neon" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS "-mfpu=neon"; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/neon "neon" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then
CFG_NEON=yes
else
CFG_NEON=no
QMAKE_CXXFLAGS_CXX11 = -std=c++11
QMAKE_LFLAGS_CXX11 =
+
+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 += -mavx
+QMAKE_CFLAGS_AVX2 += -mavx2
+QMAKE_CFLAGS_IWMMXT += -mcpu=iwmmxt
+QMAKE_CFLAGS_NEON += -mfpu=neon
QMAKE_LFLAGS_APP +=
QMAKE_LFLAGS_RELEASE +=
QMAKE_LFLAGS_EXCEPTIONS_OFF +=
+
+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 += -mavx
+QMAKE_CFLAGS_AVX2 += -mavx2
+QMAKE_CFLAGS_IWMMXT += -mcpu=iwmmxt
+QMAKE_CFLAGS_NEON += -mfpu=neon
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_THREAD = -D_REENTRANT
+QMAKE_CFLAGS_SSE2 += -xSSE2
+QMAKE_CFLAGS_SSE3 += -xSSE3
+QMAKE_CFLAGS_SSSE3 += -xSSSE3
+QMAKE_CFLAGS_SSE4_1 += -xSSE4.1
+QMAKE_CFLAGS_SSE4_2 += -xSSE4.2
+QMAKE_CFLAGS_AVX += -xAVX
+QMAKE_CFLAGS_AVX2 += -xCORE-AVX2
+
QMAKE_CXX = icpc
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
+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 = -mavx
+QMAKE_CFLAGS_AVX2 = -mavx2
+QMAKE_CFLAGS_IWMMXT = -mcpu=iwmmxt
+QMAKE_CFLAGS_NEON = -mfpu=neon
QMAKE_CXX = g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
QMAKE_CFLAGS_MP = -MP
+QMAKE_CFLAGS_SSE2 = -arch:SSE2
+QMAKE_CFLAGS_SSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_1 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_2 = -arch:SSE2
+QMAKE_CFLAGS_AVX = -arch:AVX
+QMAKE_CFLAGS_AVX2 = -arch:AVX
QMAKE_CXX = $$QMAKE_CC
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
+QMAKE_CFLAGS_SSE2 = -arch:SSE2
+QMAKE_CFLAGS_SSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_1 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_2 = -arch:SSE2
QMAKE_CXX = $$QMAKE_CC
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
QMAKE_CFLAGS_MP = -MP
+QMAKE_CFLAGS_SSE2 = -arch:SSE2
+QMAKE_CFLAGS_SSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_1 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_2 = -arch:SSE2
QMAKE_CXX = $$QMAKE_CC
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
QMAKE_CFLAGS_MP = -MP
+QMAKE_CFLAGS_SSE2 = -arch:SSE2
+QMAKE_CFLAGS_SSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSSE3 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_1 = -arch:SSE2
+QMAKE_CFLAGS_SSE4_2 = -arch:SSE2
+QMAKE_CFLAGS_AVX = -arch:AVX
+QMAKE_CFLAGS_AVX2 = -arch:AVX
QMAKE_CXX = $$QMAKE_CC
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_LIBS += $$QMAKE_LIBS_GUI
-neon:*-g++* {
- HEADERS += $$NEON_HEADERS
-
- DRAWHELPER_NEON_ASM_FILES = $$NEON_ASM
-
- neon_compiler.commands = $$QMAKE_CXX -c
- neon_compiler.commands += $(CXXFLAGS) -mfpu=neon $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
- neon_compiler.dependency_type = TYPE_C
- neon_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
- neon_compiler.input = DRAWHELPER_NEON_ASM_FILES NEON_SOURCES
- neon_compiler.variable_out = OBJECTS
- neon_compiler.name = compiling[neon] ${QMAKE_FILE_IN}
- silent:neon_compiler.commands = @echo compiling[neon] ${QMAKE_FILE_IN} && $$neon_compiler.commands
- QMAKE_EXTRA_COMPILERS += neon_compiler
-}
-
win32:!contains(QT_CONFIG, directwrite) {
DEFINES += QT_NO_DIRECTWRITE
}
- win32-g++*|!win32:!win32-icc*:!macx-icc* {
+*-g++*|linux-icc*|*-clang {
sse2 {
sse2_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
- sse2_compiler.commands += -msse2
+ sse2_compiler.commands += $$QMAKE_CFLAGS_SSE2
sse2_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
sse2_compiler.dependency_type = TYPE_C
sse2_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
}
ssse3 {
ssse3_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
- ssse3_compiler.commands += -mssse3
+ ssse3_compiler.commands += $$QMAKE_CFLAGS_SSSE3
ssse3_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
ssse3_compiler.dependency_type = TYPE_C
ssse3_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
}
avx {
avx_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
- avx_compiler.commands += -mavx
+ avx_compiler.commands += $$QMAKE_CFLAGS_AVX
avx_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
avx_compiler.dependency_type = TYPE_C
avx_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
silent:avx_compiler.commands = @echo compiling[avx] ${QMAKE_FILE_IN} && $$avx_compiler.commands
QMAKE_EXTRA_COMPILERS += avx_compiler
}
+ neon {
+ HEADERS += $$NEON_HEADERS
+
+ DRAWHELPER_NEON_ASM_FILES = $$NEON_ASM
+
+ neon_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
+ neon_compiler.commands += $$QMAKE_CFLAGS_NEON
+ neon_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
+ neon_compiler.dependency_type = TYPE_C
+ neon_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
+ neon_compiler.input = DRAWHELPER_NEON_ASM_FILES NEON_SOURCES
+ neon_compiler.variable_out = OBJECTS
+ neon_compiler.name = compiling[neon] ${QMAKE_FILE_IN}
+ silent:neon_compiler.commands = @echo compiling[neon] ${QMAKE_FILE_IN} && $$neon_compiler.commands
+ QMAKE_EXTRA_COMPILERS += neon_compiler
+ }
iwmmxt {
iwmmxt_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS)
- iwmmxt_compiler.commands += -mcpu=iwmmxt
+ iwmmxt_compiler.commands += $$QMAKE_CFLAGS_IWMMXT
iwmmxt_compiler.commands += $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
iwmmxt_compiler.dependency_type = TYPE_C
iwmmxt_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
silent:iwmmxt_compiler.commands = @echo compiling[iwmmxt] ${QMAKE_FILE_IN} && $$iwmmxt_compiler.commands
QMAKE_EXTRA_COMPILERS += iwmmxt_compiler
}
- } else {
- sse2: SOURCES += $$SSE2_SOURCES
- ssse3: SOURCES += $$SSSE3_SOURCES
- iwmmxt: SOURCES += $$IWMMXT_SOURCES
- }
-
-mips_dsp:*-g++* {
- HEADERS += $$MIPS_DSP_HEADERS
-
- DRAWHELPER_MIPS_DSP_ASM_FILES = $$MIPS_DSP_ASM
- mips_dspr2 {
- DRAWHELPER_MIPS_DSP_ASM_FILES += $$MIPS_DSPR2_ASM
+ mips_dsp {
+ HEADERS += $$MIPS_DSP_HEADERS
+
+ DRAWHELPER_MIPS_DSP_ASM_FILES = $$MIPS_DSP_ASM
+ mips_dspr2:DRAWHELPER_MIPS_DSP_ASM_FILES += $$MIPS_DSPR2_ASM
+ mips_dsp_compiler.commands = $$QMAKE_CXX -c
+ mips_dsp_compiler.commands += $(CXXFLAGS) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
+ mips_dsp_compiler.dependency_type = TYPE_C
+ mips_dsp_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
+ mips_dsp_compiler.input = DRAWHELPER_MIPS_DSP_ASM_FILES MIPS_DSP_SOURCES
+ mips_dsp_compiler.variable_out = OBJECTS
+ mips_dsp_compiler.name = compiling[mips_dsp] ${QMAKE_FILE_IN}
+ silent:mips_dsp_compiler.commands = @echo compiling[mips_dsp] ${QMAKE_FILE_IN} && $$mips_dsp_compiler.commands
+ QMAKE_EXTRA_COMPILERS += mips_dsp_compiler
}
- mips_dsp_compiler.commands = $$QMAKE_CXX -c
- mips_dsp_compiler.commands += $(CXXFLAGS) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
- mips_dsp_compiler.dependency_type = TYPE_C
- mips_dsp_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
- mips_dsp_compiler.input = DRAWHELPER_MIPS_DSP_ASM_FILES MIPS_DSP_SOURCES
- mips_dsp_compiler.variable_out = OBJECTS
- mips_dsp_compiler.name = compiling[mips_dsp] ${QMAKE_FILE_IN}
- silent:mips_dsp_compiler.commands = @echo compiling[mips_dsp] ${QMAKE_FILE_IN} && $$mips_dsp_compiler.commands
- QMAKE_EXTRA_COMPILERS += mips_dsp_compiler
+} else {
+ # This serves two purposes:
+ # 1) it allows an IDE like Creator to know that these files are part of the sources
+ # 2) with MSVC, we are allowed to build the extra helpers
+ # but we only build the SSE2 and SSSE3 ones for now since the AVX ones are just
+ # the other two with the VEX prefix
+ win32-msvc*: SOURCES += $$SSE2_SOURCES $$SSSE3_SOURCES
+ false: SOURCES += $$NEON_SOURCES $$NEON_ASM \
+ $$IWMMXT_SOURCES \
+ $$AVX_SOURCES \
+ $$MIPS_DSP_SOURCES $$MIPS_DSP_ASM $$MIPS_DSPR2_ASM
}