// Given a path terminated with "\\" and a search mask, this function will add
// the enumerated files, corresponding to the search mask, from the path into
// the refTPAList.
-void PopulateTPAList(SString path, LPCWSTR pwszMask, SString &refTPAList, bool fCreatePDB)
+void PopulateTPAList(SString path, LPCWSTR pwszMask, SString &refTPAList, bool fCompilingMscorlib, bool fCreatePDB)
{
_ASSERTE(path.GetCount() > 0);
ClrDirectoryEnumerator folderEnumerator(path.GetUnicode(), pwszMask);
// Given a semi-colon delimited set of absolute folder paths (pwzPlatformAssembliesPaths), this function
// will enumerate all EXE/DLL modules in those folders and add them to the TPAList buffer (refTPAList).
-void ComputeTPAListFromPlatformAssembliesPath(LPCWSTR pwzPlatformAssembliesPaths, SString &refTPAList, bool fCreatePDB)
+void ComputeTPAListFromPlatformAssembliesPath(LPCWSTR pwzPlatformAssembliesPaths, SString &refTPAList, bool fCompilingMscorlib, bool fCreatePDB)
{
// We should have a valid pointer to the paths
_ASSERTE(pwzPlatformAssembliesPaths != NULL);
// Enumerate the EXE/DLL modules within this path and add them to the TPAList
EX_TRY
{
- PopulateTPAList(qualifiedPath, W("*.exe"), refTPAList, fCreatePDB);
- PopulateTPAList(qualifiedPath, W("*.dll"), refTPAList, fCreatePDB);
+ PopulateTPAList(qualifiedPath, W("*.exe"), refTPAList, fCompilingMscorlib, fCreatePDB);
+ PopulateTPAList(qualifiedPath, W("*.dll"), refTPAList, fCompilingMscorlib, fCreatePDB);
}
EX_CATCH
{
LPWSTR pwzSearchPathForManagedPDB = NULL;
LPCWSTR pwzOutputFilename = NULL;
LPCWSTR pwzPublicKeys = nullptr;
+ bool fExplicitReadyToRunSwitch = false;
#if !defined(FEATURE_MERGE_JIT_AND_ENGINE)
LPCWSTR pwszCLRJITPath = nullptr;
else if (MatchParameter(*argv, W("ReadyToRun")))
{
dwFlags |= NGENWORKER_FLAGS_READYTORUN;
+ fExplicitReadyToRunSwitch = true;
}
else if (MatchParameter(*argv, W("FragileNonVersionable")))
{
// To avoid this issue, put the input file as the first item in TPA.
ssTPAList.Append(pwzFilename);
}
+
+ // Are we compiling mscorlib.dll?
+ bool fCompilingMscorlib = StringEndsWith((LPWSTR)pwzFilename, CoreLibName_IL_W);
+
+// Disable fragile NGen when compiling Mscorlib for ARM.
+#if !(defined(_TARGET_ARM_) || defined(_TARGET_ARM64_))
+ if (fCompilingMscorlib && !fExplicitReadyToRunSwitch)
+ dwFlags &= ~NGENWORKER_FLAGS_READYTORUN;
+#endif // !(_TARGET_ARM_ || _TARGET_ARM64_)
if(pwzPlatformAssembliesPaths != nullptr)
{
_ASSERTE(pwzTrustedPlatformAssemblies == nullptr);
// Formulate the TPAList from Platform_Assemblies_Paths
- ComputeTPAListFromPlatformAssembliesPath(pwzPlatformAssembliesPaths, ssTPAList, fCreatePDB);
+ ComputeTPAListFromPlatformAssembliesPath(pwzPlatformAssembliesPaths, ssTPAList, fCompilingMscorlib, fCreatePDB);
pwzTrustedPlatformAssemblies = (WCHAR *)ssTPAList.GetUnicode();
pwzPlatformAssembliesPaths = NULL;
}