Skip to content

Commit 3629b10

Browse files
committed
Xamarin.Android build preparation utility
Testing: * Default mode: run `make bootstrap` * Verbose debug: run `make V=1 bootstrap` * CI mode: run `make BOOTSTRAP_CI=1 bootstrap` * Help: run `make bootstrap-help` * Logs: `bin/BuildDebug/logs/` Supported operating systems: * macOS * Linux Windows support is planned, present but not fully implemented or tested. This commit implements a `make prepare` replacement that does not rely on shell scripts or MSBuild. The idea is that a standalone C# program can perform all the steps in a more streamlined, more clear way than the current solution. One of the main goals is to make the process more approachable by external contributors, but also by the core developers who may want to change some aspects of XA build preparation (e.g. Android platforms, Mono version etc) but are not familiar with the build system. Towards that goal, the codebase is designed so that the minimum amount of searching around it is necessary to figure out where to make the desired change. Main location serving this purpose is the `build-tools/xabootstrap/xabootstrap/ConfigAndData` directory. It should be the *only* location where one needs to look in order to change all and any aspects of XA preparation. [TBC]
1 parent 4ff4882 commit 3629b10

File tree

187 files changed

+14480
-182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+14480
-182
lines changed

CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
/build-tools/manifest-attribute-codegen @jonpryor
2121
/build-tools/scripts/PrepareWindows.targets @jonathanpeppers
2222
/build-tools/timing @jonathanpeppers @radekdoulik
23+
/build-tools/xaprepare @grendello
2324

2425
/src/OpenTK-1.0 @radekdoulik @jonpryor
2526
/src/Mono.Android.Export @jonpryor

Configuration.props

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@
3838
<AndroidUseLatestPlatformSdk Condition=" '$(AndroidFrameworkVersion)' == '' And '$(_IsRunningNuGetRestore)' == 'True' ">True</AndroidUseLatestPlatformSdk>
3939
<DebugType Condition=" '$(DebugType)' == '' ">portable</DebugType>
4040
</PropertyGroup>
41+
<PropertyGroup Condition=" '$(HostOS)' == '' ">
42+
<HostOS Condition="$([MSBuild]::IsOSPlatform('windows'))">Windows</HostOS>
43+
<HostOS Condition="$([MSBuild]::IsOSPlatform('linux'))">Linux</HostOS>
44+
<HostOS Condition="$([MSBuild]::IsOSPlatform('osx'))">Darwin</HostOS>
45+
</PropertyGroup>
4146
<PropertyGroup>
4247
<AutoProvision Condition=" '$(AutoProvision)' == '' ">False</AutoProvision>
4348
<AutoProvisionUsesSudo Condition=" '$(AutoProvisionUsesSudo)' == '' ">False</AutoProvisionUsesSudo>
4449
<XAInstallPrefix Condition=" '$(XAInstallPrefix)' == '' ">$(MSBuildThisFileDirectory)bin\$(Configuration)\lib\xamarin.android\</XAInstallPrefix>
4550
<MingwDependenciesRootDirectory Condition=" '$(MingwDependenciesRootDirectory)' == '' ">$(MSBuildThisFileDirectory)\bin\Build$(Configuration)\mingw-deps</MingwDependenciesRootDirectory>
46-
<HostOS Condition=" '$(HostOS)' == '' And '$(OS)' == 'Windows_NT' ">Windows</HostOS>
4751
<HostCc Condition=" '$(HostCc)' == '' ">$(HostCc64)</HostCc>
4852
<HostCxx Condition=" '$(HostCxx)' == '' ">$(HostCxx64)</HostCxx>
4953
<HostCc Condition=" '$(HostCc)' == '' ">$(HostCc32)</HostCc>
@@ -171,7 +175,8 @@
171175
<AndroidSupportedTargetAotAbisSplit>$(AndroidSupportedTargetAotAbis.Split(':'))</AndroidSupportedTargetAotAbisSplit>
172176
</PropertyGroup>
173177
<PropertyGroup>
174-
<RemapAssemblyRefTool>$(ManagedRuntime) $(ManagedRuntimeArgs) &quot;$(MSBuildThisFileDirectory)bin\Build$(Configuration)\remap-assembly-ref.exe&quot;</RemapAssemblyRefTool>
178+
<RemapAssemblyRefToolExecutable>$(MSBuildThisFileDirectory)bin\Build$(Configuration)\remap-assembly-ref.exe</RemapAssemblyRefToolExecutable>
179+
<RemapAssemblyRefTool>$(ManagedRuntime) $(ManagedRuntimeArgs) &quot;$(RemapAssemblyRefToolExecutable)&quot;</RemapAssemblyRefTool>
175180
</PropertyGroup>
176181

