@@ -169,13 +169,89 @@ define do_autoconf_llvm
169
169
$(eval LLVM_SUFFIX := $(if $(filter -%,$(LLVM)),$(LLVM)))
170
170
export CLANG_TARGET_FLAGS_lkl := $(CROSS_COMPILE)
171
171
export CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
172
+ export CXX := $(LLVM_PREFIX)clang++$(LLVM_SUFFIX)
172
173
export LD := $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX)
173
174
export AR := $(LLVM_PREFIX)llvm-ar$(LLVM_SUFFIX)
174
175
$(eval LD := $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX))
175
176
$(eval CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX))
176
177
$(eval LD_FMT := $(call llvm_target_to_ld_fmt))
177
178
endef
178
179
180
+ define define_libprotobuf_mutator
181
+ $(eval PROTOC_PATH := $(PROTOBUF_MUTATOR_DIR)/build/external.protobuf/bin/protoc)
182
+ export PROTOC_PATH := $(PROTOC_PATH)
183
+
184
+ # Tell compiler where to find libprotobuf-mutator-related headers
185
+ export LIBPROTOBUF_MUTATOR_INCLUDES_DIR := -I$(PROTOBUF_MUTATOR_DIR) \
186
+ -I$(PROTOBUF_MUTATOR_DIR)/build/external.protobuf/include
187
+
188
+ # Tell linker where to find libprotobuf-mutator-related static libs
189
+ export LIBPROTOBUF_MUTATOR_LIBS_DIR := -L$(PROTOBUF_MUTATOR_DIR)/build/src \
190
+ -L$(PROTOBUF_MUTATOR_DIR)/build/src/libfuzzer \
191
+ -L$(PROTOBUF_MUTATOR_DIR)/build/external.protobuf/lib
192
+
193
+ # The same list of absl dependencies as in libprotobuf-mutator cmake config:
194
+ # https://github.com/google/libprotobuf-mutator/blob/master/cmake/external/protobuf.cmake
195
+ $(eval LIBPROTOBUF_LIBS := protobufd \
196
+ absl_bad_any_cast_impl absl_bad_optional_access absl_bad_variant_access \
197
+ absl_base absl_city absl_civil_time absl_cord absl_cord_internal \
198
+ absl_cordz_functions absl_cordz_handle absl_cordz_info \
199
+ absl_cordz_sample_token absl_crc_cord_state absl_crc_cpu_detect \
200
+ absl_crc_internal absl_crc32c absl_debugging_internal \
201
+ absl_demangle_internal absl_die_if_null absl_examine_stack \
202
+ absl_exponential_biased absl_failure_signal_handler \
203
+ absl_flags_commandlineflag absl_flags_commandlineflag_internal \
204
+ absl_flags_config absl_flags_internal absl_flags_marshalling \
205
+ absl_flags_parse absl_flags_private_handle_accessor \
206
+ absl_flags_program_name absl_flags_reflection absl_flags_usage \
207
+ absl_flags_usage_internal absl_graphcycles_internal absl_hash \
208
+ absl_hashtablez_sampler absl_int128 absl_kernel_timeout_internal \
209
+ absl_leak_check absl_log_entry absl_log_flags absl_log_globals \
210
+ absl_log_initialize absl_log_internal_check_op \
211
+ absl_log_internal_conditions absl_log_internal_format \
212
+ absl_log_internal_globals absl_log_internal_log_sink_set \
213
+ absl_log_internal_message absl_log_internal_nullguard \
214
+ absl_log_internal_proto absl_log_severity \
215
+ absl_log_sink absl_low_level_hash absl_malloc_internal \
216
+ absl_periodic_sampler absl_random_distributions \
217
+ absl_random_internal_distribution_test_util absl_random_internal_platform \
218
+ absl_random_internal_pool_urbg absl_random_internal_randen \
219
+ absl_random_internal_randen_hwaes absl_random_internal_randen_hwaes_impl \
220
+ absl_random_internal_randen_slow absl_random_internal_seed_material \
221
+ absl_random_seed_gen_exception absl_random_seed_sequences \
222
+ absl_raw_hash_set absl_raw_logging_internal absl_scoped_set_env \
223
+ absl_spinlock_wait absl_stacktrace absl_status \
224
+ absl_statusor absl_str_format_internal absl_strerror \
225
+ absl_string_view absl_strings absl_strings_internal \
226
+ absl_symbolize absl_synchronization absl_throw_delegate \
227
+ absl_time absl_time_zone utf8_validity)
228
+
229
+ export LIBPROTOBUF_MUTATOR_LIBS := \
230
+ -lprotobuf-mutator-libfuzzer -lprotobuf-mutator \
231
+ $(addprefix -l,$(LIBPROTOBUF_LIBS))
232
+
233
+ # Libprotobuf-mutator build safety checks
234
+ $(if $(wildcard $(PROTOC_PATH)),,\
235
+ $(error Cannot find protoc binary at $(PROTOC_PATH). \
236
+ Refer to documentation at tools/lkl/fuzzers/binder/README.md))
237
+
238
+ $(if $(wildcard $(PROTOBUF_MUTATOR_DIR)/build/src/libprotobuf-mutator.a),,\
239
+ $(error Cannot find libprotobuf-mutator.a in \
240
+ $(abspath $(PROTOBUF_MUTATOR_DIR)/build/src/). \
241
+ Refer to documentation at tools/lkl/fuzzers/binder/README.md))
242
+
243
+ $(if $(wildcard $(PROTOBUF_MUTATOR_DIR)/build/src/libfuzzer/libprotobuf-mutator-libfuzzer.a),,\
244
+ $(error Cannot find libprotobuf-mutator-libfuzzer.a in \
245
+ $(abspath $(PROTOBUF_MUTATOR_DIR)/build/src/libfuzzer/). \
246
+ Refer to documentation at tools/lkl/fuzzers/binder/README.md))
247
+
248
+ $(foreach protobuf_lib,$(LIBPROTOBUF_LIBS),\
249
+ $(if $(wildcard $(PROTOBUF_MUTATOR_DIR)/build/external.protobuf/lib/lib$(protobuf_lib).a),,\
250
+ $(error Cannot find lib$(protobuf_lib).a in \
251
+ $(PROTOBUF_MUTATOR_DIR)/build/external.protobuf/lib/. \
252
+ Refer to documentation at tools/lkl/fuzzers/binder/README.md)))
253
+ endef
254
+
179
255
define do_autoconf_fuzzing
180
256
export KCONFIG := fuzzing_defconfig
181
257
export LLVM := 1
@@ -185,6 +261,9 @@ define do_autoconf_fuzzing
185
261
$(eval kasan := yes)
186
262
$(call set_kernel_config,LKL_FUZZING,y)
187
263
$(if $(LKL_LINE_COV),$(call set_kernel_config,LKL_LINE_COV,y))
264
+ $(if $(MMU),$(call set_kernel_config,ANDROID_BINDER_IPC,y))
265
+ $(if $(PROTOBUF_MUTATOR_DIR),$(call define_libprotobuf_mutator))
266
+ LDFLAGS += -fuse-ld=lld
188
267
endef
189
268
190
269
define mmu_test_enable
0 commit comments