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

2539 Коммитов

Автор SHA1 Сообщение Дата
Rolf Bjarne Kvinge 068133f97b [xharness] Make exception handler handle more code. 2017-02-10 16:39:30 +01:00
Rolf Bjarne Kvinge c44be5db87 [xharness] Add favicon.ico support. 2017-02-10 16:39:30 +01:00
Rolf Bjarne Kvinge 769e11fb58 [mtouch tests] Add new test for architectures in frameworks. 2017-02-10 16:39:30 +01:00
Rolf Bjarne Kvinge 5bea8577a4 [mtouch tests] Automatically pass --extension to mtouch if we create a temporary extension. 2017-02-10 16:39:29 +01:00
Rolf Bjarne Kvinge ccd1c2ce4d [mtouch tests] Remove debug spew. 2017-02-10 16:39:29 +01:00
Rolf Bjarne Kvinge b78d6fa429 [mtouch tests] Fix typo. 2017-02-10 16:39:29 +01:00
Rolf Bjarne Kvinge 514c16becb Bump Touch.Unit to get extension test improvements. 2017-02-10 16:39:28 +01:00
Rolf Bjarne Kvinge 70eefd7e80 [tests] Default today extension containers to iOS 8.0+.
It makes no sense to default to anything lower, since extensions were
introduced in iOS 8.0.
2017-02-10 16:39:28 +01:00
Rolf Bjarne Kvinge 90c49d94ea [test templates] Build fat today container by default.
This makes code sharing work better, since extensions are usually fat.
2017-02-10 16:39:28 +01:00
Rolf Bjarne Kvinge 2eb2b7bd42 [mtouch] Remove fixed FIXME. 2017-02-10 16:39:27 +01:00
Rolf Bjarne Kvinge fd1e65d318 [mtouch] Validate a few assumptions about the linker output. 2017-02-10 16:39:27 +01:00
Rolf Bjarne Kvinge 6d744417dd [mtouch tests] Improve rebuild test. 2017-02-10 16:39:26 +01:00
Rolf Bjarne Kvinge 8c4d56e898 [mtouch] Fix loading cached linked assemblies.
The cached linker results can have multiple identical input assemblies (for
assemblies that show up in both the app and any app extensions), so make sure
we don't load those more than once.
2017-02-10 16:39:26 +01:00
Rolf Bjarne Kvinge cd0c9c1163 [mtouch] Only files the linker copies when ensuring the linker output has up-to-date timestamps. 2017-02-10 16:39:26 +01:00
Rolf Bjarne Kvinge 10126f1839 [mtouch] Invalidated cached linked assemblies if a .config file changes.
Config files can modify the AOT-compiled code, so they must be taken into
account when doing cache validation for linked assemblies.
2017-02-10 16:39:26 +01:00
Rolf Bjarne Kvinge 8f91bb163e [mtouch] Re-AOT an assembly if its .mdb or .config files changed. 2017-02-10 16:39:25 +01:00
Rolf Bjarne Kvinge 6f4f54a790 [mtouch] Extensions don't need a NOTICE file, since it's already in the container app. 2017-02-10 16:39:25 +01:00
Rolf Bjarne Kvinge d38656b912 [mtouch tests] Bump the timeout for a few tests from 1 to 5 minutes. 2017-02-10 16:39:25 +01:00
Rolf Bjarne Kvinge fb0749450c [mtouch] Make sure SDK assemblies in appex'es are included in the container app when code sharing. 2017-02-10 16:39:24 +01:00
Rolf Bjarne Kvinge c814e71fac [mtouch] Required symbols found by the linker must be filtered to the app we're building.
Since the linker can process multiple apps/appex'es at the same time, it also
means it will put together all the required symbols found in _all_ assemblies.

This means that we need to filter out required symbols for other
apps/appex'es.
2017-02-10 16:39:24 +01:00
Rolf Bjarne Kvinge d3e246b193 [mtouch] Don't do code sharing unless the container app's deployment target is at least 8.0.
Frameworks don't work on earlier iOS versions, so we can't (easily) share
native code in this scenario.
2017-02-10 16:39:24 +01:00
Rolf Bjarne Kvinge b1199d2b5a [mtouch] Remove dead code. 2017-02-10 16:39:23 +01:00
Rolf Bjarne Kvinge d0ea10de1a [mtouch] Build SDK assemblies by default to a framework whenever it makes sense.
Change the default to build SDK assemblies to a framework
(Xamarin.Sdk.framework) whenever an app has extensions.
2017-02-10 16:39:23 +01:00
Rolf Bjarne Kvinge 8a264c4602 [mtouch] Improve logging. 2017-02-10 16:39:23 +01:00
Rolf Bjarne Kvinge b547454e98 [mtouch] Fix cache invalidation with app extensions.
Change cache invalidation so that if any app extension's cache is invalid,
then invalidate the cache for the container app and all other app extensions.

