This repository has been archived by the owner on Feb 8, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 75
/
README
301 lines (196 loc) · 9.65 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
This is Moonlight, an open source implementation of Silverlight 1.0, 2.0,
3.0 and 4.0 for Unix systems.
See http://www.mono-project.com/Moonlight for more information.
Installation
============
For standard Unix configuration/installation instructions, see the INSTALL file.
Requirements
============
At this time, Moonlight trunk (this release) requires you to use
trunk to get the required dependency (e.g. latest Mono.Cecil) and
compilers (e.g. the new 'mcs' compiler). To build mono, do like this:
git clone git://github.com/mono/mono.git system-mono
cd system-mono && ./autogen.sh && make && sudo make install
Note that here we checkout mono to a different directory than below.
To build Moonlight, you'll also need to get the source code for mono
and mono-basic repositories from a specific revision from trunk.
Do this like this:
git clone git://github.com/mono/moon.git moon
git clone git://github.com/mono/mono.git mono
cd mono && git reset --hard f41f710 && cd ..
git clone git://github.com/mono/mono-basic.git mono-basic
cd mono-basic && git reset --hard 4ef1fbe && cd ..
To build pixel shader support, you need to get a specific
revision of the mesa repository.
Do this like this:
git clone git://anongit.freedesktop.org/mesa/mesa
cd mesa && git reset --hard 3ed0a099c && cd ..
The revision the codecs currently are at is: 15e2b1b2 (only applicable to buildbots
and developers on the Moonlight team). For SVN users, the revision is: 10364
The package wnck-sharp is also required, it can be found in the gnome-desktop-sharp
repository on github:
https://github.com/mono/gnome-desktop-sharp
Alternatively, on ubuntu/debian, the gnome-desktop-sharp2 package provides it.
Compiling Mono for Moonlight
============================
Automatic Mode (recommended)
===========================
This is recommended if you haven't built Mono before. This is also recommended if you
have clean mono and mcs checkouts that you are going to use just for Moonlight.
In this mode, you don't have to build Mono before building Moonlight, so you just do
cd moon
./autogen.sh
make && make install
This will configure your Mono source tree with the minimum options required
to build it for Moonlight. At the moment, these are:
--with-moonlight=only --with-profile4=no --enable-minimal=aot,interpreter
--with-ikvm-native=no --with-mcs-docs=no --disable-nls --disable-mono-debugger
--with-sgen=no
This Mono configuration will not be suitable for anything except Moonlight.
If you want to use SGen with Moonlight, you'll need use the following option when
running autogen.sh:
--with-sgen=yes
Warning: Moonlight+Sgen has not been fully tested yet, and is likely unstable.
*Enable this at your own risk*
Build only Mode (advanced)
==========================
This is recommended if you have built Mono before and you would like Moonlight to use
your existing Mono source tree. This is for advanced users only - make sure you know
what you're doing.
In this mode, Moonlight will not touch your existing Mono configuration, it will build
the parts it needs. Since it doesn't do a full build of mono+mcs, it's faster than a
normal mono+mcs build.
Before building moon, you need to make sure your mono configuration includes the
following options:
--with-moonlight=yes
And you need to configure mono-basic like this:
--with-moonlight-yes --moonlight-sdk-path=<mono checkout>/mcs/class/lib/moonlight_raw
To build moon in this mode, configure it with the following options:
--with-manual-mono=build
If you want to use SGen with Moonlight, you'll need to use the following option:
--with-sgen=yes --with-moon-gc=sgen
Warning: Moonlight+SGen has not been fully tested yet, and is likely unstable.
*Enable this at your own risk*
Manual Mode (really advanced)
=============================
On this mode, moon will not configure or build mono, you have to do it yourself.
To activate this mode, configure moon with --with-manual-mono=yes
Configuration options
=====================
If your mono/mcs checkout is not in the same place where you have your moon
source, you can configure moon with:
--with-mcs-path=/path/to/mcs
If you want to use ffmpeg with Moonlight, you need at least r20911 of ffmpeg and r30099 of libswscale:
svn co -r 20911 svn://svn.mplayerhq.hu/ffmpeg/trunk && cd trunk/libswscale && svn up -r 30099
Installing and Testing
======================
If you want to test your newly installed Moonlight, do this:
make test-plugin
This will install it into your ~/.mozilla/plugins which will let
both Firefox and Chrome pick it.
Profiling
=========
A custom profiler is available which allows you to track which objects
are being kept alive by strong GCHandles and also see the stacktrace
for every gchandle that was not freed.
This profiler is only built if you pass --with-object-tracking=yes to
autogen and then subsequently be enabled as follows:
export MOON_PROFILER=gchandle
On application shutdown, right before the appdomain is freed, a GCHandle
'leak' report will be printed. This will show all the objects being
retained in memory because they have a strong gchandle attached to them.
If you want to see where the gchandles were allocated you just have to
export the following variable. This example will print the stacktraces of
all the unfreed strong gchandles for the Uri type:
export GCHANDLES_FOR_TYPE=Uri
If multiple strong handles are targetting the same CLR object, these
will be grouped together. This makes it easy to see if 10,000 handles
are targetting the same object or if its 10,000 different objects.
Runtime Options
===============
There are a couple of runtime-parameters that affect Moonlight behavior
and turn on/off certain features. Those options are specified through
the MOONLIGHT_OVERRIDES env variable. The more interesting ones are:
* shapecache=yes/no
Use some extra memory for caching shapes. Increases
memory usage but helps with performance (off by
default). The shape cache size is 6MB max.
* render=ftb/btf
Use front-to-back or back-to-front rendering (ftb is
the default).
* cache=show/hide
Show the (shape) cache usage statistics. In plugin
mode they're available through the right-click popup
menu (hide by default).
* converter=yuv/ffmpeg
Use native mmx/sse2 conversion code or ffmpeg to do
the yuv -> rgb colorspace conversion (by default we
use the native yuv code).
To launch Firefox with shape caching and ffmpeg converters use:
$> MOONLIGHT_OVERRIDES="shapecache=yes,converter=ffmpeg" firefox
Other options include:
* ms-codecs=yes/no
* ffmpeg-codecs=yes/no
Controls which sets of codecs to use, the Microsoft
ones or the ffmpeg ones.
* timesource=manual/system
Defaults to `system'.
Also if --with-debug=yes option was provided to configure script, the
MOONLIGHT_DEBUG env variable controls which debug output is printed
on the console. Valid values are:
alsa, alsa-ex, audio, audio-ex, pulse, pulse-ex, httpstreaming,
markers, markers-ex, mms, mediaplayer, mediaplayer-ex, pipeline,
pipeline-error, framereaderloop, ui, ffmpeg, codecs, dependencyobject,
downloader, font, layout, media, mediaelement, mediaelement-ex,
buffering, asf, playlist, playlist-warn, text, xaml
Moonlight currently contains two ASX parsers. The default
parser is a custom parser that accounts for some of ASX's
oddities such as quotes in attribute strings and non case
sensitive element names (ie <foo></FOO>). The older parser
uses a true xml parser, so will not handle these oddities
well, however it has been more heavily tested. To use the
older expat based playlist parser set the env variable
MOONLIGHT_USE_EXPAT_ASXPARSER=1.
There are two XAML parsers available in Moonlight. An
unmanaged one that is used for Silverlight 1, 2 and 3
applications and a managed one that is used for silverlight 4
(and above) applications. The parser is determined at runtime
after the app manifest is read. The unmanaged parser is
always used to parse the app manifest. After that the correct
parser is determined based on Deployment::RuntimeVersion.
You can force moonlight to use the managed parser on all sites
by setting the MOON_USE_MANAGED_XAML_PARSER environment
variable.
You can force moonlight to use the unmanaged parser on all
sites by setting the MOON_DONT_USE_MANAGED_XAML_PARSER
environment variable.
Licensing
=========
The C and C++ code that makes up the engine is dual-licensed
under the LGPL v2 license and is also available commercially
for developers interested in using Moonlight on embedded
systems or other systems where the end-user can not upgrade
the LGPL code on his own.
The C# tests in test/2.0/Microsoft.Silverlight.Testing are
copyrighted by Microsoft and released by them under the
open source MS-PL license.
The C# controls in class/Microsoft.SilverlightControls/ and
class/WPF.Toolkit are copyrighted by Microsoft and released by
them under the open source MS-PL license.
Technical Details
=================
For implementation details and notes, see the NOTES file.
Test Suite
==========
To run the test suite, make sure that the output from
configure indicates that the tests will be run. Once this is
done, you can run the tests like this:
To run the Moonlight Unit Tests:
cd moon/test/2.0/moon-unit
make test
Firefox 3
=========
The original Silverlight.js shipped by Microsoft was incompatible
with Firefox 3. We have released a greasemonkey script
(data/silverlight-ff3-quirks.user.js) that will patch this behaviour
for some sites.