177182
<!-- Unit Test Properties -->

Makefile

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,59 @@
1-
export OS_NAME := $(shell uname)
2-
export OS_ARCH := $(shell uname -m)
3-
export NO_SUDO ?= false
41
V ?= 0
52
prefix = /usr/local
63
CONFIGURATION = Debug
74
RUNTIME := $(shell which mono64 2> /dev/null && echo mono64 || echo mono) --debug=casts
85
SOLUTION = Xamarin.Android.sln
96
TEST_TARGETS = build-tools/scripts/RunTests.targets
107
API_LEVEL ?=
8+
BOOTSTRAP_ARGS =
9+
BOOTSTRAP_BUILD_LOG = bin/Build$(CONFIGURATION)/logs/bootstrap-build.binlog
10+
BOOTSTRAP_SOURCE_DIR = build-tools/xaprepare
11+
BOOTSTRAP_SOLUTION = $(BOOTSTRAP_SOURCE_DIR)/xaprepare.sln
12+
BOOTSTRAP_EXE = $(BOOTSTRAP_SOURCE_DIR)/xaprepare/bin/$(CONFIGURATION)/xaprepare.exe
13+
BOOTSTRAP_MSBUILD_ARGS = /p:Configuration=$(CONFIGURATION) /binaryLogger:"$(BOOTSTRAP_BUILD_LOG)"
14+
BOOTSTRAP_CI ?= 0
1115

12-
ifeq ($(OS_NAME),Darwin)
13-
export MACOSX_DEPLOYMENT_TARGET := 10.11
14-
HOMEBREW_PREFIX ?= $(shell brew --prefix)
15-
else
16-
HOMEBREW_PREFIX := $prefix
16+
-include bin/Build$(CONFIGURATION)/rules.mk
17+
18+
ifeq ($(OS_NAME),)
19+
export OS_NAME := $(shell uname)
20+
endif
21+
22+
ifeq ($(OS_ARCH),)
23+
export OS_ARCH := $(shell uname -m)
24+
endif
25+
26+
export NO_SUDO ?= false
27+
28+
ifneq ($(NO_SUDO),false)
29+
BOOTSTRAP_ARGS += --no-sudo
1730
endif
1831

1932
ifneq ($(V),0)
2033
MONO_OPTIONS += --debug
2134
NUGET_VERBOSITY = -Verbosity Detailed
35+
BOOTSTRAP_ARGS += -v:d
2236
endif
2337

24-
ifneq ($(MONO_OPTIONS),)
25-
export MONO_OPTIONS
38+
ifneq ($(BOOTSTRAP_CI),0)
39+
BOOTSTRAP_ARGS += --no-sudo --no-emoji --run-mode=CI
40+
endif
41+
42+
ifeq ($(OS_NAME),Darwin)
43+
44+
ifeq ($(MACOSX_DEPLOYMENT_TARGET),)
45+
export MACOSX_DEPLOYMENT_TARGET := 10.11
46+
endif
47+
48+
ifeq ($(HOMEBREW_PREFIX),)
49+
HOMEBREW_PREFIX ?= $(shell brew --prefix)
50+
endif
51+
else
52+
HOMEBREW_PREFIX := $prefix
53+
endif
54+
55+
ifeq ($(wildcard Configuration.OperatingSystem.props),)
56+
BOOTSTRAP_MSBUILD_ARGS += "/p:HostHomebrewPrefix=$(HOMEBREW_PREFIX)"
2657
endif
2758

2859
include build-tools/scripts/msbuild.mk
@@ -257,3 +288,15 @@ list-nunit-tests:
257288
$(MSBUILD) $(MSBUILD_FLAGS) $(TEST_TARGETS) /t:ListNUnitTests
258289

