|  | @@ -16,7 +16,7 @@
 | 
	
		
			
				|  |  |      m = proto_re.match(filename)
 | 
	
		
			
				|  |  |      if not m:
 | 
	
		
			
				|  |  |        return filename
 | 
	
		
			
				|  |  | -    return 'gens/' + m.group(1) + '.pb.cc'
 | 
	
		
			
				|  |  | +    return '$(GENDIR)/' + m.group(1) + '.pb.cc'
 | 
	
		
			
				|  |  |  %>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -27,6 +27,15 @@ SYSTEM = $(HOST_SYSTEM)
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +ifndef BUILDDIR
 | 
	
		
			
				|  |  | +BUILDDIR = .
 | 
	
		
			
				|  |  | +endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +BINDIR = $(BUILDDIR)/bins
 | 
	
		
			
				|  |  | +OBJDIR = $(BUILDDIR)/objs
 | 
	
		
			
				|  |  | +LIBDIR = $(BUILDDIR)/libs
 | 
	
		
			
				|  |  | +GENDIR = $(BUILDDIR)/gens
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # Configurations
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  VALID_CONFIG_opt = 1
 | 
	
	
		
			
				|  | @@ -154,7 +163,7 @@ CXXFLAGS += -std=c++11
 | 
	
		
			
				|  |  |  CPPFLAGS += -g -fPIC -Wall -Wextra -Werror -Wno-long-long -Wno-unused-parameter
 | 
	
		
			
				|  |  |  LDFLAGS += -g -fPIC
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -INCLUDES = . include gens
 | 
	
		
			
				|  |  | +INCLUDES = . include $(GENDIR)
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),Darwin)
 | 
	
		
			
				|  |  |  LIBS = m z
 | 
	
		
			
				|  |  |  else
 | 
	
	
		
			
				|  | @@ -261,9 +270,9 @@ endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ifeq ($(HAS_SYSTEM_ZLIB),false)
 | 
	
		
			
				|  |  |  ifeq ($(HAS_EMBEDDED_ZLIB),true)
 | 
	
		
			
				|  |  | -ZLIB_DEP = libs/$(CONFIG)/zlib/libz.a
 | 
	
		
			
				|  |  | +ZLIB_DEP = $(LIBDIR)/$(CONFIG)/zlib/libz.a
 | 
	
		
			
				|  |  |  CPPFLAGS += -Ithird_party/zlib
 | 
	
		
			
				|  |  | -LDFLAGS += -Llibs/$(CONFIG)/zlib
 | 
	
		
			
				|  |  | +LDFLAGS += -L$(LIBDIR)/$(CONFIG)/zlib
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  DEP_MISSING += zlib
 | 
	
		
			
				|  |  |  endif
 | 
	
	
		
			
				|  | @@ -271,10 +280,10 @@ 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
 | 
	
		
			
				|  |  | +OPENSSL_DEP = $(LIBDIR)/$(CONFIG)/openssl/libssl.a
 | 
	
		
			
				|  |  | +OPENSSL_MERGE_LIBS += $(LIBDIR)/$(CONFIG)/openssl/libssl.a $(LIBDIR)/$(CONFIG)/openssl/libcrypto.a
 | 
	
		
			
				|  |  |  CPPFLAGS += -Ithird_party/openssl/include
 | 
	
		
			
				|  |  | -LDFLAGS += -Llibs/$(CONFIG)/openssl
 | 
	
		
			
				|  |  | +LDFLAGS += -L$(LIBDIR)/$(CONFIG)/openssl
 | 
	
		
			
				|  |  |  LIBS_SECURE = dl
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  NO_SECURE = true
 | 
	
	
		
			
				|  | @@ -287,10 +296,10 @@ LDLIBS_SECURE += $(addprefix -l, $(LIBS_SECURE))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ifeq ($(HAS_SYSTEM_PROTOBUF),false)
 | 
	
		
			
				|  |  |  ifeq ($(HAS_EMBEDDED_PROTOBUF),true)
 | 
	
		
			
				|  |  | -PROTOBUF_DEP = libs/$(CONFIG)/protobuf/libprotobuf.a
 | 
	
		
			
				|  |  | +PROTOBUF_DEP = $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a
 | 
	
		
			
				|  |  |  CPPFLAGS += -Ithird_party/protobuf/src
 | 
	
		
			
				|  |  | -LDFLAGS += -Llibs/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | -PROTOC = bins/$(CONFIG)/protobuf/protoc
 | 
	
		
			
				|  |  | +LDFLAGS += -L$(LIBDIR)/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | +PROTOC = $(BINDIR)/$(CONFIG)/protobuf/protoc
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  NO_PROTOBUF = true
 | 
	
		
			
				|  |  |  endif
 | 
	
	
		
			
				|  | @@ -312,7 +321,7 @@ endif
 | 
	
		
			
				|  |  |  PROTOC_PLUGINS=\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'protoc':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -320,7 +329,7 @@ ifeq ($(DEP_MISSING),)
 | 
	
		
			
				|  |  |  all: static shared\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'all':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -408,7 +417,7 @@ stop:
 | 
	
		
			
				|  |  |  	@false
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  | -${tgt.name}: bins/$(CONFIG)/${tgt.name}
 | 
	
		
			
				|  |  | +${tgt.name}: $(BINDIR)/$(CONFIG)/${tgt.name}
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  run_dep_checks:
 | 
	
	
		
			
				|  | @@ -418,15 +427,15 @@ run_dep_checks:
 | 
	
		
			
				|  |  |  	$(PROTOBUF_CHECK_CMD) || true
 | 
	
		
			
				|  |  |  	$(PROTOC_CHECK_CMD) || true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/zlib/libz.a:
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/zlib/libz.a:
 | 
	
		
			
				|  |  |  	$(E) "[MAKE]    Building zlib"
 | 
	
		
			
				|  |  |  	$(Q)(cd third_party/zlib ; CC="$(CC)" CFLAGS="-fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG))" ./configure --static)
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/zlib clean
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/zlib
 | 
	
		
			
				|  |  | -	$(Q)mkdir -p libs/$(CONFIG)/zlib
 | 
	
		
			
				|  |  | -	$(Q)cp third_party/zlib/libz.a libs/$(CONFIG)/zlib
 | 
	
		
			
				|  |  | +	$(Q)mkdir -p $(LIBDIR)/$(CONFIG)/zlib
 | 
	
		
			
				|  |  | +	$(Q)cp third_party/zlib/libz.a $(LIBDIR)/$(CONFIG)/zlib
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/openssl/libssl.a:
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/openssl/libssl.a:
 | 
	
		
			
				|  |  |  	$(E) "[MAKE]    Building openssl for $(SYSTEM)"
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),Darwin)
 | 
	
		
			
				|  |  |  	$(Q)(cd third_party/openssl ; CC="$(CC) -fPIC -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG))" ./Configure darwin64-x86_64-cc $(OPENSSL_CONFIG_$(CONFIG)))
 | 
	
	
		
			
				|  | @@ -435,30 +444,30 @@ else
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/openssl clean
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/openssl build_crypto build_ssl
 | 
	
		
			
				|  |  | -	$(Q)mkdir -p libs/$(CONFIG)/openssl
 | 
	
		
			
				|  |  | -	$(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a libs/$(CONFIG)/openssl
 | 
	
		
			
				|  |  | +	$(Q)mkdir -p $(LIBDIR)/$(CONFIG)/openssl
 | 
	
		
			
				|  |  | +	$(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a $(LIBDIR)/$(CONFIG)/openssl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  third_party/protobuf/configure:
 | 
	
		
			
				|  |  |  	$(E) "[AUTOGEN] Preparing protobuf"
 | 
	
		
			
				|  |  |  	$(Q)(cd third_party/protobuf ; autoreconf -f -i -Wall,no-obsolete)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/protobuf/libprotobuf.a: third_party/protobuf/configure
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a: third_party/protobuf/configure
 | 
	
		
			
				|  |  |  	$(E) "[MAKE]    Building protobuf"
 | 
	
		
			
				|  |  |  	$(Q)(cd third_party/protobuf ; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g" CXXFLAGS="-DLANG_CXX11 -std=c++11" CPPFLAGS="$(CPPFLAGS_$(CONFIG)) -g" ./configure --disable-shared --enable-static)
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/protobuf clean
 | 
	
		
			
				|  |  |  	$(Q)$(MAKE) -C third_party/protobuf
 | 
	
		
			
				|  |  | -	$(Q)mkdir -p libs/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | -	$(Q)mkdir -p bins/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | -	$(Q)cp third_party/protobuf/src/.libs/libprotoc.a libs/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | -	$(Q)cp third_party/protobuf/src/.libs/libprotobuf.a libs/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | -	$(Q)cp third_party/protobuf/src/protoc bins/$(CONFIG)/protobuf
 | 
	
		
			
				|  |  | +	$(Q)mkdir -p $(LIBDIR)/$(CONFIG)/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: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'all' and lib.language == 'c':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -466,7 +475,7 @@ static_c: \
 | 
	
		
			
				|  |  |  static_cxx: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'all' and lib.language == 'c++':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -476,7 +485,7 @@ shared: shared_c shared_cxx
 | 
	
		
			
				|  |  |  shared_c: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'all' and lib.language == 'c':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -484,7 +493,7 @@ shared_c: \
 | 
	
		
			
				|  |  |  shared_cxx: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'all' and lib.language == 'c++':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -494,7 +503,7 @@ privatelibs: privatelibs_c privatelibs_cxx
 | 
	
		
			
				|  |  |  privatelibs_c: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'private' and lib.language == 'c':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -502,7 +511,7 @@ privatelibs_c: \
 | 
	
		
			
				|  |  |  privatelibs_cxx: \
 | 
	
		
			
				|  |  |  % for lib in libs:
 | 
	
		
			
				|  |  |  % if lib.build == 'private' and lib.language == 'c++':
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -512,7 +521,7 @@ buildtests: buildtests_c buildtests_cxx
 | 
	
		
			
				|  |  |  buildtests_c: privatelibs_c\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'test' and not tgt.language == 'c++':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -520,7 +529,7 @@ buildtests_c: privatelibs_c\
 | 
	
		
			
				|  |  |  buildtests_cxx: privatelibs_cxx\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'test' and tgt.language == 'c++':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -531,7 +540,7 @@ test_c: buildtests_c
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'test' and tgt.get('run', True) and not tgt.language == 'c++':
 | 
	
		
			
				|  |  |  	$(E) "[RUN]     Testing ${tgt.name}"
 | 
	
		
			
				|  |  | -	$(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
 | 
	
		
			
				|  |  | +	$(Q) $(BINDIR)/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -540,7 +549,7 @@ test_cxx: buildtests_cxx
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'test' and tgt.get('run', True) and tgt.language == 'c++':
 | 
	
		
			
				|  |  |  	$(E) "[RUN]     Testing ${tgt.name}"
 | 
	
		
			
				|  |  | -	$(Q) ./bins/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
 | 
	
		
			
				|  |  | +	$(Q) $(BINDIR)/$(CONFIG)/${tgt.name} || ( echo test ${tgt.name} failed ; exit 1 )
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -548,7 +557,7 @@ test_cxx: buildtests_cxx
 | 
	
		
			
				|  |  |  tools: privatelibs\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'tool':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -556,7 +565,7 @@ tools: privatelibs\
 | 
	
		
			
				|  |  |  buildbenchmarks: privatelibs\
 | 
	
		
			
				|  |  |  % for tgt in targets:
 | 
	
		
			
				|  |  |  % if tgt.build == 'benchmark':
 | 
	
		
			
				|  |  | - bins/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  | + $(BINDIR)/$(CONFIG)/${tgt.name}\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -580,7 +589,7 @@ ifeq ($(CONFIG),opt)
 | 
	
		
			
				|  |  |  % if lib.language == "c":
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  	$(E) "[STRIP]   Stripping lib${lib.name}.a"
 | 
	
		
			
				|  |  | -	$(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  | +	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -592,7 +601,7 @@ ifeq ($(CONFIG),opt)
 | 
	
		
			
				|  |  |  % if lib.language == "c++":
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  	$(E) "[STRIP]   Stripping lib${lib.name}.a"
 | 
	
		
			
				|  |  | -	$(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  | +	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -604,7 +613,7 @@ ifeq ($(CONFIG),opt)
 | 
	
		
			
				|  |  |  % if lib.language == "c":
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  	$(E) "[STRIP]   Stripping lib${lib.name}.so"
 | 
	
		
			
				|  |  | -	$(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  | +	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -616,7 +625,7 @@ ifeq ($(CONFIG),opt)
 | 
	
		
			
				|  |  |  % if lib.language == "c++":
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  	$(E) "[STRIP]   Stripping lib${lib.name}.so"
 | 
	
		
			
				|  |  | -	$(Q) $(STRIP) libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  | +	$(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -624,32 +633,32 @@ endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % for p in protos:
 | 
	
		
			
				|  |  |  ifeq ($(NO_PROTOC),true)
 | 
	
		
			
				|  |  | -gens/${p}.pb.cc: protoc_dep_error
 | 
	
		
			
				|  |  | +$(GENDIR)/${p}.pb.cc: protoc_dep_error
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  | -gens/${p}.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
 | 
	
		
			
				|  |  | +$(GENDIR)/${p}.pb.cc: ${p}.proto $(PROTOBUF_DEP) $(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 $<
 | 
	
		
			
				|  |  | +	$(Q) $(PROTOC) --cpp_out=$(GENDIR) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/cpp_plugin $<
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/%.o : %.c
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/%.o : %.c
 | 
	
		
			
				|  |  |  	$(E) "[C]       Compiling $<"
 | 
	
		
			
				|  |  |  	$(Q) mkdir -p `dirname $@`
 | 
	
		
			
				|  |  |  	$(Q) $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $<
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/%.o : gens/%.pb.cc
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/%.o : $(GENDIR)/%.pb.cc
 | 
	
		
			
				|  |  |  	$(E) "[CXX]     Compiling $<"
 | 
	
		
			
				|  |  |  	$(Q) mkdir -p `dirname $@`
 | 
	
		
			
				|  |  |  	$(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $<
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/src/compiler/%.o : src/compiler/%.cc
 | 
	
		
			
				|  |  |  	$(E) "[HOSTCXX] Compiling $<"
 | 
	
		
			
				|  |  |  	$(Q) mkdir -p `dirname $@`
 | 
	
		
			
				|  |  |  	$(Q) $(HOST_CXX) $(HOST_CXXFLAGS) $(HOST_CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $<
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/%.o : %.cc
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/%.o : %.cc
 | 
	
		
			
				|  |  |  	$(E) "[CXX]     Compiling $<"
 | 
	
		
			
				|  |  |  	$(Q) mkdir -p `dirname $@`
 | 
	
		
			
				|  |  |  	$(Q) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -MF $(addsuffix .dep, $(basename $@)) -c -o $@ $<
 | 
	
	
		
			
				|  | @@ -678,7 +687,7 @@ install-static_c: static_c strip-static_c
 | 
	
		
			
				|  |  |  % if lib.language == "c":
 | 
	
		
			
				|  |  |  % 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
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -688,7 +697,7 @@ install-static_cxx: static_cxx strip-static_cxx
 | 
	
		
			
				|  |  |  % if lib.language == "c++":
 | 
	
		
			
				|  |  |  % 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
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endfor
 | 
	
	
		
			
				|  | @@ -699,11 +708,11 @@ install-shared_c: shared_c strip-shared_c
 | 
	
		
			
				|  |  |  % 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
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/${lib.name}.$(SHARED_EXT) $(prefix)/lib/${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(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)
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(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
 | 
	
	
		
			
				|  | @@ -723,11 +732,11 @@ install-shared_cxx: shared_cxx strip-shared_cxx
 | 
	
		
			
				|  |  |  % 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
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/${lib.name}.$(SHARED_EXT) $(prefix)/lib/${lib.name}.$(SHARED_EXT)
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(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)
 | 
	
		
			
				|  |  | +	$(Q) $(INSTALL) $(LIBDIR)/$(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
 | 
	
	
		
			
				|  | @@ -742,7 +751,7 @@ endif
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  clean:
 | 
	
		
			
				|  |  | -	$(Q) $(RM) -rf objs libs bins gens
 | 
	
		
			
				|  |  | +	$(Q) $(RM) -rf $(OBJDIR) $(LIBDIR) $(BINDIR) $(GENDIR)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # The various libraries
 | 
	
	
		
			
				|  | @@ -780,7 +789,7 @@ PUBLIC_HEADERS_C += \\
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -LIB${lib.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(LIB${lib.name.upper()}_SRC))))
 | 
	
		
			
				|  |  | +LIB${lib.name.upper()}_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIB${lib.name.upper()}_SRC))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ## If the library requires OpenSSL with ALPN, let's add some restrictions.
 | 
	
		
			
				|  |  |  % if lib.get('secure', True):
 | 
	
	
		
			
				|  | @@ -788,13 +797,13 @@ ifeq ($(NO_SECURE),true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # You can't build secure libraries if you don't have OpenSSL with ALPN.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.a: openssl_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.a: openssl_dep_error
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),MINGW32)
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/${lib.name}.$(SHARED_EXT): openssl_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/${lib.name}.$(SHARED_EXT): openssl_dep_error
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): openssl_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): openssl_dep_error
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -805,13 +814,13 @@ ifeq ($(NO_PROTOBUF),true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),MINGW32)
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -827,7 +836,7 @@ ${src}: $(OPENSSL_DEP)
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP) $(OPENSSL_DEP)\
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP) $(OPENSSL_DEP)\
 | 
	
		
			
				|  |  |  ## The else here corresponds to the if secure earlier.
 | 
	
		
			
				|  |  |  % else:
 | 
	
		
			
				|  |  |  % if lib.language == 'c++':
 | 
	
	
		
			
				|  | @@ -835,20 +844,20 @@ ifeq ($(NO_PROTOBUF),true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.a: protobuf_dep_error
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % if lib.build == "all":
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),MINGW32)
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.$(SHARED_EXT): protobuf_dep_error
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  | -libs/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP)\
 | 
	
		
			
				|  |  | +$(LIBDIR)/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % if lib.language == 'c++':
 | 
	
		
			
				|  |  |   $(PROTOBUF_DEP)\
 | 
	
	
		
			
				|  | @@ -856,21 +865,21 @@ libs/$(CONFIG)/lib${lib.name}.a: $(ZLIB_DEP)\
 | 
	
		
			
				|  |  |   $(LIB${lib.name.upper()}_OBJS)
 | 
	
		
			
				|  |  |  	$(E) "[AR]      Creating $@"
 | 
	
		
			
				|  |  |  	$(Q) mkdir -p `dirname $@`
 | 
	
		
			
				|  |  | -	$(Q) rm -f libs/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  | -	$(Q) $(AR) rcs libs/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS)
 | 
	
		
			
				|  |  | +	$(Q) rm -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
 | 
	
		
			
				|  |  | +	$(Q) $(AR) rcs $(LIBDIR)/$(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) ( cd tmp-merge ; $(AR) x ../$(LIBDIR)/$(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 -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a tmp-merge/__.SYMDEF*
 | 
	
		
			
				|  |  | +	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a tmp-merge/*
 | 
	
		
			
				|  |  |  	$(Q) rm -rf tmp-merge
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  ifeq ($(SYSTEM),Darwin)
 | 
	
		
			
				|  |  | -	$(Q) ranlib libs/$(CONFIG)/lib${lib.name}.a 
 | 
	
		
			
				|  |  | +	$(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a 
 | 
	
		
			
				|  |  |  endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <%
 | 
	
	
		
			
				|  | @@ -879,8 +888,8 @@ endif
 | 
	
		
			
				|  |  |    else:
 | 
	
		
			
				|  |  |      ld = '$(LD)'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  out_base = 'libs/$(CONFIG)/' + lib.name
 | 
	
		
			
				|  |  | -  out_libbase = 'libs/$(CONFIG)/lib' + lib.name
 | 
	
		
			
				|  |  | +  out_base = '$(LIBDIR)/$(CONFIG)/' + lib.name
 | 
	
		
			
				|  |  | +  out_libbase = '$(LIBDIR)/$(CONFIG)/lib' + lib.name
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    common = '$(LIB' + lib.name.upper() + '_OBJS) $(LDLIBS)'
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -890,9 +899,9 @@ endif
 | 
	
		
			
				|  |  |    mingw_lib_deps = ' $(ZLIB_DEP)'
 | 
	
		
			
				|  |  |    for dep in lib.get('deps', []):
 | 
	
		
			
				|  |  |      libs = libs + ' -l' + dep
 | 
	
		
			
				|  |  | -    lib_deps = lib_deps + ' libs/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)'
 | 
	
		
			
				|  |  | +    lib_deps = lib_deps + ' $(LIBDIR)/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)'
 | 
	
		
			
				|  |  |      mingw_libs = mingw_libs + ' -l' + dep + '-imp'
 | 
	
		
			
				|  |  | -    mingw_lib_deps = mingw_lib_deps + 'libs/$(CONFIG)/' + dep + '.$(SHARED_EXT)'
 | 
	
		
			
				|  |  | +    mingw_lib_deps = mingw_lib_deps + '$(LIBDIR)/$(CONFIG)/' + dep + '.$(SHARED_EXT)'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if lib.get('secure', True):
 | 
	
		
			
				|  |  |      common = common + ' $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS)'
 | 
	
	
		
			
				|  | @@ -905,15 +914,15 @@ 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}
 | 
	
		
			
				|  |  | +	$(Q) ${ld} $(LDFLAGS) -L$(LIBDIR)/$(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}
 | 
	
		
			
				|  |  | +	$(Q) ${ld} $(LDFLAGS) -L$(LIBDIR)/$(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) ${ld} $(LDFLAGS) -L$(LIBDIR)/$(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.${settings.version.major}
 | 
	
		
			
				|  |  |  	$(Q) ln -sf lib${lib.name}.$(SHARED_EXT) ${out_libbase}.so
 | 
	
		
			
				|  |  |  endif
 | 
	
	
		
			
				|  | @@ -944,7 +953,7 @@ endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % for src in lib.src:
 | 
	
		
			
				|  |  |  % if not proto_re.match(src):
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
 | 
	
		
			
				|  |  |  % for src2 in lib.src:
 | 
	
		
			
				|  |  |  % if proto_re.match(src2):
 | 
	
		
			
				|  |  |      ${proto_to_cc(src2)}\
 | 
	
	
		
			
				|  | @@ -963,14 +972,14 @@ ${tgt.name.upper()}_SRC = \\
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -${tgt.name.upper()}_OBJS = $(addprefix objs/$(CONFIG)/, $(addsuffix .o, $(basename $(${tgt.name.upper()}_SRC))))
 | 
	
		
			
				|  |  | +${tgt.name.upper()}_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(${tgt.name.upper()}_SRC))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % if tgt.get('secure', True):
 | 
	
		
			
				|  |  |  ifeq ($(NO_SECURE),true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # You can't build secure targets if you don't have OpenSSL with ALPN.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -bins/$(CONFIG)/${tgt.name}: openssl_dep_error
 | 
	
		
			
				|  |  | +$(BINDIR)/$(CONFIG)/${tgt.name}: openssl_dep_error
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -990,16 +999,16 @@ ifeq ($(NO_PROTOBUF),true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # You can't build the protoc plugins if you don't have protobuf 3.0.0+.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -bins/$(CONFIG)/${tgt.name}: protobuf_dep_error
 | 
	
		
			
				|  |  | +$(BINDIR)/$(CONFIG)/${tgt.name}: protobuf_dep_error
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  else
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -bins/$(CONFIG)/${tgt.name}: $(PROTOBUF_DEP) $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  | +$(BINDIR)/$(CONFIG)/${tgt.name}: $(PROTOBUF_DEP) $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  |  % else:
 | 
	
		
			
				|  |  | -bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  | +$(BINDIR)/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % for dep in tgt.deps:
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % if tgt.language == "c++":
 | 
	
	
		
			
				|  | @@ -1023,7 +1032,7 @@ bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  |  	$(Q) $(LD) $(LDFLAGS) $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  % for dep in tgt.deps:
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  % if tgt.language == "c++":
 | 
	
		
			
				|  |  |  % if tgt.build == 'protoc':
 | 
	
	
		
			
				|  | @@ -1042,7 +1051,7 @@ bins/$(CONFIG)/${tgt.name}: $(${tgt.name.upper()}_OBJS)\
 | 
	
		
			
				|  |  |  % elif tgt.get('secure', True):
 | 
	
		
			
				|  |  |   $(LDLIBS_SECURE)\
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  | - -o bins/$(CONFIG)/${tgt.name}
 | 
	
		
			
				|  |  | + -o $(BINDIR)/$(CONFIG)/${tgt.name}
 | 
	
		
			
				|  |  |  % if tgt.build == 'protoc':
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  endif
 | 
	
	
		
			
				|  | @@ -1053,9 +1062,9 @@ endif
 | 
	
		
			
				|  |  |  % endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % for src in tgt.src:
 | 
	
		
			
				|  |  | -objs/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
 | 
	
		
			
				|  |  | +$(OBJDIR)/$(CONFIG)/${os.path.splitext(src)[0]}.o: \
 | 
	
		
			
				|  |  |  % for dep in tgt.deps:
 | 
	
		
			
				|  |  | - libs/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  | + $(LIBDIR)/$(CONFIG)/lib${dep}.a\
 | 
	
		
			
				|  |  |  % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  % endfor
 |