The recent Windows RT jailbreak enabled me to run IKVM on my Surface RT. Out of curiousity I decided to run a part of the test suite. Only three tests failed, one because it relies on specific GC behavior and two because they use JVM.DLL. Previously, IKVM's JVM.DLL assemblies were created with ilasm, because that was the easiest way to create unmanaged exports at the time. However, ilasm doesn't seem to support ARM, so I added this support to IKVM.Reflection and wrote a simple tool to generate unmanaged export assemblies. Of course, supporting unmanaged exports on Windows RT in IKVM.Reflection is not very useful, but it was an interesting exercise to learn a little bit about the ARM instruction set.
I also did some more useful work. I finally got around to changing how ikvmc handles assembly references. It now works like the C# compiler and uses the IKVM.Reflection support for missing assemblies that I added for mcs. This means that it no longer automatically loads assemblies (apart from the IKVM runtime and class library assemblies) and you need to add explicit references for indirectly used assemblies as well. The downside is that this has the potential to break some builds, but the upside is that the compilation process is now more predictable and only loads the actually required assemblies, like a "real" compiler, instead of the System.Reflection heritage that required loading even unused dependencies.
Another change is that ikvmstub jars are now officially deprecated from being used with ikvmc (it will still work for a while, but a warning message is issued).
Finally, it is now illegal to explicitly reference a secondary assembly in a shared class loader group. Previously this caused a warning message, but now this is an error. You need to reference the primary assembly.
- Deduplicate ikvmc messages based on all parameter values, not just the first one.
- Allow ikvmc messages to be suppressed based on any number of parameter values.
- Fixed ikvmc to write fully specific -nowarn options to suppress file.
- Fixed ikvmc to handle missing types.
- Added ikvmc support for missing assemblies.
- Officially deprecated using stubs with ikvmc.
- Bug fix. Don't add duplicate methods to attribute annotation interfaces. The primary cause of this was attributes with virtual properties where we would add the base class property as well as the derived class overridden property.
- Changed build process to replace ilasm usage to generate JVM.DLL with a custom tool.
- Bug fix. Local variable analysis for finally blocks was incorrect. Fixes bug #3600788.
- Changed ikvmc to give an error message (instead of a warning) when referencing a secondary assembly from a shared class loader group).
- Made ikvmc EditorBrowsableAttribute construction fully symbolic, to avoid having to load System.dll.
- Disabled automatic assembly loading for ikvmc.
- Suppress ikvmc warnings after an error has occurred (to avoid obscuring the fact that compilation failed).
- IKVM.Reflection: Added UniverseOptions.ResolveMissingMembers and deprecated EnableMissingMemberResolution().
- IKVM.Reflection: Added Universe.ResolvedMissingMember event.
- IKVM.Reflection: Fixed importing of CLR types with funny names (where we'd previously run into bugs in CLR's Type.Name and Type.Namespace).
- IKVM.Reflection: Restructured relocation writing to pack all relocation in a page in the same block, as WoA apparently requires this.
- IKVM.Reflection: Implemented ARM startup stub.
- IKVM.Reflection: Implemented ARM unmanaged exports.
Binaries available here: ikvmbin-7.3.4764.zip