Closed Bug 630628 Opened 9 years ago Closed 9 years ago

Extract d3dx9_??.dll and d3dcompiler_??.dll from DirectX SDK at build time, and ship them with the build

Categories

(Core :: Canvas: WebGL, defect)

x86
Windows 7
defect
Not set

Tracking

()

RESOLVED FIXED
mozilla2.0b12
Tracking Status
blocking2.0 --- final+

People

(Reporter: bjacob, Assigned: bjacob)

References

Details

Attachments

(3 files, 3 obsolete files)

WebGL on Windows relies on using ANGLE for rendering, which relies on a DLL, namely d3dx9_42.dll, to be present. It is part of the Microsoft DirectX SDK runtime, which we don't want to have to ask users to install by themselves. Therefore we want to ship this file with the build. This patch extracts it from the DirectX SDK at build time, and copies it into dist/bin.

The size of d3dx9_42.dll is 1.8 MiB. Is that OK?
Attached patch extract and ship d3dx9_42.dll (obsolete) — Splinter Review
Assignee: nobody → bjacob
Status: NEW → ASSIGNED
Attachment #508842 - Flags: review?(vladimir)
Also, i fixed a message in configure.in about the DirectX SDK : "registry"
'export' is not needed for D3DX9_DLL, I am removing it.
Blocks: 616864
****, turns out that we also need D3DCompiler_42.dll. Chrome does it too. That's another 2.46 MiB. Total 4.26 MiB.
Summary: Extract d3dx9_42.dll from DirectX SDK at build time, and ship it with the build → Extract d3dx9_42.dll and d3dcompiler_42.dll from DirectX SDK at build time, and ship them with the build
Here's the updated patch. Also logging devenv.exe output to investigate weird hangs.
Attachment #508842 - Attachment is obsolete: true
Attachment #508892 - Flags: review?(vladimir)
Attachment #508842 - Flags: review?(vladimir)
Comment on attachment 508892 [details] [diff] [review]
extract and ship d3dx9_42.dll and d3dcompiler_42.dll

does //out actually put output there?  If so, you could have it automatically cat'd after each build.. something like (devenv //out .. || (cat log.txt && exit 1))
additional patch for about:license
Attachment #509196 - Flags: review?
Summary: Extract d3dx9_42.dll and d3dcompiler_42.dll from DirectX SDK at build time, and ship them with the build → Extract d3dx9_??.dll and d3dcompiler_??.dll from DirectX SDK at build time, and ship them with the build
This time it's ready!

It auto-detects the numeric version (e.g. 42) so should work with any SDK version. Contrary to previous patch which turned out to only work with February 2010.
Attachment #508892 - Attachment is obsolete: true
Attachment #509299 - Flags: review?(vladimir)
Attachment #508892 - Flags: review?(vladimir)
removed extra ;
Attachment #509299 - Attachment is obsolete: true
Attachment #509301 - Flags: review?(vladimir)
Attachment #509299 - Flags: review?(vladimir)
Comment on attachment 509301 [details] [diff] [review]
extract and ship dlls from DirectX runtime

Looks good to me, but please change
   MOZ_DIRECTX_SDK_NUMERIC_VERSION
to something like MOZ_D3DX9_VERSION -- the 42/43 are just revs, and aren't tied to the SDK version.

