diff --git a/templates/Makefile.template b/templates/Makefile.template index 50f5d42aa5b..fe37dbdaff0 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -27,14 +27,6 @@ def is_absl_lib(target_name): return target_name.startswith("absl/"); - proto_re = re.compile('(.*)\\.proto') - - def proto_to_cc(filename): - m = proto_re.match(filename) - if not m: - return filename - return '$(GENDIR)/' + m.group(1) + '.pb.cc $(GENDIR)/' + m.group(1) + '.grpc.pb.cc' - sources_that_need_openssl = set() sources_that_don_t_need_openssl = set() @@ -65,8 +57,8 @@ # Currently it is necessary because some dependencies are marked as "build: private" in build.yaml # (which itself is correct, as they are not "public" libraries from our perspective and cmake # needs to have them marked as such) - filtered_libs = [lib for lib in libs if lib.build in ['all', 'protoc'] or lib.name in ['ares', 'boringssl', 're2', 'upb', 'z']] - filtered_targets = [tgt for tgt in targets if tgt.build in ['all', 'protoc']] + filtered_libs = [lib for lib in libs if (lib.build in ['all'] and lib.language != 'c++') or lib.name in ['ares', 'boringssl', 're2', 'upb', 'z']] + filtered_targets = [tgt for tgt in targets if tgt.build in ['all'] and lib.language != 'c++'] %> comma := , @@ -149,7 +141,6 @@ prefix ?= /usr/local - PROTOC ?= protoc DTRACE ?= dtrace CONFIG ?= opt # Doing X ?= Y is the same as: @@ -498,45 +489,6 @@ LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE)) - # Setup protobuf dependency - - # we only support building protobuf from submodule - HAS_SYSTEM_PROTOBUF = false - HAS_PROTOC = false - HAS_VALID_PROTOC = false - ifeq ($(wildcard third_party/protobuf/src/google/protobuf/descriptor.pb.h),) - HAS_EMBEDDED_PROTOBUF = false - ifneq ($(HAS_VALID_PROTOC),true) - NO_PROTOC = true - endif - else - HAS_EMBEDDED_PROTOBUF = true - endif - - PROTOC_PLUGINS_DIR = $(BINDIR)/$(CONFIG) - - PROTOC_PLUGINS_ALL =\ - % for tgt in filtered_targets: - % if tgt.build == 'protoc': - $(BINDIR)/$(CONFIG)/${tgt.name}\ - % endif - % endfor - - ifeq ($(HAS_EMBEDDED_PROTOBUF),true) - PROTOBUF_DEP = $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a - CPPFLAGS := -Ithird_party/protobuf/src $(CPPFLAGS) - LDFLAGS := -L$(LIBDIR)/$(CONFIG)/protobuf $(LDFLAGS) - PROTOC = $(BINDIR)/$(CONFIG)/protobuf/protoc - PROTOC_PLUGINS = $(PROTOC_PLUGINS_ALL) - else - NO_PROTOBUF = true - endif - - LIBS_PROTOBUF = protobuf - LIBS_PROTOC = protoc protobuf - HOST_LDLIBS_PROTOC += $(addprefix -l, $(LIBS_PROTOC)) - LDLIBS_PROTOBUF += $(addprefix -l, $(LIBS_PROTOBUF)) - ifeq ($(MAKECMDGOALS),clean) NO_DEPS = true endif @@ -544,7 +496,7 @@ .SECONDARY = %.pb.h %.pb.cc ifeq ($(DEP_MISSING),) - all: static shared plugins\ + all: static shared\ % for tgt in filtered_targets: % if tgt.build == 'all': $(BINDIR)/$(CONFIG)/${tgt.name}\ @@ -585,10 +537,6 @@ openssl_dep_error: openssl_dep_message git_update stop - protobuf_dep_error: protobuf_dep_message git_update stop - - protoc_dep_error: protoc_dep_message git_update stop - openssl_dep_message: @echo @echo "DEPENDENCY ERROR" @@ -604,34 +552,6 @@ @echo " make run_dep_checks" @echo - protobuf_dep_message: - @echo - @echo "DEPENDENCY ERROR" - @echo - @echo "The target you are trying to run requires protobuf 3.12.0+" - @echo "Your system doesn't have it, and neither does the third_party directory." - @echo - @echo "Please consult BUILDING.md to get more information." - @echo - @echo "If you need information about why these tests failed, run:" - @echo - @echo " make run_dep_checks" - @echo - - protoc_dep_message: - @echo - @echo "DEPENDENCY ERROR" - @echo - @echo "The target you are trying to run requires protobuf-compiler 3.12.0+" - @echo "Your system doesn't have it, and neither does the third_party directory." - @echo - @echo "Please consult BUILDING.md to get more information." - @echo - @echo "If you need information about why these tests failed, run:" - @echo - @echo " make run_dep_checks" - @echo - systemtap_dep_error: @echo @echo "DEPENDENCY ERROR" @@ -662,21 +582,6 @@ run_dep_checks: @echo "run_dep_checks target has been deprecated." - third_party/protobuf/configure: - $(E) "[AUTOGEN] Preparing protobuf" - $(Q)(cd third_party/protobuf ; autoreconf -f -i -Wall,no-obsolete) - - $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a: third_party/protobuf/configure - $(E) "[MAKE] Building protobuf" - $(Q)mkdir -p $(LIBDIR)/$(CONFIG)/protobuf - $(Q)(cd third_party/protobuf ; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(PROTOBUF_LDFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(PROTOBUF_CPPFLAGS_EXTRA)" ./configure --disable-shared --enable-static $(PROTOBUF_CONFIG_OPTS)) - $(Q)$(MAKE) -C third_party/protobuf clean - $(Q)$(MAKE) -C third_party/protobuf - $(Q)mkdir -p $(BINDIR)/$(CONFIG)/protobuf - $(Q)cp third_party/protobuf/src/.libs/libprotoc.a $(LIBDIR)/$(CONFIG)/protobuf - $(Q)cp third_party/protobuf/src/.libs/libprotobuf.a $(LIBDIR)/$(CONFIG)/protobuf - $(Q)cp third_party/protobuf/src/protoc $(BINDIR)/$(CONFIG)/protobuf - static: static_c static_cxx static_c: cache.mk \ @@ -741,8 +646,6 @@ grpc_csharp_ext: shared_csharp - plugins: $(PROTOC_PLUGINS) - privatelibs: privatelibs_c privatelibs_cxx privatelibs_c: \ @@ -861,32 +764,6 @@ $(E) "[MAKE] Generating $@" $(Q) echo "$(CACHE_MK)" | tr , '\n' >$@ - % for p in protos: - ifeq ($(NO_PROTOC),true) - $(GENDIR)/${p}.pb.cc: protoc_dep_error - $(GENDIR)/${p}.grpc.pb.cc: protoc_dep_error - else - <% - pluginflags="" - %> - % if p in ["src/proto/grpc/testing/compiler_test", "src/proto/grpc/testing/echo"]: - <% - pluginflags="generate_mock_code=true:" - %> - % endif - $(GENDIR)/${p}.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) ${' '.join('$(GENDIR)/%s.pb.cc' % q for q in proto_deps.get(p, []))} - $(E) "[PROTOC] Generating protobuf CC file from $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --cpp_out=$(GENDIR) $< - - $(GENDIR)/${p}.grpc.pb.cc: ${p}.proto $(GENDIR)/${p}.pb.cc $(PROTOBUF_DEP) $(PROTOC_PLUGINS) ${' '.join('$(GENDIR)/%s.pb.cc $(GENDIR)/%s.grpc.pb.cc' % (q,q) for q in proto_deps.get(p, []))} - $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(PROTOC) -Ithird_party/protobuf/src -I. --grpc_out=${pluginflags}$(GENDIR) --plugin=protoc-gen-grpc=$(PROTOC_PLUGINS_DIR)/grpc_cpp_plugin$(EXECUTABLE_SUFFIX) $< - endif - - % endfor - ifeq ($(CONFIG),stapprof) src/core/profiling/stap_timers.c: $(GENDIR)/src/core/profiling/stap_probes.h ifeq ($(HAS_SYSTEMTAP),true) @@ -988,18 +865,12 @@ %> ${makelib(grpc_abseil_lib)} - # All of the test targets, and protoc plugins - - % for tgt in filtered_targets: - ${maketarget(tgt)} - % endfor - <%def name="makelib(lib)"> # start of build recipe for library "${lib.name}" (generated by makelib(lib) template function) LIB${lib.name.upper()}_SRC = \\ % for src in lib.src: - ${proto_to_cc(src)} \\ + ${src} \\ % endfor @@ -1039,37 +910,9 @@ else - % if lib.language == 'c++': - ifeq ($(NO_PROTOBUF),true) - - # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. - - $(LIBDIR)/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error - - % if lib.build == "all": - $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION_${lang_to_var[lib.language]}).$(SHARED_EXT_${lang_to_var[lib.language]}): protobuf_dep_error - % endif - - else - % endif - $(LIBDIR)/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(RE2_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP) \ ## The else here corresponds to the if secure earlier. % else: - % if lib.language == 'c++': - ifeq ($(NO_PROTOBUF),true) - - # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay. - - $(LIBDIR)/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error - - % if lib.build == "all": - $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION_${lang_to_var[lib.language]}).$(SHARED_EXT_${lang_to_var[lib.language]}): protobuf_dep_error - % endif - - else - - % endif $(LIBDIR)/$(CONFIG)/lib${lib.name}.a: \ % if lib.name not in ['z', 'ares', 'address_sorting', 're2', 'upb', 'grpc_abseil']: $(ZLIB_DEP) \ @@ -1079,9 +922,6 @@ $(UPB_DEP) \ $(GRPC_ABSEIL_DEP) \ % endif - % endif - % if lib.language == 'c++': - $(PROTOBUF_DEP)\ % endif $(LIB${lib.name.upper()}_OBJS) \ % if lib.get('baselib', False): @@ -1119,11 +959,7 @@ endif <% - - if lib.language == 'c++': - ld = '$(LDXX)' - else: - ld = '$(LDXX)' + ld = '$(LDXX)' out_mingbase = '$(LIBDIR)/$(CONFIG)/' + lib.name + '$(SHARED_VERSION_' + lang_to_var[lib.language] + ')' out_libbase = '$(LIBDIR)/$(CONFIG)/lib' + lib.name + '$(SHARED_VERSION_' + lang_to_var[lib.language] + ')' @@ -1134,9 +970,6 @@ lib_deps = ' $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(RE2_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP)' mingw_libs = '' mingw_lib_deps = ' $(ZLIB_DEP) $(CARES_DEP) $(ADDRESS_SORTING_DEP) $(RE2_DEP) $(UPB_DEP) $(GRPC_ABSEIL_DEP)' - if lib.language == 'c++': - lib_deps += ' $(PROTOBUF_DEP)' - mingw_lib_deps += ' $(PROTOBUF_DEP)' if lib.get('deps_linkage', None) == 'static': for dep in lib.get('deps', []): if is_absl_lib(dep): continue @@ -1164,8 +997,7 @@ if security in [True, 'check']: for src in lib.src: - if not proto_re.match(src): - sources_that_need_openssl.add(src) + sources_that_need_openssl.add(src) else: for src in lib.src: sources_that_don_t_need_openssl.add(src) @@ -1174,9 +1006,6 @@ lib_deps = lib_deps + ' $(OPENSSL_DEP)' mingw_lib_deps = mingw_lib_deps + ' $(OPENSSL_DEP)' - if lib.language == 'c++': - common = common + ' $(LDLIBSXX) $(LDLIBS_PROTOBUF)' - ldflags = '$(LDFLAGS)' if lib.get('LDFLAGS', None): ldflags += ' ' + lib['LDFLAGS'] @@ -1207,12 +1036,6 @@ ## If the lib was secure, we have to close the Makefile's if that tested ## the presence of OpenSSL. - endif - % endif - % if lib.language == 'c++': - ## If the lib was C++, we have to close the Makefile's if that tested - ## the presence of protobuf 3.12.0+ - endif % endif @@ -1225,185 +1048,9 @@ % if lib.get('secure', 'check') == True or lib.get('secure', 'check') == 'check': endif % endif - % for src in lib.src: - % if not proto_re.match(src) and any(proto_re.match(src2) for src2 in lib.src): - $(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o: ${' '.join(proto_to_cc(src2) for src2 in lib.src if proto_re.match(src2))} - % endif - % endfor # end of build recipe for library "${lib.name}" - <%def name="maketarget(tgt)"><% has_no_sources = not tgt.src %> - # start of build recipe for target "${tgt.name}" (generated by maketarget(tgt) template function) - % if not has_no_sources: - ${tgt.name.upper()}_SRC = \\ - - % for src in tgt.src: - ${proto_to_cc(src)} \\ - - % endfor - - ${tgt.name.upper()}_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(${tgt.name.upper()}_SRC)))) - % endif - % if tgt.get('secure', 'check') == True or tgt.get('secure', 'check') == 'check': - ifeq ($(NO_SECURE),true) - - # You can't build secure targets if you don't have OpenSSL. - - $(BINDIR)/$(CONFIG)/${tgt.name}: openssl_dep_error - - else - - % endif - - % if tgt.boringssl: - # boringssl needs an override to ensure that it does not include - # system openssl headers regardless of other configuration - # we do so here with a target specific variable assignment - $(${tgt.name.upper()}_OBJS): CFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CFLAGS) -Wno-sign-conversion -Wno-conversion -Wno-unused-value $(NO_W_EXTRA_SEMI) - $(${tgt.name.upper()}_OBJS): CXXFLAGS := -Ithird_party/boringssl-with-bazel/src/include $(CXXFLAGS) - $(${tgt.name.upper()}_OBJS): CPPFLAGS += -DOPENSSL_NO_ASM -D_GNU_SOURCE - % else: - % endif - - ## - ## We're not trying to add a dependency on building zlib and openssl here, - ## as it's already done in the libraries. We're assuming that the build - ## trickles down, and that a secure target requires a secure version of - ## a library. - ## - ## That simplifies the codegen a bit, but prevents a fully defined Makefile. - ## I can live with that. - ## - % if tgt.build == 'protoc' or tgt.language == 'c++': - - ifeq ($(NO_PROTOBUF),true) - - # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.12.0+. - - $(BINDIR)/$(CONFIG)/${tgt.name}: protobuf_dep_error - - else - - $(BINDIR)/$(CONFIG)/${tgt.name}: \ - % if not has_no_sources: - $(PROTOBUF_DEP) $(${tgt.name.upper()}_OBJS)\ - % endif - % else: - $(BINDIR)/$(CONFIG)/${tgt.name}: \ - % if not has_no_sources: - $(${tgt.name.upper()}_OBJS)\ - % endif - % endif - % for dep in tgt.deps: - % if not is_absl_lib(dep): - $(LIBDIR)/$(CONFIG)/lib${dep}.a\ - % endif - % endfor - - % if tgt.language == "c++" or tgt.boringssl or tgt.build == 'fuzzer': - ## C++ targets specificies. - % if tgt.build == 'protoc': - $(E) "[HOSTLD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) \ - % if not has_no_sources: - $(${tgt.name.upper()}_OBJS)\ - % endif - % else: - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) \ - % if not has_no_sources: - $(${tgt.name.upper()}_OBJS)\ - % endif - % endif - % else: - ## C-only targets specificities. - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) \ - % if not has_no_sources: - $(${tgt.name.upper()}_OBJS)\ - % endif - % endif - % for dep in tgt.deps: - $(LIBDIR)/$(CONFIG)/lib${dep}.a\ - % endfor - % if tgt.language == "c++": - % if tgt.build == 'protoc': - $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC)\ - % else: - $(LDLIBSXX) $(LDLIBS_PROTOBUF)\ - % endif - % endif - % if tgt.build == 'protoc': - $(HOST_LDLIBS)\ - % else: - $(LDLIBS)\ - % endif - % if tgt.build == 'protoc': - $(HOST_LDLIBS_PROTOC)\ - % elif tgt.get('secure', 'check') == True or tgt.get('secure', 'check') == 'check': - $(LDLIBS_SECURE)\ - % endif - % if tgt.build == 'fuzzer': - -lFuzzer\ - % endif - -o $(BINDIR)/$(CONFIG)/${tgt.name} - % if tgt.build == 'protoc' or tgt.language == 'c++': - - endif - % endif - % if tgt.get('secure', 'check') == True or tgt.get('secure', 'check') == 'check': - - endif - % endif - - % if tgt.get('defaults', None): - % for name, value in defaults.get(tgt.defaults).items(): - $(${tgt.name.upper()}_OBJS): ${name} += ${value} - % endfor - % endif - % for src in tgt.src: - $(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o: \ - % for dep in tgt.deps: - $(LIBDIR)/$(CONFIG)/lib${dep}.a\ - % endfor - - % if tgt.language == 'c89': - % for src in tgt.src: - $(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o : ${src} - $(E) "[C] Compiling $<" - $(Q) mkdir -p `dirname $@` - $(Q) $(CC) $(CPPFLAGS) $(CFLAGS) -std=c89 -pedantic -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $< - % endfor - % endif - - % endfor - % if not has_no_sources: - deps_${tgt.name}: $(${tgt.name.upper()}_OBJS:.o=.dep) - % endif - - % if not has_no_sources: - % if tgt.get('secure', 'check') == True or tgt.get('secure', 'check') == 'check': - ifneq ($(NO_SECURE),true) - % endif - ifneq ($(NO_DEPS),true) - -include $(${tgt.name.upper()}_OBJS:.o=.dep) - endif - % if tgt.get('secure', 'check') == True or tgt.get('secure', 'check') == 'check': - endif - % endif - % endif - % for src in tgt.src: - % if not proto_re.match(src) and any(proto_re.match(src2) for src2 in tgt.src): - $(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o: ${' '.join(proto_to_cc(src2) for src2 in tgt.src if proto_re.match(src2))} - % endif - % endfor - # end of build recipe for target "${tgt.name}" - - # TODO(jtattermusch): is there a way to get around this hack? ifneq ($(OPENSSL_DEP),) # This is to ensure the embedded OpenSSL is built beforehand, properly