1//
2// Copyright (c) Microsoft. All rights reserved.
3// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4//
5
6// The point of a PCH file is to never reparse files that never change.
7// Only include files here that will almost NEVER change. Headers for the project
8// itself are probably inappropriate, because if you change them, the entire
9// project will require a recompile. Generally just put SDK style stuff here...
10
11#ifndef WIN32_LEAN_AND_MEAN
12#define WIN32_LEAN_AND_MEAN
13#endif // WIN32_LEAN_AND_MEAN
14#include <windows.h>
15
16#ifdef INTERNAL_BUILD
17// There are a few features that reference Microsoft internal resources. We can't build these
18// in the open source version.
19#define USE_MSVCDIS
20
21// Disable CoreDisTools until coredistools.dll is statically-linked to the CRT, or until it is delayload linked.
22//#define USE_COREDISTOOLS
23#endif // INTERNAL_BUILD
24
25#ifdef _MSC_VER
26#pragma warning(disable : 4996) // The compiler encountered a deprecated declaration.
27
28// On Windows, we build against PAL macros that convert to Windows SEH. But we don't want all the
29// Contract stuff that normally gets pulled it. Defining JIT_BUILD prevents this, just as it does
30// when building the JIT using parts of utilcode.
31#define JIT_BUILD
32
33// Defining this prevents:
34// error C2338 : / RTCc rejects conformant code, so it isn't supported by the C++ Standard Library.
35// Either remove this compiler option, or define _ALLOW_RTCc_IN_STL to acknowledge that you have received this
36// warning.
37#ifndef _ALLOW_RTCc_IN_STL
38#define _ALLOW_RTCc_IN_STL
39#endif
40
41#define MSC_ONLY(x) x
42#else // !_MSC_VER
43#define MSC_ONLY(x)
44#endif // !_MSC_VER
45
46#ifndef _CRT_SECURE_NO_WARNINGS
47#define _CRT_SECURE_NO_WARNINGS
48#endif // _CRT_SECURE_NO_WARNINGS
49
50#define _CRT_RAND_S
51
52#include <stdio.h>
53#include <string.h>
54#include <stdlib.h>
55#include <stddef.h>
56#include <malloc.h>
57#include <assert.h>
58#include <wchar.h>
59#include <tchar.h>
60#include <specstrings.h>
61#include <math.h>
62#include <limits.h>
63#include <ctype.h>
64#include <stdarg.h>
65
66// Getting STL to work with PAL is difficult, so reimplement STL functionality to not require it.
67#ifdef FEATURE_PAL
68#include "clr_std/string"
69#include "clr_std/algorithm"
70#else // !FEATURE_PAL
71#ifndef USE_STL
72#define USE_STL
73#endif // USE_STL
74#include <string>
75#include <algorithm>
76#endif // !FEATURE_PAL
77
78#ifdef USE_MSVCDIS
79#define DISLIB
80#include "..\external\msvcdis\inc\msvcdis.h"
81#include "..\external\msvcdis\inc\disx86.h"
82#include "..\external\msvcdis\inc\disarm64.h"
83#endif // USE_MSVCDIS
84
85#ifndef DIRECTORY_SEPARATOR_CHAR_A
86#define DIRECTORY_SEPARATOR_CHAR_A '\\'
87#endif
88#ifndef DIRECTORY_SEPARATOR_STR_A
89#define DIRECTORY_SEPARATOR_STR_A "\\"
90#endif
91
92#ifndef W
93#ifdef PLATFORM_UNIX
94#define W(str) u##str
95#else // PLATFORM_UNIX
96#define W(str) L##str
97#endif // PLATFORM_UNIX
98#endif // !W
99
100#ifndef DIRECTORY_SEPARATOR_STR_W
101#define DIRECTORY_SEPARATOR_STR_W W("\\")
102#endif
103
104#ifdef FEATURE_PAL
105#define PLATFORM_SHARED_LIB_SUFFIX_A PAL_SHLIB_SUFFIX
106#else // !FEATURE_PAL
107#define PLATFORM_SHARED_LIB_SUFFIX_A ".dll"
108#endif // !FEATURE_PAL
109
110#define DEFAULT_REAL_JIT_NAME_A MAKEDLLNAME_A("clrjit2")
111#define DEFAULT_REAL_JIT_NAME_W MAKEDLLNAME_W("clrjit2")
112