1# Copyright 2018 The Fuchsia Authors
2# Copyright (c) 2008-2015 Travis Geiselbrecht
3#
4# Use of this source code is governed by a MIT-style
5# license that can be found in the LICENSE file or at
6# https://opensource.org/licenses/MIT
7
8MODULE_FIDLSRCS := $(filter %.fidl,$(MODULE_SRCS))
9
10MODULE_FIDL_FILE_LIST := $(MODULE_GENDIR)/fidl-files
11MODULE_FIDL_RSP := $(MODULE_GENDIR)/fidl.rsp
12MODULE_FIDL_LIB_PATH := $(subst .,/,$(MODULE_FIDL_LIBRARY))
13MODULE_FIDL_INCLUDE := $(MODULE_GENDIR)/include
14MODULE_FIDL_H := $(MODULE_FIDL_INCLUDE)/$(MODULE_FIDL_LIB_PATH)/c/fidl.h
15MODULE_FIDL_CPP := $(MODULE_GENDIR)/src/tables.cpp
16MODULE_FIDL_CLIENT_C := $(MODULE_GENDIR)/src/client.c
17MODULE_FIDL_SERVER_C := $(MODULE_GENDIR)/src/server.c
18MODULE_FIDL_CPPOBJS :=  $(MODULE_GENDIR)/obj/tables.cpp.o
19MODULE_FIDL_COBJS :=  $(MODULE_GENDIR)/obj/client.c.o $(MODULE_GENDIR)/obj/server.c.o
20MODULE_FIDL_OBJS := $(MODULE_FIDL_CPPOBJS) $(MODULE_FIDL_COBJS)
21
22MODULE_SRCDEPS += $(MODULE_FIDL_H) $(MODULE_FIDL_CPP)
23MODULE_GEN_HDR += $(MODULE_FIDL_H)
24
25# There is probably a more correct way to express this dependency, but having
26# this dependency here makes the build non-flakey.
27MODULE_SRCDEPS += $(BUILDDIR)/gen/abigen-stamp
28
29#$(info MODULE_FIDLSRCS = $(MODULE_FIDLSRCS))
30
31$(MODULE_FIDL_COBJS): MODULE_OPTFLAGS:=$(MODULE_OPTFLAGS)
32$(MODULE_FIDL_COBJS): MODULE_COMPILEFLAGS:=$(MODULE_COMPILEFLAGS) -fvisibility=hidden -Isystem/ulib/fidl/include $(foreach dep,$(MODULE_FIDL_DEPS),-I$(call TOBUILDIR,$(dep))/gen/include) -I$(MODULE_FIDL_INCLUDE)
33$(MODULE_FIDL_COBJS): MODULE_CFLAGS:=$(MODULE_CFLAGS)
34$(MODULE_FIDL_COBJS): MODULE_SRCDEPS:=$(MODULE_SRCDEPS)
35$(MODULE_FIDL_COBJS): $(MODULE_GENDIR)/obj/%.c.o: $(MODULE_GENDIR)/src/%.c $(MODULE_SRCDEPS)
36	@$(MKDIR)
37	$(call BUILDECHO, compiling $<)
38	$(NOECHO)$(CC) $(GLOBAL_OPTFLAGS) $(MODULE_OPTFLAGS) $(GLOBAL_COMPILEFLAGS) $(USER_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(MODULE_COMPILEFLAGS) $(GLOBAL_CFLAGS) $(USER_CFLAGS) $(ARCH_CFLAGS) $(MODULE_OPTFLAGS) $(MODULE_CFLAGS) $(GLOBAL_INCLUDES) -c $< -MMD -MP -MT $@ -MF $(@:%o=%d) -o $@
39
40$(MODULE_FIDL_CPPOBJS): MODULE_OPTFLAGS:=$(MODULE_OPTFLAGS)
41$(MODULE_FIDL_CPPOBJS): MODULE_COMPILEFLAGS:=$(MODULE_COMPILEFLAGS) -fvisibility=hidden -Isystem/ulib/fidl/include $(foreach dep,$(MODULE_FIDL_DEPS),-I$(call TOBUILDIR,$(dep))/gen/include) -I$(MODULE_FIDL_INCLUDE)
42$(MODULE_FIDL_CPPOBJS): MODULE_CPPFLAGS:=$(MODULE_CPPFLAGS)
43$(MODULE_FIDL_CPPOBJS): MODULE_SRCDEPS:=$(MODULE_SRCDEPS)
44$(MODULE_FIDL_CPPOBJS): $(MODULE_GENDIR)/obj/%.cpp.o: $(MODULE_GENDIR)/src/%.cpp $(MODULE_SRCDEPS)
45	@$(MKDIR)
46	$(call BUILDECHO, compiling $<)
47	$(NOECHO)$(CC) $(GLOBAL_OPTFLAGS) $(MODULE_OPTFLAGS) $(GLOBAL_COMPILEFLAGS) $(USER_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(MODULE_COMPILEFLAGS) $(GLOBAL_CPPFLAGS) $(USER_CPPFLAGS) $(ARCH_CPPFLAGS) $(MODULE_OPTFLAGS) $(MODULE_CPPFLAGS) $(GLOBAL_INCLUDES) -c $< -MMD -MP -MT $@ -MF $(@:%o=%d) -o $@
48
49$(MODULE_FIDL_FILE_LIST): FIDL_SRCS:=$(MODULE_FIDLSRCS)
50$(MODULE_FIDL_FILE_LIST):
51	@$(MKDIR)
52	$(NOECHO)echo $(FIDL_SRCS) > $@
53
54$(MODULE_FIDL_RSP): FIDL_DEPS:=$(MODULE_FIDL_DEPS)
55$(MODULE_FIDL_RSP): FIDL_NAME:=$(MODULE_FIDL_LIBRARY)
56$(MODULE_FIDL_RSP): FIDL_H:=$(MODULE_FIDL_H)
57$(MODULE_FIDL_RSP): FIDL_CPP:=$(MODULE_FIDL_CPP)
58$(MODULE_FIDL_RSP): FIDL_CLIENT_C:=$(MODULE_FIDL_CLIENT_C)
59$(MODULE_FIDL_RSP): FIDL_SERVER_C:=$(MODULE_FIDL_SERVER_C)
60$(MODULE_FIDL_RSP): FIDL_SRCS:=$(MODULE_FIDLSRCS)
61$(MODULE_FIDL_RSP): $(foreach dep,$(MODULE_FIDL_DEPS),$(call TOBUILDDIR,$(dep))/gen/fidl-files) $(MODULE_FIDLSRCS) make/fcompile.mk
62	@$(MKDIR)
63	$(NOECHO)echo --name $(FIDL_NAME) --c-header $(FIDL_H) --c-client $(FIDL_CLIENT_C) --c-server $(FIDL_SERVER_C) --tables $(FIDL_CPP) $(foreach dep,$(FIDL_DEPS),--files $(shell cat $(call TOBUILDDIR,$(dep))/gen/fidl-files)) --files $(FIDL_SRCS) > $@
64
65# $@ only lists one of the multiple targets, so we use $< (first dep) to
66# compute the (related) destination directories to create
67%/gen/include/$(MODULE_FIDL_LIB_PATH)/c/fidl.h %/gen/src/tables.cpp %/gen/src/client.c %/gen/src/server.c: %/gen/fidl.rsp $(FIDL)
68	$(call BUILDECHO, generating fidl from $<)
69	@mkdir -p $(<D)/include $(<D)/src
70	$(NOECHO)$(FIDL) @$<
71
72EXTRA_BUILDDEPS += make/fcompile.mk
73GENERATED += $(MODULE_FIDL_H) $(MODULE_FIDL_CPP) $(MODULE_FIDL_CLIENT_C) $(MODULE_FIDL_SERVER_C)
74
75# clear some variables we set here
76MODULE_FIDLSRCS :=
77MODULE_FIDL_LIB_PATH :=
78MODULE_FIDL_INCLUDE :=
79MODULE_FIDL_H :=
80MODULE_FIDL_CPP :=
81MODULE_FIDL_CLIENT_C :=
82MODULE_FIDL_SERVER_C :=
83MODULE_FIDL_CPPOBJS :=
84MODULE_FIDL_COBJS :=
85MODULE_FIDL_RSP :=
86
87# MODULE_FIDL_OBJS is passed back
88#MODULE_FIDL_OBJS :=
89