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

230 Коммитов

Автор SHA1 Сообщение Дата
Rolf Bjarne Kvinge 617362b738 [mtouch] Detect when assemblies have native dependencies between them and link properly. Fixes bug #43689.
Detect when assemblies have native dependencies between them (which can happen
when there are multiple binding projects, and the native libraries in those
binding projects have dependencies between them), and add the proper link
arguments (this is only required when building to dynamic libraries or
frameworks, since otherwise everything is linked to one big binary and there
are no dependency problems).

https://bugzilla.xamarin.com/show_bug.cgi?id=43689
2017-02-10 14:46:29 +01:00
Rolf Bjarne Kvinge 96637b5e13 [mtouch] Remove dead code. 2017-02-10 14:46:29 +01:00
Rolf Bjarne Kvinge f9e3cbdf57 [mtouch] Incremental builds (--fastdev) is the same as compiling all assemblies to dynamic libraries. 2017-02-10 14:46:29 +01:00
Rolf Bjarne Kvinge 473c6092b6 [mtouch] Add support for compiling the pinvoke wrappers to a framework. 2017-02-10 14:46:29 +01:00
Rolf Bjarne Kvinge e620caefe2 [mtouch] Implement support for creating frameworks from assemblies.
Implement support for linking the output from AOT compilation to frameworks,
and then bundling those frameworks.
2017-02-10 14:46:28 +01:00
Rolf Bjarne Kvinge 894ebebce0 [mtouch] Treat aot data as a file related to the assembly, and copy it at the same time. 2017-02-10 14:46:28 +01:00
Rolf Bjarne Kvinge 422c389ce1 [mtouch] Remove dead code. 2017-02-10 14:46:28 +01:00
Rolf Bjarne Kvinge d24a4e3b62 [mtouch] Rework how tasks are built.
The previous build system kept a forward-pointing single linked list of tasks
to execute: task X had a list of subsequent tasks to execute. If task X was
up-to-date, it was not created (and the next tasks were directly added to the
list of tasks to execute).

In this world it became complicated to merge output from tasks (for instance
if the output of task X and task Y should be a consumed by a single task
producing a single output, since the corresponding task would end up in both
X's and Y's list of subsequent tasks).

Example: creating a single framework from the aot-compiled output of multiple
assemblies.

So I've reversed the logic: now we keep track of the final output, and then
each task has a list of dependencies that must be built.

This makes it trivial to create merging tasks (for the previous example, there
could for instance be a CreateFrameworkTask, where its dependencies would be
all the corresponding AotTasks).

We also always create every task, and then each task decides when its executed
whether it should do anything or not. This makes it unnecessary to 'forward-
delete' files when creating tasks (say you have three tasks, A, B, C; B
depends on A, and C depends on B; if A's output isn't up-to-date, it has to
delete its own output if it exists, otherwise B would not detect that it would
have to re-execute, because at task *creation* time, B's input hadn't
changed).

Additionally make it based on async/await, since much of the work happens in
externel processes (and we don't need to spin up additional threads just to
run external processes). This makes us have less code run on background
threads, which makes any issues with thread-safety less likely.
2017-02-10 14:46:28 +01:00
Rolf Bjarne Kvinge 0ac6b4fc15 [mtouch] Refactor 'BuildApp' into multiple methods. 2017-02-10 14:46:28 +01:00
Rolf Bjarne Kvinge ee0de7de52 [mtouch] Use BuildTask's logic to check if the task needs to be updated. 2017-02-10 14:46:27 +01:00
Rolf Bjarne Kvinge da0a7ffdd3 [mtouch] Make sure output directory exists. 2017-02-10 14:46:27 +01:00
Rolf Bjarne Kvinge dc70a0e254 [mtouch] Rename parameter to be more descriptive. 2017-02-10 14:46:27 +01:00
Rolf Bjarne Kvinge c2ad1ac499 [mtouch] Don't pass '-read_only_relocs suppress' to the native linker when compiling to asm-only bitcode either.
It fails to link.
2017-02-10 14:46:27 +01:00
Rolf Bjarne Kvinge 6e2648e125 [mtouch] Make sure CompilerFlags always have a Target. 2017-02-10 14:46:27 +01:00
Rolf Bjarne Kvinge 2f380ae509 [mtouch] Remove unused field. 2017-02-10 14:46:26 +01:00
Rolf Bjarne Kvinge 038705eb25 [mtouch] Use BuildTask's logic to check if the task needs to be updated. 2017-02-10 14:46:26 +01:00
Rolf Bjarne Kvinge 04a6f585c5 [mtouch] Make the install_name logic a bit more flexible. 2017-02-10 14:46:26 +01:00
Rolf Bjarne Kvinge a52f18ec3b [mtouch] Give BuildTasks enough information to determine if the task is up-to-date or not. 2017-02-10 14:46:26 +01:00
Rolf Bjarne Kvinge 1f7ce2e445 [mtouch] Fix the error message for 'CompileTask'.
The AOT-compilation occurs in the AOT-task now, and then we compile the result
using CompileTask.

