README.md 22.7 KB
Newer Older
1 2 3 4 5
Unity
============================
This is Unity Technologies fork of the open source mono project.

### Versions
A
ashwini 已提交
6
Each Unity release upto 2019.2 contains two versions of Mono. One older version (Mono) is embedded into the Editor and Players. Another newer version (MonoBleedingEdge) is used to run tools and tests.
7 8 9

In newer Unity versions (2017.1+) this MonoBleedingEdge version can be used in the Editor and Players via enabling an Experimental player setting.

A
ashwini 已提交
10 11
Unity versions 2019.3+ contain only MonoBleedingEdge.

12 13 14 15 16 17
### Branch Naming Convention
Branches for released Unity versions are of the form unity-\<version\>\[-mbe\][-staging\]. The '-staging' suffix is used as a branch for PRs to target with potential changes. The '-mbe' suffix indicates the branch is for the MonoBleedingEdge version of Mono mentioned above.

### Branches

#### Trunk
18
* [unity-master (PR to this branch for MonoBleedingEdge)](https://github.com/Unity-Technologies/mono/tree/unity-master)
19

A
ashwini 已提交
20 21 22
#### 2021.1
* [unity-2021.1-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2021.1-mbe)

A
ashwini 已提交
23 24 25
#### 2020.2
* [unity-2020.2-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2020.2-mbe)

J
Jonathan Chambers 已提交
26 27 28
#### 2020.1
* [unity-2020.1-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2020.1-mbe)

29 30 31
#### 2019.4
* [unity-2019.4-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2019.4-mbe)

J
Jonathan Chambers 已提交
32 33 34
#### 2019.3
* [unity-2019.3-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2019.3-mbe)

A
ashwinimurt 已提交
35 36 37 38 39 40 41 42 43 44 45 46
#### 2019.2
* [unity-2019.2](https://github.com/Unity-Technologies/mono/tree/unity-2019.2)
* [unity-2019.2-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2019.2-mbe)

#### 2019.1
* [unity-2019.1](https://github.com/Unity-Technologies/mono/tree/unity-2019.1)
* [unity-2019.1-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2019.1-mbe)

#### 2018.4
* [unity-2018.4](https://github.com/Unity-Technologies/mono/tree/unity-2018.4)
* [unity-2018.4-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2018.4-mbe)

47 48 49 50
#### 2018.3
* [unity-2018.3](https://github.com/Unity-Technologies/mono/tree/unity-2018.3)
* [unity-2018.3-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2018.3-mbe)

J
Jonathan Chambers 已提交
51 52 53 54
#### 2018.2
* [unity-2018.2](https://github.com/Unity-Technologies/mono/tree/unity-2018.2)
* [unity-2018.2-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2018.2-mbe)

J
Jonathan Chambers 已提交
55 56 57 58
#### 2018.1
* [unity-2018.1](https://github.com/Unity-Technologies/mono/tree/unity-2018.1)
* [unity-2018.1-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2018.1-mbe)

A
ashwinimurt 已提交
59 60 61 62
#### 2017.4
* [unity-2017.4](https://github.com/Unity-Technologies/mono/tree/unity-2017.4)
* [unity-2017.4-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2017.4-mbe)

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#### 2017.3
* [unity-2017.3](https://github.com/Unity-Technologies/mono/tree/unity-2017.3)
* [unity-2017.3-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2017.3-mbe)

#### 2017.2
* [unity-2017.2](https://github.com/Unity-Technologies/mono/tree/unity-2017.2)
* [unity-2017.2-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2017.2-mbe)

#### 2017.1
* [unity-2017.1](https://github.com/Unity-Technologies/mono/tree/unity-2017.1)
* [unity-2017.1-mbe](https://github.com/Unity-Technologies/mono/tree/unity-2017.1-mbe)

#### 5.6
* [unity-5.6](https://github.com/Unity-Technologies/mono/tree/unity-5.6)
* [unity-5.6-mbe](https://github.com/Unity-Technologies/mono/tree/unity-5.6-mbe)




Mono
============================

M
Miguel de Icaza 已提交
85 86 87 88
Mono is a software platform designed to allow developers to easily
create cross platform applications.  It is an open source
implementation of Microsoft's .NET Framework based on the ECMA
standards for C# and the Common Language Runtime.
M
Miguel de Icaza 已提交
89

90 91
The Mono project is part of the [.NET Foundation](http://www.dotnetfoundation.org/)

U
Ungureanu Marius 已提交
92 93
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mono/mono?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

94
1. [Compilation and Installation](#compilation-and-installation)
95 96
2. [Using Mono](#using-mono)
3. [Directory Roadmap](#directory-roadmap)
97 98 99
4. [Contributing to Mono](#contributing-to-mono)
5. [Reporting bugs](#reporting-bugs)
6. [Configuration Options](#configuration-options)
100
7. [Working with Submodules](#working-with-submodules)
101

102
### Build Status
103

104 105 106 107 108 109 110 111 112 113 114 115
| OS           | Architecture       | Status                       |
|--------------|--------------------|------------------------------|
| Ubuntu 14.04 | amd64              | [![ubuntu-1404-amd64][1]][2] |
| Ubuntu 14.04 | i386               | [![ubuntu-1404-i386][3]][4]  |
| Debian 8     | armel              | [![debian-8-armel][5]][6]    |
| Debian 8     | armhf              | [![debian-8-armhf][7]][8]    |
| Debian 8     | arm64              | [![debian-8-arm64][9]][10]   |
| OS X         | amd64              | [![osx-amd64][11]][12]       |
| OS X         | i386               | [![osx-i386][13]][14]        |
| Windows      | amd64              | [![windows-amd64][15]][16]   |
| Windows      | i386               | [![windows-amd64][17]][18]   |
| CentOS       | s390x (cs)         | [![centos-s390x][19]][20]    |
116
| Debian 8     | ppc64el (cs)       | [![debian-8-ppc64el][21]][22]|
117

118
_(cs) = community supported architecture_
119 120 121 122 123 124 125 126 127 128 129

[1]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=ubuntu-1404-amd64/badge/icon
[2]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=ubuntu-1404-amd64
[3]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=ubuntu-1404-i386/badge/icon
[4]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=ubuntu-1404-i386/
[5]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-armel/badge/icon
[6]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-armel/
[7]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-armhf/badge/icon
[8]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-armhf/
[9]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-arm64/badge/icon
[10]: https://jenkins.mono-project.com/job/test-mono-mainline-linux/label=debian-8-arm64/
130 131 132 133 134 135 136 137
[11]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-amd64/badge/icon
[12]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-amd64/
[13]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-i386/badge/icon
[14]: https://jenkins.mono-project.com/job/test-mono-mainline/label=osx-i386/
[15]: https://jenkins.mono-project.com/job/z/label=w64/badge/icon
[16]: https://jenkins.mono-project.com/job/z/label=w64/
[17]: https://jenkins.mono-project.com/job/z/label=w32/badge/icon
[18]: https://jenkins.mono-project.com/job/z/label=w32/
138 139 140 141
[19]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=centos-s390x/badge/icon
[20]: https://jenkins.mono-project.com/job/test-mono-mainline-community/label=centos-s390x
[21]: https://jenkins.mono-project.com/job/test-mono-mainline-community-chroot/label=debian-8-ppc64el/badge/icon
[22]: https://jenkins.mono-project.com/job/test-mono-mainline-community-chroot/label=debian-8-ppc64el
142

143 144
Compilation and Installation
============================
145

146
Building the Software
147
---------------------
M
Update  
Miguel de Icaza 已提交
148

149 150 151 152
Please see our guides for building Mono on
[Mac OS X](http://www.mono-project.com/docs/compiling-mono/mac/),
[Linux](http://www.mono-project.com/docs/compiling-mono/linux/) and 
[Windows](http://www.mono-project.com/docs/compiling-mono/windows/).
M
Add  
Miguel de Icaza 已提交
153

154 155 156 157 158
Note that building from Git assumes that you already have Mono installed,
so please download and [install the latest Mono release](http://www.mono-project.com/download/)
before trying to build from Git. This is required because the Mono build
relies on a working Mono C# compiler to compile itself
(also known as [bootstrapping](http://en.wikipedia.org/wiki/Bootstrapping_(compilers))).
M
Add  
Miguel de Icaza 已提交
159

160 161
If you don't have a working Mono installation
---------------------------------------------
M
Update  
Miguel de Icaza 已提交
162

163 164 165
If you don't have a working Mono installation, you can try a slightly
more risky approach: getting the latest version of the 'monolite' distribution,
which contains just enough to run the 'mcs' compiler. You do this with:
M
Update  
Miguel de Icaza 已提交
166

167 168
    # Run the following line after ./autogen.sh
    make get-monolite-latest
M
Miguel de Icaza 已提交
169

170 171
This will download and place the files appropriately so that you can then
just run:
M
Miguel de Icaza 已提交
172

173
    make
M
Miguel de Icaza 已提交
174

175
The build will then use the files downloaded by `make get-monolite-latest`.
M
Meai1 已提交
176

177
Testing and Installation
178
------------------------
M
Miguel de Icaza 已提交
179

180
You can run the mono and mcs test suites with the command: `make check`.
M
Update  
Miguel de Icaza 已提交
181

182
Expect to find a few test suite failures. As a sanity check, you
183
can compare the failures you got with [https://jenkins.mono-project.com/](https://jenkins.mono-project.com/).
184

185
You can now install mono with: `make install`
186

187 188 189
You can verify your installation by using the mono-test-install
script, it can diagnose some common problems with Mono's install.
Failure to follow these steps may result in a broken installation. 
190

191 192
Using Mono
==========
M
Miguel de Icaza 已提交
193

194
Once you have installed the software, you can run a few programs:
M
README  
Miguel de Icaza 已提交
195

196
* `mono program.exe` runtime engine
M
Miguel de Icaza 已提交
197

198
* `mcs program.cs` C# compiler 
M
Miguel de Icaza 已提交
199

200
* `monodis program.exe` CIL Disassembler
M
Update  
Miguel de Icaza 已提交
201

202
See the man pages for mono(1), mcs(1) and monodis(1) for further details.
M
Update  
Miguel de Icaza 已提交
203

204 205
Directory Roadmap
=================
M
Update  
Miguel de Icaza 已提交
206

207 208
* `acceptance-tests/` - Optional third party test suites used to validate Mono against a wider range of test cases.

209
* `data/` - Configuration files installed as part of the Mono runtime.
210

211
* `docs/` - Technical documents about the Mono runtime.
212

213
* `external/` - Git submodules for external libraries (Newtonsoft.Json, ikvm, etc).
M
Miguel de Icaza 已提交
214

215
* `man/` - Manual pages for the various Mono commands and programs.
M
Miguel de Icaza 已提交
216

217
* `mcs/` - The class libraries, compiler and tools
218

219
  * `class/` - The class libraries (like System.*, Microsoft.Build, etc.)
220

221
  * `mcs/` - The Mono C# compiler written in C#
222

223
  * `tools/` - Tools like gacutil, ikdasm, mdoc, etc.
224

225
* `mono/` - The core of the Mono Runtime.
M
Update  
Miguel de Icaza 已提交
226

227
  * `arch/` - Architecture specific portions.
228

229 230
  * `cil/` - Common Intermediate Representation, XML
definition of the CIL bytecodes.
231

232
  * `dis/` - CIL executable Disassembler
233

234 235
  * `io-layer/` - The I/O layer and system abstraction for 
emulating the .NET IO model.
236

237
  * `metadata/` - The object system and metadata reader.
M
Update  
Miguel de Icaza 已提交
238

239
  * `mini/` - The Just in Time Compiler.
M
Update  
Miguel de Icaza 已提交
240

241 242
* `runtime/` - A directory that contains the Makefiles that link the
mono/ and mcs/ build systems.
243

244 245
* `samples/` -Some simple sample programs on uses of the Mono
runtime as an embedded library.   
246

247
* `scripts/` - Scripts used to invoke Mono and the corresponding program.
248

249 250
Contributing to Mono
====================
251

M
Miguel de Icaza 已提交
252 253 254 255 256
Before submitting changes to Mono, please review the [contribution
guidelines](http://www.mono-project.com/community/contributing/).
Please pay particular attention to the [Important
Rules](http://www.mono-project.com/community/contributing/#important-rules)
section.
257

258 259
Reporting bugs
==============
260

261
To submit bug reports, please [open an issue on the mono GitHub repo](https://github.com/mono/mono/issues/new).
262

263
Please use the search facility to ensure the same bug hasn't already
M
Miguel de Icaza 已提交
264 265
been submitted and follow our
[guidelines](http://www.mono-project.com/community/bugs/make-a-good-bug-report/)
266 267 268 269
on how to make a good bug report.

Configuration Options
=====================
270

M
Miguel de Icaza 已提交
271 272
The following are the configuration options that someone building Mono
might want to use:
273

M
Miguel de Icaza 已提交
274 275 276
* `--with-sgen=yes,no` - Generational GC support: Used to enable or
disable the compilation of a Mono runtime with the SGen garbage
collector.
277

278
  * On platforms that support it, after building Mono, you will have
279
both a `mono-boehm` binary and a `mono-sgen` binary. `mono-boehm` uses Boehm,
M
Miguel de Icaza 已提交
280
while `mono-sgen` uses the Simple Generational GC.
281

282
* `--with-libgc=[included, none]` - Selects the default Boehm
M
Miguel de Icaza 已提交
283
garbage collector engine to use.
284

P
PAVAN BANSAL 已提交
285
  * *included*: (*slightly modified Boehm GC*) This is the default
M
Miguel de Icaza 已提交
286 287
value for the Boehm GC, and it's the most feature complete, it will
allow Mono to use typed allocations and support the debugger.
288

289
  * *none*:
290
Disables the inclusion of a Boehm garbage collector.
M
Mhm  
Miguel de Icaza 已提交
291

292
  * This defaults to `included`.
M
Update  
Miguel de Icaza 已提交
293

M
Miguel de Icaza 已提交
294 295 296 297 298 299 300
* `--with-cooperative-gc`

  * If you pass this flag the Mono runtime is configured to only use
  the cooperative mode of the garbage collector.  If you do not pass
  this flag, then you can control at runtime the use of the
  cooperative GC mode by setting the `MONO_ENABLE_COOP` flag.
  
301
* `--with-tls=__thread,pthread`
M
Miguel de Icaza 已提交
302

303 304 305
  * Controls how Mono should access thread local storage,
pthread forces Mono to use the pthread APIs, while
__thread uses compiler-optimized access to it.
M
Update  
Miguel de Icaza 已提交
306

307 308 309
  * Although __thread is faster, it requires support from
the compiler, kernel and libc. Old Linux systems do
not support with __thread.
M
Miguel de Icaza 已提交
310

311 312
  * This value is typically pre-configured and there is no
need to set it, unless you are trying to debug a problem.
313

314
* `--with-sigaltstack=yes,no`
315

316 317 318
  * **Experimental**: Use at your own risk, it is known to
cause problems with garbage collection and is hard to
reproduce those bugs.
M
Miguel de Icaza 已提交
319

320 321 322 323 324 325
  * This controls whether Mono will install a special
signal handler to handle stack overflows. If set to
`yes`, it will turn stack overflows into the
StackOverflowException. Otherwise when a stack
overflow happens, your program will receive a
segmentation fault.
M
Miguel de Icaza 已提交
326

327 328 329 330
  * The configure script will try to detect if your
operating system supports this. Some older Linux
systems do not support this feature, or you might want
to override the auto-detection.
M
Miguel de Icaza 已提交
331

332
* `--with-static_mono=yes,no`
M
Miguel de Icaza 已提交
333

334 335 336
  * This controls whether `mono` should link against a
static library (libmono.a) or a shared library
(libmono.so). 
M
Miguel de Icaza 已提交
337

338 339
  * This defaults to `yes`, and will improve the performance
of the `mono` program. 
M
Miguel de Icaza 已提交
340

341 342 343 344
  * This only affects the `mono' binary, the shared
library libmono.so will always be produced for
developers that want to embed the runtime in their
application.
M
Miguel de Icaza 已提交
345

346
* `--with-xen-opt=yes,no` - Optimize code for Xen virtualization.
M
Miguel de Icaza 已提交
347

348 349 350
  * It makes Mono generate code which might be slightly
slower on average systems, but the resulting executable will run
faster under the Xen virtualization system.
M
Miguel de Icaza 已提交
351

352
  * This defaults to `yes`.
M
Miguel de Icaza 已提交
353

354
* `--with-large-heap=yes,no` - Enable support for GC heaps larger than 3GB.
M
Miguel de Icaza 已提交
355

356
  * This defaults to `no`.
M
Update  
Miguel de Icaza 已提交
357

358 359
* `--enable-small-config=yes,no` - Enable some tweaks to reduce memory usage
and disk footprint at the expense of some capabilities.
M
Miguel de Icaza 已提交
360

361 362 363 364
  * Typically this means that the number of threads that can be created
is limited (256), that the maximum heap size is also reduced (256 MB)
and other such limitations that still make mono useful, but more suitable
to embedded devices (like mobile phones).
M
Miguel de Icaza 已提交
365

366
  * This defaults to `no`.
M
Miguel de Icaza 已提交
367

368 369
* `--with-ikvm-native=yes,no` - Controls whether the IKVM JNI interface library is
built or not.
M
Miguel de Icaza 已提交
370

371 372
  * This is used if you are planning on
using the IKVM Java Virtual machine with Mono.
M
Miguel de Icaza 已提交
373

374
  * This defaults to `yes`.
M
Miguel de Icaza 已提交
375

376 377
* `--with-profile4=yes,no` - Whether you want to build the 4.x profile libraries
and runtime.
M
Miguel de Icaza 已提交
378

379
  * This defaults to `yes`.
M
Miguel de Icaza 已提交
380

381 382
* `--with-libgdiplus=installed,sibling,<path>` - Configure where Mono
searches for libgdiplus when running System.Drawing tests.
M
Miguel de Icaza 已提交
383

384 385 386
  * It defaults to `installed`, which means that the
library is available to Mono through the regular
system setup.
M
Miguel de Icaza 已提交
387

388
  * `sibling` can be used to specify that a libgdiplus
389 390
that resides as a sibling of this directory (mono)
should be used.
M
Miguel de Icaza 已提交
391

392
 * Or you can specify a path to a libgdiplus.
M
Miguel de Icaza 已提交
393

394
* `--enable-minimal=LIST`
M
update  
Miguel de Icaza 已提交
395

396 397 398 399 400 401
  * Use this feature to specify optional runtime
components that you might not want to include.  This
is only useful for developers embedding Mono that
require a subset of Mono functionality.
  * The list is a comma-separated list of components that
should be removed, these are:
402

403 404
    * `aot`:
Disables support for the Ahead of Time compilation.
405

406 407 408 409
    * `attach`:
Support for the Mono.Management assembly and the
VMAttach API (allowing code to be injected into
a target VM)
410

411 412
    * `com`:
Disables COM support.
413

414 415
    * `debug`:
Drop debugging support.
416

417 418
    * `decimal`:
Disables support for System.Decimal.
M
Miguel de Icaza 已提交
419

420 421 422 423 424
    * `full_messages`:
By default Mono comes with a full table
of messages for error codes. This feature
turns off uncommon error messages and reduces
the runtime size.
M
Miguel de Icaza 已提交
425

426 427 428 429
    * `generics`:
Generics support.  Disabling this will not
allow Mono to run any 2.0 libraries or
code that contains generics.
M
Miguel de Icaza 已提交
430

431 432 433 434 435
    * `jit`:
Removes the JIT engine from the build, this reduces
the executable size, and requires that all code
executed by the virtual machine be compiled with
Full AOT before execution.
M
Miguel de Icaza 已提交
436

437 438
    * `large_code`:
Disables support for large assemblies.
M
Miguel de Icaza 已提交
439

440 441
    * `logging`:
Disables support for debug logging.
M
Update  
Miguel de Icaza 已提交
442

443 444 445 446
    * `pinvoke`:
Support for Platform Invocation services,
disabling this will drop support for any
libraries using DllImport.
M
Update  
Miguel de Icaza 已提交
447

448 449 450 451
    * `portability`:
Removes support for MONO_IOMAP, the environment
variables for simplifying porting applications that 
are case-insensitive and that mix the Unix and Windows path separators.
M
Update  
Miguel de Icaza 已提交
452

453 454
    * `profiler`:
Disables support for the default profiler.
M
Miguel de Icaza 已提交
455

456 457
    * `reflection_emit`:
Drop System.Reflection.Emit support
M
Miguel de Icaza 已提交
458

459 460 461 462
    * `reflection_emit_save`:
Drop support for saving dynamically created
assemblies (AssemblyBuilderAccess.Save) in
System.Reflection.Emit.
M
Miguel de Icaza 已提交
463

464 465 466 467
    * `shadow_copy`:
Disables support for AppDomain's shadow copies
(you can disable this if you do not plan on 
using appdomains).
M
Miguel de Icaza 已提交
468

469 470 471
    * `simd`:
Disables support for the Mono.SIMD intrinsics
library.
M
Miguel de Icaza 已提交
472

473 474 475
    * `ssa`:
Disables compilation for the SSA optimization
framework, and the various SSA-based optimizations.
476

477 478
* `--enable-llvm`
* `--enable-loadedllvm`
M
Miguel de Icaza 已提交
479

480 481 482 483
  * This enables the use of LLVM as a code generation engine
for Mono.  The LLVM code generator and optimizer will be 
used instead of Mono's built-in code generator for both
Just in Time and Ahead of Time compilations.
M
Miguel de Icaza 已提交
484

485
  * See http://www.mono-project.com/docs/advanced/mono-llvm/ for the 
486
full details and up-to-date information on this feature.
M
Miguel de Icaza 已提交
487

488 489
  * You will need to have an LLVM built that Mono can link
against.
490

491
  * The `--enable-loadedllvm` variant will make the LLVM backend
492 493
into a runtime-loadable module instead of linking it directly
into the main mono binary.
494

495 496
* `--enable-big-arrays` - Enable use of arrays with indexes larger
than Int32.MaxValue.
497

498 499 500
  * By default Mono has the same limitation as .NET on
Win32 and Win64 and limits array indexes to 32-bit
values (even on 64-bit systems).
501

502 503 504
  * In certain scenarios where large arrays are required,
you can pass this flag and Mono will be built to
support 64-bit arrays.
M
Miguel de Icaza 已提交
505

506 507 508
  * This is not the default as it breaks the C embedding
ABI that we have exposed through the Mono development
cycle.
M
Miguel de Icaza 已提交
509

510
* `--enable-parallel-mark`
M
Miguel de Icaza 已提交
511

512 513 514
  * Use this option to enable the garbage collector to use
multiple CPUs to do its work.  This helps performance
on multi-CPU machines as the work is divided across CPUS.
M
Miguel de Icaza 已提交
515

516 517 518 519
  * This option is not currently the default on OSX
as it runs into issues there.

  * This option only applies to the Boehm GC.
520

521
* `--enable-dtrace`
M
Miguel de Icaza 已提交
522

523 524 525
  * On Solaris and MacOS X builds a version of the Mono
runtime that contains DTrace probes and can
participate in the system profiling using DTrace.
M
Miguel de Icaza 已提交
526

527
* `--disable-dev-random`
M
Update  
Miguel de Icaza 已提交
528

529 530 531 532
  * Mono uses /dev/random to obtain good random data for
any source that requires random numbers.   If your
system does not support this, you might want to
disable it.
M
Update  
Miguel de Icaza 已提交
533

534 535
  * There are a number of runtime options to control this
also, see the man page.
M
Update  
Miguel de Icaza 已提交
536

A
Alexander Köplinger 已提交
537
* `--with-csc=roslyn,mcs,default`
538 539 540 541 542 543 544 545 546

  * Use this option to configure which C# compiler to use.  By default
    the configure script will pick Roslyn, except on platforms where
    Roslyn does not work (Big Endian systems) where it will pick mcs.

    If you specify "mcs", then Mono's C# compiler will be used.  This
    also allows for a complete bootstrap of Mono's core compiler and
    core libraries from source.

A
Alexander Köplinger 已提交
547 548
    If you specify "roslyn", then Roslyn's C# compiler will be used.
    This currently uses Roslyn binaries.
549
  
550
* `--enable-nacl`
P
 
Paolo Molaro 已提交
551

552 553 554
  * This configures the Mono compiler to generate code
suitable to be used by Google's Native Client:
http://code.google.com/p/nativeclient/
M
Update  
Miguel de Icaza 已提交
555

556 557
  * Currently this is used with Mono's AOT engine as
Native Client does not support JIT engines yet.
M
Miguel de Icaza 已提交
558

559 560 561 562 563 564 565 566 567 568
* `--enable-wasm`

  * Use this option to configure mono to run on WebAssembly. It will
    set both host and target to the WebAssembly triplet. This overrides
    the values passed to `--host` or `--target` and ignored what config.sub guesses.

    This is a workaround to enable usage of old automake versions that don't
    recognize the wasm triplet.


M
Miguel de Icaza 已提交
569 570 571 572 573 574 575 576 577 578 579 580
Working With Submodules
=======================

Mono references several external git submodules, for example
a fork of Microsoft's reference source code that has been altered
to be suitable for use with the Mono runtime.

This section describes how to use it.

An initial clone should be done recursively so all submodules will also be
cloned in a single pass:

581
	$ git clone --recursive git@github.com:mono/mono
M
Miguel de Icaza 已提交
582 583 584 585

Once cloned, submodules can be updated to pull down the latest changes.
This can also be done after an initial non-recursive clone:

586
	$ git submodule update --init --recursive
M
Miguel de Icaza 已提交
587 588 589

To pull external changes into a submodule:

590 591 592 593 594
	$ cd <submodule>
	$ git pull origin <branch>
	$ cd <top-level>
	$ git add <submodule>
	$ git commit
M
Miguel de Icaza 已提交
595 596 597 598

By default, submodules are detached because they point to a specific commit.
Use `git checkout` to move back to a branch before making changes:

599 600 601 602
	$ cd <submodule>
	$ git checkout <branch>
	# work as normal; the submodule is a normal repo
	$ git commit/push new changes to the repo (submodule)
M
Miguel de Icaza 已提交
603

604
	$ cd <top-level>
605
	$ git add <submodule> # this will record the new commits to the submodule
606
	$ git commit
M
Miguel de Icaza 已提交
607 608 609 610

To switch the repo of a submodule (this should not be a common or normal thing
to do at all), first edit `.gitmodules` to point to the new location, then:

611 612 613
	$ git submodule sync -- <path of the submodule>
	$ git submodule update --recursive
	$ git checkout <desired new hash or branch>
M
Miguel de Icaza 已提交
614 615 616 617

The desired output diff is a change in `.gitmodules` to reflect the
change in the remote URL, and a change in /<submodule> where you see
the desired change in the commit hash.
618 619 620 621 622 623

License
=======

See the LICENSE file for licensing information, and the PATENTS.TXT
file for information about Microsoft's patent grant.
H
hannakim123 已提交
624 625

Mono Trademark Use Policy
626
=========================
H
hannakim123 已提交
627 628 629

The use of trademarks and logos for Mono can be found [here] (http://www.dotnetfoundation.org/legal/mono-tm). 

630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646
Maintaining the Class Library Solution Files
============================================

Mono now ships with a solution file that can be used to build the
assemblies from an IDE.  Either by opening the topmost `net_4_x.sln`
file, or to by loading one of the individual `csproj` files located in
each directory.

These are maintained by extracting the configuration information from
our Makefiles, which as of May 2016 remain the canonical location for
configuration information.

When changes are made to the Makefiles, a user would need to run the
following command to re-generate the solution files at the top level:

	$ make update-solution-files