Skip to content

Commit fcaba18

Browse files
Universal arm crossgen compiler (#58279)
Stop generating OS specific compilers for the arm and arm64 architectures for use in crossgen2 - As it turns out the OS differences here are relatively minor and fairly easy to handle with runtime switches. - However, when an exact target is known we can generate better code by having the various if statements evaluate to a constant true/false. (This is done for all runtime jit builds) - This has been validated to produce binary identical output for generating System.Private.CoreLib.dll on the various architectures. - This work reduces the distribution size of crossgen2, and also reduces the amount of time it takes to build everything (Most notably, the Mac build times in PR's are reduced by 5-7 minutes, but improvements are visible across all of/architecture pairs)
1 parent de4151e commit fcaba18

Some content is hidden

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

71 files changed

+784
-526
lines changed

src/coreclr/ToolBox/superpmi/mcs/removedup.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ bool RemoveDup::unique(MethodContext* mc)
6161

6262
CORINFO_METHOD_INFO newInfo;
6363
unsigned newFlags = 0;
64-
mc->repCompileMethod(&newInfo, &newFlags);
64+
CORINFO_OS newOs = CORINFO_WINNT;
65+
mc->repCompileMethod(&newInfo, &newFlags, &newOs);
6566

6667
// Assume that there are lots of duplicates, so don't allocate a new buffer for the MD5 hash data
6768
// until we know we're going to add it to the map.
@@ -95,7 +96,8 @@ bool RemoveDup::uniqueLegacy(MethodContext* mc)
9596

9697
CORINFO_METHOD_INFO newInfo;
9798
unsigned newFlags = 0;
98-
mc->repCompileMethod(&newInfo, &newFlags);
99+
CORINFO_OS newOs = CORINFO_WINNT;
100+
mc->repCompileMethod(&newInfo, &newFlags, &newOs);
99101

100102
if (m_inFileLegacy->GetIndex(newInfo.ILCodeSize) == -1)
101103
m_inFileLegacy->Add(newInfo.ILCodeSize, new DenseLightWeightMap<MethodContext*>());

src/coreclr/ToolBox/superpmi/mcs/verbdumpmap.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ void DumpMapHeader()
1717
// printf("process name,");
1818
printf("method name,");
1919
printf("full signature,");
20-
printf("jit flags\n");
20+
printf("jit flags,");
21+
printf("os\n");
2122
}
2223

2324
void DumpMap(int index, MethodContext* mc)
2425
{
2526
CORINFO_METHOD_INFO cmi;
2627
unsigned int flags = 0;
28+
CORINFO_OS os;
2729

28-
mc->repCompileMethod(&cmi, &flags);
30+
mc->repCompileMethod(&cmi, &flags, &os);
2931

3032
const char* moduleName = nullptr;
3133
const char* methodName = mc->repGetMethodName(cmi.ftn, &moduleName);
@@ -121,7 +123,7 @@ void DumpMap(int index, MethodContext* mc)
121123
}
122124
}
123125

124-
printf(", %s\n", SpmiDumpHelper::DumpJitFlags(rawFlags).c_str());
126+
printf(", %s, %d\n", SpmiDumpHelper::DumpJitFlags(rawFlags).c_str(), (int)os);
125127
}
126128

127129
int verbDumpMap::DoWork(const char* nameOfInput)

