blob: 4ce047804157ca01f2510233dd8bd7b8179fbb28 [file] [log] [blame]
# Copyright 2018 The Fuchsia Authors
# Copyright (c) 2008-2015 Travis Geiselbrecht
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
MODULE_BANJOSRCS := $(filter %.banjo,$(MODULE_SRCS))
MODULE_BANJO_FILE_LIST := $(MODULE_GENDIR)/banjo-files
MODULE_BANJO_RSP := $(MODULE_GENDIR)/banjo.rsp
MODULE_BANJO_INCLUDE := $(MODULE_GENDIR)/include
MODULE_BANJO_C_HEADER := $(MODULE_BANJO_INCLUDE)/ddk/protocol/$(MODULE_BANJO_NAME).h
MODULE_BANJO_CPP_HEADER := $(MODULE_BANJO_INCLUDE)/ddktl/protocol/$(MODULE_BANJO_NAME).h
MODULE_BANJO_CPP_INTERNAL_HEADER := $(MODULE_BANJO_INCLUDE)/ddktl/protocol/$(MODULE_BANJO_NAME)-internal.h
MODULE_SRCDEPS += $(MODULE_BANJO_C_HEADER) $(MODULE_BANJO_CPP_HEADER) $(MODULE_BANJO_CPP_INTERNAL_HEADER)
MODULE_GEN_HDR += $(MODULE_BANJO_C_HEADER) $(MODULE_BANJO_CPP_HEADER) $(MODULE_BANJO_CPP_INTERNAL_HEADER)
# There is probably a more correct way to express this dependency, but having
# this dependency here makes the build non-flakey.
MODULE_SRCDEPS += $(BUILDDIR)/gen/abigen-stamp
#$(info MODULE_BANJOSRCS = $(MODULE_BANJOSRCS))
$(MODULE_BANJO_FILE_LIST): BANJO_SRCS:=$(MODULE_BANJOSRCS)
$(MODULE_BANJO_FILE_LIST):
@$(MKDIR)
$(NOECHO)echo $(BANJO_SRCS) > $@
$(MODULE_BANJO_RSP): BANJO_DEPS:=$(MODULE_BANJO_DEPS)
$(MODULE_BANJO_RSP): BANJO_NAME:=$(MODULE_BANJO_LIBRARY)
$(MODULE_BANJO_RSP): BANJO_C_HEADER:=$(MODULE_BANJO_C_HEADER)
$(MODULE_BANJO_RSP): BANJO_CPP_HEADER:=$(MODULE_BANJO_CPP_HEADER)
$(MODULE_BANJO_RSP): BANJO_SRCS:=$(MODULE_BANJOSRCS)
$(MODULE_BANJO_RSP): $(foreach dep,$(MODULE_BANJO_DEPS),$(call TOBUILDDIR,$(dep))/gen/banjo-files) $(MODULE_BANJOSRCS) make/bcompile.mk
@$(MKDIR)
$(NOECHO)echo --name $(BANJO_NAME) --ddk-header $(BANJO_C_HEADER) --ddktl-header $(BANJO_CPP_HEADER) $(foreach dep,$(BANJO_DEPS),--files $(shell cat $(call TOBUILDDIR,$(dep))/gen/banjo-files)) --files $(BANJO_SRCS) > $@
# $@ only lists one of the multiple targets, so we use $< (first dep) to
# compute the (related) destination directories to create
%/gen/include/ddk/protocol/$(MODULE_BANJO_NAME).h %/gen/include/ddktl/protocol/$(MODULE_BANJO_NAME).h %/gen/include/ddktl/protocol/$(MODULE_BANJO_NAME)-internal.h: %/gen/banjo.rsp $(BANJO)
$(call BUILDECHO, generating banjo from $<)
@mkdir -p $(<D)/include/ddk/protocol $(<D)/include/ddktl/protocol
$(NOECHO)$(BANJO) @$<
EXTRA_BUILDDEPS += make/bcompile.mk
GENERATED += $(MODULE_BANJO_C_HEADER) $(MODULE_BANJO_CPP_HEADER) $(MODULE_BANJO_CPP_INTERNAL_HEADER)
# clear some variables we set here
MODULE_BANJOSRCS :=
MODULE_BANJO_INCLUDE :=
MODULE_BANJO_C_HEADER :=
MODULE_BANJO_CPP_HEADER :=
MODULE_BANJO_CPP_INTERNAL_HEADER :=
MODULE_BANJO_RSP :=