Skip to content

Commit 8504477

Browse files
authored
Enable builds of mono VM with LLVM JIT
The meta-package for LLVM dependencies will be done as a follow up
1 parent 498ed3d commit 8504477

File tree

9 files changed

+364
-10
lines changed

9 files changed

+364
-10
lines changed

eng/Version.Details.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,5 +158,29 @@
158158
<Uri>https://github.com/dotnet/runtime-assets</Uri>
159159
<Sha>572e952eae1d4fc6e83300031c5f7c401014ff34</Sha>
160160
</Dependency>
161+
<Dependency Name="runtime.linux-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Sdk" Version="6.0.1-alpha.1.20078.4">
162+
<Uri>https://github.com/dotnet/llvm-project</Uri>
163+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
164+
</Dependency>
165+
<Dependency Name="runtime.linux-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Tools" Version="6.0.1-alpha.1.20078.4">
166+
<Uri>https://github.com/dotnet/llvm-project</Uri>
167+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
168+
</Dependency>
169+
<Dependency Name="runtime.win-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Sdk" Version="6.0.1-alpha.1.20078.4">
170+
<Uri>https://github.com/dotnet/llvm-project</Uri>
171+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
172+
</Dependency>
173+
<Dependency Name="runtime.win-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Tools" Version="6.0.1-alpha.1.20078.4">
174+
<Uri>https://github.com/dotnet/llvm-project</Uri>
175+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
176+
</Dependency>
177+
<Dependency Name="runtime.osx.10.12-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Sdk" Version="6.0.1-alpha.1.20078.4">
178+
<Uri>https://github.com/dotnet/llvm-project</Uri>
179+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
180+
</Dependency>
181+
<Dependency Name="runtime.osx.10.12-x64.Microsoft.NETCore.Runtime.Mono.LLVM.Tools" Version="6.0.1-alpha.1.20078.4">
182+
<Uri>https://github.com/dotnet/llvm-project</Uri>
183+
<Sha>adeaa08e7bbc9aba5d67cb16c2b348be12deb000</Sha>
184+
</Dependency>
161185
</ToolsetDependencies>
162186
</Dependencies>

eng/Versions.props

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,13 @@
123123
<MicrosoftPrivateIntellisenseVersion>3.0.0-preview9-190909-1</MicrosoftPrivateIntellisenseVersion>
124124
<!-- ILLink -->
125125
<ILLinkTasksVersion>0.1.6-prerelease.19567.1</ILLinkTasksVersion>
126+
<!-- Mono LLVM -->
127+
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>6.0.1-alpha.1.20078.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
128+
<runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>6.0.1-alpha.1.20078.4</runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
129+
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>6.0.1-alpha.1.20078.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
130+
<runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>6.0.1-alpha.1.20078.4</runtimewinx64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
131+
<runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>6.0.1-alpha.1.20078.4</runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion>
132+
<runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>6.0.1-alpha.1.20078.4</runtimeosx1012x64MicrosoftNETCoreRuntimeMonoLLVMToolsVersion>
126133
</PropertyGroup>
127134
<!-- Package names -->
128135
<PropertyGroup>

eng/pipelines/mono/templates/build-job.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ parameters:
99
variables: {}
1010
pool: ''
1111
condition: true
12+
llvm: false
1213

1314
### Product build
1415
jobs:
@@ -21,11 +22,19 @@ jobs:
2122
helixType: 'build/product/'
2223
enableMicrobuild: true
2324
pool: ${{ parameters.pool }}
25+
llvm: ${{ parameters.llvm }}
2426
condition: ${{ parameters.condition }}
2527