259290
include build-tools/scripts/runtime-helpers.mk
291+
292+
.PHONY: bootstrap-build
293+
bootstrap-build:
294+
mkdir -p $(dir $(BOOTSTRAP_BUILD_LOG))
295+
msbuild $(BOOTSTRAP_MSBUILD_ARGS) $(BOOTSTRAP_SOLUTION)
296+
297+
bootstrap: bootstrap-build
298+
mono --debug $(BOOTSTRAP_EXE) $(BOOTSTRAP_ARGS)
299+
300+
bootstrap-help:
301+
$(MAKE) bootstrap-build
302+
mono --debug $(BOOTSTRAP_EXE) -h

ThirdPartyNotices.txt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ The attached notices are provided for information only.
1616
3. nunit/nunitlite (https://github.com/nunit/nunitlite/)
1717
4. zLibDll/minizip (http://www.winimage.com/zLibDll/minizip.html)
1818

19-
2019
%% bazelbuild/bazel NOTICES AND INFORMATION BEGIN HERE
21-
=========================================
20+
======================================================
2221

2322
Apache License
2423
Version 2.0, January 2004
@@ -221,11 +220,12 @@ The attached notices are provided for information only.
221220
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
222221
See the License for the specific language governing permissions and
223222
limitations under the License.
224-
=========================================
223+
224+
======================================================
225225
END OF bazelbuild/bazel NOTICES AND INFORMATION
226226

227227
%% google/desugar NOTICES AND INFORMATION BEGIN HERE
228-
=========================================
228+
====================================================
229229

230230
Apache License
231231
Version 2.0, January 2004
@@ -428,12 +428,12 @@ END OF bazelbuild/bazel NOTICES AND INFORMATION
428428
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
429429
See the License for the specific language governing permissions and
430430
limitations under the License.
431-
=========================================
431+
432+
====================================================
432433
END OF google/desugar NOTICES AND INFORMATION
433434

434435
%% nunit/nunitlite NOTICES AND INFORMATION BEGIN HERE
435-
=========================================
436-
436+
=====================================================
437437
Copyright (c) 2004-2013 Charlie Poole
438438

439439
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -454,12 +454,13 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
454454
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
455455
THE SOFTWARE.
456456

457-
=========================================
457+
458+
459+
=====================================================
458460
END OF nunit/nunitlite NOTICES AND INFORMATION
459461

460462
%% zLibDll/minizip NOTICES AND INFORMATION BEGIN HERE
461-
=========================================
462-
463+
=====================================================
463464
Copyright (C) 1998-2005 Gilles Vollant
464465

465466
This software is provided 'as-is', without any express or implied
@@ -478,5 +479,7 @@ appreciated but is not required.
478479
misrepresented as being the original software.
479480
3. This notice may not be removed or altered from any source distribution.
480481

481-
=========================================
482+
483+
=====================================================
482484
END OF zLibDll/minizip NOTICES AND INFORMATION
485+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2017 Mono Project
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the ""Software""), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

build-tools/scripts/BuildEverything.mk

Lines changed: 0 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,3 @@
1-
PRODUCT_VERSION = $(shell $(MSBUILD) $(MSBUILD_FLAGS) /p:DoNotLoadOSProperties=True /nologo /v:minimal /t:GetProductVersion build-tools/scripts/Info.targets | tr -d '[[:space:]]')
2-
3-
GIT_BRANCH = $(shell LANG=C build-tools/scripts/get-git-branch.sh | tr -d '[[:space:]]' | tr -C a-zA-Z0-9- _)
4-
GIT_COMMIT = $(shell LANG=C git log --no-color --first-parent -n1 --pretty=format:%h)
5-
6-
# In which commit did $(PRODUCT_VERSION) change? 00000000 if uncommitted
7-
-commit-of-last-version-change = $(shell LANG=C git blame Configuration.props | grep '<ProductVersion>' | grep -v grep | sed 's/ .*//')
8-
9-
# How many commits have passed since $(-commit-of-last-version-change)?
10-
# "0" when commit hash is invalid (e.g. 00000000)
11-
-num-commits-since-version-change = $(shell LANG=C git log $(-commit-of-last-version-change)..HEAD --oneline 2>/dev/null | wc -l | sed 's/ //g')
12-
13-
ifeq ($(OS_NAME),Linux)
14-
ZIP_EXTENSION = tar.bz2
15-
else
16-
ZIP_EXTENSION = zip
17-
endif
18-
19-
ZIP_OUTPUT_BASENAME = xamarin.android-oss_v$(PRODUCT_VERSION).$(-num-commits-since-version-change)_$(OS_NAME)-$(OS_ARCH)_$(GIT_BRANCH)_$(GIT_COMMIT)-$(CONFIGURATION)
20-
ZIP_OUTPUT = $(ZIP_OUTPUT_BASENAME).$(ZIP_EXTENSION)
21-
22-
23-
## The following values *must* use SPACE, **not** TAB, to separate values.
24-
25-
# $(ALL_API_LEVELS) and $(ALL_FRAMEWORKS) must be kept in sync w/ each other
26-
ALL_API_LEVELS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
27-
# this was different from ALL_API_LEVELS when API Level 26 was "O". Same could happen in the future.
28-
ALL_PLATFORM_IDS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Q
29-
# supported api levels
30-
ALL_FRAMEWORKS = _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ v4.4 v4.4.87 v5.0 v5.1 v6.0 v7.0 v7.1 v8.0 v8.1 v9.0 v9.0.99
31-
API_LEVELS = 19 20 21 22 23 24 25 26 27 28 29
32-
STABLE_API_LEVELS = 19 20 21 22 23 24 25 26 27 28
33-
34-
## The preceding values *must* use SPACE, **not** TAB, to separate values.
35-
36-
37-
FRAMEWORKS = $(foreach a, $(API_LEVELS), $(word $(a),$(ALL_FRAMEWORKS)))
38-
STABLE_FRAMEWORKS = $(foreach a, $(STABLE_API_LEVELS), $(word $(a),$(ALL_FRAMEWORKS)))
39-
PLATFORM_IDS = $(foreach a, $(API_LEVELS), $(word $(a),$(ALL_PLATFORM_IDS)))
40-
41-
ALL_JIT_ABIS = \
42-
armeabi-v7a \
43-
arm64-v8a \
44-
x86 \
45-
x86_64
46-
47-
ALL_HOST_ABIS = \
48-
$(shell uname)
49-
50-
ALL_AOT_ABIS = \
51-
armeabi-v7a \
52-
arm64 \
53-
x86 \
54-
x86_64 \
55-
win-armeabi-v7a \
56-
win-arm64 \
57-
win-x86 \
58-
win-x86_64
59-
60-
ifneq ($(OS_NAME),Linux)
61-
ALL_HOST_ABIS += \
62-
mxe-Win32 \
63-
mxe-Win64
64-
endif
65-
66-
ifneq ($(OS_NAME),Linux)
67-
MONO_OPTIONS += --arch=64
68-
endif
69-
70-
_space :=
71-
_space +=
72-
73-
# usage: $(call join-with,SEPARATOR,LIST)
74-
# Joins elements of LISt with SEPARATOR.
75-
join-with = $(subst $(_space),$(1),$(strip $(2)))
76-
77-
78-
_MSBUILD_ARGS = \
79-
/p:AndroidSupportedTargetJitAbis=$(call join-with,:,$(ALL_JIT_ABIS)) \
80-
/p:AndroidSupportedHostJitAbis=$(call join-with,:,$(ALL_HOST_ABIS)) \
81-
/p:AndroidSupportedTargetAotAbis=$(call join-with,:,$(ALL_AOT_ABIS))
82-
831
.PHONY: leeroy jenkins leeroy-all opentk-jcw framework-assemblies
842
.PHONY: create-vsix
853

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<AndroidNdkVersion Condition=" '$(AndroidNdkVersion)' == '' ">@NDK_RELEASE@</AndroidNdkVersion>
5+
<AndroidNdkApiLevel_ArmV7a Condition=" '$(AndroidNdkApiLevel_ArmV7a)' == '' ">@NDK_ARMEABI_V7_API@</AndroidNdkApiLevel_ArmV7a>
6+
<AndroidNdkApiLevel_ArmV8a Condition=" '$(AndroidNdkApiLevel_ArmV8a)' == '' ">@NDK_ARM64_V8A_API@</AndroidNdkApiLevel_ArmV8a>
7+
<AndroidNdkApiLevel_X86 Condition=" '$(AndroidNdkApiLevel_X86)' == '' ">@NDK_X86_API@</AndroidNdkApiLevel_X86>
8+
<AndroidNdkApiLevel_X86_64 Condition=" '$(AndroidNdkApiLevel_X86_64)' == '' ">@NDK_X86_64_API@</AndroidNdkApiLevel_X86_64>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<AndroidSupportedTargetJitAbi
13+
Include="armeabi-v7a"
14+
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':armeabi-v7a:')) ">
15+
<ApiLevel>$(AndroidNdkApiLevel_ArmV7a)</ApiLevel>
16+
</AndroidSupportedTargetJitAbi>
17+
18+
<AndroidSupportedTargetJitAbi
19+
Include="arm64-v8a"
20+
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':arm64-v8a:')) ">
21+
<ApiLevel>$(AndroidNdkApiLevel_ArmV8a)</ApiLevel>
22+
</AndroidSupportedTargetJitAbi>
23+
24+
<AndroidSupportedTargetJitAbi
25+
Include="x86"
26+
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':x86:')) ">
27+
<ApiLevel>$(AndroidNdkApiLevel_X86)</ApiLevel>
28+
</AndroidSupportedTargetJitAbi>
29+
30+
<AndroidSupportedTargetJitAbi
31+
Include="x86_64"
32+
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':x86_64:')) ">
33+
<ApiLevel>$(AndroidNdkApiLevel_X86_64)</ApiLevel>
34+
</AndroidSupportedTargetJitAbi>
35+
</ItemGroup>
36+
</Project>

