configure: detect fxc.exe more thoroughly

When building ANGLE, we need the shader compiler (fxc.exe), which is not
shipped with MinGW. Previously, we required an installed DirectX SDK.
For Windows versions >= 8, the DX SDK is also part of the Windows Kit,
so we also allow the user to specify the location of the Windows Kit.
We also detect fxc on 64-bit hosts now, and in newer SDK versions which
version the binary directory.

The detected binary is now exported by configure, so the ANGLE project
file does not need to duplicate the logic anymore.

Task-number: QTBUG-52487
Change-Id: I41a17992909041dd84291b69498195cc8b8fab8a
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
bb10
Oliver Wolff 2017-12-12 20:02:55 +01:00 committed by Oswald Buddenhagen
parent 1ef9859e7e
commit 7a481fce28
3 changed files with 31 additions and 27 deletions

View File

@ -22,21 +22,7 @@ lib_replace.replace = \$\$\$\$[QT_INSTALL_LIBS]
lib_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += lib_replace
# DirectX is included in the Windows 8 Kit, but everything else requires the DX SDK.
winrt|msvc {
FXC = fxc.exe
} else {
DX_DIR = $$(DXSDK_DIR)
isEmpty(DX_DIR) {
error("Cannot determine DirectX SDK location. Please set DXSDK_DIR environment variable.")
}
equals(QMAKE_TARGET.arch, x86_64) {
FXC = \"$${DX_DIR}Utilities\\bin\\x64\\fxc.exe\"
} else {
FXC = \"$${DX_DIR}Utilities\\bin\\x86\\fxc.exe\"
}
}
FXC = $$shell_quote($$shell_path($$QMAKE_FXC_LOCATION))
win32 {
VERSION = $$MODULE_VERSION

View File

@ -728,10 +728,6 @@
}
},
"testTypeAliases": {
"files": [ "fxc" ]
},
"tests": {
"angle_d3d11_qdtd": {
"label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
@ -747,9 +743,7 @@
"fxc": {
"label": "Direct3D Shader Compiler",
"type": "fxc",
"files": [
"fxc.exe"
]
"log": "value"
},
"drm_atomic": {
"label": "DRM Atomic API",
@ -1010,7 +1004,8 @@
"condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
"output": [
"publicFeature",
{ "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
{ "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" },
{ "type": "varAssign", "name": "QMAKE_FXC_LOCATION", "value": "tests.fxc.value" }
]
},
"angle_d3d11_qdtd": {

View File

@ -20,12 +20,35 @@ defineTest(qtConfLibrary_freetype) {
# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
# the Windows SDK.
defineTest(qtConfTest_fxc) {
dxdir = $$getenv("DXSDK_DIR")
!isEmpty(dxdir) {
EXTRA_PATH += $$dxdir/Utilities/bin/x86
!mingw {
fxc = $$qtConfFindInPath("fxc.exe")
} else {
equals(QMAKE_HOST.arch, x86_64): \
fns = x64/fxc.exe
else: \
fns = x86/fxc.exe
dxdir = $$(DXSDK_DIR)
!isEmpty(dxdir) {
fxc = $$dxdir/Utilities/bin/$$fns
} else {
winkitbindir = $$(WindowsSdkVerBinPath)
!isEmpty(winkitbindir) {
fxc = $$winkitbindir/$$fns
} else {
winkitdir = $$(WindowsSdkDir)
!isEmpty(winkitdir): \
fxc = $$winkitdir/bin/$$fns
}
}
}
qtConfTest_files($${1}): return(true)
!isEmpty(fxc):exists($$fxc) {
$${1}.value = $$clean_path($$fxc)
export($${1}.value)
$${1}.cache += value
export($${1}.cache)
return(true)
}
return(false)
}