1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// This file adds defines about the platform we're currently building on. 6// Operating System: 7// OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX) / 8// OS_NACL (NACL_SFI or NACL_NONSFI) / OS_NACL_SFI / OS_NACL_NONSFI 9// Compiler: 10// COMPILER_MSVC / COMPILER_GCC 11// Processor: 12// ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64) 13// ARCH_CPU_32_BITS / ARCH_CPU_64_BITS 14 15#ifndef BASE_BUILD_BUILD_CONFIG_H_ 16#define BASE_BUILD_BUILD_CONFIG_H_ 17 18// Add Brillo-specific defines. 19#if defined(__BRILLO__) 20#define __linux__ 1 21#define NO_TCMALLOC 22// Unset ANDROID, which is just used for building Chrome on Android. 23#undef ANDROID 24 25#if defined(__BIONIC__) 26#define __UCLIBC__ 1 27#define OS_CHROMEOS 1 28#endif // __BIONIC__ 29 30#endif 31 32// A set of macros to use for platform detection. 33#if defined(__native_client__) 34// __native_client__ must be first, so that other OS_ defines are not set. 35#define OS_NACL 1 36// OS_NACL comes in two sandboxing technology flavors, SFI or Non-SFI. 37// PNaCl toolchain defines __native_client_nonsfi__ macro in Non-SFI build 38// mode, while it does not in SFI build mode. 39#if defined(__native_client_nonsfi__) 40#define OS_NACL_NONSFI 41#else 42#define OS_NACL_SFI 43#endif 44#elif defined(ANDROID) 45#define OS_ANDROID 1 46#elif defined(__APPLE__) 47// only include TargetConditions after testing ANDROID as some android builds 48// on mac don't have this header available and it's not needed unless the target 49// is really mac/ios. 50#include <TargetConditionals.h> 51#define OS_MACOSX 1 52#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE 53#define OS_IOS 1 54#endif // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE 55#elif defined(__linux__) 56#define OS_LINUX 1 57// include a system header to pull in features.h for glibc/uclibc macros. 58#include <unistd.h> 59#if defined(__GLIBC__) && !defined(__UCLIBC__) 60// we really are using glibc, not uClibc pretending to be glibc 61#define LIBC_GLIBC 1 62#endif 63#elif defined(_WIN32) 64#define OS_WIN 1 65#define TOOLKIT_VIEWS 1 66#elif defined(__FreeBSD__) 67#define OS_FREEBSD 1 68#elif defined(__OpenBSD__) 69#define OS_OPENBSD 1 70#elif defined(__sun) 71#define OS_SOLARIS 1 72#elif defined(__QNXNTO__) 73#define OS_QNX 1 74#else 75#error Please add support for your platform in build/build_config.h 76#endif 77 78#if defined(USE_OPENSSL) && defined(USE_NSS) 79#error Cannot use both OpenSSL and NSS 80#endif 81 82// For access to standard BSD features, use OS_BSD instead of a 83// more specific macro. 84#if defined(OS_FREEBSD) || defined(OS_OPENBSD) 85#define OS_BSD 1 86#endif 87 88// For access to standard POSIXish features, use OS_POSIX instead of a 89// more specific macro. 90#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \ 91 defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) || \ 92 defined(OS_NACL) || defined(OS_QNX) 93#define OS_POSIX 1 94#endif 95 96// Use tcmalloc 97#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)) && \ 98 !defined(NO_TCMALLOC) 99#define USE_TCMALLOC 1 100#endif 101 102// Compiler detection. 103#if defined(__GNUC__) 104#define COMPILER_GCC 1 105#elif defined(_MSC_VER) 106#define COMPILER_MSVC 1 107#else 108#error Please add support for your compiler in build/build_config.h 109#endif 110 111// Processor architecture detection. For more info on what's defined, see: 112// http://msdn.microsoft.com/en-us/library/b0084kay.aspx 113// http://www.agner.org/optimize/calling_conventions.pdf 114// or with gcc, run: "echo | gcc -E -dM -" 115#if defined(_M_X64) || defined(__x86_64__) 116#define ARCH_CPU_X86_FAMILY 1 117#define ARCH_CPU_X86_64 1 118#define ARCH_CPU_64_BITS 1 119#define ARCH_CPU_LITTLE_ENDIAN 1 120#elif defined(_M_IX86) || defined(__i386__) 121#define ARCH_CPU_X86_FAMILY 1 122#define ARCH_CPU_X86 1 123#define ARCH_CPU_32_BITS 1 124#define ARCH_CPU_LITTLE_ENDIAN 1 125#elif defined(__ARMEL__) 126#define ARCH_CPU_ARM_FAMILY 1 127#define ARCH_CPU_ARMEL 1 128#define ARCH_CPU_32_BITS 1 129#define ARCH_CPU_LITTLE_ENDIAN 1 130#elif defined(__aarch64__) 131#define ARCH_CPU_ARM_FAMILY 1 132#define ARCH_CPU_ARM64 1 133#define ARCH_CPU_64_BITS 1 134#define ARCH_CPU_LITTLE_ENDIAN 1 135#elif defined(__pnacl__) 136#define ARCH_CPU_32_BITS 1 137#define ARCH_CPU_LITTLE_ENDIAN 1 138#elif defined(__MIPSEL__) 139#if defined(__LP64__) 140#define ARCH_CPU_MIPS64_FAMILY 1 141#define ARCH_CPU_MIPS64EL 1 142#define ARCH_CPU_64_BITS 1 143#define ARCH_CPU_LITTLE_ENDIAN 1 144#else 145#define ARCH_CPU_MIPS_FAMILY 1 146#define ARCH_CPU_MIPSEL 1 147#define ARCH_CPU_32_BITS 1 148#define ARCH_CPU_LITTLE_ENDIAN 1 149#endif 150#elif defined(__mips__) 151#if defined(__LP64__) 152#define ARCH_CPU_MIPS64_FAMILY 1 153#define ARCH_CPU_64_BITS 1 154#define ARCH_CPU_BIG_ENDIAN 1 155#else 156#define ARCH_CPU_MIPS_FAMILY 1 157#define ARCH_CPU_32_BITS 1 158#define ARCH_CPU_BIG_ENDIAN 1 159#endif 160#else 161#error Please add support for your architecture in build/build_config.h 162#endif 163 164#if defined(OS_ANDROID) 165// The compiler thinks std::string::const_iterator and "const char*" are 166// equivalent types. 167#define STD_STRING_ITERATOR_IS_CHAR_POINTER 168// The compiler thinks base::string16::const_iterator and "char16*" are 169// equivalent types. 170#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER 171#endif 172 173#endif // BASE_BUILD_BUILD_CONFIG_H_ 174