build-tools/scripts/Ndk.targets

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
4-
<AndroidNdkVersion Condition=" '$(AndroidNdkVersion)' == '' ">19c</AndroidNdkVersion>
5-
<AndroidNdkApiLevel_ArmV7a Condition=" '$(AndroidNdkApiLevel_ArmV7a)' == '' ">16</AndroidNdkApiLevel_ArmV7a>
6-
<AndroidNdkApiLevel_ArmV8a Condition=" '$(AndroidNdkApiLevel_ArmV8a)' == '' ">21</AndroidNdkApiLevel_ArmV8a>
7-
<AndroidNdkApiLevel_X86 Condition=" '$(AndroidNdkApiLevel_X86)' == '' ">16</AndroidNdkApiLevel_X86>
8-
<AndroidNdkApiLevel_X86_64 Condition=" '$(AndroidNdkApiLevel_X86_64)' == '' ">21</AndroidNdkApiLevel_X86_64>
4+
<ProjitemsFile>$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\Ndk.projitems</ProjitemsFile>
95
</PropertyGroup>
10-
11-
<ItemGroup>
12-
<!-- It appears we cannot use batching outside a <Target> so we cannot use a set of items specifying the necessary API level to generate the
13-
AndroidSupportedTargetJitAbi items with appropriate metadata. Thus we need to do it manually as below -->
14-
<AndroidSupportedTargetJitAbi
15-
Include="armeabi-v7a"
16-
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':armeabi-v7a:')) ">
17-
<ApiLevel>$(AndroidNdkApiLevel_ArmV7a)</ApiLevel>
18-
</AndroidSupportedTargetJitAbi>
19-
20-
<AndroidSupportedTargetJitAbi
21-
Include="arm64-v8a"
22-
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':arm64-v8a:')) ">
23-
<ApiLevel>$(AndroidNdkApiLevel_ArmV8a)</ApiLevel>
24-
</AndroidSupportedTargetJitAbi>
25-
26-
<AndroidSupportedTargetJitAbi
27-
Include="x86"
28-
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':x86:')) ">
29-
<ApiLevel>$(AndroidNdkApiLevel_X86)</ApiLevel>
30-
</AndroidSupportedTargetJitAbi>
31-
32-
<AndroidSupportedTargetJitAbi
33-
Include="x86_64"
34-
Condition=" $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains (':x86_64:')) ">
35-
<ApiLevel>$(AndroidNdkApiLevel_X86_64)</ApiLevel>
36-
</AndroidSupportedTargetJitAbi>
37-
</ItemGroup>
6+
<Import
7+
Project="$(ProjitemsFile)"
8+
Condition="Exists('$(ProjitemsFile)')"/>
389
</Project>

0 commit comments

Comments
 (0)