This means that the error message in CompileTask was slightly incorrect, so
rectify it.
2017-02-10 14:46:25 +01:00
Rolf Bjarne Kvinge fea1fc6447 [mtouch] Teach about source files to CompilerFlags. 2017-02-10 14:46:25 +01:00
Rolf Bjarne Kvinge 024d5a92ca [mtouch] Add target-specific error messages.
This removes a little bit of duplicated code, and gives us slightly better error messages.
2017-02-10 14:46:25 +01:00
Rolf Bjarne Kvinge 9e7cec490f [mtouch] Move native linking to a separate task. 2017-02-10 14:42:11 +01:00
Rolf Bjarne Kvinge 3a8d62008d [mtouch] Look for linker input in the linker flags when parsing linker warnings.
Look for libraries passed to the linker in the linker flags, which is the
canonical location for linker input.
2017-02-10 14:42:11 +01:00
Rolf Bjarne Kvinge 69ff0c4486 [mtouch] Move CompileRegistrarTask creation out of the task itself. 2017-02-10 14:42:10 +01:00
Rolf Bjarne Kvinge 3a5c493e85 [mtouch] Remove PInvokesTask creation out of the task itself. 2017-02-10 14:42:10 +01:00
Rolf Bjarne Kvinge ed1a1ae3b8 [mtouch] Rename BuildTask.Build to Run.
Some tasks are technically not 'building', another verb would fit better, so
use the more generic 'Run' instead of 'Build'.
2017-02-10 14:42:10 +01:00
Rolf Bjarne Kvinge 9c6bf21a18 [mtouch] Refactor Generate|CompileMainTasks to only know how to do their task. 2017-02-10 14:42:10 +01:00
Rolf Bjarne Kvinge 0a91d75b2c [mtouch] Create a 'RunRegistrarTask'. 2017-02-10 14:42:09 +01:00
Rolf Bjarne Kvinge e73d71cbe8 [mtouch] Build into arch-specific temporary directories, instead of having arch-specific filenames.
This makes dylibs automatically have the correct dylib id, which means no
fixups are required.

For instance: we'd build libpinvokes.armv7.dylib from libpinvokes.armv7.m,
which by default ends up with a dylib id of "libpinvokes.armv7.dylib". With
this fix no change is required, since we now build armv7/libpinvokes.dylib
from armv7/libpinvokes.m.
2017-02-10 14:42:09 +01:00
Rolf Bjarne Kvinge dcd37c9df2 [mtouch] Compute the dependency map for assemblies earlier and store the results.
Compute the dependency map for assemblies earlier, and store the results.

In a later commit we'll need to know if a dependency map was successfully
computed when determining if a task is up-to-date or not.
2017-02-10 14:42:09 +01:00
Rolf Bjarne Kvinge eaf13f2fcc [mtouch] Link with the correct version of libxamarin/libmono according to other build options. 2017-02-10 14:39:49 +01:00
Rolf Bjarne Kvinge 03614fc775 [mtouch] Strip while copying assemblies.
Rework the code that copies assemblies and their related files to the app
bundle to take into account that we might be building to frameworks now.

