From 087651ee0c2e315f7fe1cbecab5f507af364ab5c Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Mon, 3 Jul 2023 09:46:29 -0400 Subject: [PATCH] Upgrade to LLVM 16 & C++17, and bundle libc++ on Linux (#87190) * Upgrade to LLVM 16, and stop focusing on C++11 ABi stuff from CentOS 7 Co-authored-by: Zoltan Varga --- eng/Version.Details.xml | 104 +++++++++--------- eng/Versions.props | 52 ++++----- eng/pipelines/common/global-build-job.yml | 8 +- .../build-runtime-tests-and-send-to-helix.yml | 1 - .../templates/runtimes/run-test-job.yml | 1 - .../runtime-extra-platforms-other.yml | 2 +- eng/pipelines/mono/templates/build-job.yml | 7 +- eng/pipelines/runtime-official.yml | 2 +- eng/pipelines/runtime.yml | 2 +- .../SuperFileCheck/SuperFileCheck.csproj | 8 +- .../tools/aot/ILCompiler/ILCompiler.props | 8 +- .../Directory.Build.props | 3 + src/mono/CMakeLists.txt | 37 ++++++- src/mono/Directory.Build.props | 4 +- src/mono/mono.proj | 56 ++++++---- src/mono/mono/mini/CMakeLists.txt | 6 + src/mono/mono/mini/aot-compiler.c | 11 +- src/mono/mono/mini/mini-llvm-cpp.cpp | 9 ++ src/mono/mono/mini/mini-llvm.c | 81 ++++++++++++-- .../mono/tools/offsets-tool/offsets-tool.py | 10 +- src/tests/Common/Directory.Build.targets | 2 + .../nativeaot/SmokeTests/DwarfDump/Program.cs | 4 +- 22 files changed, 267 insertions(+), 151 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e0d0e309c8071..3ca5d77b2961e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -12,69 +12,69 @@ https://github.com/dotnet/wcf 7f504aabb1988e9a093c1e74d8040bd52feb2f01 - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - 76f334f354eb653a7b409a5319b591ea09df5a43 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - 76f334f354eb653a7b409a5319b591ea09df5a43 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - 76f334f354eb653a7b409a5319b591ea09df5a43 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - 76f334f354eb653a7b409a5319b591ea09df5a43 + bd3acea90cae502d9a62164b863708d57d7993bc https://github.com/dotnet/command-line-api @@ -238,45 +238,45 @@ https://github.com/dotnet/runtime-assets f8fb817328383c60534d11d57fd884d3b527d6c2 - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc - + https://github.com/dotnet/llvm-project - ac5ae64268db036eb394ed3f4d3f41775e251c58 + bd3acea90cae502d9a62164b863708d57d7993bc https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 5f81f25b9c5a8..95ca08ca62d1c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -105,14 +105,14 @@ 6.0.0 8.0.0-preview.7.23325.2 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 1.0.0-alpha.1.23106.1 - 1.0.0-alpha.1.23106.1 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 6.0.0 1.1.1 @@ -217,16 +217,16 @@ 2.1.7 8.0.0-alpha.1.23180.2 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 14.0.0-alpha.1.23326.1 - 1.0.0-alpha.1.23106.1 - 1.0.0-alpha.1.23106.1 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 + 16.0.5-alpha.1.23330.2 3.1.7 1.0.406601 diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml index cf93d34062b7d..ccf969e5b5764 100644 --- a/eng/pipelines/common/global-build-job.yml +++ b/eng/pipelines/common/global-build-job.yml @@ -86,12 +86,6 @@ jobs: - name: ROOTFS_DIR value: ${{ parameters.jobParameters.crossrootfsDir }} - - name: _cxx11Parameter - ${{ if and(eq(parameters.osGroup, 'linux'), eq(parameters.archType, 'arm64')) }}: - value: /p:MonoLLVMUseCxx11Abi=true - ${{ if and(eq(parameters.osGroup, 'linux'), not(eq(parameters.archType, 'arm64'))) }}: - value: /p:MonoLLVMUseCxx11Abi=false - - name: _officialBuildParameter ${{ if eq(parameters.isOfficialBuild, true) }}: value: /p:OfficialBuildId=$(Build.BuildNumber) @@ -190,7 +184,7 @@ jobs: - task: CodeQL3000Init@0 displayName: Initialize CodeQL (manually-injected) - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_cxx11Parameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter) + - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter) displayName: Build product ${{ if eq(parameters.useContinueOnErrorDuringBuild, true) }}: continueOnError: ${{ parameters.shouldContinueOnError }} diff --git a/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml b/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml index e531acb638415..3da6cc22300cd 100644 --- a/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml +++ b/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml @@ -50,7 +50,6 @@ steps: /p:BuildMonoAotCrossCompilerOnly=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:MonoAOTEnableLLVM=true - /p:MonoAOTLLVMUseCxx11Abi=true /p:CrossBuild=true displayName: "Build Mono LLVM AOT cross compiler" diff --git a/eng/pipelines/common/templates/runtimes/run-test-job.yml b/eng/pipelines/common/templates/runtimes/run-test-job.yml index 296ac081a0440..766783e00c793 100644 --- a/eng/pipelines/common/templates/runtimes/run-test-job.yml +++ b/eng/pipelines/common/templates/runtimes/run-test-job.yml @@ -293,7 +293,6 @@ jobs: /p:BuildMonoAotCrossCompilerOnly=true /p:MonoLibClang="/usr/local/lib/libclang.so.16" /p:MonoAOTEnableLLVM=true - /p:MonoAOTLLVMUseCxx11Abi=true displayName: "Build Mono LLVM AOT cross compiler" - ${{ if and(eq(parameters.runtimeFlavor, 'mono'), or(eq(parameters.runtimeVariant, 'llvmaot'), eq(parameters.runtimeVariant, 'llvmfullaot'))) }}: diff --git a/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml b/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml index ca2aed4c166c0..40f75bfbd7c9a 100644 --- a/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml +++ b/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml @@ -334,7 +334,7 @@ jobs: testGroup: innerloop nameSuffix: AllSubsets_Mono_LLVMFullAot_RuntimeTests runtimeVariant: llvmfullaot - buildArgs: -s mono+libs+clr.hosts+clr.iltools -c Release /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true /p:MonoLLVMUseCxx11Abi=true + buildArgs: -s mono+libs+clr.hosts+clr.iltools -c Release /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true timeoutInMinutes: 300 condition: >- diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml index 2c3fc2c45cf1c..b1ac9c1cc6554 100644 --- a/eng/pipelines/mono/templates/build-job.yml +++ b/eng/pipelines/mono/templates/build-job.yml @@ -104,15 +104,12 @@ jobs: value: wasm - name: osOverride value: '-os wasi' - - ${{ if and(eq(parameters.osGroup, 'linux'), not(eq(parameters.archType, 'x64'))) }}: - name: llvmCxxAbi - value: /p:MonoLLVMUseCxx11Abi=true - ${{ if eq(parameters.runtimeVariant, 'llvmjit') }}: - name: llvmParameter - value: /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=false $(llvmCxxAbi) + value: /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=false - ${{ if eq(parameters.runtimeVariant, 'llvmaot') }}: - name: llvmParameter - value: /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true $(llvmCxxAbi) + value: /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true - ${{ if gt(length(parameters.monoCrossAOTTargetOS),0) }}: - name: aotCrossParameter value: /p:MonoCrossAOTTargetOS=${{join('+',parameters.monoCrossAOTTargetOS)}} /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index 9aa97b9034a3c..3e3d3431a35a0 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -157,7 +157,7 @@ extends: - windows_x86 # - windows_arm64 jobParameters: - buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) + buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:BuildMonoAOTCrossCompiler=false nameSuffix: AllSubsets_Mono isOfficialBuild: ${{ variables.isOfficialBuild }} extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 4731612916c65..b97d380610af0 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -1225,7 +1225,7 @@ extends: testGroup: innerloop nameSuffix: AllSubsets_Mono_LLVMAot_RuntimeTests runtimeVariant: llvmaot - buildArgs: -s mono+libs+clr.hosts+clr.iltools -c Release /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true /p:MonoLLVMUseCxx11Abi=true + buildArgs: -s mono+libs+clr.hosts+clr.iltools -c Release /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true timeoutInMinutes: 180 condition: >- diff --git a/src/coreclr/tools/SuperFileCheck/SuperFileCheck.csproj b/src/coreclr/tools/SuperFileCheck/SuperFileCheck.csproj index 7c76b9fa817b4..b954034a29b22 100644 --- a/src/coreclr/tools/SuperFileCheck/SuperFileCheck.csproj +++ b/src/coreclr/tools/SuperFileCheck/SuperFileCheck.csproj @@ -23,10 +23,6 @@ linux - - osx.10.12 - osx.11.0 - x64 arm64 @@ -38,8 +34,8 @@ $(runtimelinuxmuslx64MicrosoftNETCoreRuntimeJITToolsVersion) $(runtimewinarm64MicrosoftNETCoreRuntimeJITToolsVersion) $(runtimewinx64MicrosoftNETCoreRuntimeJITToolsVersion) - $(runtimeosx110arm64MicrosoftNETCoreRuntimeJITToolsVersion) - $(runtimeosx1012x64MicrosoftNETCoreRuntimeJITToolsVersion) + $(runtimeosxarm64MicrosoftNETCoreRuntimeJITToolsVersion) + $(runtimeosxx64MicrosoftNETCoreRuntimeJITToolsVersion) diff --git a/src/coreclr/tools/aot/ILCompiler/ILCompiler.props b/src/coreclr/tools/aot/ILCompiler/ILCompiler.props index 247c50653e20b..17c95600f15e7 100644 --- a/src/coreclr/tools/aot/ILCompiler/ILCompiler.props +++ b/src/coreclr/tools/aot/ILCompiler/ILCompiler.props @@ -33,10 +33,6 @@ linux - - osx.10.12 - osx.11.0 - $(ObjWriterRidWithoutPlatform)-$(ObjWriterRidPlatform) $(runtimelinuxarm64MicrosoftNETCoreRuntimeObjWriterVersion) @@ -45,8 +41,8 @@ $(runtimelinuxmuslx64MicrosoftNETCoreRuntimeObjWriterVersion) $(runtimewinarm64MicrosoftNETCoreRuntimeObjWriterVersion) $(runtimewinx64MicrosoftNETCoreRuntimeObjWriterVersion) - $(runtimeosx110arm64MicrosoftNETCoreRuntimeObjWriterVersion) - $(runtimeosx1012x64MicrosoftNETCoreRuntimeObjWriterVersion) + $(runtimeosxarm64MicrosoftNETCoreRuntimeObjWriterVersion) + $(runtimeosxx64MicrosoftNETCoreRuntimeObjWriterVersion) $(runtimefreebsdx64MicrosoftNETCoreRuntimeObjWriterVersion) $(runtimefreebsdarm64MicrosoftNETCoreRuntimeObjWriterVersion) diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props b/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props index 36ee8d1a75710..f13859dc19932 100644 --- a/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props +++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props @@ -199,6 +199,9 @@ + + + diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt index 97c2ac015caf4..a351ab717d0b2 100644 --- a/src/mono/CMakeLists.txt +++ b/src/mono/CMakeLists.txt @@ -602,27 +602,58 @@ if(LLVM_PREFIX) set(MONO_llvm_core_libs "LLVMOrcJIT" "LLVMPasses" "LLVMCoroutines" "LLVMipo" "LLVMInstrumentation" "LLVMVectorize" "LLVMScalarOpts" "LLVMLinker" "LLVMIRReader" "LLVMAsmParser" "LLVMInstCombine" "LLVMFrontendOpenMP" "LLVMAggressiveInstCombine" "LLVMTransformUtils" "LLVMJITLink" "LLVMMCJIT" "LLVMExecutionEngine" "LLVMTarget" "LLVMRuntimeDyld" "LLVMBitWriter" "LLVMAnalysis" "LLVMProfileData" "LLVMObject" "LLVMTextAPI" "LLVMMCParser" "LLVMMC" "LLVMDebugInfoCodeView" "LLVMBitReader" "LLVMCore" "LLVMRemarks" "LLVMBitstreamReader" "LLVMBinaryFormat" "LLVMSupport" "LLVMDemangle") if(${llvm_api_version} LESS 1200) set(MONO_llvm_core_libs ${MONO_llvm_core_libs} "LLVMOrcError" "LLVMDebugInfoMSF") - else() + elseif(${llvm_api_version} LESS 1600) set(MONO_llvm_core_libs ${MONO_llvm_core_libs} "LLVMObjCARCOpts" "LLVMMCDisassembler" "LLVMOrcTargetProcess" "LLVMOrcShared" "LLVMDebugInfoDWARF") + else() + set(MONO_llvm_core_libs ${MONO_llvm_core_libs} "LLVMIRPrinter" "LLVMCodeGen" "LLVMObjCARCOpts" "LLVMMCDisassembler" "LLVMWindowsDriver" "LLVMOption" "LLVMOrcTargetProcess" "LLVMOrcShared" "LLVMSymbolize" "LLVMDebugInfoPDB" "LLVMDebugInfoMSF" "LLVMDebugInfoDWARF" "LLVMTargetParser") endif() # llvm-config --libs x86codegen set(MONO_llvm_extra_libs_x86codegen "LLVMX86CodeGen" "LLVMCFGuard" "LLVMGlobalISel" "LLVMX86Desc" "LLVMX86Info" "LLVMMCDisassembler" "LLVMSelectionDAG" "LLVMAsmPrinter" "LLVMDebugInfoDWARF" "LLVMCodeGen" "LLVMTarget" "LLVMScalarOpts" "LLVMInstCombine" "LLVMAggressiveInstCombine" "LLVMTransformUtils" "LLVMBitWriter" "LLVMAnalysis" "LLVMProfileData" "LLVMObject" "LLVMTextAPI" "LLVMMCParser" "LLVMMC" "LLVMDebugInfoCodeView" "LLVMDebugInfoMSF" "LLVMBitReader" "LLVMCore" "LLVMRemarks" "LLVMBitstreamReader" "LLVMBinaryFormat" "LLVMSupport" "LLVMDemangle") + if(${llvm_api_version} GREATER_EQUAL 1600) + set(MONO_llvm_extra_libs_x86codegen ${MONO_llvm_extra_libs_x86codegen} "LLVMInstrumentation" "LLVMObjCARCOpts" "LLVMSymbolize" "LLVMDebugInfoPDB" "LLVMIRReader" "LLVMAsmParser" "LLVMTargetParser") + endif() # llvm-config --libs armcodegen set(MONO_llvm_extra_libs_armcodegen "LLVMARMCodeGen" "LLVMCFGuard" "LLVMGlobalISel" "LLVMSelectionDAG" "LLVMAsmPrinter" "LLVMDebugInfoDWARF" "LLVMCodeGen" "LLVMTarget" "LLVMScalarOpts" "LLVMInstCombine" "LLVMAggressiveInstCombine" "LLVMTransformUtils" "LLVMBitWriter" "LLVMAnalysis" "LLVMProfileData" "LLVMObject" "LLVMTextAPI" "LLVMMCParser" "LLVMBitReader" "LLVMCore" "LLVMRemarks" "LLVMBitstreamReader" "LLVMARMDesc" "LLVMMCDisassembler" "LLVMMC" "LLVMDebugInfoCodeView" "LLVMDebugInfoMSF" "LLVMBinaryFormat" "LLVMARMUtils" "LLVMARMInfo" "LLVMSupport" "LLVMDemangle") + if(${llvm_api_version} GREATER_EQUAL 1600) + set(MONO_llvm_extra_libs_armcodegen ${MONO_llvm_extra_libs_armcodegen} "LLVMipo" "LLVMInstrumentation" "LLVMVectorize" "LLVMLinker" "LLVMFrontendOpenMP" "LLVMObjCARCOpts" "LLVMSymbolize" "LLVMDebugInfoPDB" "LLVMIRReader" "LLVMAsmParser" "LLVMTargetParser") + endif() # llvm-config --libs aarch64codegen set(MONO_llvm_extra_libs_aarch64codegen "LLVMAArch64CodeGen" "LLVMCFGuard" "LLVMGlobalISel" "LLVMSelectionDAG" "LLVMAsmPrinter" "LLVMDebugInfoDWARF" "LLVMCodeGen" "LLVMTarget" "LLVMScalarOpts" "LLVMInstCombine" "LLVMAggressiveInstCombine" "LLVMTransformUtils" "LLVMBitWriter" "LLVMAnalysis" "LLVMProfileData" "LLVMObject" "LLVMTextAPI" "LLVMMCParser" "LLVMBitReader" "LLVMCore" "LLVMRemarks" "LLVMBitstreamReader" "LLVMAArch64Desc" "LLVMMC" "LLVMDebugInfoCodeView" "LLVMDebugInfoMSF" "LLVMBinaryFormat" "LLVMAArch64Utils" "LLVMAArch64Info" "LLVMSupport" "LLVMDemangle") + if(${llvm_api_version} GREATER_EQUAL 1600) + set(MONO_llvm_extra_libs_aarch64codegen ${MONO_llvm_extra_libs_aarch64codegen} "LLVMObjCARCOpts" "LLVMSymbolize" "LLVMDebugInfoPDB" "LLVMIRReader" "LLVMAsmParser" "LLVMTargetParser") + endif() + + if(HOST_LINUX AND NOT HOST_WASM AND NOT HOST_WASI AND ${llvm_api_version} GREATER_EQUAL 1600) + set(MONO_stdlib "-stdlib=libc++") + set(MONO_cxx_lib "-L${LLVM_PREFIX}/lib -lc++") + set(MONO_cxx_include "-I${LLVM_PREFIX}/include/c++/v1") + endif() + + if(${llvm_api_version} GREATER_EQUAL 1600) + if(HOST_WIN32) + set(MONO_cxx_std_version "/std:c++17") + else() + set(MONO_cxx_std_version "-std=c++17") + endif() + else() + if(HOST_WIN32) + set(MONO_cxx_std_version "/std:c++14") + else() + set(MONO_cxx_std_version "-std=c++14") + endif() + endif() # llvm-config --cflags set(llvm_cflags "-I${LLVM_PREFIX}/include -D__STDC_CONSTANT_MACROS -D__STD_FORMAT_MACROS -D__STDC_LIMIT_MACROS") - set(llvm_cxxflags "-I${LLVM_PREFIX}/include -std=c++14 -fno-exceptions -fno-rtti -D__STDC_CONSTANT_MACROS -D__STD_FORMAT_MACROS -D__STDC_LIMIT_MACROS") + set(llvm_cxxflags "-I${LLVM_PREFIX}/include ${MONO_cxx_include} ${MONO_cxx_std_version} ${MONO_stdlib} -fno-exceptions -fno-rtti -D__STDC_CONSTANT_MACROS -D__STD_FORMAT_MACROS -D__STDC_LIMIT_MACROS") set(llvm_includedir "${LLVM_PREFIX}/include") if(HOST_LINUX) # llvm-config --system-libs - set(llvm_system_libs "-lz" "-lrt" "-ldl" "-lpthread" "-lm") + set(llvm_system_libs ${MONO_cxx_lib} "-lz" "-lrt" "-ldl" "-lpthread" "-lm") elseif(HOST_OSX) # llvm-config --system-libs set(llvm_system_libs "-lz" "-lm") diff --git a/src/mono/Directory.Build.props b/src/mono/Directory.Build.props index a7a5977b72e90..3bf460330a1c9 100644 --- a/src/mono/Directory.Build.props +++ b/src/mono/Directory.Build.props @@ -50,8 +50,8 @@ true true true - <_MonoUseLLVMPackage Condition="'$(MonoLLVMDir)' == '' and ('$(MonoEnableLLVM)' == 'true' or $(MonoAOTEnableLLVM) == 'true')">true - $([MSBuild]::NormalizeDirectory('$(MonoObjDir)', 'llvm')) + true + $([MSBuild]::NormalizeDirectory('$(MonoObjDir)', 'llvm')) diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 3947c7b4b4eab..7cfff98ac8eb3 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -55,6 +55,8 @@ false true true + $(runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion.Substring(0, $(runtimelinuxx64MicrosoftNETCoreRuntimeMonoLLVMSdkVersion.IndexOf('.')))) + true @@ -253,8 +255,8 @@ - <_MonoLLVMTargetArchitecture Condition="'$(TargetArchitecture)' == 'wasm'">$(BuildArchitecture) - <_MonoLLVMTargetArchitecture Condition="'$(TargetArchitecture)' != 'wasm'">$(TargetArchitecture) + <_MonoLLVMTargetArchitecture Condition="'$(TargetArchitecture)' == 'wasm' and '$(MonoUseLLVMPackage)' == 'true'">$(BuildArchitecture) + <_MonoLLVMTargetArchitecture Condition="'$(TargetArchitecture)' != 'wasm' and '$(MonoUseLLVMPackage)' == 'true'">$(TargetArchitecture) <_MonoCMakeArgs Condition="'$(_MonoUseNinja)' == 'true'" Include="-G Ninja"/> @@ -270,20 +272,11 @@ <_MonoCMakeArgs Include="-DMONO_SHARED_LIB_NAME=$(MonoSharedLibName)" /> - - - <_MonoCXXFLAGS Include="-D_GLIBCXX_USE_CXX11_ABI=0" /> - - - <_MonoAOTCXXFLAGS Include="-D_GLIBCXX_USE_CXX11_ABI=0" /> - - - - - <_MonoCXXFLAGS Include="-D_GLIBCXX_USE_CXX11_ABI=1" /> - - - <_MonoAOTCXXFLAGS Include="-D_GLIBCXX_USE_CXX11_ABI=1" /> + + <_MonoCXXFLAGS Include="-I$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\include\c++\v1" /> + <_MonoCXXFLAGS Include="-L$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib" /> + <_MonoCXXFLAGS Include="-stdlib=libc++" /> + <_MonoCMakeArgs Include="-DMONO_SET_RPATH_ORIGIN=true" /> @@ -706,16 +699,23 @@ - <_MonoLLVMTargetArchitecture>$(BuildArchitecture) - <_MonoLLVMTargetArchitecture Condition="'$(AotHostArchitecture)' != ''">$(AotHostArchitecture) + <_MonoLLVMTargetArchitecture Condition="'$(MonoUseLLVMPackage)' == 'true'">$(BuildArchitecture) + <_MonoLLVMTargetArchitecture Condition="'$(AotHostArchitecture)' != '' and '$(MonoUseLLVMPackage)' == 'true'">$(AotHostArchitecture) + + <_MonoAOTCXXFLAGS Include="-I$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\include\c++\v1" /> + <_MonoAOTCXXFLAGS Include="-L$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib" /> + <_MonoAOTCXXFLAGS Include="-stdlib=libc++" /> + + + - - - - + + + + <_MonoAOTCFLAGS Condition="'$(AotHostArchitecture)' == 'arm64'" Include="-arch arm64" /> @@ -951,6 +951,18 @@ <_MonoRuntimeArtifacts Include="$(_MonoAotCrossFilePath)"> $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossFileName) + <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and '$(MonoEnableLLVM)' == 'true' and '$(TargetArchitecture)' != 'wasm' and '$(MonoUseLibCxx)' == 'true'" Include="$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib\libc++.so.1"> + $(RuntimeBinDir)libc++.so.1 + + <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and '$(MonoEnableLLVM)' == 'true' and '$(TargetArchitecture)' != 'wasm' and '$(MonoUseLibCxx)' == 'true'" Include="$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib\libc++abi.so.1"> + $(RuntimeBinDir)libc++abi.so.1 + + <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and (('$(MonoAOTEnableLLVM)' == 'true' and '$(MonoUseLibCxx)' == 'true') or '$(TargetArchitecture)' == 'wasm')" Include="$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib\libc++.so.1"> + $(RuntimeBinDir)cross\$(OutputRID)\libc++.so.1 + + <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and (('$(MonoAOTEnableLLVM)' == 'true' and '$(MonoUseLibCxx)' == 'true') or '$(TargetArchitecture)' == 'wasm')" Include="$(MonoLLVMDir)\$(_MonoLLVMTargetArchitecture)\lib\libc++abi.so.1"> + $(RuntimeBinDir)cross\$(OutputRID)\libc++abi.so.1 + <_MonoRuntimeArtifacts Include="$(_MonoAotCrossPdbFilePath)" Condition="Exists('$(_MonoAotCrossPdbFilePath)')"> $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossPdbFileName) diff --git a/src/mono/mono/mini/CMakeLists.txt b/src/mono/mono/mini/CMakeLists.txt index 54f20529261c8..324d09809ceaf 100644 --- a/src/mono/mono/mini/CMakeLists.txt +++ b/src/mono/mono/mini/CMakeLists.txt @@ -383,6 +383,9 @@ if(NOT DISABLE_SHARED_LIBS) target_link_libraries(monosgen-shared PRIVATE ucontext) endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) + if(MONO_SET_RPATH_ORIGIN) + set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") + endif() target_link_libraries(monosgen-shared PRIVATE monoapi eglib_objects utils_objects sgen_objects metadata_objects) if(HAVE_ICU_SHIM) target_link_libraries(monosgen-shared PRIVATE icu_shim_objects) @@ -548,6 +551,9 @@ if(NOT DISABLE_EXECUTABLES) add_executable(mono-sgen "${sgen_sources}") if(MONO_CROSS_COMPILE_EXECUTABLE_NAME) set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) + if(MONO_SET_RPATH_ORIGIN) + set_target_properties(mono-sgen PROPERTIES INSTALL_RPATH "$ORIGIN") + endif() endif() target_link_libraries(mono-sgen PRIVATE monoapi eglib_api monosgen-static) if(HAVE_ICU_SHIM) diff --git a/src/mono/mono/mini/aot-compiler.c b/src/mono/mono/mini/aot-compiler.c index 35d73ccccfa05..faa6be18c08fc 100644 --- a/src/mono/mono/mini/aot-compiler.c +++ b/src/mono/mono/mini/aot-compiler.c @@ -10726,7 +10726,14 @@ emit_llvm_file (MonoAotCompile *acfg) // FIXME: This doesn't work yet opts = g_strdup (""); } else { -#if LLVM_API_VERSION >= 1300 +#if LLVM_API_VERSION >= 1600 + /* The safepoints pass requires new pass manager syntax*/ + opts = g_strdup ("-disable-tail-calls -passes='"); + if (!acfg->aot_opts.llvm_only) { + opts = g_strdup_printf ("%sdefault,", opts); + } + opts = g_strdup_printf ("%splace-safepoints' -spp-all-backedges", opts); +#elif LLVM_API_VERSION >= 1300 /* The safepoints pass requires the old pass manager */ opts = g_strdup ("-disable-tail-calls -place-safepoints -spp-all-backedges -enable-new-pm=0"); #else @@ -10736,8 +10743,10 @@ emit_llvm_file (MonoAotCompile *acfg) if (acfg->aot_opts.llvm_opts) { opts = g_strdup_printf ("%s %s", acfg->aot_opts.llvm_opts, opts); +#if LLVM_API_VERSION < 1600 } else if (!acfg->aot_opts.llvm_only) { opts = g_strdup_printf ("-O2 %s", opts); +#endif } if (acfg->aot_opts.use_current_cpu) { diff --git a/src/mono/mono/mini/mini-llvm-cpp.cpp b/src/mono/mono/mini/mini-llvm-cpp.cpp index cd8503aee3828..b50eb471fa924 100644 --- a/src/mono/mono/mini/mini-llvm-cpp.cpp +++ b/src/mono/mono/mini/mini-llvm-cpp.cpp @@ -37,6 +37,15 @@ #pragma warning(disable:4800) // type' : forcing value to bool 'true' or 'false' (performance warning) #endif +// ArrayRef API is deprecated on C++17 +#if defined(__clang__) && (_LIBCPP_STD_VER > 17 || defined(__APPLE__)) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif +#ifdef _MSC_VER +#pragma warning(disable:4996) +#endif + #include #include #include diff --git a/src/mono/mono/mini/mini-llvm.c b/src/mono/mono/mini/mini-llvm.c index 2c7e25a927688..c0b8cda575aec 100644 --- a/src/mono/mono/mini/mini-llvm.c +++ b/src/mono/mono/mini/mini-llvm.c @@ -2151,9 +2151,11 @@ get_callee_llvmonly (EmitContext *ctx, LLVMTypeRef llvm_sig, MonoJumpInfoType ty g_hash_table_insert (ctx->module->direct_callables, (char*)callee_name, callee); } else { +#ifndef USE_OPAQUE_POINTERS /* LLVMTypeRef's are uniqued */ if (LLVMGetElementType (LLVMTypeOf (callee)) != llvm_sig) return LLVMConstBitCast (callee, pointer_type (llvm_sig)); +#endif g_free (callee_name); } @@ -4411,7 +4413,8 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref, vretaddr = (cinfo->ret.storage == LLVMArgVtypeRetAddr || cinfo->ret.storage == LLVMArgVtypeByRef || cinfo->ret.storage == LLVMArgGsharedvtFixed || cinfo->ret.storage == LLVMArgGsharedvtVariable || cinfo->ret.storage == LLVMArgGsharedvtFixedVtype); - llvm_sig = sig_to_llvm_sig_full (ctx, sig, cinfo, NULL); + LLVMTypeRef *param_etypes; + llvm_sig = sig_to_llvm_sig_full (ctx, sig, cinfo, ¶m_etypes); if (!ctx_ok (ctx)) return; @@ -4767,7 +4770,7 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref, #endif if (is_byval) - mono_llvm_add_instr_byval_attr (lcall, 1 + ainfo->pindex, LLVMGetElementType (param_types [ainfo->pindex])); + mono_llvm_add_instr_byval_attr (lcall, 1 + ainfo->pindex, param_etypes [ainfo->pindex]); } MonoClass *retclass = mono_class_from_mono_type_internal (sig->ret); @@ -5053,7 +5056,7 @@ emit_llvmonly_landing_pad (EmitContext *ctx, int group_index, int group_size) /* Return the value set in ctx->il_state_ret */ - LLVMTypeRef ret_type = LLVMGetReturnType (LLVMGetElementType (LLVMTypeOf (ctx->lmethod))); + LLVMTypeRef ret_type = LLVMGetReturnType (ctx->method_type); LLVMValueRef addr, retval, gep, indexes [2]; builder = ctx->builder; @@ -5956,9 +5959,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) int width = mono_type_size (sig->ret, NULL); int elems = width / TARGET_SIZEOF_VOID_P; /* The return value might not be set if there is a throw */ - LLVMValueRef val = build_ptr_cast (builder, lhs, LLVMVectorType (IntPtrType (), elems)); + LLVMValueRef val = LLVMBuildBitCast (builder, lhs, LLVMVectorType (IntPtrType (), elems), ""); for (int i = 0; i < elems; ++i) { + LLVMTypeRef etype = LLVMStructGetTypeAtIndex (LLVMTypeOf (retval), i); LLVMValueRef element = LLVMBuildExtractElement (builder, val, const_int32 (i), ""); + element = convert (ctx, element, etype); retval = LLVMBuildInsertValue (builder, retval, element, i, "setret_simd_vtype_in_reg"); } } else { @@ -6432,6 +6437,32 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) case OP_SHR_UN_IMM: { LLVMValueRef imm; + gboolean shift_ovf = FALSE; + gboolean shift_i8 = FALSE; + switch (ins->opcode) { + case OP_ISHL_IMM: + case OP_ISHR_IMM: + case OP_ISHR_UN_IMM: + if (ins->inst_imm < 0 || ins->inst_imm >= 32) + shift_ovf = TRUE; + break; + case OP_LSHL_IMM: + case OP_LSHR_IMM: + case OP_LSHR_UN_IMM: + if (ins->inst_imm < 0 || ins->inst_imm >= 64) + shift_ovf = TRUE; + shift_i8 = TRUE; + break; + case OP_SHL_IMM: + case OP_SHR_IMM: + case OP_SHR_UN_IMM: + if (ins->inst_imm < 0 || ins->inst_imm >= TARGET_SIZEOF_VOID_P * 8) + shift_ovf = TRUE; + break; + default: + break; + } + if (spec [MONO_INST_SRC1] == 'l') { imm = const_int64 (GET_LONG_IMM (ins)); } else { @@ -6444,9 +6475,12 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) builder = ctx->builder; #if TARGET_SIZEOF_VOID_P == 4 - if (ins->opcode == OP_LSHL_IMM || ins->opcode == OP_LSHR_IMM || ins->opcode == OP_LSHR_UN_IMM) + if (shift_i8) imm = const_int32 (ins->inst_imm); #endif + if (shift_i8) + /* The IL might not be regular */ + lhs = convert (ctx, lhs, LLVMInt64Type ()); if (LLVMGetTypeKind (LLVMTypeOf (lhs)) == LLVMPointerTypeKind) lhs = convert (ctx, lhs, IntPtrType ()); @@ -6496,7 +6530,10 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) break; case OP_ISHL_IMM: case OP_LSHL_IMM: - values [ins->dreg] = LLVMBuildShl (builder, lhs, imm, dname); + if (shift_ovf) + values [ins->dreg] = LLVMConstNull (LLVMTypeOf (lhs)); + else + values [ins->dreg] = LLVMBuildShl (builder, lhs, imm, dname); break; case OP_SHL_IMM: MONO_DISABLE_WARNING(4127) /* conditional expression is constant */ @@ -6506,22 +6543,34 @@ MONO_DISABLE_WARNING(4127) /* conditional expression is constant */ imm = convert (ctx, imm, LLVMInt64Type ()); } MONO_RESTORE_WARNING - values [ins->dreg] = LLVMBuildShl (builder, lhs, imm, dname); + if (shift_ovf) + values [ins->dreg] = LLVMConstNull (LLVMTypeOf (lhs)); + else + values [ins->dreg] = LLVMBuildShl (builder, lhs, imm, dname); break; case OP_ISHR_IMM: case OP_LSHR_IMM: case OP_SHR_IMM: - values [ins->dreg] = LLVMBuildAShr (builder, lhs, imm, dname); + if (shift_ovf) + values [ins->dreg] = LLVMConstNull (LLVMTypeOf (lhs)); + else + values [ins->dreg] = LLVMBuildAShr (builder, lhs, imm, dname); break; case OP_ISHR_UN_IMM: /* This is used to implement conv.u4, so the lhs could be an i8 */ lhs = convert (ctx, lhs, LLVMInt32Type ()); imm = convert (ctx, imm, LLVMInt32Type ()); - values [ins->dreg] = LLVMBuildLShr (builder, lhs, imm, dname); + if (shift_ovf) + values [ins->dreg] = LLVMConstNull (LLVMTypeOf (lhs)); + else + values [ins->dreg] = LLVMBuildLShr (builder, lhs, imm, dname); break; case OP_LSHR_UN_IMM: case OP_SHR_UN_IMM: - values [ins->dreg] = LLVMBuildLShr (builder, lhs, imm, dname); + if (shift_ovf) + values [ins->dreg] = LLVMConstNull (LLVMTypeOf (lhs)); + else + values [ins->dreg] = LLVMBuildLShr (builder, lhs, imm, dname); break; default: g_assert_not_reached (); @@ -11967,6 +12016,12 @@ MONO_RESTORE_WARNING if (!ctx_ok (ctx)) break; +#if LLVM_API_VERSION >= 1600 + if (spec [MONO_INST_DEST] != ' ' && values [ins->dreg] && LLVMIsPoison (values [ins->dreg])) + /* These could be generated by float<->int conversions etc. */ + values [ins->dreg] = LLVMBuildFreeze (builder, values [ins->dreg], ""); +#endif + /* Convert the value to the type required by phi nodes */ if (spec [MONO_INST_DEST] != ' ' && !MONO_IS_STORE_MEMBASE (ins) && ctx->vreg_types [ins->dreg]) { if (ctx->is_vphi [ins->dreg]) @@ -12623,8 +12678,10 @@ emit_method_inner (EmitContext *ctx) is_byval |= ainfo->storage == LLVMArgVtypeByRef; #endif - if (is_byval) - mono_llvm_add_param_byval_attr (LLVMGetParam (method, pindex), LLVMGetElementType (LLVMTypeOf (LLVMGetParam (method, pindex)))); + if (is_byval) { + g_assert (ctx->param_etypes [pindex]); + mono_llvm_add_param_byval_attr (LLVMGetParam (method, pindex), ctx->param_etypes [pindex]); + } if (ainfo->storage == LLVMArgVtypeByRef || ainfo->storage == LLVMArgVtypeAddr) { /* For OP_LDADDR */ diff --git a/src/mono/mono/tools/offsets-tool/offsets-tool.py b/src/mono/mono/tools/offsets-tool/offsets-tool.py index 5f52ab268adc4..ab555b8d9db75 100644 --- a/src/mono/mono/tools/offsets-tool/offsets-tool.py +++ b/src/mono/mono/tools/offsets-tool/offsets-tool.py @@ -372,8 +372,11 @@ def gen (self): if type.size == -1: continue f.write ("DECL_SIZE2(%s,%s)\n" % (type.name, type.size)) + done_fields = {} for field in type.fields: - f.write ("DECL_OFFSET2(%s,%s,%s)\n" % (type.name, field.name, field.offset)) + if field.name not in done_fields: + f.write ("DECL_OFFSET2(%s,%s,%s)\n" % (type.name, field.name, field.offset)) + done_fields [field.name] = field.name f.write ("#endif //disable metadata check\n") f.write ("#ifndef DISABLE_JIT_OFFSETS\n") @@ -383,8 +386,11 @@ def gen (self): if type.size == -1: continue f.write ("DECL_SIZE2(%s,%s)\n" % (type.name, type.size)) + done_fields = {} for field in type.fields: - f.write ("DECL_OFFSET2(%s,%s,%s)\n" % (type.name, field.name, field.offset)) + if field.name not in done_fields: + f.write ("DECL_OFFSET2(%s,%s,%s)\n" % (type.name, field.name, field.offset)) + done_fields [field.name] = field.name f.write ("#endif //disable jit check\n") f.write ("#endif //cross compiler checks\n") diff --git a/src/tests/Common/Directory.Build.targets b/src/tests/Common/Directory.Build.targets index fd1d1af2c512e..fec20452b87bc 100644 --- a/src/tests/Common/Directory.Build.targets +++ b/src/tests/Common/Directory.Build.targets @@ -176,6 +176,8 @@ + +