build_config.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
3c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt// found in the LICENSE file.
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt// This file adds defines about the platform we're currently building on.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt//  Operating System:
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//    OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX)
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//  Compiler:
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//    COMPILER_MSVC / COMPILER_GCC
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//  Processor:
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//    ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64)
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//    ARCH_CPU_32_BITS / ARCH_CPU_64_BITS
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef BUILD_BUILD_CONFIG_H_
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define BUILD_BUILD_CONFIG_H_
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(__APPLE__)
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <TargetConditionals.h>
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// A set of macros to use for platform detection.
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(ANDROID)
23b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define OS_ANDROID 1
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__APPLE__)
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define OS_MACOSX 1
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define OS_IOS 1
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif  // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__native_client__)
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define OS_NACL 1
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__linux__)
32391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#define OS_LINUX 1
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use TOOLKIT_GTK on linux if TOOLKIT_VIEWS isn't defined.
34ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#if !defined(TOOLKIT_VIEWS) && defined(USE_X11)
35ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#define TOOLKIT_GTK
36ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#endif
37ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#elif defined(_WIN32)
38ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#define OS_WIN 1
39ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt#define TOOLKIT_VIEWS 1
4068d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#elif defined(__FreeBSD__)
4168d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#define OS_FREEBSD 1
4268d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#define TOOLKIT_GTK
4368d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#elif defined(__OpenBSD__)
4468d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#define OS_OPENBSD 1
45e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#define TOOLKIT_GTK
46e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#elif defined(__sun)
47e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#define OS_SOLARIS 1
48e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#define TOOLKIT_GTK
49e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#else
50e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#error Please add support for your platform in build/build_config.h
51e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt#endif
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(USE_OPENSSL) && defined(USE_NSS)
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#error Cannot use both OpenSSL and NSS
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// For access to standard BSD features, use OS_BSD instead of a
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// more specific macro.
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(OS_FREEBSD) || defined(OS_OPENBSD)
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define OS_BSD 1
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// For access to standard POSIXish features, use OS_POSIX instead of a
64d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt// more specific macro.
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) ||     \
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) ||  \
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    defined(OS_NACL)
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define OS_POSIX 1
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use tcmalloc
7268d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(NO_TCMALLOC)
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define USE_TCMALLOC 1
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
75b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt
76b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt// Compiler detection.
77b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#if defined(__GNUC__)
78b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define COMPILER_GCC 1
79b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#elif defined(_MSC_VER)
80b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#define COMPILER_MSVC 1
81b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#else
82b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#error Please add support for your compiler in build/build_config.h
83b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt#endif
84b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt
85b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt// Processor architecture detection.  For more info on what's defined, see:
86391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt//   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
87391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt//   http://www.agner.org/optimize/calling_conventions.pdf
88391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt//   or with gcc, run: "echo | gcc -E -dM -"
89391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#if defined(_M_X64) || defined(__x86_64__)
90391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#define ARCH_CPU_X86_FAMILY 1
91391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#define ARCH_CPU_X86_64 1
92391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#define ARCH_CPU_64_BITS 1
93391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#define ARCH_CPU_LITTLE_ENDIAN 1
94391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt#elif defined(_M_IX86) || defined(__i386__)
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_X86_FAMILY 1
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_X86 1
971f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#define ARCH_CPU_32_BITS 1
98c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt#define ARCH_CPU_LITTLE_ENDIAN 1
991f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#elif defined(__ARMEL__)
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_ARM_FAMILY 1
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_ARMEL 1
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_32_BITS 1
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_LITTLE_ENDIAN 1
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__pnacl__)
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_32_BITS 1
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__MIPSEL__)
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_MIPS_FAMILY 1
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_MIPSEL 1
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_32_BITS 1
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define ARCH_CPU_LITTLE_ENDIAN 1
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#error Please add support for your architecture in build/build_config.h
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Type detection for wchar_t.
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(OS_WIN)
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WCHAR_T_IS_UTF16
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    defined(__WCHAR_MAX__) && \
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WCHAR_T_IS_UTF32
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    defined(__WCHAR_MAX__) && \
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff)
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// On Posix, we'll detect short wchar_t, but projects aren't guaranteed to
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// compile in this mode (in particular, Chrome doesn't). This is intended for
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// other projects using base who manage their own dependencies and make sure
1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// short wchar works for them.
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WCHAR_T_IS_UTF16
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else
1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#error Please add support for your compiler in build/build_config.h
1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(__ARMEL__) && !defined(OS_IOS)
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WCHAR_T_IS_UNSIGNED 1
1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#elif defined(__MIPSEL__)
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WCHAR_T_IS_UNSIGNED 0
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#if defined(OS_ANDROID)
1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// The compiler thinks std::string::const_iterator and "const char*" are
1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// equivalent types.
1431f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#define STD_STRING_ITERATOR_IS_CHAR_POINTER
14404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt// The compiler thinks base::string16::const_iterator and "char16*" are
14504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt// equivalent types.
14604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER
14704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif
14804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
14904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif  // BUILD_BUILD_CONFIG_H_
15004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt