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)// This file adds defines about the platform we're currently building on. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Operating System: 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compiler: 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// COMPILER_MSVC / COMPILER_GCC 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Processor: 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ARCH_CPU_32_BITS / ARCH_CPU_64_BITS 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BUILD_BUILD_CONFIG_H_ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BUILD_BUILD_CONFIG_H_ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__APPLE__) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <TargetConditionals.h> 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A set of macros to use for platform detection. 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ANDROID) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define OS_ANDROID 1 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#elif defined(__APPLE__) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_MACOSX 1 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_IOS 1 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__native_client__) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_NACL 1 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__linux__) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_LINUX 1 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use TOOLKIT_GTK on linux if TOOLKIT_VIEWS isn't defined. 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if !defined(TOOLKIT_VIEWS) && defined(USE_X11) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOOLKIT_GTK 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(__GLIBC__) && !defined(__UCLIBC__) 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// we really are using glibc, not uClibc pretending to be glibc 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define LIBC_GLIBC 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(_WIN32) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_WIN 1 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOOLKIT_VIEWS 1 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__FreeBSD__) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_FREEBSD 1 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOOLKIT_GTK 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__OpenBSD__) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_OPENBSD 1 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOOLKIT_GTK 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__sun) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_SOLARIS 1 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOOLKIT_GTK 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error Please add support for your platform in build/build_config.h 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_OPENSSL) && defined(USE_NSS) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error Cannot use both OpenSSL and NSS 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For access to standard BSD features, use OS_BSD instead of a 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// more specific macro. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_FREEBSD) || defined(OS_OPENBSD) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_BSD 1 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For access to standard POSIXish features, use OS_POSIX instead of a 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// more specific macro. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) || \ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defined(OS_NACL) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OS_POSIX 1 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use tcmalloc 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)) && \ 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) !defined(NO_TCMALLOC) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define USE_TCMALLOC 1 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compiler detection. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GNUC__) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define COMPILER_GCC 1 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(_MSC_VER) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define COMPILER_MSVC 1 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error Please add support for your compiler in build/build_config.h 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Processor architecture detection. For more info on what's defined, see: 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://msdn.microsoft.com/en-us/library/b0084kay.aspx 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://www.agner.org/optimize/calling_conventions.pdf 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// or with gcc, run: "echo | gcc -E -dM -" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_M_X64) || defined(__x86_64__) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_X86_FAMILY 1 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_X86_64 1 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_64_BITS 1 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_LITTLE_ENDIAN 1 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(_M_IX86) || defined(__i386__) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_X86_FAMILY 1 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_X86 1 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_32_BITS 1 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_LITTLE_ENDIAN 1 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__ARMEL__) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_ARM_FAMILY 1 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_ARMEL 1 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_32_BITS 1 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_LITTLE_ENDIAN 1 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__pnacl__) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_32_BITS 1 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__MIPSEL__) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_MIPS_FAMILY 1 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_MIPSEL 1 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_32_BITS 1 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ARCH_CPU_LITTLE_ENDIAN 1 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error Please add support for your architecture in build/build_config.h 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Type detection for wchar_t. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WCHAR_T_IS_UTF16 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \ 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defined(__WCHAR_MAX__) && \ 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WCHAR_T_IS_UTF32 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) && defined(COMPILER_GCC) && \ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defined(__WCHAR_MAX__) && \ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (__WCHAR_MAX__ == 0x7fff || __WCHAR_MAX__ == 0xffff) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Posix, we'll detect short wchar_t, but projects aren't guaranteed to 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// compile in this mode (in particular, Chrome doesn't). This is intended for 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other projects using base who manage their own dependencies and make sure 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// short wchar works for them. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WCHAR_T_IS_UTF16 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error Please add support for your compiler in build/build_config.h 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__ARMEL__) && !defined(OS_IOS) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WCHAR_T_IS_UNSIGNED 1 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(__MIPSEL__) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WCHAR_T_IS_UNSIGNED 0 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The compiler thinks std::string::const_iterator and "const char*" are 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// equivalent types. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define STD_STRING_ITERATOR_IS_CHAR_POINTER 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The compiler thinks base::string16::const_iterator and "char16*" are 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// equivalent types. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BUILD_BUILD_CONFIG_H_ 155