1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Precompiled header for Chromium project on Windows, not used by
6// other build configurations. Using precompiled headers speeds the
7// build up significantly, around 1/4th on VS 2010 on an HP Z600 with 12
8// GB of memory.
9//
10// Numeric comments beside includes are the number of times they were
11// included under src/chrome/browser on 2011/8/20, which was used as a
12// baseline for deciding what to include in the PCH. Includes without
13// a numeric comment are generally included at least 5 times. It may
14// be possible to tweak the speed of the build by commenting out or
15// removing some of the less frequently used headers.
16
17#if defined(BUILD_PRECOMPILE_H_)
18#error You shouldn't include the precompiled header file more than once.
19#endif
20
21#define BUILD_PRECOMPILE_H_
22
23#define _USE_MATH_DEFINES
24
25// The Windows header needs to come before almost all the other
26// Windows-specific headers.
27#include <Windows.h>
28#include <dwmapi.h>
29#include <shellapi.h>
30#include <wincrypt.h>  // 4
31#include <wtypes.h>  // 2
32
33// Defines in atlbase.h cause conflicts; if we could figure out how
34// this family of headers can be included in the PCH, it might speed
35// up the build as several of them are used frequently.
36/*
37#include <atlbase.h>
38#include <atlapp.h>
39#include <atlcom.h>
40#include <atlcrack.h>  // 2
41#include <atlctrls.h>  // 2
42#include <atlmisc.h>  // 2
43#include <atlsafe.h>  // 1
44#include <atltheme.h>  // 1
45#include <atlwin.h>  // 2
46*/
47
48// Objbase.h and other files that rely on it bring in [ #define
49// interface struct ] which can cause problems in a multi-platform
50// build like Chrome's. #undef-ing it does not work as there are
51// currently 118 targets that break if we do this, so leaving out of
52// the precompiled header for now.
53//#include <commctrl.h>  // 2
54//#include <commdlg.h>  // 3
55//#include <cryptuiapi.h>  // 2
56//#include <Objbase.h>  // 2
57//#include <objidl.h>  // 1
58//#include <ole2.h>  // 1
59//#include <oleacc.h>  // 2
60//#include <oleauto.h>  // 1
61//#include <oleidl.h>  // 1
62//#include <propkey.h>  // 2
63//#include <propvarutil.h>  // 2
64//#include <pstore.h>  // 2
65//#include <shlguid.h>  // 1
66//#include <shlwapi.h>  // 1
67//#include <shobjidl.h>  // 4
68//#include <urlhist.h>  // 2
69
70// Caused other conflicts in addition to the 'interface' issue above.
71// #include <shlobj.h>
72
73#include <errno.h>
74#include <fcntl.h>
75#include <limits.h>  // 4
76#include <math.h>
77#include <memory.h>  // 1
78#include <signal.h>
79#include <stdarg.h>  // 1
80#include <stddef.h>
81#include <stdio.h>
82#include <stdlib.h>
83#include <string.h>
84#include <time.h>  // 4
85
86#include <algorithm>
87#include <bitset>  // 3
88#include <cmath>
89#include <cstddef>
90#include <cstdio>  // 3
91#include <cstdlib>  // 2
92#include <cstring>
93#include <deque>
94#include <fstream>  // 3
95#include <functional>
96#include <iomanip>  // 2
97#include <iosfwd>  // 2
98#include <iterator>
99#include <limits>
100#include <list>
101#include <map>
102#include <numeric>  // 2
103#include <ostream>
104#include <queue>
105#include <set>
106#include <sstream>
107#include <stack>
108#include <string>
109#include <utility>
110#include <vector>
111