Home | History | Annotate | Download | only in gn
      1 # Copyright (C) 2017 The Android Open Source Project
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #      http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 
     15 import("perfetto.gni")
     16 import("proto_library.gni")
     17 if (perfetto_build_standalone || perfetto_build_with_android) {
     18   import("//gn/standalone/sanitizers/vars.gni")
     19 } else {
     20   import("//build/config/sanitizers/sanitizers.gni")
     21 }
     22 
     23 config("asan_instrumentation") {
     24   if (use_sanitizer_configs_without_instrumentation) {
     25     defines = [ "ADDRESS_SANITIZER_WITHOUT_INSTRUMENTATION" ]
     26   }
     27 }
     28 
     29 # Used by base/gtest_prod_util.h for the FRIEND_TEST_* macros. Note that other
     30 # production targets (i.e. testonly == false) should use base/gtest_prod_util.h
     31 # instead.
     32 group("gtest_prod_config") {
     33   if (perfetto_build_standalone || perfetto_build_with_android) {
     34     public_configs = [ "//buildtools:googletest_prod_config" ]
     35   } else {
     36     public_configs = [ ":gtest_config" ]
     37   }
     38 }
     39 
     40 config("gtest_config") {
     41   if (perfetto_build_with_embedder) {
     42     include_dirs = [ "//testing/gtest/include" ]
     43   }
     44 }
     45 
     46 config("gmock_config") {
     47   if (perfetto_build_with_embedder) {
     48     include_dirs = [ "//testing/gmock/include" ]
     49   }
     50 }
     51 
     52 group("gtest_deps") {
     53   testonly = true
     54 
     55   public_configs = [
     56     ":gtest_config",
     57     ":gmock_config",
     58   ]
     59 
     60   if (perfetto_build_standalone || perfetto_build_with_android) {
     61     public_deps = [
     62       "//buildtools:gmock",
     63       "//buildtools:gtest",
     64     ]
     65   } else {
     66     public_deps = [
     67       "//testing/gmock",
     68       "//testing/gtest",
     69     ]
     70   }
     71 }
     72 
     73 group("gtest_main") {
     74   testonly = true
     75 
     76   if (perfetto_build_standalone || perfetto_build_with_android) {
     77     public_deps = [
     78       "//buildtools:gtest_main",
     79     ]
     80   } else if (build_with_chromium) {
     81     public_deps = [
     82       "//base/test:run_all_unittests",
     83     ]
     84   } else {
     85     public_deps = [
     86       "//testing/gtest:gtest_main",
     87     ]
     88   }
     89 }
     90 
     91 # protoc compiler library, for building protoc plugins on the host.
     92 if (current_toolchain == host_toolchain) {
     93   group("protoc_lib_deps") {
     94     public_deps = [
     95       "${perfetto_protobuf_target_prefix}:protoc_lib",
     96     ]
     97   }
     98 }
     99 
    100 group("protobuf_full_deps") {
    101   testonly = true
    102   public_deps = [
    103     "${perfetto_protobuf_target_prefix}:protobuf_full",
    104   ]
    105 }
    106 
    107 # All targets should depend on this target to inherit the right flags and
    108 # include directories.
    109 group("default_deps") {
    110   public_configs = [ ":default_config" ]
    111   if (perfetto_build_standalone || perfetto_build_with_android) {
    112     public_deps = [
    113       "//gn/standalone/libc++:deps",
    114       "//gn/standalone/sanitizers:deps",
    115     ]
    116   }
    117 }
    118 
    119 # The config that all targets in the perfetto codebase inherit by virtue of
    120 # having explicit deps on //gn:default_deps. This config is NOT propagated up to
    121 # embedders that depend on perfetto (e.g. chrome). :public_config (see below) is
    122 # used for that.
    123 config("default_config") {
    124   configs = [ ":public_config" ]
    125 
    126   defines = [ "PERFETTO_IMPLEMENTATION" ]
    127 
    128   if (build_with_chromium && is_android) {
    129     # Included for __android_log_print
    130     libs = [ "log" ]
    131   }
    132 
    133   include_dirs = [ ".." ]
    134 }
    135 
    136 # This config is propagated to embedders via libperfetto. It's also included in
    137 # the default_config above.
    138 config("public_config") {
    139   include_dirs = [
    140     "../include",
    141 
    142     # The below are needed due to generated protobuf headers including other
    143     # headers with a path relative to the perfetto root.
    144     "${root_gen_dir}/${perfetto_root_path}/protos",
    145   ]
    146 
    147   defines = []
    148 
    149   if (perfetto_build_with_android) {
    150     defines += [ "PERFETTO_BUILD_WITH_ANDROID" ]
    151   } else if (perfetto_build_with_embedder) {
    152     defines += [ "PERFETTO_BUILD_WITH_EMBEDDER" ]
    153 
    154     if (build_with_chromium) {
    155       defines += [ "PERFETTO_BUILD_WITH_CHROMIUM" ]
    156 
    157       if (is_component_build) {
    158         defines += [ "PERFETTO_SHARED_LIBRARY" ]
    159       }
    160     }  # if (build_with_chromium)
    161   }  # if (build_with_embedder)
    162 
    163   if (perfetto_force_dlog == "on") {
    164     defines += [ "PERFETTO_FORCE_DLOG=1" ]
    165   } else if (perfetto_force_dlog == "off") {
    166     defines += [ "PERFETTO_FORCE_DLOG=0" ]
    167   }
    168 }
    169 
    170 # For now JsonCpp is supported only in standalone builds outside of Android or
    171 # Chromium.
    172 group("jsoncpp_deps") {
    173   if (perfetto_build_standalone) {
    174     public_configs = [ "//buildtools:jsoncpp_config" ]
    175     public_deps = [
    176       "//buildtools:jsoncpp",
    177     ]
    178   }
    179 }
    180 
    181 group("zlib_deps") {
    182   if (perfetto_build_standalone || perfetto_build_with_android) {
    183     public_configs = [ "//buildtools:zlib_config" ]
    184     public_deps = [
    185       "//buildtools:zlib",
    186     ]
    187   }
    188 }
    189