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