# Copyright 2015 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. LOCAL_MOJO_ROOT := $(call my-dir) include $(LOCAL_MOJO_ROOT)/build_mojom_template_tools.mk mojo_generated_sources_dir := \ $(call generated-sources-dir-for,SHARED_LIBRARIES,libmojo,,) generated_templates_dir := $(mojo_generated_sources_dir)/templates generated_sources_dir := $(local-generated-sources-dir) generated_files := # $(1): a single mojom file define generate-mojom-source mojom_file := $(1) local_path := $(LOCAL_PATH) target_path := $(generated_sources_dir) gen_cc := $$(target_path)/$$(mojom_file).cc gen_h := $$(target_path)/$$(mojom_file).h gen_internal_h := $$(target_path)/$$(mojom_file)-internal.h gen_srcjar := $$(target_path)/$$(mojom_file).srcjar gen_src := $$(gen_cc) $$(gen_h) $$(gen_internal_h) $$(gen_srcjar) mojom_bindings_generator_flags := $$(LOCAL_MOJOM_BINDINGS_GENERATOR_FLAGS) # TODO(lhchavez): Generate these files instead of expecting them to be there. mojom_type_mappings := ifneq ($$(LOCAL_MOJOM_TYPE_MAPPINGS),) mojom_type_mappings := $$(local_path)/$$(LOCAL_MOJOM_TYPE_MAPPINGS) mojom_bindings_generator_flags += --typemap $$(abspath $$(mojom_type_mappings)) endif $$(gen_cc) : PRIVATE_PATH := $$(local_path) $$(gen_cc) : PRIVATE_MOJO_ROOT := $$(LOCAL_MOJO_ROOT) $$(gen_cc) : PRIVATE_TARGET := $$(target_path) $$(gen_cc) : PRIVATE_FLAGS := $$(mojom_bindings_generator_flags) $$(gen_cc) : PRIVATE_CUSTOM_TOOL = \ (cd $$(PRIVATE_PATH) && \ python $$(abspath $$(MOJOM_BINDINGS_GENERATOR)) \ --use_bundled_pylibs generate \ $$(subst $$(PRIVATE_PATH)/,,$$<) \ -I $$(abspath $$(PRIVATE_MOJO_ROOT)):$$(abspath $$(PRIVATE_MOJO_ROOT)) \ -o $$(abspath $$(PRIVATE_TARGET)) \ --bytecode_path $$(abspath $$(generated_templates_dir)) \ -g c++,java \ $$(PRIVATE_FLAGS)) $$(gen_cc) : $$(local_path)/$$(mojom_file) $$(mojom_type_mappings) \ $$(MOJOM_TEMPLATE_TOOLS) $$(generated_templates_dir)/.stamp $$(transform-generated-source) # Make the other generated files depend on the .cc file. Unfortunately, the # Make->ninja translation would generate one individual rule for each generated # file, resulting in the files being (racily) generated multiple times. $$(gen_internal_h): $$(gen_cc) $$(hide) touch $$@ $$(gen_h): $$(gen_cc) $$(hide) touch $$@ $$(gen_srcjar): $$(gen_cc) $$(hide) touch $$@ generated_files += $$(gen_src) # LOCAL_GENERATED_SOURCES will filter out anything that's not a C/C++ source # file. LOCAL_GENERATED_SOURCES += $$(gen_src) endef # define generate-mojom-source # Build each file separately since the build command needs to be done per-file. $(foreach file,$(LOCAL_MOJOM_FILES),$(eval $(call generate-mojom-source,$(file)))) # Add the generated sources to the C includes. LOCAL_C_INCLUDES += $(generated_sources_dir) # Also add the generated sources to the C exports. LOCAL_EXPORT_C_INCLUDE_DIRS += $(generated_sources_dir)