Home | History | Annotate | Download | only in base
      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