Граф коммитов

4312 Коммитов

Автор SHA1 Сообщение Дата
Rolf Bjarne Kvinge 43489a203e
[xharness] Fix 'MtouchExtraArgs' casing. Fixes #3516. (#3546)
https://github.com/xamarin/xamarin-macios/issues/3516
2018-02-20 17:41:51 +01:00
Manuel de la Pena e9798ce671
[Tests] Change the guid of the test project to allow to use VS. (#3538) 2018-02-20 16:22:23 +01:00
Sebastien Pouliot 2a964030a8
[linker] Take extra care to avoid 32/64 bits specific mscorlib.dll (#3532)
We want to avoid separate `mscorlib.dll` assemblies for 32/64 bits so
the  architecture specific code for `n[u]int` and `nfloat` must be
preserved in both cases.

Because a single, slightly larger, assembly is much smaller than two
(slightly smaller) ones.

This is not a common situation since the extraneous preserved API are
often used in the application (or 3rd party code) so, in most cases,
a single `mscorlib.dll` was already used.

This merely close the gap for some cases, like our `link all` application
where this happened.
2018-02-19 19:16:17 -05:00
Sebastien Pouliot dea72218b1
Bump mono to head of 2017-12 (#3535)
Commit list for mono/mono:

* mono/mono@177997b063 [sdks] Fix for XA integration (#7108)
* mono/mono@c8845164ad Merge more SDK changes from mono master. (#7090)
* mono/mono@ac87945049 Revert "Merge more SDK changes from mono master." (#7106)
* mono/mono@5ef368bb1e [sdks] Fix for XA integration (#7092)
* mono/mono@c67ec40879 Merge more SDK changes from mono master. (#7090)
* mono/mono@fd1fd05f18 * Generalize commit 0c6932a985175a5cf0cbc59ffd3af4abf3db248e to support LDARG{0|1|2|3}, LDLOC{0|1|2|3}, LDARGS, LDLOCS, LDARG and LDLOC instead of LDLOC and LDLOCS. Improves generated code similar to issue #60945 (#7062)
* mono/mono@936f7841d7 [ci] Disable monodoc tests on Windows for now
* mono/mono@9a2f778a91 [coop] Disable failing tests on PR (#6472)
* mono/mono@96eee2f901 Disable some PngCodecTest that have trouble on CI right now
* mono/mono@28e047fd35 [debugger] disable StepOutAsync test because it's flaky
* mono/mono@0d51a8063b [sdks] Backport changes from master (#7084)
* mono/mono@b232a3929b Bump aot file format version because of 7cac757e60cd61aa070f7e0fffca225364f58c0c. (#7083)

Diff: fbc4f0546d...177997b063

https://bugzilla.xamarin.com/show_bug.cgi?id=60945
2018-02-19 17:01:17 -05:00
Rolf Bjarne Kvinge 5788a9fa9b
[mtouch] Rename temporary directories so the order assemblies move is clearer. (#3531)
* [mtouch] Rename temporary directories so the order assemblies move is clearer.

I implemented this myself, but I can never remember in which order assemblies
go from one directory to another during the build.

So number these temporary directories, so that even the most forgetful minds
can understand without having to remember anything.

* [tests] Update test according to temporary directory name change.
2018-02-19 21:50:20 +01:00
Rolf Bjarne Kvinge 3113c5d2b5
[mtouch/mmp] Fix tracking of whether the static registrar should run again or not. Fixes #641. (#3534)
* [tests] Improve debug spew for the RebuildTest_WithExtensions test.

* [mtouch/mmp] Store/load if the dynamic registrar is removed or not into the cached link results.

Store/load if the dynamic registrar is removed or not into the cached link
results, so that we generate the correct main.m even if cached linker results
are used.

* [mtouch/mmp] The static registrar must not execute if we're loading cached results from the linker.

The static registrar must not execute if we're loading cached results from the
linker, because the static registrar needs information from the linker that's
not restored from the cache.

* [mtouch/mmp] Share Touch code.

* [mtouch/mmp] Make it possible to touch inexistent files (to create them).

* [mtouch/mmp] Fix tracking of whether the static registrar should run again or not.

The recent changes to support optimizing away the dynamic registrar caused the
Xamarin.MTouch.RebuildTest_WithExtensions test to regress.

The problem
-----------

* The linker now collects and stores information the static registrar needs.
* This information is not restored from disk when the linker realizes that it
  can reload previously linked assemblies instead of executing again.
* The static registrar runs again (for another reason).
* The information the static registrar needs isn't available, and incorrect
  output follows.

So fix 1: show an error if the static registrar runs when the linker loaded
cached results.

The exact scenario the test ran into is this:

* 1st build: everything is new and everything is built.
* 2nd build: contents of .exe changes, the linker runs again, the static
  registrar runs again, but sees that the generated output didn't change, so
  it doesn't write the new content to disk (this is an optimization to avoid
  compiling the registrar.m file again unless needed).
* 3rd build: only the .exe timestamp changes, the linker sees nothing changes
  in the contents of the .exe and loads the previously linked assemblies from
  disk, the static registrar sees that the .exe's timestamp is newer than
  registrar.m's timestamp and run again, but doesn't produce the right result
  because it doesn't have the information it needs.

Considered solutions
--------------------

1. Only track timestamps, not file contents. This is not ideal, since it will
   result in more work done: in particular for the case above, it would add a
   registrar.m compilation in build #2, and linker rerun + static registrar
   rerun + registrar.m compilation + final native link in build #3.
2. Always write the output of the static registrar, even if it hasn't changed.
   This is not ideal either, since it will also result in more work done: for
   the case above, it would add a registrar.m compilation + final native link
   in build #3.
3. Always write the output of the static registrar, but track if it changed or
   not, and if it didn't, just touch registrar.o instead of recompiling it.
   This only means the final native link in build #3 is added (see #5 for why
   this is worse than it sounds).
4. Always write the output of the static registrar, but track it it changed or
   not, and if it didn't, just touch registrar.o instead of recompiling it,
   and track that too, so that the final native link in build #3 isn't needed
   anymore. Unfortunately this may result in incorrect behavior, because now
   the msbuild tasks will detect that the executable has changed, and may run
   dsymutil + strip again. The executable didn't actually change, which means
   it would be the previously stripped executable, and thus we'd end up with
   an empty .dSYM because we ran dsymtil on an already stripped executable.
5. Idea #4, but write the output of the final link into a temporary directory
   instead of the .app, so that we could track whether we should update the
   executable in the .app or not. This is not optimal either, because
   executables can be *big* (I've seen multi-GB tvOS bitcode executables), and
   extra copies of such files should not be taken lightly.
6. Idea #4, but tell the MSBuild tasks that dsymutil/strip doesn't need to be
   rerun even if the timestamp of the executable changed. This might actually
   work, but now the solution's become quite complex.

Implemented solution
--------------------

Use stamp files to detect whether a file is up-to-date or not.

In particular:

* When we don't write to a file because the new contents are identical to the
  old contents, we now touch a .stamp file. This stamp file means "the
  accompanying file was determined to be up-to-date when the stamp was
  touched."
* When checking whether a file is up-to-date, also check for the presence of a
  .stamp file, and if it exists, use the highest timestamp between the stamp
  file and the actual file.

Now the test scenario becomes:

* 1st build: everything is new and everything is built.
* 2nd build: contents of .exe changes, the linker runs again, the static
  registrar runs again, but sees that the generated output didn't change, so
  it doesn't write the new content to disk, but it creates a registrar.m.stamp
  file to indicate the point in time when registrar.m was considered up-to-
  date.
* 3rd build: only the .exe timestamp changes, the linker sees nothing changes
  in the contents of the .exe and loads the previously linked assemblies from
  disk, the static registrar sees that the .exe's timestamp is *older* than
  registrar.m.stamp's timestamp and doesn't run again.

We only use the stamp file for source code (registrar.[m|h], main.[m|h],
pinvokes.[m|h]), since using it every time has too much potential for running
into other problems (for instance we should never create .stamp files inside
the .app).

Fixes these test failures:

    1) Failed : Xamarin.MTouch.RebuildTest_WithExtensions("single","",False,System.String[])
      single
      Expected: <empty>
      But was:  < "/Users/builder/data/lanes/5746/4123bf7e/source/xamarin-macios/tests/mtouch/bin/Debug/tmp-test-dir/Xamarin.Tests.BundlerTool.CreateTemporaryDirectory371/testApp.app/testApp is modified, timestamp: 2/15/2018 3:04:11 PM > 2/15/2018 3:04:09 PM" >

    2) Failed : Xamarin.MTouch.RebuildTest_WithExtensions("dual","armv7,arm64",False,System.String[])
      dual
      Expected: <empty>
      But was:  < "/Users/builder/data/lanes/5746/4123bf7e/source/xamarin-macios/tests/mtouch/bin/Debug/tmp-test-dir/Xamarin.Tests.BundlerTool.CreateTemporaryDirectory375/testApp.app/testApp is modified, timestamp: 2/15/2018 3:06:03 PM > 2/15/2018 3:06:00 PM" >

    3) Failed : Xamarin.MTouch.RebuildTest_WithExtensions("llvm","armv7+llvm",False,System.String[])
      llvm
      Expected: <empty>
      But was:  < "/Users/builder/data/lanes/5746/4123bf7e/source/xamarin-macios/tests/mtouch/bin/Debug/tmp-test-dir/Xamarin.Tests.BundlerTool.CreateTemporaryDirectory379/testApp.app/testApp is modified, timestamp: 2/15/2018 3:07:14 PM > 2/15/2018 3:07:12 PM" >

    4) Failed : Xamarin.MTouch.RebuildTest_WithExtensions("debug","",True,System.String[])
      debug
      Expected: <empty>
      But was:  < "/Users/builder/data/lanes/5746/4123bf7e/source/xamarin-macios/tests/mtouch/bin/Debug/tmp-test-dir/Xamarin.Tests.BundlerTool.CreateTemporaryDirectory383/testApp.app/testApp is modified, timestamp: 2/15/2018 3:08:16 PM > 2/15/2018 3:08:13 PM" >

    5) Failed : Xamarin.MTouch.RebuildTest_WithExtensions("single-framework","",False,System.String[])
      single-framework
      Expected: <empty>
      But was:  < "/Users/builder/data/lanes/5746/4123bf7e/source/xamarin-macios/tests/mtouch/bin/Debug/tmp-test-dir/Xamarin.Tests.BundlerTool.CreateTemporaryDirectory387/testApp.app/testApp is modified, timestamp: 2/15/2018 3:09:18 PM > 2/15/2018 3:09:16 PM" >

Fixes https://github.com/xamarin/maccore/issues/641
2018-02-19 20:28:04 +01:00
Rolf Bjarne Kvinge 6d88e01b5e
[linker] Find linked away interfaces when resolving removed interfaces. Fixes #3513. (#3515)
The linker might remove interfaces that have already been linked away. Make
sure to look for the TypeDefinition for such interfaces among the types that
have already been linked away.

Fixes https://github.com/xamarin/xamarin-macios/issues/3513.
2018-02-19 11:36:38 +01:00
Matt Sylvia 96085adb66 Bump XI XM version numbers (#3519) 2018-02-16 15:33:23 -05:00
Alex Soto d304407e78
[Intents] Fix xtro output (#3512) 2018-02-16 12:46:01 -06:00
Alex Soto 273824b3d7
[FinderSync] Fix xtro output (#3511)
This depends on https://github.com/xamarin/xamarin-macios/pull/2315
2018-02-16 11:48:11 -06:00
Rolf Bjarne Kvinge 75fa7b8e78
Bump the VSfM dependency to the latest d15-6 preview. (#3510)
It seems the d15-5 version of VSfM has a non-optimal startup path, where
launching vstool takes almost 4 minutes on the bots, making it difficult to
build & run tests within the allotted time for those tests:

    $ time /Applications/Visual\ Studio.app/Contents/MacOS/vstool help
    [...]
    real	3m30.172s

So bump to the latest d15-6 preview (which takes _only_ 12 seconds to launch
on my machine), hoping it will be enough to make tests build on the bots.
2018-02-16 17:42:44 +01:00
Manuel de la Pena 688b3020f9
[Foundation] Add missing NSLinguisticAnalysis category. Fixes 35009. (#3473)
* [Foundation] Add missing NSLinguisticAnalysis category. Fixes 35009.
2018-02-16 16:21:47 +01:00
Alex Soto 4cd3f5c2d9
[ImageKit] Fix xtro output (#3509) 2018-02-16 07:45:50 -06:00
Alex Soto 78650fb550
[CoreAudioKit] Fix macOS xtro output (#3508)
* [CoreAudioKit] Fix macOS xtro output

* Fix Midi typo

* Add trailing comma to enum value
2018-02-16 05:49:05 -06:00
Zoltan Varga 7c88610112 Remove the tvos cross compiler, use the normal ios cross compiler instead, they are the same. (#3492) 2018-02-16 10:45:22 +01:00
Alex Soto 45a8a0420d
[GLKit] Fixes macOS xtro output (#3507) 2018-02-15 22:40:18 -06:00
Alex Soto c03d3b158e
[Security] Fixes CS0162: Unreachable code detected in Certificate.cs (#3506)
Our build correctly issues

	Security/Certificate.cs(556,4): warning CS0162: Unreachable code detected
2018-02-15 21:57:25 -06:00
Alex Soto 6e324d37f9
[GameController] Fixes macOS xtro output (#3505) 2018-02-15 21:56:51 -06:00
Alex Soto 4ddc2dcfed
[CoreLocation] Fix macOS xtro output (#3504) 2018-02-15 20:58:40 -06:00
Sebastien Pouliot b170a4ec1a
Bump mono to head of 2017-12 (#3501)
Commit list for mono/mono:

* mono/mono@fbc4f0546d Bump to cecil:mono-2017-12

Diff: d0c1e9d32b...fbc4f0546d
2018-02-15 21:54:52 -05:00
Rolf Bjarne Kvinge c838a11c4d
Merge pull request #3495 (Implement support for optimizing away the dynamic registrar) from rolfbjarne/full-static-registrar
Implement support for optimizing away the dynamic registrar.

* Add a new property (Runtime.DynamicRegistrationSupported) that indicates at
  runtime whether dynamic registration is available.

* Check this new property whenever we need dynamic registration.

* Add an optimization to mtouch/mmp that detects whether dynamic registration
  is required, and if not, changes Runtime.DynamicRegistrationSupported to
  return false.

* Add an optimization to mtouch/mmp that inlines
  Runtime.DynamicRegistrationSupported as a constant value.

The end result is that the linker will link away the dynamic registrar if
mtouch/mmp detects that it's not needed.

Benchmark
---------

I've compared the size of entire apps built for device:

|test                          | Before |  After |   Diff |     % |
|:-----------------------------|-------:|-------:|-------:|------:|
|[monotouch-test/Release][1]   | 95.7mb | 95.0mb | -680kb | -0.7% |
|[link sdk/Release][2]         | 21.2mb | 20.9mb | -245kb | -1.2% |
|[minimalistic app/Release][3] | 4.58mb | 4.32mb | -259kb | -5.7% |

[1]: https://gist.github.com/rolfbjarne/3871e36d2de8db1a8eee1d9f9276d3d2#monotouch-test-release-wall-optimizations-enabled
[2]: https://gist.github.com/rolfbjarne/3871e36d2de8db1a8eee1d9f9276d3d2#link-sdk
[3]: https://gist.github.com/rolfbjarne/3871e36d2de8db1a8eee1d9f9276d3d2#minimalistic-app
2018-02-15 23:56:00 +01:00
Vincent Dondain 94ec17e875
[xamarin-analysis] Add XIA0007 to docs/website/xamarin-ios-analysis.md (#3498) 2018-02-15 14:14:35 -05:00
Sebastien Pouliot 013de9c441
Bump mono to head of 2017-12 (#3493)
* Bump mono to head of 2017-12

Commit list for mono/mono:

* mono/mono@f12e936ca3 [packaging] Remove FSharp patches that are no longer required
* mono/mono@3977339940 [packaging] Windows: remove FSharp.Core from GAC (#6345)
* mono/mono@cb15effa2f Emit the weak field indexes table using the MONO_AOT_TABLE code, so it works with separate aot data files/bitcode.
* mono/mono@2ad3f0bf9e Bug 60088 - Assertion at ../../../../external/mono/mono/mini/debugger-agent.c:4765, condition `array->len == 1' not met (#7004)
* mono/mono@899599b951 Bump nunitlite
* mono/mono@3da56339ec [2017-12] Update F# to 4.1.33 (#7020)
* mono/mono@a0af42ab18 [corlib] Pass null-terminated string for logging (#6954)
* mono/mono@aab818fbf3 Revert mkbundle defaulting behavior made in ca8b8bd346

Diff: 4b1745401d...f12e936ca3

* Bump again (to pickup nunit-lite revert) to head of 2017-12

    Commit list for mono/mono:
    
    * mono/mono@d0c1e9d32b Revert nunit-lite to earlier version
    * mono/mono@778a70ba01 Add denied assembly versions from previous ms extensions nugets
    * mono/mono@f83b8da83e Bump to cecil:master
    
    Diff: f12e936ca3...d0c1e9d32b
2018-02-15 13:43:52 -05:00
Alex Soto 47163efdb6
[Tests] Fixes CertificateTest for ios < 10 (#3500)
`SecKeyCopyAttributes` is iOS 10+ and is used by `GetAttributes`
2018-02-15 11:47:37 -06:00
Rolf Bjarne Kvinge 4123bf7ede Merge remote-tracking branch 'origin/master' into full-static-registrar 2018-02-15 17:45:41 +01:00
Vincent Dondain a93a5a10eb
[xtro-sharpie] Fix typo in xtro README
Extra '`'.
2018-02-15 11:45:24 -05:00
Rolf Bjarne Kvinge 1e6b294210 [documentation] Update according to review. 2018-02-15 17:45:03 +01:00
Rolf Bjarne Kvinge a2b49f4bb5 [tests] Fix expected warning message for optimize warning test. 2018-02-15 17:45:02 +01:00
Rolf Bjarne Kvinge 40d96bf79b [tests] Skip MX2107 test for XM. 2018-02-15 17:45:02 +01:00
Alex Soto 2608528866
[QuickLookUI] Fixes macOS xtro output (#3475) 2018-02-15 09:08:39 -06:00
Alex Soto 3f14eeea44
[GameKit] Fixes macOS xtro output (#3491) 2018-02-15 08:58:58 -06:00
Rolf Bjarne Kvinge fafd0fa151 [ObjCRuntime] BlockLiteral.GetBlockForDelegate must be optimizable because it calls Runtime.DynamicRegistrationSupported.
Fixes this test:

    Xamarin.ApiTest.ApiTest.AlwaysOptimizable(iOS) : All methods calling optimizable API must be optimizable
    	The method System.IntPtr ObjCRuntime.BlockLiteral::GetBlockForDelegate(System.Reflection.MethodInfo,System.Object,System.String) calls System.Boolean ObjCRuntime.Runtime::get_DynamicRegistrationSupported(), but it does not have a [BindingImpl (BindingImplOptions.Optimizable)] attribute.

Also skip the BlockLiteral.SetupBlock optimization for this method, because
it's not optimizable (and thus produces a warning users can't ignore).
2018-02-15 15:58:02 +01:00
Rolf Bjarne Kvinge f2652b7a4a
[mmp/mtouch] Update project files after mono bump where files where moved. (#3494) 2018-02-15 15:29:58 +01:00
Rolf Bjarne Kvinge c664698b09 [mmp] Don't write to xamarin_supports_dynamic_registration in Classic, it's not there. 2018-02-15 12:26:23 +01:00
Rolf Bjarne Kvinge ab5e04a4c7 [mtouch/mmp] Log when determining whether the dynamic registrar can be removed. 2018-02-15 11:44:56 +01:00
Rolf Bjarne Kvinge 99adcfe4b4 [xharness] Set the right csproj value (MtouchLink) when changing the linker mode for XI projects. 2018-02-15 10:26:22 +01:00
Rolf Bjarne Kvinge 7912f44fa5 [xharness] Set the LINKALL define when linking all assemblies in monotouch-test. 2018-02-15 10:26:22 +01:00
Rolf Bjarne Kvinge ff737fe294 [linker] Add support for marking switch statements in the code optimizer. 2018-02-15 10:26:22 +01:00
Rolf Bjarne Kvinge 0bf081fcf7 [mtouch/mmp] Don't enable empty (inexistent) optimizations even when enabling all optimizations.
This makes passing `--optimize:all` not enable optimizations that don't exist
or isn't fully implemented for a platform.
2018-02-15 10:25:31 +01:00
Rolf Bjarne Kvinge 8f23934a22 [tests][link all] Disable removal of the dynamic registrar, we need it for some tests. 2018-02-15 10:24:31 +01:00
Rolf Bjarne Kvinge 9cec7d3d59 [linker] Add support for removing exception handlers from optimized code.
It seems LLVM freaks out if it finds unreachable exception handlers:

    * Assertion at ../../../../external/mono/mono/mini/mini-llvm.c:7406, condition `err == 0' not met
    Basic Block in function 'Xamarin_iOS_ObjCRuntime_Class_GetClassHandle_System_Type' does not have terminator!
    label %BB7_CALL_HANDLER_TARGET
2018-02-15 10:24:31 +01:00
Rolf Bjarne Kvinge 8d7f951ea3 [mmp] Don't support removal of the dynamic registrar for XM, it needs more work. 2018-02-15 10:24:31 +01:00
Rolf Bjarne Kvinge 04927888f5 [ObjCRuntime] TypeConverter.ToManaged requires the dynamic registrar. 2018-02-15 10:24:31 +01:00
Rolf Bjarne Kvinge 67d26cd1c3 [tests] Add an MX2107 test. 2018-02-15 10:24:30 +01:00
Rolf Bjarne Kvinge b4f0c8b729 [tests] Add test to ensure the dynamic registrar really is removed when we request it to be. 2018-02-15 10:24:30 +01:00
Rolf Bjarne Kvinge e4956ef2cf [ObjCRuntime] Look up managed types from the native class using information from the static registrar if possible. 2018-02-15 10:24:30 +01:00
Rolf Bjarne Kvinge 961878b80b [tests] Update tests to cope with removal of the dynamic registrar. 2018-02-15 10:24:30 +01:00
Rolf Bjarne Kvinge 9022c81861 [src] Sprinkle [BindingImpl (Optimizable)] on methods that call Runtime.DynamicRegistrationSupported. 2018-02-15 10:24:20 +01:00
Rolf Bjarne Kvinge d43561583d [tests] Augment the AlwaysOptimizable test to ensure methods that call Runtime.DynamicRegistrationSupported are also optimizable. 2018-02-15 10:23:26 +01:00
Rolf Bjarne Kvinge 44b677599d [runtime] Mark managed callback functions if they're only used in the dynamic registrar.
Mark managed callback functions if they're only used in the dynamic registrar,
and only initialize the corresponding delegate if the dynamic registrar is
available.

This will make it possible for the linker to remove those managed functions if
the dynamic registrar is being removed.
2018-02-15 10:18:32 +01:00