Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions Configuration.Override.props.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<AndroidFrameworkVersion>v6.0</AndroidFrameworkVersion>

<!--
Colon-separated list of ABIs to build mono for.
Colon-separated list of ABIs to build the mono JIT for.
Supported ABIs include:
- armeabi
- armeabi-v7a
Expand All @@ -16,7 +16,18 @@
- x86_64
Note: Why colon? Because comma `,` and semicolon `;` can't be specified on the command-line.
-->
<AndroidSupportedAbis>armeabi:armeabi-v7a:arm64-v8a:x86:x86_64</AndroidSupportedAbis>
<AndroidSupportedTargetJitAbis>armeabi:armeabi-v7a:arm64-v8a:x86:x86_64</AndroidSupportedTargetJitAbis>

<!--
Colon-separated list of ABIs to build a "host" mono JIT for.
The host JIT is used for the Xamarin Studio Designer, among other things.
Supported ABIs include:
- Darwin
- Linux
- mxe-Win64
Note: Why colon? Because comma `,` and semicolon `;` can't be specified on the command-line.
-->
<AndroidSupportedHostJitAbis>Darwin:mxe-Win64</AndroidSupportedHostJitAbis>

<!-- C and C++ compilers to emit host-native binaries -->
<HostCc>clang</HostCc>
Expand Down
30 changes: 21 additions & 9 deletions Configuration.props
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
<AndroidMxeInstallPrefix Condition=" '$(AndroidMxeInstallPrefix)' == '' ">$(AndroidToolchainDirectory)\mxe</AndroidMxeInstallPrefix>
<AndroidSdkDirectory>$(AndroidToolchainDirectory)\sdk</AndroidSdkDirectory>
<AndroidNdkDirectory>$(AndroidToolchainDirectory)\ndk</AndroidNdkDirectory>
<AndroidSupportedAbis Condition=" '$(AndroidSupportedAbis)' == '' ">host-$(HostOS):armeabi-v7a</AndroidSupportedAbis>
<AndroidSupportedHostJitAbis Condition=" '$(AndroidSupportedHostJitAbis)' == '' ">$(HostOS)</AndroidSupportedHostJitAbis>
<AndroidSupportedTargetJitAbis Condition=" '$(AndroidSupportedTargetJitAbis)' == '' ">armeabi-v7a</AndroidSupportedTargetJitAbis>
<JavaInteropSourceDirectory Condition=" '$(JavaInteropSourceDirectory)' == '' ">$(MSBuildThisFileDirectory)external\Java.Interop</JavaInteropSourceDirectory>
<MonoSourceDirectory>$(MSBuildThisFileDirectory)external\mono</MonoSourceDirectory>
<SqliteSourceDirectory Condition=" '$(SqliteSourceDirectory)' == '' ">$(MSBuildThisFileDirectory)external\sqlite</SqliteSourceDirectory>
Expand All @@ -38,19 +39,30 @@
<MonoSourceFullPath>$([System.IO.Path]::GetFullPath ('$(MonoSourceDirectory)'))</MonoSourceFullPath>
<SqliteSourceFullPath>$([System.IO.Path]::GetFullPath ('$(SqliteSourceDirectory)'))</SqliteSourceFullPath>
</PropertyGroup>
<!--
"Fixup" $(AndroidSupportedHostJitAbis) so that Condition attributes elsewhere
can use `:ABI-NAME:`, to avoid substring mismatches.
-->
<PropertyGroup>
<AndroidSupportedHostJitAbisForConditionalChecks>$(AndroidSupportedHostJitAbis)</AndroidSupportedHostJitAbisForConditionalChecks>
<AndroidSupportedHostJitAbisForConditionalChecks Condition=" !$(AndroidSupportedHostJitAbisForConditionalChecks.EndsWith (':')) " >$(AndroidSupportedHostJitAbisForConditionalChecks):</AndroidSupportedHostJitAbisForConditionalChecks>
<AndroidSupportedHostJitAbisForConditionalChecks Condition=" !$(AndroidSupportedHostJitAbisForConditionalChecks.StartsWith (':')) " >:$(AndroidSupportedHostJitAbisForConditionalChecks)</AndroidSupportedHostJitAbisForConditionalChecks>
<AndroidSupportedHostJitAbisSplit>$(AndroidSupportedHostJitAbis.Split(':'))</AndroidSupportedHostJitAbisSplit>
</PropertyGroup>
<ItemGroup>
<HostOSName Include="host-Darwin" />
<HostOSName Include="host-Linux" />
<HostOSName Include="host-win64" />
<AndroidSupportedHostJitAbi Include="$(AndroidSupportedHostJitAbisSplit)" />
</ItemGroup>
<!--
"Fixup" $(AndroidSupportedAbis) so that Condition attributes elsewhere
"Fixup" $(AndroidSupportedTargetJitAbis) so that Condition attributes elsewhere
can use `:ABI-NAME:`, to avoid substring mismatches.
-->
<PropertyGroup>
<AndroidSupportedDeviceAbis>$([System.String]::Copy('$(AndroidSupportedAbis)').Replace (':', ';').Replace ('host-$(HostOS)', '').Replace (';;', ';')</AndroidSupportedDeviceAbis>
<AndroidSupportedAbisForConditionalChecks>$(AndroidSupportedAbis)</AndroidSupportedAbisForConditionalChecks>
<AndroidSupportedAbisForConditionalChecks Condition=" !$(AndroidSupportedAbisForConditionalChecks.EndsWith (':')) " >$(AndroidSupportedAbisForConditionalChecks):</AndroidSupportedAbisForConditionalChecks>
<AndroidSupportedAbisForConditionalChecks Condition=" !$(AndroidSupportedAbisForConditionalChecks.StartsWith (':')) " >:$(AndroidSupportedAbisForConditionalChecks)</AndroidSupportedAbisForConditionalChecks>
<AndroidSupportedTargetJitAbisForConditionalChecks>$(AndroidSupportedTargetJitAbis)</AndroidSupportedTargetJitAbisForConditionalChecks>
<AndroidSupportedTargetJitAbisForConditionalChecks Condition=" !$(AndroidSupportedTargetJitAbisForConditionalChecks.EndsWith (':')) " >$(AndroidSupportedTargetJitAbisForConditionalChecks):</AndroidSupportedTargetJitAbisForConditionalChecks>
<AndroidSupportedTargetJitAbisForConditionalChecks Condition=" !$(AndroidSupportedTargetJitAbisForConditionalChecks.StartsWith (':')) " >:$(AndroidSupportedTargetJitAbisForConditionalChecks)</AndroidSupportedTargetJitAbisForConditionalChecks>
<AndroidSupportedTargetJitAbisSplit>$(AndroidSupportedTargetJitAbis.Split(':'))</AndroidSupportedTargetJitAbisSplit>
</PropertyGroup>
<ItemGroup>
<AndroidSupportedTargetJitAbi Include="$(AndroidSupportedTargetJitAbisSplit)" />
</ItemGroup>
</Project>
36 changes: 18 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,30 +32,30 @@ Overridable MSBuild properties include:
* `$(AndroidFrameworkVersion)`: The Xamarin.Android `$(TargetFrameworkVersion)`
version which corresponds to `$(AndroidApiLevel)`. This is *usually* the
Android version number with a leading `v`, e.g. `v4.0.3` for API-15.
* `$(AndroidSupportedAbis)`: The Android ABIs to build for inclusion within
apps. This is a `:`-separated list of ABIs to build. Supported values are:

* `armeabi`
* `armeabi-v7a`
* `arm64-v8a`
* `x86`
* `x86_64`

Addtionally there are a set of "host" values. The "host ABI" is used
to build mono for the *currently executing operating system*, in
particular to build the base class libraries such as `mscorlib.dll`.
* `$(AndroidSupportedHostJitAbis)`: The Android ABIs for which to build a
host JIT *and* Xamarin.Android base class libraries (`mscorlib.dll`/etc.).
The "host JIT" is used e.g. with the Xamarin Studio Designer, to render
Xamarin.Android apps on the developer's machine.
There can also be support for cross-compiling mono for a different
host, e.g. to build Windows `libmonosgen-2.0.dll` from OS X.
Supported host values include:

* `host-Darwin`
* `host-Linux`
* `host-win64`: Cross-compile Windows 64-bit binaries from Unix.
* `Darwin`
* `Linux`
* `mxe-Win64`: Cross-compile Windows 64-bit binaries from Unix.

The default value is `host-$(HostOS):armeabi-v7a`, where `$(HostOS)`
is based on probing various environment variables and filesystem locations.
On OS X, the default would be `host-Darwin:armeabi-v7a`.
The default value is `$(HostOS)`, where `$(HostOS)` is based on probing
various environment variables and filesystem locations.
On OS X, the default would be `Darwin`.
* `$(AndroidSupportedTargetJitAbis)`: The Android ABIs for which to build the
the Mono JIT for inclusion within apps. This is a `:`-separated list of
ABIs to build. Supported values are:

* `armeabi`
* `armeabi-v7a`
* `arm64-v8a`
* `x86`
* `x86_64`
* `$(AndroidToolchainCacheDirectory)`: The directory to cache the downloaded
Android NDK and SDK files. This value defaults to
`$(HOME)\android-archives`.
Expand Down
2 changes: 0 additions & 2 deletions Xamarin.Android.sln
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,6 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|AnyCPU = Debug|AnyCPU
Release|AnyCPU = Release|AnyCPU
XAIntegrationDebug|Any CPU = XAIntegrationDebug|Any CPU
XAIntegrationRelease|Any CPU = XAIntegrationRelease|Any CPU
XAIntegrationDebug|AnyCPU = XAIntegrationDebug|AnyCPU
XAIntegrationRelease|AnyCPU = XAIntegrationRelease|AnyCPU
EndGlobalSection
Expand Down
32 changes: 16 additions & 16 deletions build-tools/android-toolchain/android-toolchain.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,19 @@
</AndroidSdkItem>
</ItemGroup>
<ItemGroup>
<_NdkToolchain Include="arm-linux-androideabi-clang" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains(':armeabi:')) Or $(AndroidSupportedAbisForConditionalChecks.Contains(':armeabi-v7a:'))">
<_NdkToolchain Include="arm-linux-androideabi-clang" Condition="$(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':armeabi:')) Or $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':armeabi-v7a:'))">
<Platform>android-4</Platform>
<Arch>arm</Arch>
</_NdkToolchain>
<_NdkToolchain Include="aarch64-linux-android-clang" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains(':arm64-v8a:'))">
<_NdkToolchain Include="aarch64-linux-android-clang" Condition="$(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':arm64-v8a:'))">
<Platform>android-21</Platform>
<Arch>arm64</Arch>
</_NdkToolchain>
<_NdkToolchain Include="x86-clang" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains(':x86:'))">
<_NdkToolchain Include="x86-clang" Condition="$(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':x86:'))">
<Platform>android-9</Platform>
<Arch>x86</Arch>
</_NdkToolchain>
<_NdkToolchain Include="x86_64-clang" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains(':x86_64:'))">
<_NdkToolchain Include="x86_64-clang" Condition="$(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':x86_64:'))">
<Platform>android-21</Platform>
<Arch>x86_64</Arch>
</_NdkToolchain>
Expand All @@ -65,37 +65,37 @@
<_RequiredProgram Include="$(ManagedRuntime)" Condition=" '$(ManagedRuntime)' != '' " />
<_RequiredProgram Include="$(HostCc)" />
<_RequiredProgram Include="$(HostCxx)" />
<_RequiredProgram Include="7za" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="7za" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>p7zip</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="autoconf" />
<_RequiredProgram Include="automake" />
<_RequiredProgram Include="cmake" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))" />
<_RequiredProgram Include="gdk-pixbuf-csource" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="cmake" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))" />
<_RequiredProgram Include="gdk-pixbuf-csource" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>gdk-pixbuf</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="gettext" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))" />
<_RequiredProgram Include="glibtool" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="gettext" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))" />
<_RequiredProgram Include="glibtool" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>libtool</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="gsed" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="gsed" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>gnu-sed</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="intltoolize" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="intltoolize" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>intltool</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="make" />
<_RequiredProgram Include="pkg-config" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="pkg-config" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>pkg-config</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="ruby" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))" />
<_RequiredProgram Include="scons" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="ruby" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))" />
<_RequiredProgram Include="scons" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>scons</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="wget" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="wget" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>wget</Homebrew>
</_RequiredProgram>
<_RequiredProgram Include="xz" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_RequiredProgram Include="xz" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Homebrew>xz</Homebrew>
</_RequiredProgram>
</ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions build-tools/android-toolchain/android-toolchain.targets
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,15 @@
/>
</Target>
<Target Name="_SetMxeToolchainMakefileTimeToLastCommitTimestamp"
Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:')) Or $(AndroidSupportedAbisForConditionalChecks.Contains (':host-win32:'))">
Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:')) Or $(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win32:'))">
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` Makefile"
WorkingDirectory="..\..\external\mxe"
/>
</Target>
<Target Name="_CreateMxeW32Toolchain"
DependsOnTargets="_SetMxeToolchainMakefileTimeToLastCommitTimestamp"
Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))"
Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))"
Inputs="..\..\external\mxe\Makefile"
Outputs="$(AndroidMxeFullPath)\bin\i686-w64-mingw32.static-gcc">
<Exec
Expand All @@ -130,7 +130,7 @@
</Target>
<Target Name="_CreateMxeW64Toolchain"
DependsOnTargets="_SetMxeToolchainMakefileTimeToLastCommitTimestamp"
Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))"
Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))"
Inputs="..\..\external\mxe\Makefile"
Outputs="$(AndroidMxeFullPath)\bin\x86_64-w64-mingw32.static-gcc">
<Exec
Expand Down
16 changes: 8 additions & 8 deletions build-tools/mono-runtimes/mono-runtimes.projitems
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<_MonoRuntime Include="armeabi" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':armeabi:'))">
<_MonoRuntime Include="armeabi" Condition="$(AndroidSupportedTargetJitAbis.Contains (':armeabi:'))">
<Ar>$(_ArmAr)</Ar>
<As>$(_ArmAs)</As>
<Cc>$(_ArmCc)</Cc>
Expand All @@ -21,7 +21,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="armeabi-v7a" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':armeabi-v7a:'))">
<_MonoRuntime Include="armeabi-v7a" Condition="$(AndroidSupportedTargetJitAbis.Contains (':armeabi-v7a:'))">
<Ar>$(_ArmAr)</Ar>
<As>$(_ArmAs)</As>
<Cc>$(_ArmCc)</Cc>
Expand All @@ -41,7 +41,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="arm64-v8a" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':arm64-v8a:'))">
<_MonoRuntime Include="arm64-v8a" Condition="$(AndroidSupportedTargetJitAbis.Contains (':arm64-v8a:'))">
<Ar>$(_Arm64Ar)</Ar>
<As>$(_Arm64As)</As>
<Cc>$(_Arm64Cc)</Cc>
Expand All @@ -61,7 +61,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="x86" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':x86:'))">
<_MonoRuntime Include="x86" Condition="$(AndroidSupportedTargetJitAbis.Contains (':x86:'))">
<Ar>$(_X86Ar)</Ar>
<As>$(_X86As)</As>
<Cc>$(_X86Cc)</Cc>
Expand All @@ -81,7 +81,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="x86_64" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':x86_64:'))">
<_MonoRuntime Include="x86_64" Condition="$(AndroidSupportedTargetJitAbis.Contains (':x86_64:'))">
<Ar>$(_X86_64Ar)</Ar>
<As>$(_X86_64As)</As>
<Cc>$(_X86_64Cc)</Cc>
Expand All @@ -101,7 +101,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="host-Win64" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-win64:'))">
<_MonoRuntime Include="host-mxe-Win64" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:'))">
<Ar>$(AndroidMxeFullPath)\bin\x86_64-w64-mingw32.static-ar</Ar>
<As>$(AndroidMxeFullPath)\bin\x86_64-w64-mingw32.static-as</As>
<Cc>$(AndroidMxeFullPath)\bin\x86_64-w64-mingw32.static-gcc</Cc>
Expand All @@ -122,7 +122,7 @@
<OutputProfilerFilename></OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="host-Darwin" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-Darwin:'))">
<_MonoRuntime Include="host-Darwin" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':Darwin:'))">
<Ar>ar</Ar>
<As>as</As>
<Cc>$(HostCc)</Cc>
Expand All @@ -140,7 +140,7 @@
<OutputProfilerFilename>libmono-profiler-log</OutputProfilerFilename>
<OutputMonoPosixHelperFilename>libMonoPosixHelper</OutputMonoPosixHelperFilename>
</_MonoRuntime>
<_MonoRuntime Include="host-Linux" Condition="$(AndroidSupportedAbisForConditionalChecks.Contains (':host-Linux:'))">
<_MonoRuntime Include="host-Linux" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':Linux:'))">
<Ar>ar</Ar>
<As>as</As>
<Cc>$(HostCc)</Cc>
Expand Down
Loading