|
6 | 6 | <UsingTask TaskName="Xamarin.Android.Tasks.GenerateJniRemappingNativeCode" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
|
7 | 7 | <UsingTask TaskName="Xamarin.Android.Tasks.LinkApplicationSharedLibraries" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
|
8 | 8 | <UsingTask TaskName="Xamarin.Android.Tasks.PrepareAbiItems" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
|
| 9 | + <UsingTask TaskName="Xamarin.Android.Tasks.PrepareStandaloneAssemblyDSOItems" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" /> |
9 | 10 |
|
10 | 11 | <PropertyGroup>
|
11 | 12 | <_AndroidUseAssemblySharedLibraries Condition=" '$(EmbedAssembliesIntoApk)' != 'true' or '$(AndroidIncludeDebugSymbols)' == 'true' ">false</_AndroidUseAssemblySharedLibraries>
|
|
57 | 58 | </PrepareAbiItems>
|
58 | 59 | </Target>
|
59 | 60 |
|
60 |
| - <Target Name="_PrepareAssemblySharedLibrariesSources" |
61 |
| - Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' "> |
| 61 | + <Target Name="_PrepareAssemblyDSOSources"> |
| 62 | + |
| 63 | + <!-- These assemblies data will be placed in `libxamarin-app.so` instead of in |
| 64 | + individual shared libraries. This group should, in principle, include those |
| 65 | + assemblies which are involved in the runtime startup process (before we call |
| 66 | + the main activity's OnCreate --> |
| 67 | + <ItemGroup> |
| 68 | + <_DSOFastPathAssembly Include="Java.Interop.dll" /> |
| 69 | + <_DSOFastPathAssembly Include="Mono.Android.Runtime.dll" /> |
| 70 | + <_DSOFastPathAssembly Include="Mono.Android.dll" /> |
| 71 | + <_DSOFastPathAssembly Include="System.Private.CoreLib.dll" /> |
| 72 | + <_DSOFastPathAssembly Include="System.Runtime" /> |
| 73 | + <_DSOFastPathAssembly Include="$(AssemblyName).dll" /> |
| 74 | + </ItemGroup> |
| 75 | + |
| 76 | + <!-- These source files will be built into `libxamarin-app.so` and will include data |
| 77 | + of the above assemblies --> |
62 | 78 | <PrepareAbiItems
|
63 | 79 | BuildTargetAbis="@(_BuildTargetAbis)"
|
64 | 80 | NativeSourcesDir="$(_NativeAssemblySourceDir)"
|
65 | 81 | InstantRunEnabled="$(_InstantRunEnabled)"
|
66 | 82 | Debug="$(AndroidIncludeDebugSymbols)"
|
67 | 83 | Mode="assembly_dsos">
|
68 |
| - <Output TaskParameter="AssemblySources" ItemName="_AssemblyDSOSource" /> |
| 84 | + <Output TaskParameter="AssemblySources" ItemName="_AssemblyDSOSourceApplication" /> |
69 | 85 | </PrepareAbiItems>
|
| 86 | + |
| 87 | + <!-- These sources will be used to build per-assembly shared libraries. Each of the |
| 88 | + returned files will be compiled into its own .so library --> |
| 89 | + <PrepareStandaloneAssemblyDSOItems |
| 90 | + Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' " |
| 91 | + Assemblies="@(_ResolvedUserAssemblies);@(_ResolvedFrameworkAssemblies);@(_AndroidResolvedSatellitePaths)" |
| 92 | + SupportedAbis="@(_BuildTargetAbis)" |
| 93 | + NativeSourcesDir="$(_NativeAssemblySourceDir)" |
| 94 | + FastPathAssemblies="@(_DSOFastPathAssembly)"> |
| 95 | + <Output TaskParameter="AssemblySources" ItemName="_AssemblyDSOSourceStandalone" /> |
| 96 | + </PrepareStandaloneAssemblyDSOItems> |
70 | 97 | </Target>
|
71 | 98 |
|
72 | 99 | <Target Name="_PrepareAndroidRemapNativeAssemblySources">
|
|
102 | 129 | <abi>%(_AndroidRemapAssemblySource.abi)</abi>
|
103 | 130 | </_NativeAssemblyTarget>
|
104 | 131 |
|
105 |
| - <_NativeAssemblyTarget Include="@(_AssemblyDSOSource->'$([System.IO.Path]::ChangeExtension('%(Identity)', '.o'))')"> |
| 132 | + <_NativeAssemblyTarget Include="@(_AssemblyDSOSourceApplication->'$([System.IO.Path]::ChangeExtension('%(Identity)', '.o'))')"> |
106 | 133 | <abi>%(_AssemblyDSOSource.abi)</abi>
|
107 | 134 | </_NativeAssemblyTarget>
|
108 | 135 | </ItemGroup>
|
|
116 | 143 | </ItemGroup>
|
117 | 144 | </Target>
|
118 | 145 |
|
119 |
| - <Target Name="_PrepareDSOFastPathAssemblyNames"> |
120 |
| - <ItemGroup> |
121 |
| - <_DSOFastPathAssembly Include="Java.Interop.dll" /> |
122 |
| - <_DSOFastPathAssembly Include="Mono.Android.Runtime.dll" /> |
123 |
| - <_DSOFastPathAssembly Include="Mono.Android.dll" /> |
124 |
| - <_DSOFastPathAssembly Include="System.Private.CoreLib.dll" /> |
125 |
| - <_DSOFastPathAssembly Include="System.Runtime" /> |
126 |
| - <_DSOFastPathAssembly Include="$(AndroidApplication)" /> |
127 |
| - </ItemGroup> |
| 146 | + <!-- Native source code generation targets --> |
| 147 | + <Target Name="_GenerateApplicationAssemblyDsoNativeSourceFiles" |
| 148 | + Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' " |
| 149 | + Inputs="@(_ResolvedUserAssemblies);@(_ResolvedFrameworkAssemblies);@(_AndroidResolvedSatellitePaths)" |
| 150 | + Outputs="@(_AssemblyDSOSourceApplication)"> |
| 151 | + <!-- TODO: |
| 152 | + * Pass items produced by the _CreateStandaloneAssemblyDSOs target and use metadata when generating the |
| 153 | + source to be included in libxamarin-app.so |
| 154 | + --> |
| 155 | + <GenerateAssemblyDsoNativeSourceFiles |
| 156 | + SourcesOutputDirectory="$(_NativeAssemblySourceDir)" |
| 157 | + CompressedAssembliesOutputDirectory="$(_CompressedAssembliesOutputDir)" |
| 158 | + SupportedAbis="@(_BuildTargetAbis)" |
| 159 | + Assemblies="@(_ResolvedUserAssemblies);@(_ResolvedFrameworkAssemblies);@(_AndroidResolvedSatellitePaths)" |
| 160 | + FastPathAssemblyNames="@(_DSOFastPathAssembly)" |
| 161 | + EnableCompression="$(AndroidEnableAssemblyCompression)" |
| 162 | + StandaloneOnly="false" /> |
128 | 163 | </Target>
|
129 | 164 |
|
130 |
| - <!-- Native source code generation targets --> |
131 |
| - <Target Name="_GenerateAssemblyDsoNativeSourceFiles" |
132 |
| - DependsOnTargets="_PrepareDSOFastPathAssemblyNames" |
| 165 | + <Target Name="_GenerateStandaloneAssemblyDsoNativeSourceFiles" |
133 | 166 | Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' "
|
134 | 167 | Inputs="@(_ResolvedUserAssemblies);@(_ResolvedFrameworkAssemblies);@(_AndroidResolvedSatellitePaths)"
|
135 |
| - Outputs="@(_AssemblyDSOSource)"> |
| 168 | + Outputs="(@_AssemblyDSOSourceStandalone)"> |
136 | 169 | <GenerateAssemblyDsoNativeSourceFiles
|
137 | 170 | SourcesOutputDirectory="$(_NativeAssemblySourceDir)"
|
138 | 171 | CompressedAssembliesOutputDirectory="$(_CompressedAssembliesOutputDir)"
|
139 | 172 | SupportedAbis="@(_BuildTargetAbis)"
|
140 | 173 | Assemblies="@(_ResolvedUserAssemblies);@(_ResolvedFrameworkAssemblies);@(_AndroidResolvedSatellitePaths)"
|
141 | 174 | FastPathAssemblyNames="@(_DSOFastPathAssembly)"
|
142 | 175 | EnableCompression="$(AndroidEnableAssemblyCompression)"
|
143 |
| - /> |
| 176 | + StandaloneOnly="true" /> |
144 | 177 | </Target>
|
145 | 178 |
|
146 | 179 | <Target Name="_GenerateEmptyAndroidRemapNativeCode"
|
|
182 | 215 | </Target>
|
183 | 216 |
|
184 | 217 | <!-- Native code compilation targets -->
|
185 |
| - <Target Name="_CompileNativeAssemblySources" |
186 |
| - DependsOnTargets="_PrepareAssemblySharedLibrariesSources;_PrepareNativeAssemblyItems;_GenerateCompressedAssembliesNativeSourceFiles;_GenerateAssemblyDsoNativeSourceFiles" |
187 |
| - Inputs="@(_TypeMapAssemblySource);@(_TypeMapAssemblyInclude);@(_EnvironmentAssemblySource);@(_CompressedAssembliesAssemblySource);@(_MarshalMethodsAssemblySource);@(_AndroidRemapAssemblySource);@(_AssemblyDSOSource)" |
| 218 | + <Target Name="_CompileAssemblyStandaloneDSOs" |
| 219 | + DependsOnTargets="_GenerateStandaloneAssemblyDsoNativeSourceFiles" |
| 220 | + Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' "> |
| 221 | + </Target> |
| 222 | + |
| 223 | + <Target Name="_CompileApplicationNativeAssemblySources" |
| 224 | + DependsOnTargets="_PrepareNativeAssemblyItems;_GenerateApplicationAssemblyDsoNativeSourceFiles;_GenerateCompressedAssembliesNativeSourceFiles" |
| 225 | + Inputs="@(_TypeMapAssemblySource);@(_TypeMapAssemblyInclude);@(_EnvironmentAssemblySource);@(_CompressedAssembliesAssemblySource);@(_MarshalMethodsAssemblySource);@(_AndroidRemapAssemblySource);@(_AssemblyDSOSourceApplication)" |
188 | 226 | Outputs="@(_NativeAssemblyTarget)">
|
189 | 227 | <CompileNativeAssembly
|
190 |
| - Sources="@(_TypeMapAssemblySource);@(_EnvironmentAssemblySource);@(_CompressedAssembliesAssemblySource);@(_MarshalMethodsAssemblySource);@(_AndroidRemapAssemblySource);@(_AssemblyDSOSource)" |
| 228 | + Sources="@(_TypeMapAssemblySource);@(_EnvironmentAssemblySource);@(_CompressedAssembliesAssemblySource);@(_MarshalMethodsAssemblySource);@(_AndroidRemapAssemblySource);@(_AssemblyDSOSourceApplication)" |
191 | 229 | DebugBuild="$(AndroidIncludeDebugSymbols)"
|
192 | 230 | WorkingDirectory="$(_NativeAssemblySourceDir)"
|
193 | 231 | AndroidBinUtilsDirectory="$(AndroidBinUtilsDirectory)"
|
|
197 | 235 | </ItemGroup>
|
198 | 236 | </Target>
|
199 | 237 |
|
200 |
| - <!-- Shared library linking targets --> |
| 238 | + <!-- Shared library creation targets --> |
| 239 | + <Target Name="_CreateStandaloneAssemblyDSOs" |
| 240 | + DependsOnTargets="_CompileAssemblyStandaloneDSOs" |
| 241 | + Condition=" '$(_AndroidUseAssemblySharedLibraries)' == 'true' "> |
| 242 | + <!-- TODO: |
| 243 | + * Link standalone assembly shared libraries |
| 244 | + * Return their paths with the following metadata: |
| 245 | + * offset into the .so where assembly data begins |
| 246 | + * assembly data size |
| 247 | + * a flag whether the assembly was compressed |
| 248 | + * path to the source assembly |
| 249 | + --> |
| 250 | + </Target> |
| 251 | + |
| 252 | + <PropertyGroup> |
| 253 | + <!-- Order of targets is **crucial** here --> |
| 254 | + <_CreateApplicationSharedLibrariesDependsOn> |
| 255 | + _PrepareAssemblyDSOSources; |
| 256 | + _CreateStandaloneAssemblyDSOs; |
| 257 | + _CompileApplicationNativeAssemblySources; |
| 258 | + _PrepareApplicationSharedLibraryItems |
| 259 | + </_CreateApplicationSharedLibrariesDependsOn> |
| 260 | + </PropertyGroup> |
| 261 | + |
201 | 262 | <Target Name="_CreateApplicationSharedLibraries"
|
202 |
| - DependsOnTargets="_CompileNativeAssemblySources;_PrepareApplicationSharedLibraryItems" |
| 263 | + DependsOnTargets="$(_CreateApplicationSharedLibrariesDependsOn)" |
203 | 264 | Inputs="@(_NativeAssemblyTarget)"
|
204 | 265 | Outputs="@(_ApplicationSharedLibrary)">
|
205 | 266 | <LinkApplicationSharedLibraries
|
|
0 commit comments