---------------------------------Compiling runtime------------------------------------- - Grab Mono 5.4 (or newer) source code - From tarball: https://download.mono-project.com/sources/mono/ - If on Windows, get the release from GitHub instead as tarballs don't seem to be configured for Windows builds - Optionally check it out from git repository: https://github.com/mono/mono - If on Windows, make sure your git client has this set: "git config --global core.autocrlf input" as otherwise you'll have problems with line endings during later steps - Expose "mono_class_bind_generic_parameters" to the public: - In mono/metadata/object-internals.h change: MonoClass* mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) MONO_INTERNAL; to: MONO_API MonoClass* mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, mono_bool is_dynamic); then move it to: mono/metadata/object.h - In mono/metadata/reflection.c modify: MonoClass* mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, gboolean is_dynamic) to: MonoClass* mono_class_bind_generic_parameters (MonoClass *klass, int type_argc, MonoType **types, mono_bool is_dynamic) - (Windows only) Add "mono_class_bind_generic_parameters" entry to mono/msvc/mono.def file - Build - Install Mono binary release (whichever one is the latest). - (Windows only)Add the "(InstallDir)\Mono\bin" to your PATH environment variable. - If on Windows: - Go to msvc/ folder to find mono.sln (Visual studio solution) - Open in VS2012 as is, or open in later VS and upgrade all projects to latest toolkit (v120 and v140 tested and working) - Generate missing header files: - First compile "genmdesc" project for desired configuration (debug/release, 32/64 bit) - Then run "runmdesc x64\bin\Debug\genmdesc x64" located in /msvc folder - Replace folder path to genmdesc you generated in the previous step - Replace x64 with Win32 for 32-bit builds - Compile mono project with desired configuration (debug/release, 32/64 bit, SGen builds were not tested). You will receive mono-2.0.dll and mono-2.0.lib as output. - Repeat the "genmdesc" step above for each configuration. Doing it once might be enough but be on the safe side. - If on Linux/Mac: - "./autogen.sh --prefix="(OutputDir)" --disable-boehm --with-sgen-default-concurrent=no" (Replace (OutputDir) with a folder where you want to output the binaries, e.g. "C:\MonoInstall") - On Mac also add: "--disable-nls" - "./configure" - "make" - "make install" - Post build - (If using GDB only) Mono uses certain signals internally for normal operation. In order to avoid GDB triggering breakpoints when not required, put this in your .gdbinit file (in your $HOME path): - handle SIGXCPU SIG33 SIG35 SIG36 SIGPWR nostop noprint -----------------------------Compiling libraries & compiler ------------------------------------- - If on Linux/Mac the compiler and libraries should already be compiled using the above steps - If on Windows: - Install Cygwin 32-bit version using these command line parameters: setup-x86.exe -qnNdO -R "C:\cygwin" -s "http://cygwin.mirror.constant.com" -l "C:\cygwin\var\cache\setup" -P autoconf -P automake -P bison -P gcc-core -P gcc-g++ -P mingw64-i686-runtime -P mingw64-i686-binutils -P mingw64-i686-gcc-core -P mingw64-i686-gcc-g++ -P mingw64-i686-headers -P mingw64-i686-pthreads -P mingw64-i686-windows-default-manifest -P mingw64-i686-winpthreads -P w32api-headers -P w32api-runtime -P windows-default-manifest -P libtool -P make -P python -P gettext-devel -P gettext -P intltool -P libiconv -P pkg-config -P git -P wget -P curl - Go to your mono source directory (the one retrieved when compiling the runtime) in terminal (Cygwin or native) and enter these commands in order: - "./autogen.sh --prefix="(OutputDir)" --with-preview=yes"" (Replace (OutputDir) with a folder where you want to output the binaries, e.g. "C:\MonoInstall") - "./configure --host=i686-w64-mingw32" - "make" - "make install" - Your built mono should now be output to (OutputDir) folder. (If it's not in that folder, check your Cygwin install folder under /usr/local) - Copy contents of (OutputDir)/include/mono/mono-2.0/mono to (BansheeRootDir)/Dependencies/Include/Mono - Make sure to modify "object.h" as you did above when building the binaries - Copy folder (OutputDir)/etc to (BansheeRootDir)/bin/Mono - Copy assembly folders (OutputDir)/lib/mono/4.0 and (OutputDir)/lib/mono/4.5 to (BansheeRootDir)/bin/Mono/lib/mono/4.0 and (BansheeRootDir)/bin/Mono/lib/mono/4.5, respectively - If you wish, you can clean up the assemblies within those folders are many might not be used. The minimum needed are "mscorlib.dll", "System.dll" and "System.Core.dll". - Copy the compiler (mcs executable) from (OutputDir)/lib/mono/4.5 to (BansheeRootDir)/bin/Mono/compiler