From 10ca2026a96b14ead483aa895ce5c33d33aebb94 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Sat, 12 Nov 2016 23:36:41 +0000 Subject: [PATCH] refs #802 Enable build with Clang on Windows. --- mkspecs/features/common_pre.prf | 31 +++++++++++++++++++++++++------ mkspecs/features/libraries.pri | 18 +++++++++--------- mkspecs/features/warnings.pri | 1 + 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/mkspecs/features/common_pre.prf b/mkspecs/features/common_pre.prf index 4dd456c6a..85eb918f0 100644 --- a/mkspecs/features/common_pre.prf +++ b/mkspecs/features/common_pre.prf @@ -68,7 +68,7 @@ contains(BLACK_CONFIG, ProfileRelease) { # Workaround C1128 error ################################ -msvc: QMAKE_CXXFLAGS *= /bigobj +msvc:!llvm: QMAKE_CXXFLAGS *= /bigobj ################################ # No gigantic MinGW obj files @@ -123,18 +123,21 @@ isEmpty(EXTERNALSROOT) { # Externals ################################ +clang_cl: EXTERNALS_SPEC = win32-msvc2015 +else: EXTERNALS_SPEC = $$basename(QMAKESPEC) + INCLUDEPATH *= $$EXTERNALSROOT/common/include -INCLUDEPATH *= $$EXTERNALSROOT/$$basename(QMAKESPEC)/include +INCLUDEPATH *= $$EXTERNALSROOT/$$EXTERNALS_SPEC/include INCLUDEPATH *= $$EXTERNALSROOT/common/include/crashpad INCLUDEPATH *= $$EXTERNALSROOT/common/include/mini_chromium equals(WORD_SIZE,64) { - EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$basename(QMAKESPEC)/bin64 - EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$basename(QMAKESPEC)/lib64 + EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin64 + EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib64 } equals(WORD_SIZE,32) { - EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$basename(QMAKESPEC)/bin32 - EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$basename(QMAKESPEC)/lib32 + EXTERNALS_BIN_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/bin32 + EXTERNALS_LIB_DIR = $$EXTERNALSROOT/$$EXTERNALS_SPEC/lib32 } LIBS *= -L$$EXTERNALS_LIB_DIR @@ -176,3 +179,19 @@ isEmpty(PREFIX) { ################################ win32: CONFIG(debug, debug|release): DLL_DEBUG_SUFFIX = d + +################################ +# Experimental support for Clang on Windows +################################ + +clang_cl { + QMAKE_CXXFLAGS ~= s/-fms-compatibility-version=.+/ + QMAKE_CXXFLAGS += -fms-compatibility-version=19.00.24210 + + # QtCreator ships with a version of clang-cl, + # but we want to use the one in PATH instead. + system($$(SYSTEMROOT)\system32\where /q clang-cl) { + QMAKE_CC = $$system($$(SYSTEMROOT)\system32\where clang-cl) + QMAKE_CXX = $$QMAKE_CC + } +} diff --git a/mkspecs/features/libraries.pri b/mkspecs/features/libraries.pri index ca172e490..3eadb814b 100644 --- a/mkspecs/features/libraries.pri +++ b/mkspecs/features/libraries.pri @@ -8,10 +8,10 @@ unix:!macx { blackgui { contains(BLACK_CONFIG, Static) { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackgui.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackgui.lib else: PRE_TARGETDEPS += $$DestRoot/lib/libblackgui.a } else { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackgui.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackgui.lib win32-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackgui.a linux-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackgui.so macx-clang: PRE_TARGETDEPS += $$DestRoot/lib/libblackgui.dylib @@ -22,10 +22,10 @@ blackgui { blackcore { contains(BLACK_CONFIG, Static) { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackcore.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackcore.lib else: PRE_TARGETDEPS += $$DestRoot/lib/libblackcore.a } else { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackcore.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackcore.lib win32-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackcore.a linux-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackcore.so macx-clang: PRE_TARGETDEPS += $$DestRoot/lib/libblackcore.dylib @@ -47,10 +47,10 @@ blacksound { blackinput { contains(BLACK_CONFIG, Static) { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackinput.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackinput.lib else: PRE_TARGETDEPS += $$DestRoot/lib/libblackinput.a } else { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackinput.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackinput.lib win32-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackinput.a linux-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackinput.so macx-clang: PRE_TARGETDEPS += $$DestRoot/lib/libblackinput.dylib @@ -69,10 +69,10 @@ blackinput { blackmisc { contains(BLACK_CONFIG, Static) { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackmisc.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackmisc.lib else: PRE_TARGETDEPS += $$DestRoot/lib/libblackmisc.a } else { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackmisc.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackmisc.lib win32-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackmisc.a linux-g++*: PRE_TARGETDEPS += $$DestRoot/lib/libblackmisc.so macx-clang: PRE_TARGETDEPS += $$DestRoot/lib/libblackmisc.dylib @@ -85,7 +85,7 @@ blackmisc { } blackconfig { - win32-msvc*: PRE_TARGETDEPS += $$DestRoot/lib/blackconfig.lib + win32:msvc: PRE_TARGETDEPS += $$DestRoot/lib/blackconfig.lib else: PRE_TARGETDEPS += $$DestRoot/lib/libblackconfig.a LIBS *= -lblackconfig } diff --git a/mkspecs/features/warnings.pri b/mkspecs/features/warnings.pri index b3ec5822d..96f0c6996 100644 --- a/mkspecs/features/warnings.pri +++ b/mkspecs/features/warnings.pri @@ -2,6 +2,7 @@ msvc:DEFINES *= _SCL_SECURE_NO_WARNINGS # swift standard warnings msvc:QMAKE_CXXFLAGS_WARN_ON *= /wd4351 /wd4661 +clang_cl:QMAKE_CXXFLAGS_WARN_ON *= -Wall -Wextra # elevated warnings contains(BLACK_CONFIG, AllowNoisyWarnings) {