src/coreclr/ToolBox/superpmi/mcs/verbildump.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,8 +927,9 @@ void DumpIL(MethodContext* mc)
927927
{
928928
CORINFO_METHOD_INFO cmi;
929929
unsigned int flags = 0;
930+
CORINFO_OS os = CORINFO_WINNT;
930931

931-
mc->repCompileMethod(&cmi, &flags);
932+
mc->repCompileMethod(&cmi, &flags, &os);
932933

933934
const char* moduleName = nullptr;
934935
const char* methodName = mc->repGetMethodName(cmi.ftn, &moduleName);

src/coreclr/ToolBox/superpmi/superpmi-shared/agnostic.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ struct Agnostic_CompileMethod
4848
{
4949
Agnostic_CORINFO_METHOD_INFO info;
5050
DWORD flags;
51+
DWORD os;
5152
};
5253

5354
struct Agnostic_InitClass

src/coreclr/ToolBox/superpmi/superpmi-shared/asmdumper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ void ASMDumper::DumpToFile(HANDLE hFile, MethodContext* mc, CompileResult* cr)
88
{
99
CORINFO_METHOD_INFO info;
1010
unsigned flags = 0;
11-
mc->repCompileMethod(&info, &flags);
11+
CORINFO_OS os = CORINFO_WINNT;
12+
mc->repCompileMethod(&info, &flags, &os);
1213

1314
#define bufflen 4096
1415
DWORD bytesWritten;

src/coreclr/ToolBox/superpmi/superpmi-shared/icorjitcompilerimpl.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
// * In the 32 bit jit this is implemented by code:CILJit.compileMethod
2525
// * For the 64 bit jit this is implemented by code:PreJit.compileMethod
2626
//
27-
// Note: Obfuscators that are hacking the JIT depend on this method having __stdcall calling convention
27+
// Note: setTargetOS must be called before this api is used.
2828
CorJitResult compileMethod(ICorJitInfo* comp, /* IN */
2929
struct CORINFO_METHOD_INFO* info, /* IN */
3030
unsigned /* code:CorJitFlag */ flags, /* IN */
@@ -47,4 +47,10 @@ void getVersionIdentifier(GUID* versionIdentifier /* OUT */
4747
// intrinsics, so the EE should use the default size (i.e. the size of the IL implementation).
4848
unsigned getMaxIntrinsicSIMDVectorLength(CORJIT_FLAGS cpuCompileFlags); /* { return 0; } */
4949

50+
// Some JIT's may support multiple OSs. This api provides a means to specify to the JIT what OS it should
51+
// be trying to compile. This api does not produce any errors, any errors are to be generated by the
52+
// the compileMethod call, which will call back into the VM to ensure bits are correctly setup.
53+
//
54+
// Note: this api MUST be called before the compileMethod is called for the first time in the process.
55+
void setTargetOS(CORINFO_OS os);
5056
#endif

src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -384,11 +384,13 @@ bool MethodContext::Equal(MethodContext* other)
384384
// Compare MethodInfo's first.
385385
CORINFO_METHOD_INFO otherInfo;
386386
unsigned otherFlags = 0;
387-
other->repCompileMethod(&otherInfo, &otherFlags);
387+
CORINFO_OS otherOs = CORINFO_WINNT;
388+
other->repCompileMethod(&otherInfo, &otherFlags, &otherOs);
388389

389390
CORINFO_METHOD_INFO ourInfo;
390391
unsigned ourFlags = 0;
391-
repCompileMethod(&ourInfo, &ourFlags);
392+
CORINFO_OS ourOs = CORINFO_WINNT;
393+
repCompileMethod(&ourInfo, &ourFlags, &ourOs);
392394

393395
if (otherInfo.ILCodeSize != ourInfo.ILCodeSize)
394396
return false;
@@ -419,6 +421,8 @@ bool MethodContext::Equal(MethodContext* other)
419421
return false;
420422
if (otherFlags != ourFlags)
421423
return false;
424+
if (otherOs != ourOs)
425+
return false;
422426

423427
// Now compare the other maps to "estimate" equality.
424428

@@ -643,7 +647,7 @@ unsigned int toCorInfoSize(CorInfoType cit)
643647
return -1;
644648
}
645649

646-
void MethodContext::recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags)
650+
void MethodContext::recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags, CORINFO_OS os)
647651
{
648652
if (CompileMethod == nullptr)
649653
CompileMethod = new LightWeightMap<DWORD, Agnostic_CompileMethod>();
@@ -662,21 +666,23 @@ void MethodContext::recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags)
662666
value.info.args = SpmiRecordsHelper::StoreAgnostic_CORINFO_SIG_INFO(info->args, CompileMethod, SigInstHandleMap);
663667
value.info.locals = SpmiRecordsHelper::StoreAgnostic_CORINFO_SIG_INFO(info->locals, CompileMethod, SigInstHandleMap);
664668

669+
value.os = (DWORD)os;
670+
665671
value.flags = (DWORD)flags;
666672

667673
CompileMethod->Add(0, value);
668674
DEBUG_REC(dmpCompileMethod(0, value));
669675
}
670676
void MethodContext::dmpCompileMethod(DWORD key, const Agnostic_CompileMethod& value)
671677
{
672-
printf("CompileMethod key %u, value ftn-%016llX scp-%016llX ilo-%u ils-%u ms-%u ehc-%u opt-%u rk-%u args-%s locals-%s flg-%08X",
678+
printf("CompileMethod key %u, value ftn-%016llX scp-%016llX ilo-%u ils-%u ms-%u ehc-%u opt-%u rk-%u args-%s locals-%s flg-%08X os-%u",
673679
key, value.info.ftn, value.info.scope, value.info.ILCode_offset, value.info.ILCodeSize, value.info.maxStack,
674680
value.info.EHcount, value.info.options, value.info.regionKind,
675681
SpmiDumpHelper::DumpAgnostic_CORINFO_SIG_INFO(value.info.args, CompileMethod, SigInstHandleMap).c_str(),
676682
SpmiDumpHelper::DumpAgnostic_CORINFO_SIG_INFO(value.info.locals, CompileMethod, SigInstHandleMap).c_str(),
677-
value.flags);
683+
value.flags, value.os);
678684
}
679-
void MethodContext::repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags)
685+
void MethodContext::repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags, CORINFO_OS* os)
680686
{
681687
AssertMapAndKeyExistNoMessage(CompileMethod, 0);
682688

@@ -699,6 +705,7 @@ void MethodContext::repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags)
699705
info->locals = SpmiRecordsHelper::Restore_CORINFO_SIG_INFO(value.info.locals, CompileMethod, SigInstHandleMap);
700706