This is the safest option when we're sharing code.
2017-02-10 16:39:23 +01:00
Rolf Bjarne Kvinge 95dfdd3a00 [cache] Remove dead code. 2017-02-10 16:39:22 +01:00
Rolf Bjarne Kvinge e7ae947189 [cache] Don't use the global command line arguments to determine input.
Don't use the global command line arguments to determine input, because that's
not the input we use for app extensions anymore.

Instead explicitly pass the input arguments when creating the cache.
2017-02-10 16:39:21 +01:00
Rolf Bjarne Kvinge 02b81e3332 [cache] Fix mmp/mtouch change detection.
Since neither mtouch nor mmmp is mkbundled anymore, the installed binary is in
fact a shell script.

This means that it's quite useless to check if the shell script has been
modified; instead check if the executing assembly has been modified (which
works now that we're not mkbundled anymore).
2017-02-10 16:39:20 +01:00
Rolf Bjarne Kvinge 2973b99f51 [mtouch tests] Add support for passing --nostrip to mtouch.
And use it to make tests run faster when we don't need to strip code.
2017-02-10 16:39:20 +01:00
Rolf Bjarne Kvinge d5ebc46391 [mtouch tests] Format output spew better to make it easier to parse by mere humans. 2017-02-10 16:39:20 +01:00
Rolf Bjarne Kvinge 2a21419197 [mtouch tests] Add code sharing test. 2017-02-10 16:39:19 +01:00
Rolf Bjarne Kvinge 62c08fd233 [mtouch tests] Allow creating temporary apps/extensions multiple times without re-creating temporary directories.
Allow creating temporary apps/extensions multiple times without re-creating temporary directories.

This makes it possible for tests to call CreateTemporaryApp|Extension multiple
times with different code, and have only the actual managed assembly change
between each time (which is useful for tests that verifies that cached builds
are used properly).
2017-02-10 16:39:19 +01:00
Rolf Bjarne Kvinge 2f8064a6e4 [mtouch tests] Check if plist has changed before writing it.
This is important for rebuild tests checking filestamps.
2017-02-10 16:39:19 +01:00
Rolf Bjarne Kvinge a1a141b4ca [mtouch tests] Use a different default app name for service extensions.
Otherwise it might end up clashing with the main app's name, preventing code sharing.
2017-02-10 16:39:18 +01:00
Rolf Bjarne Kvinge 18a6bf4690 [mtouch tests] Store app extensions as MTouchTool instances. 2017-02-10 16:39:18 +01:00
Rolf Bjarne Kvinge 27289efb1a [mtouch] Fix bundling frameworks from extensions.
We must build each appex bundle before the container bundle, so that we can
compute the frameworks each appex the needs before bundling the container app.

Also there's no need to store the list of frameworks appex's need in a file,
since everything is now done in the same mtouch process.
2017-02-10 16:39:17 +01:00
Rolf Bjarne Kvinge 7e28df59c4 [mtouch] Implement support for sharing code between app extensions and container apps.
Implement support for sharing both code and resources between app extensions
and their container app:

* AOT-compiled code. Each shared assembly is only AOT-compiled once, and if
  the assembly is built to a framework or dynamic library, it will also only
  be included once in the final app (as a framework or dynamic library in the
  container app, referenced directly by the app extension). If the assemblies
  are built to static objects there won't be any size improvements in the app,
  but the build will be much faster, because the assemblies will only be AOT-
  compiled once.
* Any resources related to managed assemblies (debug files, config files,
  satellite assemblies) will be put in the container app only.

Since these improvements are significant, code sharing will be enabled by
default.

Test results
============

For an extreme test project with 7 extensions (embedded-frameworks)[1]:

             with code sharing     cycle 9     difference
build time      1m 47s               3m 33s        -1m 46s = ~50% faster
app size         26 MB               131 MB       -105 MB  = ~80% smaller

For a more normal test project (MyTabbedApplication)[2] - this is a simple application with 1 extension:

             with code sharing     cycle 9     difference
build time      0m 44s               0m 48s        -4s    = ~ 8% faster
app size         23 MB                37 MB        -15 MB = ~40% smaller

Another tvOS app with one extension also show similar gains (MyTVApp)[3]:

             with code sharing     cycle 9     difference
build time      0m 22s               0m 48s        -26s    = ~54% faster
app size         22 MB                62 MB        -40 MB  = ~65% smaller

[1]: https://github.com/rolfbjarne/embedded-frameworks
[2]: https://github.com/xamarin/xamarin-macios/tree/cycle9/msbuild/tests/MyTabbedApplication
[3]: https://github.com/xamarin/xamarin-macios/tree/cycle9/msbuild/tests/MyTVApp
2017-02-10 16:39:15 +01:00
Rolf Bjarne Kvinge 85f28fbd59 [mtouch] Warn if mtouch loads an assembly from a different location than requested.
Warn if mtouch loads an assembly from a different location than requested
(which might be because there are multiple assemblies with the same name).

Also rework the MT0023 check a bit by explicitly loading the root assembly
first, and then detecting if any loaded assemblies matches the root assembly.
This results in code that's a bit more obvious, and it also works correctly
with extensions (previously the entire MT0023 check was skipped for
extensions).
2017-02-10 16:39:15 +01:00
Rolf Bjarne Kvinge a163cb2e14 [mtouch] Make the linker accept multiple root assemblies. 2017-02-10 16:39:14 +01:00
Rolf Bjarne Kvinge e4cf717b1d [mtouch] Simplify linker code slightly by passing fewer arguments around. 2017-02-10 16:39:14 +01:00
Rolf Bjarne Kvinge 8f80ba34af [mtouch] Refactor slightly how the profiler is linked in. 2017-02-10 16:39:14 +01:00
Rolf Bjarne Kvinge ffe3cfd39e [mtouch] Include the product assembly in the '@sdk' group for assembly build targets. 2017-02-10 16:39:13 +01:00
Rolf Bjarne Kvinge 7b5c1be2b7 [mtouch] Allow the assembly build target name for frameworks to end with '.framework'.
Allow the assembly build target name for frameworks to end with '.framework',
so that the following:

    --assembly-build-target=@sdk=framework=Xamarin.Sdk.framework

doesn't end up creating Xamarin.Sdk.framework.framework.
2017-02-10 16:39:13 +01:00
Rolf Bjarne Kvinge 3ea9fddc7b [runtime] Check in container app's root directory for assemblies.
If an extension is sharing code with the container app, then assemblies may be
placed in:

* The container app's Framework directory (for assemblies whose code is
  shared, and the build action is 'framework'). We already handle this case.
