Fix for Geolocation webTCT failures
[platform/framework/web/chromium-efl.git] / third_party / fuzztest / BUILD.gn
1 # Copyright 2023 The Chromium Authors
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 is a partial translation of
6 # //third_party/fuzztest/src/centipede/BUILD
7 # into BUILD.gn format.
8 #
9 # It contains support for both:
10 # - centipede, a way of building and running Chromium's existing fuzzing
11 #   targets using an out-of-process runner.
12 # - fuzztest, a way of building new fuzzing targets using simpler macros.
13
14 import("//build/config/sanitizers/sanitizers.gni")
15
16 config("fuzztest_internal_config") {
17   cflags = [
18     "-Wno-sign-compare",  # https://github.com/google/centipede/issues/487,
19     "-Wno-unused-private-field",
20     "-Wno-unreachable-code-return",
21     "-Wno-unused-but-set-variable",
22     "-Wno-shadow",
23     "-Wno-unused-const-variable",
24     "-Wno-unused-function",
25   ]
26
27   # int_utils.h depends on an SSE 4.2 intrinsic.
28   if (current_cpu == "x64") {
29     cflags += [ "-msse4.2" ]
30   }
31   include_dirs = [ "src" ]
32   if (use_centipede) {
33     defines = [ "FUZZTEST_USE_CENTIPEDE" ]
34   } else if (use_fuzzing_engine) {
35     defines = [ "FUZZTEST_COMPATIBILITY_MODE" ]
36   }
37 }
38
39 if (use_centipede) {
40   source_set("centipede_common") {
41     sources = [
42       "src/centipede/binary_info.cc",
43       "src/centipede/binary_info.h",
44       "src/centipede/byte_array_mutator.cc",
45       "src/centipede/byte_array_mutator.h",
46       "src/centipede/defs.h",
47       "src/centipede/execution_metadata.cc",
48       "src/centipede/execution_metadata.h",
49       "src/centipede/feature.cc",
50       "src/centipede/feature.h",
51       "src/centipede/knobs.cc",
52       "src/centipede/knobs.h",
53       "src/centipede/pc_info.cc",
54       "src/centipede/pc_info.h",
55       "src/centipede/reverse_pc_table.h",
56       "src/centipede/runner_cmp_trace.h",
57       "src/centipede/runner_request.cc",
58       "src/centipede/runner_request.h",
59       "src/centipede/runner_result.cc",
60       "src/centipede/runner_result.h",
61       "src/centipede/shared_memory_blob_sequence.cc",
62       "src/centipede/shared_memory_blob_sequence.h",
63     ]
64     deps = [
65       "//third_party/abseil-cpp:absl",
66       "//third_party/abseil-cpp/absl/log:check",
67       "//third_party/abseil-cpp/absl/log:log",
68     ]
69     configs += [ ":fuzztest_internal_config" ]
70     configs -= fuzzing_engine_remove_configs
71     configs += fuzzing_engine_add_configs
72   }
73
74   source_set("centipede_runner_no_main") {
75     sources = [
76       "src/centipede/runner.cc",
77       "src/centipede/runner.h",
78       "src/centipede/runner_dl_info.cc",
79       "src/centipede/runner_dl_info.h",
80       "src/centipede/runner_fork_server.cc",
81       "src/centipede/runner_interceptors.cc",
82       "src/centipede/runner_interface.h",
83       "src/centipede/runner_sancov.cc",
84       "src/centipede/runner_sancov_object.cc",
85       "src/centipede/runner_sancov_object.h",
86       "src/centipede/runner_sanitizer.cc",
87       "src/centipede/runner_utils.cc",
88       "src/centipede/runner_utils.h",
89     ]
90
91     deps = [
92       ":centipede_common",
93       "//third_party/abseil-cpp:absl",
94       "//third_party/abseil-cpp/absl/log:log",
95     ]
96     configs += [ ":fuzztest_internal_config" ]
97     configs -= fuzzing_engine_remove_configs
98     configs += fuzzing_engine_add_configs
99
100     # sancov symbols need to be exported for centipede to work correctly with
101     # multi-dso.
102     configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
103     configs += [ "//build/config/gcc:symbol_visibility_default" ]
104   }
105
106   source_set("centipede_runner_main") {
107     deps = [
108       ":centipede_runner_no_main",
109       "//third_party/abseil-cpp:absl",
110     ]
111     configs += [ ":fuzztest_internal_config" ]
112     sources = [ "src/centipede/runner_main.cc" ]
113   }
114
115   source_set("centipede_weak_sancov_stubs") {
116     sources = [ "src/centipede/weak_sancov_stubs.cc" ]
117   }
118
119   # The centipede out-of-process runner executable.
120   executable("centipede") {
121     configs += [ ":fuzztest_internal_config" ]
122     configs -= fuzzing_engine_remove_configs
123     configs += fuzzing_engine_add_configs
124     include_dirs = [ "src" ]
125     testonly = true
126     deps = [
127       ":centipede_common",
128       ":fuzztest_internal",
129
130       # Depend on fuzzing_engine so that we are automatically built in builds
131       # destined for ClusterFuzz.
132       "//testing/libfuzzer:fuzzing_engine",
133       "//third_party/abseil-cpp:absl",
134       "//third_party/abseil-cpp/absl/flags:config",
135       "//third_party/abseil-cpp/absl/flags:flag",
136       "//third_party/abseil-cpp/absl/flags:parse",
137       "//third_party/abseil-cpp/absl/flags:reflection",
138       "//third_party/abseil-cpp/absl/log",
139       "//third_party/abseil-cpp/absl/log:check",
140       "//third_party/abseil-cpp/absl/log:globals",
141       "//third_party/abseil-cpp/absl/log:initialize",
142       "//third_party/boringssl",
143     ]
144     sources = [
145       "src/centipede/analyze_corpora.cc",
146       "src/centipede/blob_file.cc",
147       "src/centipede/call_graph.cc",
148       "src/centipede/centipede.cc",
149       "src/centipede/centipede_callbacks.cc",
150       "src/centipede/centipede_default_callbacks.cc",
151       "src/centipede/centipede_interface.cc",
152       "src/centipede/centipede_main.cc",
153       "src/centipede/command.cc",
154       "src/centipede/config_file.cc",
155       "src/centipede/config_init.cc",
156       "src/centipede/config_util.cc",
157       "src/centipede/control_flow.cc",
158       "src/centipede/corpus.cc",
159       "src/centipede/coverage.cc",
160       "src/centipede/distill.cc",
161       "src/centipede/distill.h",
162       "src/centipede/environment.cc",
163       "src/centipede/environment_flags.cc",
164       "src/centipede/environment_flags.h",
165       "src/centipede/feature_set.cc",
166       "src/centipede/feature_set.h",
167       "src/centipede/fuzztest_mutator.cc",
168       "src/centipede/fuzztest_mutator.h",
169       "src/centipede/hash.cc",
170       "src/centipede/logging.cc",
171       "src/centipede/logging.h",
172       "src/centipede/minimize_crash.cc",
173       "src/centipede/remote_file.cc",
174       "src/centipede/rusage_profiler.cc",
175       "src/centipede/rusage_stats.cc",
176       "src/centipede/shard_reader.cc",
177       "src/centipede/stats.cc",
178       "src/centipede/symbol_table.cc",
179       "src/centipede/util.cc",
180       "src/centipede/workdir.cc",
181       "src/centipede/workdir.h",
182     ]
183   }
184 }
185
186 source_set("fuzztest_internal") {
187   sources = [
188     "src/fuzztest/domain.h",
189     "src/fuzztest/domain_core.h",
190     "src/fuzztest/fuzztest.cc",
191     "src/fuzztest/fuzztest.h",
192     "src/fuzztest/googletest_fixture_adapter.h",
193     "src/fuzztest/init_fuzztest.cc",
194     "src/fuzztest/init_fuzztest.h",
195     "src/fuzztest/internal/any.h",
196     "src/fuzztest/internal/centipede_adaptor.h",
197     "src/fuzztest/internal/compatibility_mode.cc",
198     "src/fuzztest/internal/compatibility_mode.h",
199     "src/fuzztest/internal/coverage.cc",
200     "src/fuzztest/internal/coverage.h",
201     "src/fuzztest/internal/domains/absl_helpers.h",
202     "src/fuzztest/internal/domains/aggregate_of_impl.h",
203     "src/fuzztest/internal/domains/arbitrary_impl.h",
204     "src/fuzztest/internal/domains/bit_flag_combination_of_impl.h",
205     "src/fuzztest/internal/domains/container_mutation_helpers.h",
206     "src/fuzztest/internal/domains/container_of_impl.h",
207     "src/fuzztest/internal/domains/domain_base.h",
208     "src/fuzztest/internal/domains/element_of_impl.h",
209     "src/fuzztest/internal/domains/filter_impl.h",
210     "src/fuzztest/internal/domains/flat_map_impl.h",
211     "src/fuzztest/internal/domains/in_grammar_impl.cc",
212     "src/fuzztest/internal/domains/in_grammar_impl.h",
213     "src/fuzztest/internal/domains/in_range_impl.h",
214     "src/fuzztest/internal/domains/in_regexp_impl.h",
215     "src/fuzztest/internal/domains/map_impl.h",
216     "src/fuzztest/internal/domains/one_of_impl.h",
217     "src/fuzztest/internal/domains/optional_of_impl.h",
218     "src/fuzztest/internal/domains/protobuf_domain_impl.h",
219     "src/fuzztest/internal/domains/regexp_dfa.cc",
220     "src/fuzztest/internal/domains/regexp_dfa.h",
221     "src/fuzztest/internal/domains/serialization_helpers.h",
222     "src/fuzztest/internal/domains/smart_pointer_of_impl.h",
223     "src/fuzztest/internal/domains/unique_elements_container_of_impl.h",
224     "src/fuzztest/internal/domains/value_mutation_helpers.h",
225     "src/fuzztest/internal/domains/variant_of_impl.h",
226     "src/fuzztest/internal/fixture_driver.cc",
227     "src/fuzztest/internal/fixture_driver.h",
228     "src/fuzztest/internal/googletest_adaptor.cc",
229     "src/fuzztest/internal/googletest_adaptor.h",
230     "src/fuzztest/internal/io.cc",
231     "src/fuzztest/internal/io.h",
232     "src/fuzztest/internal/logging.cc",
233     "src/fuzztest/internal/logging.h",
234     "src/fuzztest/internal/meta.h",
235     "src/fuzztest/internal/registration.h",
236     "src/fuzztest/internal/registry.cc",
237     "src/fuzztest/internal/registry.h",
238     "src/fuzztest/internal/runtime.cc",
239     "src/fuzztest/internal/runtime.h",
240     "src/fuzztest/internal/seed_seq.cc",
241     "src/fuzztest/internal/seed_seq.h",
242     "src/fuzztest/internal/serialization.cc",
243     "src/fuzztest/internal/serialization.h",
244     "src/fuzztest/internal/status.cc",
245     "src/fuzztest/internal/status.h",
246     "src/fuzztest/internal/subprocess.cc",
247     "src/fuzztest/internal/subprocess.h",
248     "src/fuzztest/internal/table_of_recent_compares.h",
249     "src/fuzztest/internal/type_support.cc",
250     "src/fuzztest/internal/type_support.h",
251   ]
252
253   testonly = true
254
255   deps = [
256     "//testing/gtest",
257
258     # Depends transitively on fuzzing_engine so that we are automatically built in builds
259     # destined for ClusterFuzz.
260     "//testing/libfuzzer:fuzzing_engine",
261     "//third_party/abseil-cpp/absl/flags:flag",
262     "//third_party/abseil-cpp/absl/random:bit_gen_ref",
263   ]
264
265   public_deps = [
266     "//third_party/abseil-cpp:absl",
267
268     # For RE2 mutators. It's questionable whether we want to pull this library
269     # into every fuzztest target, but this is the approach used in other
270     # fuzztest contexts so we'll do the same
271     "//third_party/re2",
272   ]
273
274   public_configs = [ ":fuzztest_internal_config" ]
275   configs -= fuzzing_engine_remove_configs
276   configs += fuzzing_engine_add_configs
277 }
278
279 # Fuzztest support. This allows regular test executables to contain
280 # a FUZZ_TEST. Such tests/executables should depend directly on this target;
281 # at this time there's no need to use a special gn template for fuzz tests.
282 # The resulting executables may be used in a variety of modes:
283 #  ./my_test     # just runs. The FUZZ_TEST runs for 1 second.
284 #  ./my_test --fuzz=    # runs fuzzing indefinitely.
285 #                       # Requires enable_fuzztest_fuzz gn argument.
286 #  ./my_test --fuzz=    # If use_libfuzzer gn argument is enabled, this
287 #                       # causes the test to emulate a regular libfuzzer fuzzer.
288 #  centipede --binary=./mytest  # Allows the binary to be run using centipede
289 #                               # out of process execution environment.
290 #                               # Requires use_centipede gn argument.
291 source_set("fuzztest") {
292   if (use_centipede) {
293     # If we are building for centipede, we want to make fuzztest executables
294     # which can be used as centipede fuzzers.
295     sources = [ "src/fuzztest/internal/centipede_adaptor.cc" ]
296     deps = [ ":centipede_runner_no_main" ]
297   } else if (use_fuzzing_engine) {
298     deps = [ "//testing/libfuzzer:fuzzing_engine_no_main" ]
299   }
300   public_deps = [ ":fuzztest_internal" ]
301   public_configs = [ ":fuzztest_internal_config" ]
302   configs -= fuzzing_engine_remove_configs
303   configs += fuzzing_engine_add_configs
304   testonly = true
305 }
306
307 # Depend upon this if you need a main() function
308 source_set("fuzztest_gtest_main") {
309   deps = [
310     "//testing/gtest",
311     "//third_party/abseil-cpp/absl/flags:flag",
312     "//third_party/abseil-cpp/absl/flags:parse",
313   ]
314   sources = [ "src/fuzztest/fuzztest_gtest_main.cc" ]
315   public_deps = [
316     ":fuzztest",
317     "//testing/gtest",
318   ]
319   testonly = true
320 }