701707
*flags = (unsigned)value.flags;
708+
*os = (CORINFO_OS)value.os;
702709
}
703710

704711
void MethodContext::recGetMethodClass(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CLASS_HANDLE classHandle)
@@ -4188,7 +4195,9 @@ void MethodContext::repGetEEInfo(CORINFO_EE_INFO* pEEInfoOut)
41884195
pEEInfoOut->osPageSize = (size_t)0x1000;
41894196
pEEInfoOut->maxUncheckedOffsetForNullObject = (size_t)((32 * 1024) - 1);
41904197
pEEInfoOut->targetAbi = CORINFO_DESKTOP_ABI;
4191-
#ifdef TARGET_UNIX
4198+
#ifdef TARGET_OSX
4199+
pEEInfoOut->osType = CORINFO_MACOS;
4200+
#elif defined(TARGET_UNIX)
41924201
pEEInfoOut->osType = CORINFO_UNIX;
41934202
#else
41944203
pEEInfoOut->osType = CORINFO_WINNT;
@@ -6848,7 +6857,8 @@ int MethodContext::dumpMethodIdentityInfoToBuffer(char* buff, int len, bool igno
68486857
}
68496858
else
68506859
{
6851-
repCompileMethod(&info, &flags);
6860+
CORINFO_OS os;
6861+
repCompileMethod(&info, &flags, &os);
68526862
pInfo = &info;
68536863
}
68546864

@@ -6982,7 +6992,8 @@ bool MethodContext::hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile, bool
69826992
// Obtain the Method Info structure for this method
69836993
CORINFO_METHOD_INFO info;
69846994
unsigned flags = 0;
6985-
repCompileMethod(&info, &flags);
6995+
CORINFO_OS os;
6996+
repCompileMethod(&info, &flags, &os);
69866997

69876998
if ((GetPgoInstrumentationResults != nullptr) &&
69886999
(GetPgoInstrumentationResults->GetIndex(CastHandle(info.ftn)) != -1))

src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ class MethodContext
109109

110110
void dmpEnvironment(DWORD key, const Agnostic_Environment& value);
111111

112-
void recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags);
112+
void recCompileMethod(CORINFO_METHOD_INFO* info, unsigned flags, CORINFO_OS os);
113113
void dmpCompileMethod(DWORD key, const Agnostic_CompileMethod& value);
114-
void repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags);
114+
void repCompileMethod(CORINFO_METHOD_INFO* info, unsigned* flags, CORINFO_OS* os);
115115

116116
void recGetMethodClass(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CLASS_HANDLE classHandle);
117117
void dmpGetMethodClass(DWORDLONG key, DWORDLONG value);

src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitcompiler.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010

1111
#define fatMC // this is nice to have on so ildump works...
1212

13+
void interceptor_ICJC::setTargetOS(CORINFO_OS os)
14+
{
15+
currentOs = os;
16+
original_ICorJitCompiler->setTargetOS(os);
17+
}
18+
1319
CorJitResult interceptor_ICJC::compileMethod(ICorJitInfo* comp, /* IN */
1420
struct CORINFO_METHOD_INFO* info, /* IN */
1521
unsigned /* code:CorJitFlag */ flags, /* IN */
@@ -24,7 +30,7 @@ CorJitResult interceptor_ICJC::compileMethod(ICorJitInfo* comp,
2430
our_ICorJitInfo.mc = mc;
2531
our_ICorJitInfo.mc->cr->recProcessName(GetCommandLineA());
2632

27-
our_ICorJitInfo.mc->recCompileMethod(info, flags);
33+
our_ICorJitInfo.mc->recCompileMethod(info, flags, currentOs);
2834

2935
// force some extra data into our tables..
3036
// data probably not needed with RyuJIT, but needed in 4.5 and 4.5.1 to help with catching cached values

src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitcompiler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class interceptor_ICJC : public ICorJitCompiler
1515
// Added to help us track the original icjc and be able to easily indirect to it.
1616
ICorJitCompiler* original_ICorJitCompiler;
1717
HANDLE hFile;
18+
CORINFO_OS currentOs;
1819
};
1920

2021
#endif

src/coreclr/ToolBox/superpmi/superpmi-shim-collector/superpmi-shim-collector.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,16 @@ extern "C" DLLEXPORT ICorJitCompiler* getJit()
193193
pJitInstance = new interceptor_ICJC();
194194
pJitInstance->original_ICorJitCompiler = tICJI;
195195

196+
#ifdef TARGET_WINDOWS
197+
pJitInstance->currentOs = CORINFO_WINNT;
198+
#elif defined(TARGET_OSX)
199+
pJitInstance->currentOs = CORINFO_MACOS;
200+
#elif defined(TARGET_UNIX)
201+
pJitInstance->currentOs = CORINFO_UNIX;
202+
#else
203+
#error No target os defined
204+
#endif
205+
196206
// create our datafile
197207
pJitInstance->hFile = CreateFileW(g_dataFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
198208
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);

src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitcompiler.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
#include "icorjitcompiler.h"
66
#include "icorjitinfo.h"
77

8+
void interceptor_ICJC::setTargetOS(CORINFO_OS os)
9+
{
10+
original_ICorJitCompiler->setTargetOS(os);
11+
}
12+
813
CorJitResult interceptor_ICJC::compileMethod(ICorJitInfo* comp, /* IN */
914
struct CORINFO_METHOD_INFO* info, /* IN */
1015
unsigned /* code:CorJitFlag */ flags, /* IN */

src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitcompiler.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
#include "icorjitcompiler.h"
66
#include "icorjitinfo.h"
77

8+
void interceptor_ICJC::setTargetOS(CORINFO_OS os)
9+
{
10+
original_ICorJitCompiler->setTargetOS(os);
11+
}
12+
813
CorJitResult interceptor_ICJC::compileMethod(ICorJitInfo* comp, /* IN */
914
struct CORINFO_METHOD_INFO* info, /* IN */
1015
unsigned /* code:CorJitFlag */ flags, /* IN */

src/coreclr/ToolBox/superpmi/superpmi/jitinstance.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,14 +303,16 @@ JitInstance::Result JitInstance::CompileMethod(MethodContext* MethodToCompile, i
303303

304304
PAL_TRY(Param*, pParam, &param)
305305
{
306-
uint8_t* NEntryBlock = nullptr;
307-
uint32_t NCodeSizeBlock = 0;
306+
uint8_t* NEntryBlock = nullptr;
307+
uint32_t NCodeSizeBlock = 0;
308+
CORINFO_OS os = CORINFO_WINNT;
308309

309-
pParam->pThis->mc->repCompileMethod(&pParam->info, &pParam->flags);
310+
pParam->pThis->mc->repCompileMethod(&pParam->info, &pParam->flags, &os);
310311
if (pParam->collectThroughput)
311312
{
312313
pParam->pThis->lt.Start();
313314
}
315+
pParam->pThis->pJitInstance->setTargetOS(os);
314316
CorJitResult jitResult = pParam->pThis->pJitInstance->compileMethod(pParam->pThis->icji, &pParam->info,
315317
pParam->flags, &NEntryBlock, &NCodeSizeBlock);
316318
if (pParam->collectThroughput)

src/coreclr/ToolBox/superpmi/superpmi/methodstatsemitter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ void MethodStatsEmitter::Emit(int methodNumber, MethodContext* mc, ULONGLONG fir
6060
// Obtain the IL code size for this method
6161
CORINFO_METHOD_INFO info;
6262
unsigned flags = 0;
63-
mc->repCompileMethod(&info, &flags);
63+
CORINFO_OS os = CORINFO_WINNT;
64+
mc->repCompileMethod(&info, &flags, &os);
6465

6566
charCount += sprintf_s(rowData + charCount, _countof(rowData) - charCount, "%d,", info.ILCodeSize);
6667
}

src/coreclr/ToolBox/superpmi/superpmi/neardiffer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,8 @@ bool NearDiffer::compareVars(MethodContext* mc, CompileResult* cr1, CompileResul
930930

931931
CORINFO_METHOD_INFO info;
932932
unsigned flags = 0;
933-
mc->repCompileMethod(&info, &flags);
933+
CORINFO_OS os = CORINFO_WINNT;
934+
mc->repCompileMethod(&info, &flags, &os);
934935

935936
bool set1 = cr1->repSetVars(&ftn_1, &cVars_1, &vars_1);
936937
bool set2 = cr2->repSetVars(&ftn_2, &cVars_2, &vars_2);
@@ -1003,7 +1004,8 @@ bool NearDiffer::compareBoundaries(MethodContext* mc, CompileResult* cr1, Compil
10031004

10041005
CORINFO_METHOD_INFO info;
10051006
unsigned flags = 0;
1006-
mc->repCompileMethod(&info, &flags);
1007+
CORINFO_OS os = CORINFO_WINNT;
1008+
mc->repCompileMethod(&info, &flags, &os);
10071009

10081010
bool set1 = cr1->repSetBoundaries(&ftn_1, &cMap_1, &map_1);
10091011
bool set2 = cr2->repSetBoundaries(&ftn_2, &cMap_2, &map_2);

src/coreclr/clrdefinitions.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,10 @@ function(set_target_definitions_to_custom_os_and_arch)
244244
if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "unix_osx"))
245245
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE OSX_ARM64_ABI)
246246
endif()
247-
else()
247+
if (TARGETDETAILS_OS STREQUAL "unix_osx")
248+
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_OSX)
249+
endif()
250+
elseif (TARGETDETAILS_OS STREQUAL "win")
248251
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS)
249252
endif((TARGETDETAILS_OS MATCHES "^unix"))
250253

src/coreclr/crosscomponents.cmake

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,33 @@
22

33
if (CLR_CMAKE_HOST_OS STREQUAL CLR_CMAKE_TARGET_OS)
44
install_clr (TARGETS
5-
clrjit
6-
DESTINATIONS . sharedFramework
7-
COMPONENT crosscomponents
8-
)
9-
install_clr (TARGETS
10-
clrjit
115
jitinterface_${ARCH_HOST_NAME}
126
DESTINATIONS .
137
COMPONENT crosscomponents
148
)
159

16-
if(CLR_CMAKE_TARGET_OSX AND ARCH_TARGET_NAME STREQUAL arm64)
10+
if (CLR_CMAKE_TARGET_OSX AND ARCH_TARGET_NAME STREQUAL arm64)
11+
install_clr (TARGETS
12+
clrjit_universal_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME}
13+
DESTINATIONS .
14+
COMPONENT crosscomponents
15+
)
16+
elseif (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_ARM64)
1717
install_clr (TARGETS
18-
clrjit_unix_osx_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME}
19-
DESTINATIONS . sharedFramework
18+
clrjit_universal_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME}
19+
DESTINATIONS .
2020
COMPONENT crosscomponents
2121
)
2222
elseif (CLR_CMAKE_TARGET_UNIX)
2323
install_clr (TARGETS
2424
clrjit_unix_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME}
25-
DESTINATIONS . sharedFramework
25+
DESTINATIONS .
26+
COMPONENT crosscomponents
27+
)
28+
else()
29+
install_clr (TARGETS
30+
clrjit_win_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME}
31+
DESTINATIONS .
2632
COMPONENT crosscomponents
2733
)
2834
endif()

0 commit comments

Comments
 (0)