Also, need harvey to r+ the license file change, and then can you commit both together?
Attachment #509301 - Flags: review?(vladimir) → review+
(In reply to comment #11)
> Comment on attachment 509301 [details] [diff] [review]
> extract and ship dlls from DirectX runtime
> 
> Looks good to me, but please change
>    MOZ_DIRECTX_SDK_NUMERIC_VERSION
> to something like MOZ_D3DX9_VERSION -- the 42/43 are just revs, and aren't tied
> to the SDK version.

Ah OK.

> 
> Also, need harvey to r+ the license file change, and then can you commit both
> together?

Will do. This is currently on tryserver, I'll check that the builds work.

I'll also check the resulting .exe installer size and write to dev-platfom.
The previous version failed in 'make installer' on tryserver because I had to add DEFINES += ... lines in the Makefile.in to make those variables available in the package-manifest.in.

Carrying forward r+.
Attachment #509340 - Flags: review+
Ah and also the manifest was always listing the files on Win32, regardless of MOZ_ANGLE, making --disable-angle probably fail? (didn't try). Anyway, replaced this by MOZ_ANGLE.
iirc we only warn about files that are missing in the package manifest.
Comment on attachment 509196 [details] [diff] [review]
patch for about:license

Let's use the following language instead of the text in the patch above:
=============================================================================
This license applies to the following files; they are referred to below as
“Distributable Code”:

•    d3dx9_*.dll
•    DbgHelp.dll
•    mozcrt19.dll
•    mozcpp19.dll

Copyright (c) Microsoft Corporation.
The Distributable Code may be used and distributed only if you comply with the
following terms: (i)You may use, copy, and distribute the Distributable Code only as part of this product;(ii)You may not use the Distributable Code on a platform other than Windows; (iii) You may not alter any copyright, trademark or patent notice in the Distributable Code; (iv) You may not modify or distribute the source code of any Distributable Code so that any part of the source code becomes subject to the MPL or any other copyleft license; (v) You must comply with any technical limitations in the Distributable Code that only allow you to use it in certain ways; and (vi)You must comply with all domestic and international export laws and regulations that apply to the Distributable Code.
blocking2.0: --- → ?
Blocks: 632148
Fix builds on comm-central build slaves which don't have the DirectX SDK:

http://hg.mozilla.org/mozilla-central/rev/136bf950ef27
Target Milestone: --- → mozilla2.0b12
Version: unspecified → Trunk
> http://hg.mozilla.org/mozilla-central/rev/858e2e5520c7

This doesn't mention mozcrt19.dll and mozcpp19.dll, as Harvey suggested in comment 16 !?
Indeed, it looks like the old patch to about:license was checked in?
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
I assumed that mozcrt19.dll and mozcpp19.dll were a typo, since I don't see why these should be covered by the Microsoft Direct X license, and they are not affected in any way by this change? The present bug only adds two new DLLs, d3dx9_??.dll and D3DCompiler_??.dll.
(In reply to comment #20)
> Indeed, it looks like the old patch to about:license was checked in?

No! Look, I copied and pasted Harvey's paragraph.
(In reply to comment #22)
> (In reply to comment #20)
> > Indeed, it looks like the old patch to about:license was checked in?
> 
> No! Look, I copied and pasted Harvey's paragraph.

Ah.  I just looked at the "DirectX License" bit.
Blocks: 625118
So can this be re-resolved as fixed or is there some work left to do here?
I believe that this is solved UNLESS you think that the DirectX license bit should also apply to mozcrt19.dll and mozcpp19.dll.

^ this is a question to Steffen Wilberg comment 19.
Lets cover that in a follow up if necessary.
Status: REOPENED → RESOLVED
Closed: 9 years ago9 years ago
Resolution: --- → FIXED
mozcrt19.dll and mozcpp19.dll are custom-built versions, including jemalloc, of the Microsoft standard C runtime (CRT). They're unrelated to DirectX. I would be surprised if we need to display their license.

But Harvey should answer that question, as he mentioned them in comment 16.

"Only some Visual C++ files can be redistributed with your application. See the Microsoft Software License Terms for Visual Studio 2005 and the Redist.txt file to see which files can be redistributed with your application. EULA.txt is in the \Setup directory on the first Visual C++ 2008 product CD or on the DVD, and Redist.txt is located in the Program Files\Microsoft Visual Studio 2005 directory on the second CD or on the DVD."
http://msdn.microsoft.com/en-us/library/ms235299%28v=VS.90%29.aspx

I don't have Visual C++.
Did Microsoft change DirectX SDK eula? Because if not, it's not allowed to distribute separate parts of the runtime and install them with a custom installer. At minimum, you are required to ship dxsetup.exe, dsetup32.dll, dsetup.dll, dxupdate.cab (the rest is optional) and install the runtime files by running dxsetup.exe.
That's up to our legal folks to determine; contact handerson at mozilla.com if you have questions there...
Just checked the newest DX SDK license and what I mentioned above (minus the required install through runtime installer, but why distribute the installer and then not use it) still applies.
I don't see any reference to DX SDK in the about:credits page of Google Chrome.
I though it was using it for the WebGL rendering.
It is. Also, although i've not been able to check it myself, several people have reported that it ships the exact same two files as we do, and no other files from the DX SDK.
Depends on: 688377
You need to log in before you can comment on or make changes to this bug.