Closed Bug 1005484 Opened 10 years ago Closed 10 years ago

[MSVC10 Build bustage] 'd3dcompiler_47.dll' or 'd3dcompiler_46.dll': No such file or directory

Categories

(Core :: Graphics: CanvasWebGL, defect)

x86_64
Windows 7
defect
Not set
blocker

Tracking

()

RESOLVED FIXED
mozilla32

People

(Reporter: mayhemer, Assigned: jgilbert)

References

Details

Attachments

(3 files, 1 obsolete file)

Attached file configure.zip
Will ac_add_options --disable-require-all-d3dc-versions help?

Win7, debug, m-c
Attached is the configure output.

 8:25.29 cp: cannot stat `C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\/Redist/D3D/x86/d3dcompiler_47.dll': No such file or directory
 8:25.29 Makefile:16: recipe for target 'libs' failed
 8:25.29 mozmake.EXE[5]: *** [libs] Error 1
 8:25.29 mozmake.EXE[5]: *** Waiting for unfinished jobs....
 8:25.33 c:/Mozilla/src/gum/config/recurse.mk:95: recipe for target 'gfx/angle/libs' failed
 8:25.33 mozmake.EXE[4]: *** [gfx/angle/libs] Error 2
 8:25.33 c:/Mozilla/src/gum/config/recurse.mk:39: recipe for target 'libs' failed
 8:25.33 mozmake.EXE[3]: *** [libs] Error 2
 8:25.33 c:/Mozilla/src/gum/config/rules.mk:592: recipe for target 'default' failed
 8:25.33 mozmake.EXE[2]: *** [default] Error 2
 8:25.33 c:/Mozilla/src/gum/client.mk:398: recipe for target 'realbuild' failed
 8:25.33 mozmake.EXE[1]: *** [realbuild] Error 2
 8:25.33 client.mk:185: recipe for target 'build' failed
 8:25.33 mozmake.EXE: *** [build] Error 2
 8:25.34 851 compiler warnings present.


mozconfig:

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/_obj-browser-debug
mk_add_options MOZ_MAKE_FLAGS=-j9
mk_add_options "export COMPILE_PDB_FLAG="
mk_add_options "export HOST_PDB_FLAG="
mk_add_options "export MOZ_DEBUG_FLAGS=-Z7"

export MOZ_DEBUG_SYMBOLS=1

ac_add_options --enable-warnings-as-errors
ac_add_options --enable-application=browser
ac_add_options --enable-debug
ac_add_options --disable-optimize

ac_add_options --enable-tests
ac_add_options --enable-logging
ac_add_options --enable-backtrack
ac_add_options --disable-installer
ac_add_options --enable-chrome-format=flat

ac_add_options --disable-crashreporter

export MOZ_PSEUDO_DERECURSE=no-pymake
Patch from bug 1005456 has no effect.
--disable-require-all-d3dc-versions as well...
Building with MSVC10
Builds with MSVC12 !
Summary: [Build bustage] 'd3dcompiler_47.dll': No such file or directory → [MSVC10 Build bustage] 'd3dcompiler_47.dll': No such file or directory
--disable-require-all-d3dc-versions should be the default. I'm surprised -- the configure check explicitly looks to see if the file is available.  Ah, but it doesn't do anything with that:

+  # Find a D3D compiler DLL in a Windows SDK.
+  MOZ_D3DCOMPILER_VISTA_DLL=
+  case "$MOZ_WINSDK_MAXVER" in
+  0x0603*)
+    MOZ_D3DCOMPILER_VISTA_DLL=d3dcompiler_47.dll
+    AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.1.])
+  ;;
+  0x0602*)
+    MOZ_D3DCOMPILER_VISTA_DLL=d3dcompiler_46.dll
+    AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.0.])
+  ;;
+  esac
+
+  if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then
+    # We have a name, now track down the path.
+    if test -n "$WINDOWSSDKDIR"; then
+      MOZ_D3DCOMPILER_VISTA_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/$MOZ_D3D_CPU_SUFFIX/$MOZ_D3DCOMPILER_VISTA_DLL"
+      if test -f "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then
+        MOZ_HAS_WINSDK_WITH_D3D=1
+        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
+      else
+        AC_MSG_RESULT([MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
+      fi
+    else
+      AC_MSG_RESULT([WINDOWSSDKDIR is missing.])
+    fi
+  fi

So somehow your MOZ_WINSDK_MAXVER is 0x0603, and likely you're hitting the "doesn't exist" AC_MSG_RESULT bit.. that really needs to at *least* set MOZ_D3DCOMPILER_VISTA_DLL to the empty string, if not error (since we're really expecting it to be found!).
Flags: needinfo?(jgilbert)
> 0:11.07 Found D3D compiler in Windows SDK 8.1.
> 0:11.07 MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\/Redist/D3D/x86/d3dcompiler_47.dll

Hm, WINDOWSSDKDIR is incorrect somehow.
1. Are you using the latest MozillaBuild (1.9)?
2. Are you setting MOZ_MAXWINSDK?
Flags: needinfo?(honzab.moz)
(In reply to Masatoshi Kimura [:emk] from comment #5)
> > 0:11.07 Found D3D compiler in Windows SDK 8.1.
> > 0:11.07 MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\/Redist/D3D/x86/d3dcompiler_47.dll
> 
> Hm, WINDOWSSDKDIR is incorrect somehow.
> 1. Are you using the latest MozillaBuild (1.9)?

I'm on 1.9.0pre

> 2. Are you setting MOZ_MAXWINSDK?

both start-shell-msvc2010.bat and 2013 set MOZ_MAXWINSDK=999999
Flags: needinfo?(honzab.moz)
(In reply to Honza Bambas (:mayhemer) from comment #6)
> I'm on 1.9.0pre

1.9pre doesn't contain the required fix:
https://hg.mozilla.org/mozilla-build/rev/af43db058d60
I also see this error. I have MozillaBuild1.9 installed, building on Win8.1 with VisualStudio 2010. VisualStudio 2012 is also installed.

I can see that the ${WINDOWSSDKDIR} environment variable is:
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\

Backing out 8b48386fc226 fixes it for me.
1.9.0 release was once respined. Please make sure that start-shell-msvc2010-x64.bat has the change in comment 7.
> start-shell-msvc2010-x64.bat

Correction: start-shell-msvc2010.bat
I can see the lines added in the changeset in my start-shell-msvc2010.bat file. Funny thing is, the WINDOWSSDKDIR envvar is not the same as SDKDIR, which is what you'd expect if that change was working correctly:

cpearce@MIDAS ~/src/mozilla/orange
$ echo ${SDKDIR}
C:\Program Files (x86)\Windows Kits\8.1\

cpearce@MIDAS ~/src/mozilla/orange
$ echo ${WINDOWSSDKDIR}
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\

cpearce@MIDAS ~/src/mozilla/orange
$ echo ${SDKVER}
8

cpearce@MIDAS ~/src/mozilla/orange
$ echo ${SDKMINORVER}
1
(In reply to Vladimir Vukicevic [:vlad] [:vladv] from comment #4)
> --disable-require-all-d3dc-versions should be the default. I'm surprised --
> the configure check explicitly looks to see if the file is available.  Ah,
> but it doesn't do anything with that:
> 
> +  # Find a D3D compiler DLL in a Windows SDK.
> +  MOZ_D3DCOMPILER_VISTA_DLL=
> +  case "$MOZ_WINSDK_MAXVER" in
> +  0x0603*)
> +    MOZ_D3DCOMPILER_VISTA_DLL=d3dcompiler_47.dll
> +    AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.1.])
> +  ;;
> +  0x0602*)
> +    MOZ_D3DCOMPILER_VISTA_DLL=d3dcompiler_46.dll
> +    AC_MSG_RESULT([Found D3D compiler in Windows SDK 8.0.])
> +  ;;
> +  esac
> +
> +  if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then
> +    # We have a name, now track down the path.
> +    if test -n "$WINDOWSSDKDIR"; then
> +     
> MOZ_D3DCOMPILER_VISTA_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/
> $MOZ_D3D_CPU_SUFFIX/$MOZ_D3DCOMPILER_VISTA_DLL"
> +      if test -f "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then
> +        MOZ_HAS_WINSDK_WITH_D3D=1
> +        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH:
> $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
> +      else
> +        AC_MSG_RESULT([MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist:
> $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
> +      fi
> +    else
> +      AC_MSG_RESULT([WINDOWSSDKDIR is missing.])
> +    fi
> +  fi
> 
> So somehow your MOZ_WINSDK_MAXVER is 0x0603, and likely you're hitting the
> "doesn't exist" AC_MSG_RESULT bit.. that really needs to at *least* set
> MOZ_D3DCOMPILER_VISTA_DLL to the empty string, if not error (since we're
> really expecting it to be found!).

Oops! My bad! Yeah, we should be zeroing MOZ_D3DCOMPILER_VISTA_DLL here.
Flags: needinfo?(jgilbert)
Attached patch fix-missing-dll (obsolete) — Splinter Review
Let's try this.
Assignee: nobody → jgilbert
Attachment #8417684 - Flags: review?(mshal)
Attachment #8417684 - Flags: feedback?(vladimir)
I'd really be tempted to make that an error.  If you have the SDK, but you don't have the DLL, something is pretty screwed up with your setup.  We should give people the opportunity to fix it, or explicitly disable angle if they are doing something strange.
(In reply to Vladimir Vukicevic [:vlad] [:vladv] from comment #14)
> I'd really be tempted to make that an error.  If you have the SDK, but you
> don't have the DLL, something is pretty screwed up with your setup.  We
> should give people the opportunity to fix it, or explicitly disable angle if
> they are doing something strange.

Ah, good point, and I agree.
Attached patch fix-missing-dllSplinter Review
Attachment #8417684 - Attachment is obsolete: true
Attachment #8417684 - Flags: review?(mshal)
Attachment #8417684 - Flags: feedback?(vladimir)
Attachment #8417716 - Flags: review?(mshal)
Attachment #8417716 - Flags: feedback?(vladimir)
Comment on attachment 8417716 [details] [diff] [review]
fix-missing-dll

>diff --git a/configure.in b/configure.in
>--- a/configure.in
>+++ b/configure.in
>@@ -5780,24 +5780,30 @@ if test -n "$MOZ_ANGLE_RENDERER"; then
>   ;;
>   esac
> 
>   if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then
>     # We have a name, now track down the path.
>     if test -n "$WINDOWSSDKDIR"; then
>       MOZ_D3DCOMPILER_VISTA_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/$MOZ_D3D_CPU_SUFFIX/$MOZ_D3DCOMPILER_VISTA_DLL"
>       if test -f "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then
>+        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
>         MOZ_HAS_WINSDK_WITH_D3D=1
>-        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])

What is the point of moving the AC_MSG_RESULT call?

>       else
>         AC_MSG_RESULT([MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
>+        AC_MSG_ERROR([Windows SDK at "$WINDOWSSDKDIR" appears broken.])
>+        MOZ_D3DCOMPILER_VISTA_DLL_PATH=

AC_MSG_ERROR stops execution, so you don't need to clear a variable after it.

>+        AC_MSG_RESULT([Couldn't find a CAB containing the D3D compiler DLL.])
>+        AC_MSG_ERROR([DirectX SDK at "$MOZ_DIRECTX_SDK_PATH" appears broken.])
>+        MOZ_DIRECTX_SDK_PATH=

Same thing here.
Attachment #8417716 - Flags: review?(mshal) → review+
(In reply to Michael Shal [:mshal] from comment #17)
> Comment on attachment 8417716 [details] [diff] [review]
> fix-missing-dll
> 
> >diff --git a/configure.in b/configure.in
> >--- a/configure.in
> >+++ b/configure.in
> >@@ -5780,24 +5780,30 @@ if test -n "$MOZ_ANGLE_RENDERER"; then
> >   ;;
> >   esac
> > 
> >   if test -n "$MOZ_D3DCOMPILER_VISTA_DLL"; then
> >     # We have a name, now track down the path.
> >     if test -n "$WINDOWSSDKDIR"; then
> >       MOZ_D3DCOMPILER_VISTA_DLL_PATH="$WINDOWSSDKDIR/Redist/D3D/$MOZ_D3D_CPU_SUFFIX/$MOZ_D3DCOMPILER_VISTA_DLL"
> >       if test -f "$MOZ_D3DCOMPILER_VISTA_DLL_PATH"; then
> >+        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
> >         MOZ_HAS_WINSDK_WITH_D3D=1
> >-        AC_MSG_RESULT([Found MOZ_D3DCOMPILER_VISTA_DLL_PATH: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
> 
> What is the point of moving the AC_MSG_RESULT call?
> 
> >       else
> >         AC_MSG_RESULT([MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: $MOZ_D3DCOMPILER_VISTA_DLL_PATH])
> >+        AC_MSG_ERROR([Windows SDK at "$WINDOWSSDKDIR" appears broken.])
> >+        MOZ_D3DCOMPILER_VISTA_DLL_PATH=
> 
> AC_MSG_ERROR stops execution, so you don't need to clear a variable after it.
> 
> >+        AC_MSG_RESULT([Couldn't find a CAB containing the D3D compiler DLL.])
> >+        AC_MSG_ERROR([DirectX SDK at "$MOZ_DIRECTX_SDK_PATH" appears broken.])
> >+        MOZ_DIRECTX_SDK_PATH=
> 
> Same thing here.

I'm leaving unreachable code here as if ERROR didn't stop execution. This should make it more likely to remain functional in the future, if we s/ERROR/RESULT/ here.
Comment on attachment 8417716 [details] [diff] [review]
fix-missing-dll

> +        AC_MSG_ERROR([Windows SDK at "$WINDOWSSDKDIR" appears broken.])

I think the error message should also suggest to upgrade MozillaBuild to 1.9 final if it is not. The message [Windows SDK at "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\" appears broken.] will be really confusing and useless to troubleshoot the issue. In that case, Windows SDK is not broken at all. It's just WINDOWSSDKDIR points the wrong SDK.
I updated my MozillaBuild to 1.9 and I still get the error:


 0:12.67 checking for jar... (cached) :
 0:12.68 checking for jarsigner... (cached) :
 0:12.69 checking for keytool... (cached) :
 0:12.78 Found D3D compiler in Windows SDK 8.1.
 0:12.78 MOZ_D3DCOMPILER_VISTA_DLL_PATH doesn't exist: c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\/Redist/D3D/x86/d3dcompiler_47.dll
 0:12.78 configure: error: Windows SDK at c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\ appears broken.
 0:12.78 ------ config.log ------
 0:12.79 cl : Command line warning D9002 : ignoring unknown option '-NXCOMPAT'
 0:12.79 cl : Command line warning D9002 : ignoring unknown option '-SAFESEH'
 0:12.79 conftest.C
 0:12.79 configure:15103: checking for YASM assembler
 0:12.79 configure:15109: checking for yasm
 0:12.79 configure:16107: checking for application to build
 0:12.79 configure:16176: checking if app-specific confvars.sh exists
 0:12.79 configure:19852: cl -c  -TC -nologo -W3 -Gy -wd4244 -wd4819 -we4553  conftest.c 1>&5
 0:12.79 conftest.c
 0:12.79 configure(19846) : fatal error C1083: Cannot open include file: 'linux/ethtool.h': No such file or directory
 0:12.79 configure: failed program was:
 0:12.79 #line 19845 "configure"
 0:12.79 #include "confdefs.h"
 0:12.79 #include <linux/ethtool.h>
 0:12.79 int main() {
 0:12.80  struct ethtool_cmd cmd; cmd.speed_hi = 0;
 0:12.80 ; return 0; }
 0:12.80 configure:20024: checking __attribute__ ((aligned ())) support
 0:12.80 configure:21341: checking for java
 0:12.80 configure:21390: checking for javac
 0:12.80 configure:21439: checking for javah
 0:12.80 configure:21488: checking for jar
 0:12.80 configure:21537: checking for jarsigner
 0:12.80 configure:21586: checking for keytool
 0:12.80 configure: error: Windows SDK at c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\ appears broken.
 0:12.80 *** Fix above errors and then restart with\
 0:12.80                "c:/mozilla-build/mozmake/mozmake.EXE -f client.mk build"
 0:12.80 c:/Users/cpearce/src/mozilla/orange/client.mk:361: recipe for target 'configure' failed
 0:12.80 mozmake.EXE[2]: *** [configure] Error 1
 0:12.81 c:/Users/cpearce/src/mozilla/orange/client.mk:375: recipe for target 'c:/Users/cpearce/src/mozilla/orange/objdir/config.status' failed
 0:12.81 mozmake.EXE[1]: *** [c:/Users/cpearce/src/mozilla/orange/objdir/config.status] Error 2
 0:12.81 client.mk:185: recipe for target 'build' failed
 0:12.81 mozmake.EXE: *** [build] Error 2
 0:12.85 643 compiler warnings present.
2
False alarm! This patch fixes the build for me with MozillaBuild1.9 final.

My shortcut that I used to start MozillaBuild was pointing to a copy of the 1.9pre batch file that I'd hacked to work around an earlier issue on Win8, and thus it didn't have the fix in 1.9final that this patch relies on.
This patch fixes the build for me as well.
Summary: [MSVC10 Build bustage] 'd3dcompiler_47.dll': No such file or directory → [MSVC10 Build bustage] 'd3dcompiler_47.dll' or 'd3dcompiler_46.dll': No such file or directory
Comment on attachment 8417716 [details] [diff] [review]
fix-missing-dll

Looks fine, I agree with comment #19 though.  More info in the message would be helpful, especially around MozillaBuild 1.9 final.   "Expected to find $DLL at $LOCATION, but it does not exist.  Upgrade to Mozilla Build 1.9 final, or fix your SDK install." or something
Attachment #8417716 - Flags: feedback?(vladimir) → feedback+
r=mshal
Attachment #8420312 - Flags: review+
https://hg.mozilla.org/mozilla-central/rev/3cebaabae096
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla32
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: