Keep FEATURE_MERGE_JIT_AND_ENGINE with refactored approach
authorGaurav Khanna <gkhanna@microsoft.com>
Fri, 22 Apr 2016 19:24:51 +0000 (12:24 -0700)
committerGaurav Khanna <gkhanna@microsoft.com>
Tue, 26 Apr 2016 15:08:20 +0000 (08:08 -0700)
20 files changed:
clrdefinitions.cmake
crossgen.cmake
src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/debian/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/osx/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/rhel/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/ubuntu/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
src/.nuget/Microsoft.NETCore.Runtime.CoreCLR/win/Microsoft.NETCore.Runtime.CoreCLR.pkgproj
src/coreclr/CMakeLists.txt
src/dlls/mscoree/coreclr/CMakeLists.txt
src/inc/corcompile.h
src/jit/dll/CMakeLists.txt
src/jit/standalone/CMakeLists.txt
src/tools/crossgen/CMakeLists.txt
src/vm/CMakeLists.txt
src/vm/ceemain.cpp
src/vm/codeman.cpp
src/vm/codeman.h
src/vm/jitinterface.cpp
src/vm/pefile.cpp
src/zap/zapper.cpp

index 5c9c3d0a33629a852bfc81cf2a95abeceb86e330..39b35ed410eebddb71afcacf1f2796abd4f223dd 100644 (file)
@@ -130,10 +130,13 @@ add_definitions(-DFEATURE_MANAGED_ETW)
 add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS)
 add_definitions(-DFEATURE_MAIN_CLR_MODULE_USES_CORE_NAME)
 add_definitions(-DFEATURE_MERGE_CULTURE_SUPPORT_AND_ENGINE)
-if(WIN32)
-# Disable the following for UNIX altjit on Windows
-add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
-endif(WIN32)
+
+# TODO_DJIT: Remove this "set" to commence loading JIT dynamically.
+set(FEATURE_MERGE_JIT_AND_ENGINE 1)
+if(FEATURE_MERGE_JIT_AND_ENGINE)
+  # Disable the following for UNIX altjit on Windows
+  add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
+endif(FEATURE_MERGE_JIT_AND_ENGINE)
 add_definitions(-DFEATURE_MULTICOREJIT)
 add_definitions(-DFEATURE_NORM_IDNA_ONLY)
 if(CLR_CMAKE_PLATFORM_UNIX)
index 999a73f5f0ff513f33ddf73a0bd2f21b9e42d22d..4e0f896ddd4ec70d7c4490f66fa610495d67460e 100644 (file)
@@ -4,7 +4,6 @@ add_definitions(
     -DCROSSGEN_COMPILE
     -DCROSS_COMPILE
     -DFEATURE_NATIVE_IMAGE_GENERATION
-    -DFEATURE_MERGE_JIT_AND_ENGINE
     -DSELF_NO_HOST)
 
 remove_definitions(
index 55498b9ce057f32812bf6182b8e37468ecab1ca3..0baad3c223d511de4852d7b5f7acaec5263a7af0 100644 (file)
@@ -11,6 +11,7 @@
   </PropertyGroup>
   
   <ItemGroup>
+    <NativeSplittableBinary Include="$(BinDir)libclrjit.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclr.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclrtraceptprovider.so"/>
     <NativeSplittableBinary Include="$(BinDir)libdbgshim.so"/>
@@ -23,7 +24,6 @@
     <ArchitectureSpecificNativeFile Include="$(BinDir)mscorlib.ni.dll"/>
     <ArchitectureSpecificLibFile Include="$(BinDir)mscorlib.dll"/>
     <ArchitectureSpecificToolFile Include="$(BinDir)crossgen"/>
-
     <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)"/>
 
     <File Include="@(ArchitectureSpecificNativeFile)">
index e7b4e876a53c7ce181d9eae0e99453b8ac062b9d..0d7765a4ecb230194a216b6a0e1a7107ced62acf 100644 (file)
@@ -11,6 +11,7 @@
   </PropertyGroup>
   
   <ItemGroup>
+    <NativeSplittableBinary Include="$(BinDir)libclrjit.dylib"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclr.dylib"/>
     <NativeSplittableBinary Include="$(BinDir)libdbgshim.dylib"/>
     <NativeSplittableBinary Include="$(BinDir)libmscordaccore.dylib"/>
@@ -22,7 +23,6 @@
     <ArchitectureSpecificNativeFile Include="$(BinDir)mscorlib.ni.dll"/>
     <ArchitectureSpecificLibFile Include="$(BinDir)mscorlib.dll"/>
     <ArchitectureSpecificToolFile Include="$(BinDir)crossgen"/>
-
     <ArchitectureSpecificNativeFile Include="@(NativeSplittableBinary)"/>
 
     <File Include="@(ArchitectureSpecificNativeFile)">
index 211d5502e240a26ef14f712741f3b430354363fb..495ad265e486157dbb71f5496454997bce5beb84 100644 (file)
@@ -11,6 +11,7 @@
   </PropertyGroup>
   
   <ItemGroup>
+    <NativeSplittableBinary Include="$(BinDir)libclrjit.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclr.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclrtraceptprovider.so"/>
     <NativeSplittableBinary Include="$(BinDir)libdbgshim.so"/>
index a49ea94d0c21f6bfb7b085b2047cb6a9eb957256..9ea58155bf3f2b9738ff69bed43b71ef0b59025a 100644 (file)
@@ -11,6 +11,7 @@
   </PropertyGroup>
   
   <ItemGroup>
+    <NativeSplittableBinary Include="$(BinDir)libclrjit.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclr.so"/>
     <NativeSplittableBinary Include="$(BinDir)libcoreclrtraceptprovider.so"/>
     <NativeSplittableBinary Include="$(BinDir)libdbgshim.so"/>
index 96a6f31308bdb4f5f0dae95bd744c372ed52b96a..ef3e035dd1ef172e81caa4bc76874e0113bcd25b 100644 (file)
@@ -12,6 +12,7 @@
   
   <ItemGroup>
     <ArchitectureSpecificNativeFile Include="$(BinDir)clretwrc.dll"/>
+    <ArchitectureSpecificNativeFile Include="$(BinDir)clrjit.dll"/>
     <ArchitectureSpecificNativeFile Include="$(BinDir)coreclr.dll"/>
     <ArchitectureSpecificNativeFile Include="$(BinDir)dbgshim.dll"/>
     <ArchitectureSpecificNativeFile Include="$(BinDir)mscordaccore.dll"/>
index c1bed7b2bb8e54812fa2b05ee15764343ce7ee49..64e1524da75de2f41a8f2e00540e7853180d6508 100644 (file)
@@ -1,5 +1,3 @@
-# Add the Merge flag here is needed. Not needed for RyuJIT if building as a DLL.
-add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
 if(WIN32)
   add_subdirectory(hosts)
 endif(WIN32)
index 6c2e50ad3a9743a7183b878889fd26e89a1e4505..42a3bc6550dcd30f407719f7310b24346d003ddb 100644 (file)
@@ -65,6 +65,10 @@ if (CLR_CMAKE_PLATFORM_UNIX)
     set(LIB_UNWINDER unwinder_wks)
 endif (CLR_CMAKE_PLATFORM_UNIX)
 
+if(FEATURE_MERGE_JIT_AND_ENGINE)
+    set(CLRJIT_STATIC clrjit_static)
+endif(FEATURE_MERGE_JIT_AND_ENGINE)
+
 # IMPORTANT! Please do not rearrange the order of the libraries. The linker on Linux is
 # order dependent and changing the order can result in undefined symbols in the shared 
 # library.