Also strip the assemblies when they're copied (if they must be stripped),
which removes the need for custom logic to copy files related to stripped
assemblies.

Additionally change how we handle duplicated assemblies by checking for
duplication before copying them to the app bundle. This allows us to copy
assemblies to the root directory (not the .monotouch-[32|64] subdirectory) if
the 32-bit and 64-bit versions are identical, which also means we won't need
symlinks anymore.
2017-02-10 14:39:48 +01:00
Rolf Bjarne Kvinge d58dcb8141 [mtouch] Remove dead code. 2017-02-10 14:35:20 +01:00
Rolf Bjarne Kvinge f1397b561e [mtouch] No need to pass the input file around if all we want to know is the source code type.
This makes the code a little bit more self-descriptive.
2017-02-10 14:35:20 +01:00
Rolf Bjarne Kvinge 5787bc0ef2 [mtouch] Validate the assembly build targets. 2017-02-10 14:29:11 +01:00
Rolf Bjarne Kvinge a590612751 [mtouch] Add an --assembly-build-target option. 2017-02-10 14:29:11 +01:00
Rolf Bjarne Kvinge ffad69e186 [mtouch] Call linker flags 'linker_flags' and not 'compiler_flags'. 2017-02-10 14:29:11 +01:00
Rolf Bjarne Kvinge e83c2b507f [mtouch] Show output in ProcessTask if the process returns a non-zero exit code. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge 815fbef3fc [mtouch] Split 'MainTask' into 'GenerateMainTask' and 'CompileMainTask'. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge 876dc938c8 [mtouch] Rename 'RegistrarTask' to 'CompileRegistrarTask' to be more descriptive. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge 267c28b552 [mtouch] Remove redundant 'internal' class modifier. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge 6b9bb63e24 [mtouch] Rename Bitcodeify to BitcodeifyTask to match other similar classes. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge ee5b915cdc [mtouch] Upgrade mtouch to .NET 4.6. 2017-02-10 14:29:10 +01:00
Rolf Bjarne Kvinge ddedfc2798 [mtouch] Make the architecture a suffix instead of infix for aotdata filenames.
Make the architecture a suffix instead of infix for aotdata filenames so that
it's easier to compute the filename from the assembly name without passing
printf-style format strings around.
2017-02-10 14:29:09 +01:00
Rolf Bjarne Kvinge 1385b91202 [mtouch] Simplify the code to update the list of assemblies after linking.
Also move it to a separate method, since we'll be soon needing the logic in
multiple locations.
2017-02-10 14:29:09 +01:00
Rolf Bjarne Kvinge a07085aafa [mtouch] Create a custom AssemblyCollection class.
Create a custom AssemblyCollection class that contains a dictionary with
assembly identity (name) -> Assembly mapping.

This also means that we can detect if we end up loading multiple assemblies
with the same identity, and show an error in that case (even if that case
should never happen since we cache assemblies based on the identity, it's nice
to have code that ensures it).
2017-02-10 14:15:35 +01:00
Rolf Bjarne Kvinge a4dbb289b6 [mtouch] Make the linker output a list of AssemblyDefinition instead of paths.
Have the linker return the paths for AssemblyDefinitions is just redundant if
we immediately use those paths to re-load the AssemblyDefinitions.
2017-02-10 14:12:02 +01:00
Rolf Bjarne Kvinge 5fb09b1b84 [linker] Remove static state, and put the state inside DerivedLinkContext instead. (#1657)
Remove the usage of static variables in the linker so that one day we can run
the linker in parallel over multiple assembly sets.
2017-02-10 07:45:42 +01:00
Rolf Bjarne Kvinge 84953af5de [mtouch/mmp] Fix cecil dependencies. (#1656)
Make sure mtouch/mmp rebuild cecil when anything changes in cecil.
2017-02-08 14:57:37 +01:00
Rolf Bjarne Kvinge be12544444 [mtouch] Remove unused file from the build. (#1655) 2017-02-08 13:45:57 +01:00