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