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