1c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// found in the LICENSE file.
4c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
5c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// This file adds defines about the platform we're currently building on.
6c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//  Operating System:
7c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//    OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX)
8c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//  Compiler:
9c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//    COMPILER_MSVC / COMPILER_GCC
10c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//  Processor:
11c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//    ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64)
12c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//    ARCH_CPU_32_BITS / ARCH_CPU_64_BITS
13c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
14c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#ifndef BUILD_BUILD_CONFIG_H_
15c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define BUILD_BUILD_CONFIG_H_
16c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
17c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// A set of macros to use for platform detection.
18c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(__APPLE__)
19c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_MACOSX 1
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#elif defined(__native_client__)
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define OS_NACL 1
22c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(__linux__)
23c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_LINUX 1
24c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Use TOOLKIT_GTK on linux if TOOLKIT_VIEWS isn't defined.
25c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if !defined(TOOLKIT_VIEWS)
26c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define TOOLKIT_GTK
27c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
28c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(_WIN32)
29c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_WIN 1
30c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define TOOLKIT_VIEWS 1
31c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(__FreeBSD__)
32c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_FREEBSD 1
33c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define TOOLKIT_GTK
34c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(__OpenBSD__)
35c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_OPENBSD 1
36c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define TOOLKIT_GTK
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(__sun)
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define OS_SOLARIS 1
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define TOOLKIT_GTK
40c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#else
41c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#error Please add support for your platform in build/build_config.h
42c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
43c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
44c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// A flag derived from the above flags, used to cover GTK code in
45c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// both TOOLKIT_GTK and TOOLKIT_VIEWS.
46c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(TOOLKIT_GTK) || (defined(TOOLKIT_VIEWS) && !defined(OS_WIN))
47c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define TOOLKIT_USES_GTK 1
48c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
49c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_OPENBSD) || \
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    defined(OS_SOLARIS)
52d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch
53d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch#if defined(ANDROID)
54d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch#define USE_OPENSSL 1
55d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch#define USE_SYSTEM_ZLIB 1
566b92e04f5f151c896e3088e86f70db7081009308Kristian Monsen#define USE_SYSTEM_SQLITE 1
57a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck#define OS_ANDROID 1
58d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch#endif
59d5335d37310036a1236ba3f4195afbdc55a85b5aBen Murdoch
60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if !defined(USE_OPENSSL)
61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define USE_NSS 1  // Default to use NSS for crypto, unless OpenSSL is chosen.
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
632c74e8a2e6fcffbe5726675cfa5b90ea003880c6Kristian Monsen#if !defined(ANDROID)
64c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define USE_X11 1  // Use X for graphics.
652c74e8a2e6fcffbe5726675cfa5b90ea003880c6Kristian Monsen#else
662c74e8a2e6fcffbe5726675cfa5b90ea003880c6Kristian Monsen#undef USE_X11
672c74e8a2e6fcffbe5726675cfa5b90ea003880c6Kristian Monsen#endif
68c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
69c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(USE_OPENSSL) && defined(USE_NSS)
71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#error Cannot use both OpenSSL and NSS
722f7cea8af61f1126d50e0749f4ced7844b14f5b4Kristian Monsen#endif
732f7cea8af61f1126d50e0749f4ced7844b14f5b4Kristian Monsen
74c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// For access to standard POSIXish features, use OS_POSIX instead of a
75c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// more specific macro.
76c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \
7762178e3990b32e9c89bb7d6f06605044b31adba2Ben Murdoch    defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_NACL) || \
7862178e3990b32e9c89bb7d6f06605044b31adba2Ben Murdoch    defined(ANDROID)
79c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define OS_POSIX 1
80c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Use base::DataPack for name/value pairs.
81c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define USE_BASE_DATA_PACK 1
82c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
83c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
84c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Use tcmalloc
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(NO_TCMALLOC)
86c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define USE_TCMALLOC 1
87c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
88c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use heapchecker.
90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OS_LINUX) && !defined(NO_HEAPCHECKER)
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define USE_HEAPCHECKER 1
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Compiler detection.
95c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(__GNUC__)
96c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define COMPILER_GCC 1
97c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(_MSC_VER)
98c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define COMPILER_MSVC 1
99c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#else
100c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#error Please add support for your compiler in build/build_config.h
101c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
102c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
103c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Processor architecture detection.  For more info on what's defined, see:
104c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
105c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//   http://www.agner.org/optimize/calling_conventions.pdf
106c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott//   or with gcc, run: "echo | gcc -E -dM -"
107c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(_M_X64) || defined(__x86_64__)
108c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_X86_FAMILY 1
109c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_X86_64 1
110c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_64_BITS 1
111c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(_M_IX86) || defined(__i386__)
112c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_X86_FAMILY 1
113c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_X86 1
114c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_32_BITS 1
115c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(__ARMEL__)
116c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_ARM_FAMILY 1
117c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_ARMEL 1
118c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define ARCH_CPU_32_BITS 1
119c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define WCHAR_T_IS_UNSIGNED 1
1207dd039766e8bea164f5e14cb9ab26c59d3b9a5bdPaul Lind#elif defined(__MIPSEL__)
1217dd039766e8bea164f5e14cb9ab26c59d3b9a5bdPaul Lind#define ARCH_CPU_MIPS_FAMILY 1
1227dd039766e8bea164f5e14cb9ab26c59d3b9a5bdPaul Lind#define ARCH_CPU_MIPSEL 1
1237dd039766e8bea164f5e14cb9ab26c59d3b9a5bdPaul Lind#define ARCH_CPU_32_BITS 1
1247dd039766e8bea164f5e14cb9ab26c59d3b9a5bdPaul Lind#define WCHAR_T_IS_UNSIGNED 0
125c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#else
126c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#error Please add support for your architecture in build/build_config.h
127c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
128c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
129c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// Type detection for wchar_t.
130c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#if defined(OS_WIN)
131c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define WCHAR_T_IS_UTF16
132c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \
133c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott    defined(__WCHAR_MAX__) && \
134c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott    (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
135c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define WCHAR_T_IS_UTF32
136c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \
137c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott    defined(__WCHAR_MAX__) && \
138c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott    (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff)
139c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// On Posix, we'll detect short wchar_t, but projects aren't guaranteed to
140c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// compile in this mode (in particular, Chrome doesn't). This is intended for
141c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// other projects using base who manage their own dependencies and make sure
142c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott// short wchar works for them.
143c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#define WCHAR_T_IS_UTF16
144c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#else
145c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#error Please add support for your compiler in build/build_config.h
146c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif
147c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott
148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#if defined(OS_CHROMEOS)
149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Single define to trigger whether CrOS fonts have BCI on.
150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// In that case font sizes/deltas should be adjusted.
151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch//define CROS_FONTS_USING_BCI
152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif
153201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
154a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck#if defined(OS_ANDROID)
155a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck// The compiler thinks std::string::const_iterator and "const char*" are
156a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck// equivalent types.
157a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck#define STD_STRING_ITERATOR_IS_CHAR_POINTER
158a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck// The compiler thinks base::string16::const_iterator and "char16*" are
159a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck// equivalent types.
160a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER
161a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck#endif
162a7dee89fba4aaa5f0be152cfc7c7b9b5cff98d51John Reck
163c397f4b9d798bed94d7c234c177b4a8cf3f87f71Patrick Scott#endif  // BUILD_BUILD_CONFIG_H_
164