@@ -169,13 +169,89 @@ define do_autoconf_llvm
169169 $(eval LLVM_SUFFIX := $(if $(filter -%,$(LLVM)),$(LLVM)))
170170 export CLANG_TARGET_FLAGS_lkl := $(CROSS_COMPILE)
171171 export CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
172+ export CXX := $(LLVM_PREFIX)clang++$(LLVM_SUFFIX)
172173 export LD := $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX)
173174 export AR := $(LLVM_PREFIX)llvm-ar$(LLVM_SUFFIX)
174175 $(eval LD := $(LLVM_PREFIX)ld.lld$(LLVM_SUFFIX))
175176 $(eval CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX))
176177 $(eval LD_FMT := $(call llvm_target_to_ld_fmt))
177178endef
178179
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+
179255define do_autoconf_fuzzing
180256 export KCONFIG := fuzzing_defconfig
181257 export LLVM := 1
@@ -185,6 +261,9 @@ define do_autoconf_fuzzing
185261 $(eval kasan := yes)
186262 $(call set_kernel_config,LKL_FUZZING,y)
187263 $(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
188267endef
189268
190269define mmu_test_enable
0 commit comments