| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925 |
- # GRPC global makefile
- # This currently builds C and C++ code.
- <%!
- import re
- import os
- proto_re = re.compile('(.*)\\.proto')
- def excluded(filename, exclude_res):
- for r in exclude_res:
- if r.match(filename):
- return True
- return False
- def proto_to_cc(filename):
- m = proto_re.match(filename)
- if not m:
- return filename
- return 'gens/' + m.group(1) + '.pb.cc'
- %>
- # Configurations
- VALID_CONFIG_opt = 1
- CC_opt = gcc
- CXX_opt = g++
- LD_opt = gcc
- LDXX_opt = g++
- CPPFLAGS_opt = -O2
- LDFLAGS_opt =
- DEFINES_opt = NDEBUG
- VALID_CONFIG_dbg = 1
- CC_dbg = gcc
- CXX_dbg = g++
- LD_dbg = gcc
- LDXX_dbg = g++
- CPPFLAGS_dbg = -O0
- LDFLAGS_dbg =
- DEFINES_dbg = _DEBUG DEBUG
- VALID_CONFIG_valgrind = 1
- CC_valgrind = gcc
- CXX_valgrind = g++
- LD_valgrind = gcc
- LDXX_valgrind = g++
- CPPFLAGS_valgrind = -O0
- OPENSSL_CFLAGS_valgrind = -DPURIFY
- LDFLAGS_valgrind =
- DEFINES_valgrind = _DEBUG DEBUG
- VALID_CONFIG_tsan = 1
- CC_tsan = clang
- CXX_tsan = clang++
- LD_tsan = clang
- LDXX_tsan = clang++
- CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer
- OPENSSL_CONFIG_tsan = no-asm
- LDFLAGS_tsan = -fsanitize=thread
- DEFINES_tsan = NDEBUG
- VALID_CONFIG_asan = 1
- CC_asan = clang
- CXX_asan = clang++
- LD_asan = clang
- LDXX_asan = clang++
- CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer
- OPENSSL_CONFIG_asan = no-asm
- LDFLAGS_asan = -fsanitize=address
- DEFINES_asan = NDEBUG
- VALID_CONFIG_msan = 1
- CC_msan = clang
- CXX_msan = clang++
- LD_msan = clang
- LDXX_msan = clang++
- CPPFLAGS_msan = -O1 -fsanitize=memory -fno-omit-frame-pointer
- OPENSSL_CFLAGS_msan = -DPURIFY
- OPENSSL_CONFIG_msan = no-asm
- LDFLAGS_msan = -fsanitize=memory
- DEFINES_msan = NDEBUG
- VALID_CONFIG_gcov = 1
- CC_gcov = gcc
- CXX_gcov = g++
- LD_gcov = gcc
- LDXX_gcov = g++
- CPPFLAGS_gcov = -O0 -fprofile-arcs -ftest-coverage
- LDFLAGS_gcov = -fprofile-arcs -ftest-coverage
- DEFINES_gcov = NDEBUG
- # General settings.
- # You may want to change these depending on your system.
- prefix ?= /usr/local
- PROTOC = protoc
- CONFIG ?= opt
- CC = $(CC_$(CONFIG))
- CXX = $(CXX_$(CONFIG))
- LD = $(LD_$(CONFIG))
- LDXX = $(LDXX_$(CONFIG))
- AR = ar
- STRIP = strip --strip-unneeded
- INSTALL = install -D
- RM = rm -f
- ifndef VALID_CONFIG_$(CONFIG)
- $(error Invalid CONFIG value '$(CONFIG)')
- endif
- HOST_CC = $(CC)
- HOST_CXX = $(CXX)
- HOST_LD = $(LD)
- HOST_LDXX = $(LDXX)
- CPPFLAGS += $(CPPFLAGS_$(CONFIG))
- DEFINES += $(DEFINES_$(CONFIG))
- LDFLAGS += $(LDFLAGS_$(CONFIG))
- CFLAGS += -std=c89 -pedantic
- CXXFLAGS += -std=c++11
- CPPFLAGS += -g -fPIC -Wall -Werror -Wno-long-long
- LDFLAGS += -g -pthread -fPIC
- INCLUDES = . include gens
- LIBS = rt m z pthread
- LIBSXX = protobuf
- LIBS_PROTOC = protoc protobuf
- ifneq ($(wildcard /usr/src/gtest/src/gtest-all.cc),)
- GTEST_LIB = /usr/src/gtest/src/gtest-all.cc -I/usr/src/gtest
- else
- GTEST_LIB = -lgtest
- endif
- GTEST_LIB += -lgflags
- ifeq ($(V),1)
- E = @:
- Q =
- else
- E = @echo
- Q = @
- endif
- VERSION = ${settings.version.major}.${settings.version.minor}.${settings.version.micro}.${settings.version.build}
- CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
- CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
- LDFLAGS += $(ARCH_FLAGS)
- LDLIBS += $(addprefix -l, $(LIBS))
- LDLIBSXX += $(addprefix -l, $(LIBSXX))
- HOST_LDLIBS_PROTOC += $(addprefix -l, $(LIBS_PROTOC))
- HOST_CPPFLAGS = $(CPPFLAGS)
- HOST_CFLAGS = $(CFLAGS)
- HOST_CXXFLAGS = $(CXXFLAGS)
- HOST_LDFLAGS = $(LDFLAGS)
- HOST_LDLIBS = $(LDLIBS)
- # These are automatically computed variables.
- # There shouldn't be any need to change anything from now on.
- HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
- ifeq ($(SYSTEM),)
- SYSTEM = $(HOST_SYSTEM)
- endif
- ifeq ($(SYSTEM),MINGW32)
- SHARED_EXT = dll
- endif
- ifeq ($(SYSTEM),Darwin)
- SHARED_EXT = dylib
- endif
- ifeq ($(SHARED_EXT),)
- SHARED_EXT = so.$(VERSION)
- endif
- ifeq ($(wildcard .git),)
- IS_GIT_FOLDER = false
- else
- IS_GIT_FOLDER = true
- endif
- OPENSSL_ALPN_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/openssl-alpn.c -lssl -lcrypto -ldl $(LDFLAGS)
- ZLIB_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/zlib.c -lz $(LDFLAGS)
- HAS_SYSTEM_OPENSSL_ALPN = $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false)
- HAS_SYSTEM_ZLIB = $(shell $(ZLIB_CHECK_CMD) 2> /dev/null && echo true || echo false)
- ifeq ($(wildcard third_party/openssl/ssl/ssl.h),)
- HAS_EMBEDDED_OPENSSL_ALPN = false
- else
- HAS_EMBEDDED_OPENSSL_ALPN = true
- endif
- ifeq ($(wildcard third_party/zlib/zlib.h),)
- HAS_EMBEDDED_ZLIB = false
- else
- HAS_EMBEDDED_ZLIB = true
- endif
- ifeq ($(HAS_SYSTEM_ZLIB),false)
- ifeq ($(HAS_EMBEDDED_ZLIB),true)
- ZLIB_DEP = third_party/zlib/libz.a
- CPPFLAGS += -Ithird_party/zlib
- LDFLAGS += -Lthird_party/zlib
- else
- DEP_MISSING += zlib
- endif
- endif
- ifeq ($(HAS_SYSTEM_OPENSSL_ALPN),false)
- ifeq ($(HAS_EMBEDDED_OPENSSL_ALPN),true)
- OPENSSL_DEP = libs/$(CONFIG)/openssl/libssl.a
- OPENSSL_MERGE_LIBS += libs/$(CONFIG)/openssl/libssl.a libs/$(CONFIG)/openssl/libcrypto.a
- CPPFLAGS += -Ithird_party/openssl/include
- LDFLAGS += -Llibs/$(CONFIG)/openssl
- LIBS_SECURE = dl
- else
- NO_SECURE = true
- endif
- else
- LIBS_SECURE = ssl crypto dl
- endif
- LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE))
- ifneq ($(DEP_MISSING),)
- NO_DEPS = true
- endif
- ifneq ($(MAKECMDGOALS),clean)
- NO_DEPS = true
- endif
- .SECONDARY = %.pb.h %.pb.cc
- ifeq ($(DEP_MISSING),)
- all: static shared\
- % for tgt in targets:
- % if tgt.build == 'all':
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- dep_error:
- @echo "You shouldn't see this message - all of your dependencies are correct."
- else
- all: dep_error git_update stop
- dep_error:
- @echo
- @echo "DEPENDENCY ERROR"
- @echo
- @echo "You are missing system dependencies that are essential to build grpc,"
- @echo "and the third_party directory doesn't have them:"
- @echo
- @echo " $(DEP_MISSING)"
- @echo
- @echo "Installing the development packages for your system will solve"
- @echo "this issue. Please consult INSTALL to get more information."
- @echo
- @echo "If you need information about why these tests failed, run:"
- @echo
- @echo " make run_dep_checks"
- @echo
- endif
- git_update:
- ifeq ($(IS_GIT_FOLDER),true)
- @echo "Additionally, since you are in a git clone, you can download the"
- @echo "missing dependencies in third_party by running the following command:"
- @echo
- @echo " git submodule update --init"
- @echo
- endif
- openssl_dep_error: openssl_dep_message git_update stop
- openssl_dep_message:
- @echo
- @echo "DEPENDENCY ERROR"
- @echo
- @echo "The target you are trying to run requires OpenSSL with ALPN support."
- @echo "Your system doesn't have it, and neither does the third_party directory."
- @echo
- @echo "Please consult INSTALL to get more information."
- @echo
- @echo "If you need information about why these tests failed, run:"
- @echo
- @echo " make run_dep_checks"
- @echo
- stop:
- @false
- % for tgt in targets:
- ${tgt.name}: bins/$(CONFIG)/${tgt.name}
- % endfor
- run_dep_checks:
- $(OPENSSL_ALPN_CHECK_CMD) || true
- $(ZLIB_CHECK_CMD) || true
- third_party/zlib/libz.a:
- (cd third_party/zlib ; CFLAGS="-fPIC -fvisibility=hidden" ./configure --static)
- $(MAKE) -C third_party/zlib
- libs/$(CONFIG)/openssl/libssl.a:
- (cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./config $(OPENSSL_CONFIG_$(CONFIG)))
- $(MAKE) -C third_party/openssl clean
- $(MAKE) -C third_party/openssl build_crypto build_ssl
- mkdir -p libs/$(CONFIG)/openssl
- cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a libs/$(CONFIG)/openssl
- static: static_c static_cxx
- static_c: dep_c\
- % for lib in libs:
- % if lib.build == 'all' and not lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.a\
- % endif
- % endfor
- static_cxx: dep_cxx\
- % for lib in libs:
- % if lib.build == 'all' and lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.a\
- % endif
- % endfor
- shared: shared_c shared_cxx
- shared_c: dep_c\
- % for lib in libs:
- % if lib.build == 'all' and not lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
- % endif
- % endfor
- shared_cxx: dep_cxx\
- % for lib in libs:
- % if lib.build == 'all' and lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
- % endif
- % endfor
- privatelibs: privatelibs_c privatelibs_cxx
- privatelibs_c: dep_c\
- % for lib in libs:
- % if lib.build == 'private' and not lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.a\
- % endif
- % endfor
- privatelibs_cxx: dep_cxx\
- % for lib in libs:
- % if lib.build == 'private' and lib.get('c++', False):
- libs/$(CONFIG)/lib${lib.name}.a\
- % endif
- % endfor
- buildtests: buildtests_c buildtests_cxx
- buildtests_c: bins_dep_c privatelibs_c\
- % for tgt in targets:
- % if tgt.build == 'test' and not tgt.get('c++', False):
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- buildtests_cxx: bins_dep_cxx privatelibs_cxx\
- % for tgt in targets:
- % if tgt.build == 'test' and tgt.get('c++', False):
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- test: test_c test_cxx
- test_c: buildtests_c
- % for tgt in targets:
- % if tgt.build == 'test' and tgt.get('run', True) and not tgt.get('c++', False):
- $(E) "[RUN] Testing ${tgt.name}"
- $(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
- % endif
- % endfor
- test_cxx: buildtests_cxx
- % for tgt in targets:
- % if tgt.build == 'test' and tgt.get('run', True) and tgt.get('c++', False):
- $(E) "[RUN] Testing ${tgt.name}"
- $(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
- % endif
- % endfor
- tools: privatelibs\
- % for tgt in targets:
- % if tgt.build == 'tool':
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- protoc_plugins:\
- % for tgt in targets:
- % if tgt.build == 'protoc':
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- buildbenchmarks: privatelibs\
- % for tgt in targets:
- % if tgt.build == 'benchmark':
- bins/$(CONFIG)/${tgt.name}\
- % endif
- % endfor
- benchmarks: buildbenchmarks
- strip: strip-static strip-shared
- strip-static: strip-static_c strip-static_cxx
- strip-shared: strip-shared_c strip-shared_cxx
- strip-static_c: static_c
- % for lib in libs:
- % if not lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[STRIP] Stripping lib${lib.name}.a"
- $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a
- % endif
- % endif
- % endfor
- strip-static_cxx: static_cxx
- % for lib in libs:
- % if lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[STRIP] Stripping lib${lib.name}.a"
- $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a
- % endif
- % endif
- % endfor
- strip-shared_c: shared_c
- % for lib in libs:
- % if not lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[STRIP] Stripping lib${lib.name}.so"
- $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
- % endif
- % endif
- % endfor
- strip-shared_cxx: shared_cxx
- % for lib in libs:
- % if lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[STRIP] Stripping lib${lib.name}.so"
- $(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
- % endif
- % endif
- % endfor
- % for p in protos:
- deps/$(CONFIG)/gens/${p}.pb.dep:
- $(Q) mkdir -p `dirname $@`
- $(Q) touch $@
- gens/${p}.pb.cc: ${p}.proto protoc_plugins
- $(E) "[PROTOC] Generating protobuf CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=gens --grpc_out=gens --plugin=protoc-gen-grpc=bins/$(CONFIG)/cpp_plugin $<
- % endfor
- deps/$(CONFIG)/%.dep : %.c
- $(E) "[DEP] Generating dependencies for $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(CC) $(CFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@
- deps/$(CONFIG)/%.dep : %.cc
- $(E) "[DEP] Generating dependencies for $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS_NO_ARCH) -MG -M $< > $@
- objs/$(CONFIG)/%.o : %.c
- $(E) "[C] Compiling $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
- objs/$(CONFIG)/%.o : gens/%.pb.cc
- $(E) "[CXX] Compiling $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
- objs/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc
- $(E) "[HOSTCXX] Compiling $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -c -o $@ $<
- objs/$(CONFIG)/%.o : %.cc
- $(E) "[CXX] Compiling $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
- dep: dep_c dep_cxx
- dep_c:\
- % for lib in libs:
- % if not lib.get('c++', False):
- deps_lib${lib.name}\
- % endif
- % endfor
- bins_dep_c:\
- % for tgt in targets:
- % if not tgt.get('c++', False):
- deps_${tgt.name}\
- % endif
- % endfor
- dep_cxx:\
- % for lib in libs:
- % if lib.get('c++', False):
- deps_lib${lib.name}\
- % endif
- % endfor
- bins_dep_cxx:\
- % for tgt in targets:
- % if tgt.get('c++', False):
- deps_${tgt.name}\
- % endif
- % endfor
- install: install_c install_cxx
- install_c: install-headers_c install-static_c install-shared_c
- install_cxx: install-headers_cxx install-static_cxx install-shared_cxx
- install-headers: install-headers_c install-headers_cxx
- install-headers_c:
- $(E) "[INSTALL] Installing public C headers"
- $(Q) $(foreach h, $(PUBLIC_HEADERS_C), $(INSTALL) $(h) $(prefix)/$(h) && ) exit 0 || exit 1
- install-headers_cxx:
- $(E) "[INSTALL] Installing public C++ headers"
- $(Q) $(foreach h, $(PUBLIC_HEADERS_CXX), $(INSTALL) $(h) $(prefix)/$(h) && ) exit 0 || exit 1
- install-static: install-static_c install-static_cxx
- install-static_c: static_c strip-static_c
- % for lib in libs:
- % if not lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[INSTALL] Installing lib${lib.name}.a"
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a
- % endif
- % endif
- % endfor
- install-static_cxx: static_cxx strip-static_cxx
- % for lib in libs:
- % if lib.get("c++", False):
- % if lib.build == "all":
- $(E) "[INSTALL] Installing lib${lib.name}.a"
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a
- % endif
- % endif
- % endfor
- install-shared_c: shared_c strip-shared_c
- % for lib in libs:
- % if not lib.get("c++", False):
- % if lib.build == "all":
- ifeq ($(SYSTEM),MINGW32)
- $(E) "[INSTALL] Installing ${lib.name}.$(SHARED_EXT)"
- $(Q) $(INSTALL) libs/$(CONFIG)/${lib.name}.$(SHARED_EXT) $(prefix)/lib/${lib.name}.$(SHARED_EXT)
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}-imp.a $(prefix)/lib/lib${lib.name}-imp.a
- else
- $(E) "[INSTALL] Installing lib${lib.name}.$(SHARED_EXT)"
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT) $(prefix)/lib/lib${lib.name}.$(SHARED_EXT)
- ifneq ($(SYSTEM),Darwin)
- $(Q) ln -sf lib${lib.name}.$(SHARED_EXT) $(prefix)/lib/lib${lib.name}.so
- endif
- endif
- % endif
- % endif
- % endfor
- ifneq ($(SYSTEM),MINGW32)
- ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
- endif
- endif
- install-shared_cxx: shared_cxx strip-shared_cxx
- % for lib in libs:
- % if lib.get("c++", False):
- % if lib.build == "all":
- ifeq ($(SYSTEM),MINGW32)
- $(E) "[INSTALL] Installing ${lib.name}.$(SHARED_EXT)"
- $(Q) $(INSTALL) libs/$(CONFIG)/${lib.name}.$(SHARED_EXT) $(prefix)/lib/${lib.name}.$(SHARED_EXT)
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}-imp.a $(prefix)/lib/lib${lib.name}-imp.a
- else
- $(E) "[INSTALL] Installing lib${lib.name}.$(SHARED_EXT)"
- $(Q) $(INSTALL) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT) $(prefix)/lib/lib${lib.name}.$(SHARED_EXT)
- ifneq ($(SYSTEM),Darwin)
- $(Q) ln -sf lib${lib.name}.$(SHARED_EXT) $(prefix)/lib/lib${lib.name}.so
- endif
- endif
- % endif
- % endif
- % endfor
- ifneq ($(SYSTEM),MINGW32)
- ifneq ($(SYSTEM),Darwin)
- $(Q) ldconfig
- endif
- endif
- clean:\
- % for lib in libs:
- clean_lib${lib.name}\
- % endfor
- % for tgt in targets:
- clean_${tgt.name}\
- % endfor
- $(Q) $(RM) -r deps objs libs bins gens
- # The various libraries
- % for lib in libs:
- ${makelib(lib)}
- % endfor
- # All of the test targets, and protoc plugins
- % for tgt in targets:
- ${maketarget(tgt)}
- % endfor
- <%def name="makelib(lib)">
- LIB${lib.name.upper()}_SRC = \\
- % for src in lib.src:
- ${proto_to_cc(src)} \\
- % endfor
- % if "public_headers" in lib:
- % if lib.get("c++", False):
- PUBLIC_HEADERS_CXX += \\
- % else:
- PUBLIC_HEADERS_C += \\
- % endif
- % for hdr in lib.public_headers:
- ${hdr} \\
- % endfor
- % endif
- LIB${lib.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIB${lib.name.upper()}_SRC))))
- LIB${lib.name.upper()}_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(LIB${lib.name.upper()}_SRC))))
- % if lib.get('secure', True):
- ifeq ($(NO_SECURE),true)
- libs/$(CONFIG)/lib${lib.name}.a: openssl_dep_error
- % if lib.build == "all":
- ifeq ($(SYSTEM),MINGW32)
- libs/$(CONFIG)/${lib.name}.$(SHARED_EXT): openssl_dep_error
- else
- libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): openssl_dep_error
- endif
- % endif
- else
- libs/$(CONFIG)/lib${lib.name}.a: $(OPENSSL_DEP) $(LIB${lib.name.upper()}_OBJS)
- % else:
- libs/$(CONFIG)/lib${lib.name}.a: $(LIB${lib.name.upper()}_OBJS)
- % endif
- $(E) "[AR] Creating $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(AR) rcs libs/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS)
- % if lib.get('baselib', False):
- % if lib.get('secure', True):
- $(Q) rm -rf tmp-merge
- $(Q) mkdir tmp-merge
- $(Q) ( cd tmp-merge ; $(AR) x ../libs/$(CONFIG)/lib${lib.name}.a )
- $(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( cd tmp-merge ; <%text>ar x ../$${l}</%text> ) ; done
- $(Q) rm -f libs/$(CONFIG)/lib${lib.name}.a tmp-merge/__.SYMDEF*
- $(Q) ar rcs libs/$(CONFIG)/lib${lib.name}.a tmp-merge/*
- $(Q) rm -rf tmp-merge
- % endif
- % endif
- <%
- if lib.get('c++', False):
- ld = '$(LDXX)'
- else:
- ld = '$(LD)'
- out_base = 'libs/$(CONFIG)/' + lib.name
- out_libbase = 'libs/$(CONFIG)/lib' + lib.name
- common = '$(LIB' + lib.name.upper() + '_OBJS) $(LDLIBS)'
- libs = ''
- lib_deps = ''
- mingw_libs = ''
- mingw_lib_deps = ''
- for dep in lib.get('deps', []):
- libs = libs + ' -l' + dep
- lib_deps = lib_deps + 'libs/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)'
- mingw_libs = mingw_libs + ' -l' + dep + '-imp'
- mingw_lib_deps = mingw_lib_deps + 'libs/$(CONFIG)/' + dep + '.$(SHARED_EXT)'
- if lib.get('secure', True):
- common = common + ' $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS)'
- lib_deps = lib_deps + ' $(OPENSSL_DEP)'
- mingw_lib_deps = mingw_lib_deps + ' $(OPENSSL_DEP)'
- %>
- % if lib.build == "all":
- ifeq ($(SYSTEM),MINGW32)
- ${out_base}.$(SHARED_EXT): $(LIB${lib.name.upper()}_OBJS) ${mingw_lib_deps}
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) ${ld} $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,--output-def=${out_base}.def -Wl,--out-implib=${out_libbase}-imp.a -o ${out_base}.$(SHARED_EXT) ${common}${mingw_libs}
- else
- ${out_libbase}.$(SHARED_EXT): $(LIB${lib.name.upper()}_OBJS) ${lib_deps}
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- ifeq ($(SYSTEM),Darwin)
- $(Q) ${ld} $(LDFLAGS) -Llibs/$(CONFIG) -dynamiclib -o ${out_libbase}.$(SHARED_EXT) ${common}${libs}
- else
- $(Q) ${ld} $(LDFLAGS) -Llibs/$(CONFIG) -shared -Wl,-soname,lib${lib.name}.so.${settings.version.major} -o ${out_libbase}.$(SHARED_EXT) ${common}${libs}
- $(Q) ln -sf lib${lib.name}.$(SHARED_EXT) ${out_libbase}.so
- endif
- endif
- % endif
- % if lib.get('secure', True):
- endif
- % endif
- deps_lib${lib.name}: $(LIB${lib.name.upper()}_DEPS)
- % if lib.get('secure', True):
- ifneq ($(NO_SECURE),true)
- % endif
- ifneq ($(NO_DEPS),true)
- -include $(LIB${lib.name.upper()}_DEPS)
- endif
- % if lib.get('secure', True):
- endif
- % endif
- % for src in lib.src:
- % if not proto_re.match(src):
- objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
- % for src2 in lib.src:
- % if proto_re.match(src2):
- ${proto_to_cc(src2)}\
- % endif
- % endfor
- % endif
- % endfor
- clean_lib${lib.name}:
- $(E) "[CLEAN] Cleaning lib${lib.name} files"
- $(Q) $(RM) $(LIB${lib.name.upper()}_OBJS)
- $(Q) $(RM) $(LIB${lib.name.upper()}_DEPS)
- $(Q) $(RM) libs/$(CONFIG)/lib${lib.name}.a
- $(Q) $(RM) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
- </%def>
- <%def name="maketarget(tgt)">
- ${tgt.name.upper()}_SRC = \\
- % for src in tgt.src:
- ${proto_to_cc(src)} \\
- % endfor
- ${tgt.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(${tgt.name.upper()}_SRC))))
- ${tgt.name.upper()}_DEPS = $(addprefix deps/$(CONFIG)/, $(addsuffix .dep, $(basename $(${tgt.name.upper()}_SRC))))
- % if tgt.get('secure', True):
- ifeq ($(NO_SECURE),true)
- bins/$(CONFIG)/${tgt.name}: openssl_dep_error
- else
- % endif
- bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\
- % for dep in tgt.deps:
- libs/$(CONFIG)/lib${dep}.a\
- % endfor
- % if tgt.get("c++", False):
- % if tgt.build == 'protoc':
- $(E) "[HOSTLD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(${tgt.name.upper()}_OBJS)\
- % else:
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(${tgt.name.upper()}_OBJS)\
- % endif
- % if tgt.build == 'test':
- $(GTEST_LIB)\
- % endif
- % else:
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LD) $(LDFLAGS) $(${tgt.name.upper()}_OBJS)\
- % endif
- % for dep in tgt.deps:
- libs/$(CONFIG)/lib${dep}.a\
- % endfor
- % if tgt.get("c++", False):
- % if tgt.build == 'protoc':
- $(HOST_LDLIBSXX)\
- % else:
- $(LDLIBSXX)\
- % endif
- % endif
- % if tgt.build == 'protoc':
- $(HOST_LDLIBS)\
- % else:
- $(LDLIBS)\
- % endif
- % if tgt.build == 'protoc':
- $(HOST_LDLIBS_PROTOC)\
- % elif tgt.get('secure', True):
- $(LDLIBS_SECURE)\
- % endif
- -o bins/$(CONFIG)/${tgt.name}
- % if tgt.get('secure', True):
- endif
- % endif
- % for src in tgt.src:
- objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
- % for dep in tgt.deps:
- libs/$(CONFIG)/lib${dep}.a\
- % endfor
- % endfor
- deps_${tgt.name}: $(${tgt.name.upper()}_DEPS)
- % if tgt.get('secure', True):
- ifneq ($(NO_SECURE),true)
- % endif
- ifneq ($(NO_DEPS),true)
- -include $(${tgt.name.upper()}_DEPS)
- endif
- % if tgt.get('secure', True):
- endif
- % endif
- clean_${tgt.name}:
- $(E) "[CLEAN] Cleaning ${tgt.name} files"
- $(Q) $(RM) $(${tgt.name.upper()}_OBJS)
- $(Q) $(RM) $(${tgt.name.upper()}_DEPS)
- $(Q) $(RM) bins/$(CONFIG)/${tgt.name}
- </%def>
- .PHONY: all strip tools \
- dep_error openssl_dep_error openssl_dep_message git_update stop \
- buildtests buildtests_c buildtests_cxx \
- test test_c test_cxx \
- install install_c install_cxx \
- install-headers install-headers_c install-headers_cxx \
- install-shared install-shared_c install-shared_cxx \
- install-static install-static_c install-static_cxx \
- strip strip-shared strip-static \
- strip_c strip-shared_c strip-static_c \
- strip_cxx strip-shared_cxx strip-static_cxx \
- clean \
- dep_c dep_cxx bins_dep_c bins_dep_cxx\
- % for lib in libs:
- deps_lib${lib.name} clean_lib${lib.name}\
- % endfor
- % for tgt in targets:
- deps_${tgt.name} clean_${tgt.name}\
- % endfor
|