@@ -82,7 +86,7 @@ set(CORECLR_LIBRARIES
     mdhotdata_full
     bcltype
     ceefgen
-    clrjit_static
+    ${CLRJIT_STATIC}
     comfloat_wks
     corguids
     gcinfo # Condition="'$(TargetCpu)'=='amd64' or '$(TargetCpu)' == 'arm' or '$(TargetCpu)' == 'arm64'"
index 02fd0185060a75087383baa872aee80236d84630..8552a62f405885bf55c21df526e23cc4a73664a9 100644 (file)
@@ -837,6 +837,7 @@ typedef enum
 {
 #ifdef FEATURE_CORECLR
     CORECLR_INFO,
+    CROSSGEN_COMPILER_INFO,
 #else
     CLR_INFO,
     NGEN_COMPILER_INFO,
index 583bc98a53e209264bb7b23032798330e7b1dbc4..01e58dbbb8ce8fcee2756ee0ccb46a54cf78903f 100644 (file)
@@ -7,7 +7,6 @@ endif(CLR_CMAKE_PLATFORM_ARCH_I386 OR CLR_CMAKE_PLATFORM_ARCH_ARM)
 # Disable the following for UNIX altjit on Windows
 if(CLR_CMAKE_PLATFORM_UNIX)
     add_compile_options(-fPIC)
-    add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
 
     add_library_clr(${JIT_BASE_NAME}_static
       STATIC
index c98dab5d28f9a58430b10794982666d25f481a66..4e70b9ef74856920ec789a2a668650cf434d0255 100644 (file)
@@ -4,6 +4,10 @@ add_definitions(-DSELF_NO_HOST)
 add_definitions(-DFEATURE_READYTORUN_COMPILER)
 remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
 
+if(CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM)
+  add_definitions(-DLEGACY_BACKEND)
+endif()
+
 if(CLR_CMAKE_PLATFORM_LINUX OR CLR_CMAKE_PLATFORM_NETBSD)
     # This is required to force using our own PAL, not one that we are loaded with.
     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -Bsymbolic -Bsymbolic-functions")
index f16c188c3cf46b92a573b0176dd430772c0afdb3..150a35364dbff05702785eba268fb1601e16c7c0 100644 (file)
@@ -24,6 +24,10 @@ add_executable_clr(crossgen
   ${crossgen_RESOURCES}
 )
 
+if(FEATURE_MERGE_JIT_AND_ENGINE)
+    set(CLRJIT_CROSSGEN clrjit_crossgen)
+endif(FEATURE_MERGE_JIT_AND_ENGINE)
+
 target_link_libraries(crossgen
     cee_crossgen
     mdcompiler_crossgen
@@ -31,7 +35,7 @@ target_link_libraries(crossgen
     mdruntimerw_crossgen
     mdhotdata_crossgen
     corguids
-    clrjit_crossgen
+    ${CLRJIT_CROSSGEN}
     gcinfo_crossgen
     corzap_crossgen
     mscorlib_crossgen
index 5704624ee5b5e15c3bf777402addeb5ddf29766a..a7ef1a5142c629797d7586966fb3137caeaca710 100644 (file)
@@ -12,9 +12,6 @@ add_definitions(-DFEATURE_LEAVE_RUNTIME_HOLDER=1)
 add_definitions(-DUNICODE)
 add_definitions(-D_UNICODE)
 
-# Add the Merge flag here is needed
-add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
-
 if(CMAKE_CONFIGURATION_TYPES) # multi-configuration generator?
   foreach (Config DEBUG CHECKED)  
      set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:${Config}>:WRITE_BARRIER_CHECK=1>)
index 2aaeaec0f00c5278bb74c80d34c7df2883021b50..ab5e3403e4ff34c65f020f9d8d95b0cfefee42c5 100644 (file)
@@ -803,8 +803,9 @@ do { \
 #define IfFailGoLog(EXPR) IfFailGotoLog(EXPR, ErrExit)
 #endif
 
+#if defined(FEATURE_MERGE_JIT_AND_ENGINE)
 void            jitOnDllProcessAttach();
-
+#endif // defined(FEATURE_MERGE_JIT_AND_ENGINE)
 
 void EEStartupHelper(COINITIEE fFlags)
 {
@@ -854,15 +855,9 @@ void EEStartupHelper(COINITIEE fFlags)
 #endif // !FEATURE_CORECLR && !CROSSGEN_COMPILE
         }
 
-#ifdef CROSSGEN_COMPILE
-//ARM64TODO: Enable when jit is brought in
- #if defined(_TARGET_ARM64_)
-        //_ASSERTE(!"ARM64:NYI");    
-        
- #else
+#if defined(CROSSGEN_COMPILE) && defined(FEATURE_MERGE_JIT_AND_ENGINE)
         jitOnDllProcessAttach();
- #endif // defined(_TARGET_ARM64_)
-#endif
+#endif // defined(CROSSGEN_COMPILE) && defined(FEATURE_MERGE_JIT_AND_ENGINE)
 
 #ifndef CROSSGEN_COMPILE
         // Initialize Numa and CPU group information
index e625bca06cc57f0d5225233e18a4c86a99f06693..3ec2d911633dcf08a2d76e5da95bbcc09aed5120 100644 (file)
@@ -1388,7 +1388,9 @@ static void LoadAndInitializeJIT(LPCWSTR pwzJitName, OUT HINSTANCE* phJit, OUT I
 
     HRESULT hr = E_FAIL;
 
-#ifdef FEATURE_MERGE_JIT_AND_ENGINE
+#ifdef FEATURE_CORECLR
+    // TODO_DJIT: Currently, we are looking up the JIT from the same location as CoreCLR. We need to get this to come from
+    //            the host so that we get it from the correct servicing location
     PathString CoreClrFolderHolder;
     extern HINSTANCE g_hThisInst;
     if (WszGetModuleFileName(g_hThisInst, CoreClrFolderHolder))
@@ -1557,7 +1559,7 @@ BOOL EEJitManager::LoadJIT()
     // Set as a courtesy to code:CorCompileGetRuntimeDll
     s_ngenCompilerDll = m_JITCompiler;
     
-#if defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE)
+#if defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
     // If COMPlus_UseLegacyJit=1, then we fall back to compatjit.dll.
     //
     // This fallback mechanism was introduced for Visual Studio "14" Preview, when JIT64 (the legacy JIT) was replaced with
@@ -1638,7 +1640,7 @@ BOOL EEJitManager::LoadJIT()
             }
         }
     }
-#endif // defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE)
+#endif // defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
 
 #endif // !FEATURE_MERGE_JIT_AND_ENGINE
 
@@ -4285,15 +4287,17 @@ BOOL ExecutionManager::IsCacheCleanupRequired( void )
 /*********************************************************************/
 // This static method returns the name of the jit dll
 //
-LPWSTR ExecutionManager::GetJitName()
+LPCWSTR ExecutionManager::GetJitName()
 {
     STANDARD_VM_CONTRACT;
 
-    LPWSTR  pwzJitName;
+    LPCWSTR  pwzJitName = NULL;
 
+#if !defined(FEATURE_CORECLR)
     // Try to obtain a name for the jit library from the env. variable
     IfFailThrow(CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_JitName, &pwzJitName));
-
+#endif // !FEATURE_CORECLR
+    
     if (NULL == pwzJitName)
     {
         pwzJitName = MAKEDLLNAME_W(W("clrjit"));
@@ -4301,7 +4305,7 @@ LPWSTR ExecutionManager::GetJitName()
 
     return pwzJitName;
 }
-#endif // FEATURE_MERGE_JIT_AND_ENGINE
+#endif // !FEATURE_MERGE_JIT_AND_ENGINE
 
 #endif // #ifndef DACCESS_COMPILE
 
index dbe990e9ab18039273bf3c5594b016108e666e6c..1ed37e5bb7bbab0d2ef0f4ec0c336bf6d4c82d68 100644 (file)
@@ -1275,7 +1275,7 @@ public:
     static void ClearCaches( void );
     static BOOL IsCacheCleanupRequired();
 
-    static LPWSTR         GetJitName();
+    static LPCWSTR         GetJitName();
 
     static void           Unload(LoaderAllocator *pLoaderAllocator);
 
index 46542482bad4d10e2b522cbff15011e6dd95d3e4..f4575a966d9bee7309e4150e07b6f6c4a2699a8a 100644 (file)
@@ -11306,9 +11306,9 @@ void CEEJitInfo::getEHinfo(
 }
 #endif // CROSSGEN_COMPILE
 
-#ifdef CROSSGEN_COMPILE
+#if defined(CROSSGEN_COMPILE)
 EXTERN_C ICorJitCompiler* __stdcall getJit();
-#endif
+#endif // defined(CROSSGEN_COMPILE)
 
 #ifdef FEATURE_INTERPRETER
 static CorJitResult CompileMethodWithEtwWrapper(EEJitManager *jitMgr,
@@ -11364,16 +11364,16 @@ CorJitResult invokeCompileMethodHelper(EEJitManager *jitMgr,
 
     BEGIN_SO_TOLERANT_CODE(GetThread());
 
-#ifdef CROSSGEN_COMPILE
+#if defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
     ret = getJit()->compileMethod( comp,
                                    info,
                                    flags,
                                    nativeEntry,
                                    nativeSizeOfCode);
 
-#else // CROSSGEN_COMPILE
+#else // defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
 
-#ifdef ALLOW_SXS_JIT
+#if defined(ALLOW_SXS_JIT) && !defined(CROSSGEN_COMPILE)
     if (FAILED(ret) && jitMgr->m_alternateJit
 #ifdef FEATURE_STACK_SAMPLING
         && (!samplingEnabled || (flags2 & CORJIT_FLG2_SAMPLING_JIT_BACKGROUND))
@@ -11403,7 +11403,7 @@ CorJitResult invokeCompileMethodHelper(EEJitManager *jitMgr,
             ret = CORJIT_SKIPPED;
         }
     }
-#endif // ALLOW_SXS_JIT
+#endif // defined(ALLOW_SXS_JIT) && !defined(CROSSGEN_COMPILE)
 
 #ifdef FEATURE_INTERPRETER
     static ConfigDWORD s_InterpreterFallback;
@@ -11450,6 +11450,7 @@ CorJitResult invokeCompileMethodHelper(EEJitManager *jitMgr,
     }
 #endif // FEATURE_INTERPRETER
 
+#if !defined(CROSSGEN_COMPILE)
     // Cleanup any internal data structures allocated 
     // such as IL code after a successfull JIT compile
     // If the JIT fails we keep the IL around and will
@@ -11466,8 +11467,9 @@ CorJitResult invokeCompileMethodHelper(EEJitManager *jitMgr,
         comp->MethodCompileComplete(info->ftn);
 #endif // FEATURE_INTERPRETER
     }
-
-#endif // CROSSGEN_COMPILE
+#endif // !defined(CROSSGEN_COMPILE)
+    
+#endif // defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
 
     END_SO_TOLERANT_CODE;
 
index f6bf408cacf87544c9b74ac14f522e7201f3afba..1537ef9c60612a71b90603289dc6f2be4a0e1b38 100644 (file)
@@ -1748,11 +1748,11 @@ static void RuntimeVerifyLog(DWORD level, LoggableAssembly *pLogAsm, const WCHAR
 static const LPCWSTR CorCompileRuntimeDllNames[NUM_RUNTIME_DLLS] =
 {
 #ifdef FEATURE_CORECLR
-    MAKEDLLNAME_W(W("CORECLR"))
+    MAKEDLLNAME_W(W("coreclr")),
 #else
     MAKEDLLNAME_W(W("CLR")),
-    MAKEDLLNAME_W(W("CLRJIT"))
 #endif
+    MAKEDLLNAME_W(W("clrjit"))
 };
 
 #if !defined(FEATURE_CORECLR) && !defined(CROSSGEN_COMPILE)
@@ -1828,7 +1828,7 @@ extern HMODULE CorCompileGetRuntimeDll(CorCompileRuntimeDlls id)
 
     // Currently special cased for every entry.
 #ifdef FEATURE_CORECLR
-    static_assert_no_msg(NUM_RUNTIME_DLLS == 1);
+    static_assert_no_msg(NUM_RUNTIME_DLLS == 2);
     static_assert_no_msg(CORECLR_INFO == 0);
 #else // !FEATURE_CORECLR
     static_assert_no_msg(NUM_RUNTIME_DLLS == 2);
index 699f1da8f604882e92143f7794345bca6c746aef..27d99c7f908a8c59703ef71e24268294d16eb4be 100644 (file)
@@ -695,7 +695,8 @@ void Zapper::LoadAndInitializeJITForNgen(LPCWSTR pwzJitName, OUT HINSTANCE* phJi
 
     HRESULT hr = E_FAIL;
 
-#ifdef FEATURE_MERGE_JIT_AND_ENGINE
+#ifdef FEATURE_CORECLR
+    // TODO_DJIT: Currently, we are looking up the JIT from the same location as CoreCLR. The path needs to be passed by the caller.
     PathString CoreClrFolder;
     extern HINSTANCE g_hThisInst;
     if (WszGetModuleFileName(g_hThisInst, CoreClrFolder))
@@ -849,10 +850,19 @@ void Zapper::InitEE(BOOL fForceDebug, BOOL fForceProfile, BOOL fForceInstrument)
         ThrowLastError();
     }
 #else
-    LPCWSTR pwzJitName = CorCompileGetRuntimeDllName(NGEN_COMPILER_INFO);
+
+    CorCompileRuntimeDlls ngenDllId;
+
+#if !defined(FEATURE_CORECLR)    
+    ngenDllId = NGEN_COMPILER_INFO;
+#else // FEATURE_CORECLR
+    ngenDllId = CROSSGEN_COMPILER_INFO;
+#endif
+
+    LPCWSTR pwzJitName = CorCompileGetRuntimeDllName(ngenDllId);
     LoadAndInitializeJITForNgen(pwzJitName, &m_hJitLib, &m_pJitCompiler);
     
-#if defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE)
+#if defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
     // For reasons related to servicing, and RyuJIT rollout on .NET 4.6 and beyond, we only use RyuJIT when the registry
     // value UseRyuJIT (type DWORD), under key HKLM\SOFTWARE\Microsoft\.NETFramework, is set to 1. Otherwise, we fall back
     // to JIT64.
@@ -875,7 +885,7 @@ void Zapper::InitEE(BOOL fForceDebug, BOOL fForceProfile, BOOL fForceInstrument)
         // obfuscator tries to directly call the main JIT's getJit() function.
         m_pJitCompiler->setRealJit(fallbackICorJitCompiler);
     }
-#endif // defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE)
+#endif // defined(_TARGET_AMD64_) && !defined(CROSSGEN_COMPILE) && !defined(FEATURE_CORECLR)
 #endif // FEATURE_MERGE_JIT_AND_ENGINE
 
 #ifdef ALLOW_SXS_JIT_NGEN