1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef INCLUDE_PERFETTO_BASE_BUILD_CONFIG_H_ 18 #define INCLUDE_PERFETTO_BASE_BUILD_CONFIG_H_ 19 20 // Allows to define build flags that give a compiler error if the header that 21 // defined the flag is not included, instead of silently ignoring the #if block. 22 #define PERFETTO_BUILDFLAG_CAT_INDIRECT(a, b) a##b 23 #define PERFETTO_BUILDFLAG_CAT(a, b) PERFETTO_BUILDFLAG_CAT_INDIRECT(a, b) 24 #define PERFETTO_BUILDFLAG(flag) \ 25 (PERFETTO_BUILDFLAG_CAT(PERFETTO_BUILDFLAG_DEFINE_, flag)()) 26 27 #if defined(__ANDROID__) 28 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1 29 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0 30 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0 31 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0 32 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0 33 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0 34 #elif defined(__APPLE__) 35 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0 36 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 1 37 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0 38 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0 39 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0 40 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0 41 #elif defined(__linux__) 42 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0 43 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0 44 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1 45 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0 46 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0 47 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0 48 #elif defined(_WIN32) 49 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0 50 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0 51 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0 52 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1 53 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0 54 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0 55 #elif defined(__EMSCRIPTEN__) 56 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0 57 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0 58 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0 59 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0 60 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1 61 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0 62 #elif defined(__Fuchsia__) 63 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0 64 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0 65 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0 66 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0 67 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0 68 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 1 69 #else 70 #error OS not supported (see build_config.h) 71 #endif 72 73 #if defined(__clang__) 74 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_CLANG() 1 75 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_GCC() 0 76 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_MSVC() 0 77 #elif defined(__GNUC__) // Careful: Clang also defines this! 78 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_CLANG() 0 79 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_GCC() 1 80 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_MSVC() 0 81 #elif defined(_MSC_VER) 82 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_CLANG() 0 83 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_GCC() 0 84 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_MSVC() 1 85 #else 86 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_CLANG() 0 87 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_GCC() 0 88 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_COMPILER_MSVC() 0 89 #endif 90 91 #if defined(PERFETTO_BUILD_WITH_ANDROID) 92 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_BUILD() 1 93 #else 94 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_BUILD() 0 95 #endif 96 97 #if defined(PERFETTO_BUILD_WITH_EMBEDDER) 98 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_EMBEDDER_BUILD() 1 99 #else 100 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_EMBEDDER_BUILD() 0 101 #endif 102 103 #if defined(PERFETTO_BUILD_WITH_CHROMIUM) 104 #if !defined(PERFETTO_BUILD_WITH_EMBEDDER) 105 #error PERFETTO_BUILD_WITH_EMBEDDER must be defined when \ 106 PERFETTO_BUILD_WITH_CHROMIUM is defined 107 #endif 108 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_CHROMIUM_BUILD() 1 109 #else 110 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_CHROMIUM_BUILD() 0 111 #endif 112 113 #if !defined(PERFETTO_BUILD_WITH_EMBEDDER) && \ 114 !defined(PERFETTO_BUILD_WITH_ANDROID) 115 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_STANDALONE_BUILD() 1 116 #else 117 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_STANDALONE_BUILD() 0 118 #endif 119 120 #if defined(PERFETTO_START_DAEMONS_FOR_TESTING) 121 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_START_DAEMONS() 1 122 #else 123 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_START_DAEMONS() 0 124 #endif 125 126 #if defined(PERFETTO_BUILD_WITH_ANDROID_USERDEBUG) 127 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_USERDEBUG_BUILD() 1 128 #else 129 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_USERDEBUG_BUILD() 0 130 #endif 131 132 #endif // INCLUDE_PERFETTO_BASE_BUILD_CONFIG_H_ 133