15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Precompiled header for Chromium project on Windows, not used by
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other build configurations. Using precompiled headers speeds the
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// build up significantly, around 1/4th on VS 2010 on an HP Z600 with 12
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GB of memory.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Numeric comments beside includes are the number of times they were
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// included under src/chrome/browser on 2011/8/20, which was used as a
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// baseline for deciding what to include in the PCH. Includes without
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a numeric comment are generally included at least 5 times. It may
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be possible to tweak the speed of the build by commenting out or
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// removing some of the less frequently used headers.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(BUILD_PRECOMPILE_H_)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error You shouldn't include the precompiled header file more than once.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BUILD_PRECOMPILE_H_
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define _USE_MATH_DEFINES
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Windows header needs to come before almost all the other
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows-specific headers.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Windows.h>
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <dwmapi.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <shellapi.h>
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <wincrypt.h>  // 4
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <wtypes.h>  // 2
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines in atlbase.h cause conflicts; if we could figure out how
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this family of headers can be included in the PCH, it might speed
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// up the build as several of them are used frequently.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlbase.h>
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlapp.h>
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlcom.h>
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlcrack.h>  // 2
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlctrls.h>  // 2
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlmisc.h>  // 2
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlsafe.h>  // 1
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atltheme.h>  // 1
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlwin.h>  // 2
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Objbase.h and other files that rely on it bring in [ #define
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface struct ] which can cause problems in a multi-platform
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// build like Chrome's. #undef-ing it does not work as there are
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// currently 118 targets that break if we do this, so leaving out of
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the precompiled header for now.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <commctrl.h>  // 2
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <commdlg.h>  // 3
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <cryptuiapi.h>  // 2
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <Objbase.h>  // 2
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <objidl.h>  // 1
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <ole2.h>  // 1
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <oleacc.h>  // 2
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <oleauto.h>  // 1
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <oleidl.h>  // 1
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <propkey.h>  // 2
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <propvarutil.h>  // 2
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <pstore.h>  // 2
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <shlguid.h>  // 1
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <shlwapi.h>  // 1
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <shobjidl.h>  // 4
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//#include <urlhist.h>  // 2
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Caused other conflicts in addition to the 'interface' issue above.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// #include <shlobj.h>
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <errno.h>
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h>
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits.h>  // 4
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <math.h>
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <memory.h>  // 1
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <signal.h>
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdarg.h>  // 1
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h>
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <time.h>  // 4
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm>
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <bitset>  // 3
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cmath>
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstddef>
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstdio>  // 3
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstdlib>  // 2
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstring>
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque>
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fstream>  // 3
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <functional>
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iomanip>  // 2
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iosfwd>  // 2
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iterator>
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits>
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list>
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <numeric>  // 2
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <ostream>
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <queue>
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sstream>
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stack>
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility>
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
111