diff options
Diffstat (limited to 'src/inc/ngen.h')
-rw-r--r-- | src/inc/ngen.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/inc/ngen.h b/src/inc/ngen.h new file mode 100644 index 0000000000..fa0b9829d4 --- /dev/null +++ b/src/inc/ngen.h @@ -0,0 +1,153 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// +// This file is the interface to NGen (*N*ative code *G*eneration), +// which compiles IL modules to machine code ahead-of-time. +// This avoids the need for JIT compiling the code at program startup. +// + + +#ifndef _NGEN_H_ +#define _NGEN_H_ + +#include "mscorsvc.h" + +// Log size default of 10 MB. +#define DEFAULT_SERVICE_LOG_SIZE (10 * 1024 * 1024) +// NGEN.log is smaller 1MB +#define DEFAULT_MACHINE_WIDE_LOG_SIZE (1 * 1024 * 1024) +// User specific log is yet smaller 200KB +#define DEFAULT_USER_WIDE_LOG_SIZE (200 * 1024) +// Log size default of 100 KB. This should be big enough to hold some log info from roughly 100 +// ngen events. (Roughly 200KB of space including secondary log file.) +#define DEFAULT_APPLOCAL_WIDE_LOG_SIZE (100*1024) + +#define NGEN_LOG_HEADER_TEXT W("To learn about increasing the verbosity of the NGen log files please see http://go.microsoft.com/fwlink/?linkid=210113\r\n") + +// supported debug info types +enum DebugType +{ + DT_NIL, + DT_PDB +}; + +// +// IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT +// +// This structure cannot have any fields removed from it!!! +// +// IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT * IMPORTANT +// +// NGening a module invokes the runtime against which the module was built. +// Thus this structure needs to be backwards-compatible. +// +// If additional options need to be added to this structure, +// add them to the end of the structure and make sure you update +// logic throughout the runtime to look at a different size in the dwSize +// field. This is how we'll 'version' this structure. +// +// If you are adding a code-generation flag (like debug or prof), use +// fInstrument as a template (but be sure to add your new flag as the +// last element in the struct). + +typedef struct _NGenOptions +{ + DWORD dwSize; // Size of the structure. Used to version the structure + + // V1 + + bool fDebug; // Generate debuggable code and debug information + bool fDebugOpt; // Generate debugging information, but optimized code + bool fProf; // Generate instrumented code for profiling (call graphs) + + bool fSilent; // Dont spew text output + LPCWSTR lpszExecutableFileName; // Name of the module to ngen + + // V2 (Whidbey) + + bool fInstrument; // Generate instrumented code for basic-block profiling + + // No longer supported + bool fWholeProgram; // Do cross function optimizations (whole program) + + // No longer supported + bool fProfInfo; // Embed working set profiling data into the image + + LPCWSTR lpszRepositoryDir; // Directory for repository of native images + RepositoryFlags repositoryFlags; + + // No longer supported + DebugType dtRequested; // the requested debug type + LPCWSTR lpszDebugDir; // the name of the output debug dir for the above + + // No longer supported + bool fNoInstall; // Creates stand alone ngen-images that can be installed in the NIC later + + // No longer supported + bool fEmitFixups; // Support for Vulcan + bool fFatHeaders; + + // Diagnostic flags + bool fVerbose; // print verbose descriptions of native images + unsigned uStats; // image stats mask + +#define LAST_WHIDBEY_NGENOPTION uStats + + // V4 + bool fNgenLastRetry; // Ngen has previously failed and this is the last retry + + // V4.5 + bool fAutoNGen; // This is an automatically generated NGen request + + // Blue + bool fRepositoryOnly;// Install from repository only, no real NGen + +} NGenOptions; + +// Function pointer types that we use to dynamically bind to the appropriate runtime version +extern "C" typedef HRESULT STDAPICALLTYPE + NGenCreateZapperAPI( + HANDLE* hZapper, + NGenOptions *options); +typedef NGenCreateZapperAPI *PNGenCreateZapper; + +extern "C" typedef HRESULT STDAPICALLTYPE + NGenTryEnumerateFusionCacheAPI( + HANDLE hZapper, + LPCWSTR assemblyName, + bool fPrint, + bool fDelete); +typedef NGenTryEnumerateFusionCacheAPI *PNGenTryEnumerateFusionCache; + +// The return type should really be HRESULT. +// However, it is BOOL for backwards-compatibility +extern "C" typedef BOOL STDAPICALLTYPE + NGenCompileAPI( + HANDLE hZapper, + LPCWSTR path); +typedef NGenCompileAPI *PNGenCompile; + +extern "C" typedef HRESULT STDAPICALLTYPE + NGenFreeZapperAPI( + HANDLE hZapper); +typedef NGenFreeZapperAPI *PNGenFreeZapper; + +class ILocalServerLifetime +{ +public: + virtual void AddRefServerProcess() = 0; + virtual void ReleaseServerProcess() = 0; +}; + +struct ICorSvcLogger; + +extern "C" typedef HRESULT STDAPICALLTYPE + NGenCreateNGenWorkerAPI( + ICorSvcWorker **pCorSvcWorker, + ILocalServerLifetime *pLocalServerLifetime, + ICorSvcLogger *pCorSvcLogger + ); +typedef NGenCreateNGenWorkerAPI *PNGenCreateNGenWorker; + +#endif |