* The container app's root directory (for assemblies whose code is shared, and
  the build action is not 'framework'). This case we didn't handle, and we're
  now fixing it.
* In the extension (for assemblies whose code is not shared). We already
  handle this case.
2017-02-10 16:39:13 +01:00
Rolf Bjarne Kvinge 144285cd2f [src] Fix 'unused field' warning. 2017-02-10 16:39:13 +01:00
Rolf Bjarne Kvinge 29f28516b5 [tests] Don't concat environment variables, since this depends on each environment variable.
It looks like this was needed for changing PATH some time ago, but we don't
change PATH anymore for any test.
2017-02-10 16:39:12 +01:00
Rolf Bjarne Kvinge e67b9426c8 Document how code sharing between apps and app extensions work. 2017-02-10 16:39:12 +01:00
Rolf Bjarne Kvinge f82a995b21 [msbuild tests] Assemblies do not always end up in the .monotouch-[32|64] directory anymore, so update tests accordingly.
Assemblies will not end up in the .monotouch-[32|64] subdirectory anymore
(unless they must because they're different), which means that it's not easy
to detect if an assembly really ends up in the subdirectory or not.

So modify tests to accept assemblies in either the root bundle directory, or
in the .monotouch-[32|64] subdirectory.
2017-02-10 14:46:31 +01:00
Rolf Bjarne Kvinge e715ef9265 [link all tests] Improve a few tests' investigation skills when looking for assemblies.
Assemblies can now be in frameworks.

Assemblies can also be in container apps (in their root directory, as well as
in frameworks in the container app).

So use the simplest brute-force method to find assemblies: look everywhere.
2017-02-10 14:46:31 +01:00
Rolf Bjarne Kvinge f31fe09886 [link sdk tests] Determine chubbyness by actual observation.
Determine if an app is fat or not by inspecting the executable, instead of
guessing based on which directories are present (which has now changed).
2017-02-10 14:46:31 +01:00