2628
# Compute job name from template parameters
27-
name: ${{ format('mono_product_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
28-
displayName: ${{ format('Mono Product Build {0}{1} {2} {3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
29+
${{ if ne(parameters.llvm, true) }}:
30+
name: ${{ format('mono_product_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
31+
displayName: ${{ format('Mono Product Build {0}{1} {2} {3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
32+
33+
# if LLVM enabled, set a variable we can consume
34+
${{ if eq(parameters.llvm, true) }}:
35+
name: ${{ format('mono_llvm_product_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
36+
displayName: ${{ format('Mono LLVM Product Build {0}{1} {2} {3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
37+
2938

3039
# Run all steps in the container.
3140
# Note that the containers are defined in platform-matrix.yml
@@ -58,10 +67,10 @@ jobs:
5867

5968
# Build
6069
- ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
61-
- script: ./mono$(scriptExt) -configuration $(buildConfig) -arch $(archType) -ci
70+
- script: ./mono$(scriptExt) -configuration $(buildConfig) -arch $(archType) -ci /p:MonoEnableLLVM=${{ parameters.llvm }}
6271
displayName: Build product
6372
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
64-
- script: mono$(scriptExt) -configuration $(buildConfig) -arch $(archType) -ci
73+
- script: mono$(scriptExt) -configuration $(buildConfig) -arch $(archType) -ci /p:MonoEnableLLVM=${{ parameters.llvm }}
6574
displayName: Build product
6675

6776
# Publish product output directory for consumption by tests.
@@ -80,6 +89,9 @@ jobs:
8089
displayName: Publish Logs
8190
inputs:
8291
pathtoPublish: $(Build.SourcesDirectory)/artifacts/log
83-
artifactName: 'BuildLogs_Mono_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
92+
${{ if ne(parameters.llvm, true) }}:
93+
artifactName: 'BuildLogs_Mono_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
94+
${{ if eq(parameters.llvm, true) }}:
95+
artifactName: 'BuildLogs_Mono_LLVM_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
8496
continueOnError: true
8597
condition: always()

eng/pipelines/mono/templates/xplat-pipeline-job.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ parameters:
99
liveLibrariesBuildConfig: ''
1010
strategy: ''
1111
pool: ''
12+
llvm: false
1213

1314
# arcade-specific parameters
1415
condition: true
@@ -33,6 +34,7 @@ jobs:
3334
container: ${{ parameters.container }}
3435
strategy: ${{ parameters.strategy }}
3536
pool: ${{ parameters.pool }}
37+
llvm: ${{ parameters.llvm }}
3638

3739
# arcade-specific parameters
3840
condition: and(succeeded(), ${{ parameters.condition }})
@@ -45,7 +47,10 @@ jobs:
4547

4648
variables:
4749
- name: buildProductArtifactName
48-
value: 'MonoProduct_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
50+
${{ if ne(parameters.llvm, true) }}:
51+
value: 'MonoProduct_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
52+
${{ if eq(parameters.llvm, true) }}:
53+
value: 'MonoProduct_LLVM_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
4954

5055
- name: buildProductRootFolderPath
5156
value: '$(Build.SourcesDirectory)/artifacts/bin/mono/$(osGroup).$(archType).$(buildConfigUpper)'

eng/pipelines/runtime.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,62 @@ jobs:
252252
eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
253253
eq(variables['isFullMatrix'], true))
254254
255+
#
256+
# Build Mono LLVM debug
257+
# Only when libraries or mono changed
258+
#
259+
- template: /eng/pipelines/common/platform-matrix.yml
260+
parameters:
261+
jobTemplate: /eng/pipelines/mono/templates/build-job.yml
262+
runtimeFlavor: mono
263+
buildConfig: debug
264+
platforms:
265+
# - OSX_x64
266+
- Linux_x64
267+
# - Linux_arm
268+
# - Linux_arm64
269+
# - Linux_musl_x64
270+
# - Linux_musl_arm64
271+
# - Windows_NT_x64
272+
# - Windows_NT_x86
273+
# - Windows_NT_arm
274+
# - Windows_NT_arm64
275+
jobParameters:
276+
llvm: true
277+
condition: >-
278+
or(
279+
eq(dependencies.checkout.outputs['SetPathVars_libraries.containsChange'], true),
280+
eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
281+
eq(variables['isFullMatrix'], true))
282+
283+
#
284+
# Build Mono LLVM release
285+
# Only when libraries or mono changed
286+
#
287+
- template: /eng/pipelines/common/platform-matrix.yml
288+
parameters:
289+
jobTemplate: /eng/pipelines/mono/templates/build-job.yml
290+
runtimeFlavor: mono
291+
buildConfig: release
292+
platforms:
293+
# - OSX_x64
294+
- Linux_x64
295+
# - Linux_arm
296+
# - Linux_arm64
297+
# - Linux_musl_x64
298+
# - Linux_musl_arm64
299+
# - Windows_NT_x64
300+
# - Windows_NT_x86
301+
# - Windows_NT_arm
302+
# - Windows_NT_arm64
303+
jobParameters:
304+
llvm: true
305+
condition: >-
306+
or(
307+
eq(dependencies.checkout.outputs['SetPathVars_libraries.containsChange'], true),
308+
eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
309+
eq(variables['isFullMatrix'], true))
310+
255311
#
256312
# Build libraries using live CoreLib
257313
# These set of libraries are built always no matter what changed

src/mono/llvm/Makefile.am

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,51 @@
1-
# temporary Makefile until we can fully move netcore mono to new repo
2-
all:
1+
if ENABLE_LLVM
2+
3+
if HOST_WIN32
4+
llvm_config=llvm-config.exe
5+
else
6+
llvm_config=llvm-config
7+
endif
8+
9+
if HAVE_STATIC_ZLIB
10+
llvm_extra_libs = $(STATIC_ZLIB_PATH)
11+
else
12+
if HAVE_SYS_ZLIB
13+
llvm_extra_libs=-lz
14+
else
15+
llvm_extra_libs=
16+
endif
17+
endif
18+
19+
if INTERNAL_LLVM_ASSERTS
20+
ENABLE_ASSERTS=On
21+
else
22+
ENABLE_ASSERTS=Off
23+
endif
24+
25+
all-local: llvm_config.mk
26+
27+
clean-local: clean-llvm-config
28+
29+
$(mono_build_root)/llvm/llvm_config.mk: $(top_srcdir)/llvm/Makefile.am
30+
$(top_srcdir)/llvm/build_llvm_config.sh "$(EXTERNAL_LLVM_CONFIG)" "$(LLVM_CODEGEN_LIBS)" "$(llvm_extra_libs)" | tee $@
31+
32+
llvm_config.mk: $(mono_build_root)/llvm/llvm_config.mk
33+
34+
clean-llvm-config:
35+
- rm -rf llvm_config.mk
36+
37+
else
38+
all-local:
39+
40+
clean-local:
41+
endif
42+
43+
# Override this so we don't try to re-copy llvm when we install mono
44+
install:
45+
46+
if TARGET_WASM
47+
LLVM_TARGET=wasm32
48+
else
49+
LLVM_TARGET=
50+
endif
51+

0 commit comments

Comments
 (0)