Makefile 11.8 KB
Newer Older
1
NEED_LIBPROTOC=1
2
include config.mk
3 4

# Notes on the flags:
5 6 7 8
# 1. Added -fno-omit-frame-pointer: perf/tcmalloc-profiler use frame pointers by default
# 2. Added -D__const__= : Avoid over-optimizations of TLS variables by GCC>=4.8
# 3. Removed -Werror: Not block compilation for non-vital warnings, especially when the
#    code is tested on newer systems. If the code is used in production, add -Werror back
Zhangyi Chen's avatar
Zhangyi Chen committed
9
CPPFLAGS+=-DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__= -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -DBRPC_REVISION=\"$(shell git rev-parse --short HEAD)\"
10 11
CXXFLAGS=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer -std=c++0x
CFLAGS=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer
12 13
DEBUG_CXXFLAGS = $(filter-out -DNDEBUG,$(CXXFLAGS)) -DUNIT_TEST -DBVAR_NOT_LINK_DEFAULT_VARIABLES
DEBUG_CFLAGS = $(filter-out -DNDEBUG,$(CFLAGS)) -DUNIT_TEST
gejun's avatar
gejun committed
14
HDRPATHS=-I./src $(addprefix -I, $(HDRS))
15
LIBPATHS = $(addprefix -L, $(LIBS))
16
COMMA = ,
17
SOPATHS = $(addprefix -Wl$(COMMA)-rpath$(COMMA), $(LIBS))
gejun's avatar
gejun committed
18
SRCEXTS = .c .cc .cpp .proto
19

20
SOEXT = so
21
ifeq ($(SYSTEM),Darwin)
22
    SOEXT = dylib
23 24
endif

25
#required by butil/crc32.cc to boost performance for 10x
26 27 28 29
ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0)
	CXXFLAGS+=-msse4 -msse4.2
endif
#not solved yet
30 31
ifeq ($(CC),gcc)
 ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0)
gejun's avatar
gejun committed
32
	CXXFLAGS+=-Wno-aligned-new
33
 endif
34
endif
gejun's avatar
gejun committed
35

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
BUTIL_SOURCES = \
    src/butil/third_party/dmg_fp/g_fmt.cc \
    src/butil/third_party/dmg_fp/dtoa_wrapper.cc \
    src/butil/third_party/dynamic_annotations/dynamic_annotations.c \
    src/butil/third_party/icu/icu_utf.cc \
    src/butil/third_party/superfasthash/superfasthash.c \
    src/butil/third_party/modp_b64/modp_b64.cc \
    src/butil/third_party/symbolize/demangle.cc \
    src/butil/third_party/symbolize/symbolize.cc \
    src/butil/third_party/snappy/snappy-sinksource.cc \
    src/butil/third_party/snappy/snappy-stubs-internal.cc \
    src/butil/third_party/snappy/snappy.cc \
    src/butil/third_party/murmurhash3/murmurhash3.cpp \
    src/butil/arena.cpp \
    src/butil/at_exit.cc \
    src/butil/atomicops_internals_x86_gcc.cc \
    src/butil/base64.cc \
    src/butil/big_endian.cc \
    src/butil/cpu.cc \
    src/butil/debug/alias.cc \
    src/butil/debug/asan_invalid_access.cc \
    src/butil/debug/crash_logging.cc \
    src/butil/debug/debugger.cc \
    src/butil/debug/debugger_posix.cc \
    src/butil/debug/dump_without_crashing.cc \
    src/butil/debug/proc_maps_linux.cc \
    src/butil/debug/stack_trace.cc \
    src/butil/debug/stack_trace_posix.cc \
    src/butil/environment.cc \
    src/butil/files/file.cc \
    src/butil/files/file_posix.cc \
    src/butil/files/file_enumerator.cc \
    src/butil/files/file_enumerator_posix.cc \
    src/butil/files/file_path.cc \
    src/butil/files/file_path_constants.cc \
    src/butil/files/memory_mapped_file.cc \
    src/butil/files/memory_mapped_file_posix.cc \
    src/butil/files/scoped_file.cc \
    src/butil/files/scoped_temp_dir.cc \
    src/butil/file_util.cc \
    src/butil/file_util_posix.cc \
    src/butil/guid.cc \
    src/butil/guid_posix.cc \
    src/butil/hash.cc \
    src/butil/lazy_instance.cc \
    src/butil/location.cc \
    src/butil/md5.cc \
    src/butil/memory/aligned_memory.cc \
    src/butil/memory/ref_counted.cc \
    src/butil/memory/ref_counted_memory.cc \
    src/butil/memory/singleton.cc \
    src/butil/memory/weak_ptr.cc \
    src/butil/posix/file_descriptor_shuffle.cc \
    src/butil/posix/global_descriptors.cc \
90
    src/butil/process_util.cc \
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    src/butil/rand_util.cc \
    src/butil/rand_util_posix.cc \
    src/butil/fast_rand.cpp \
    src/butil/safe_strerror_posix.cc \
    src/butil/sha1_portable.cc \
    src/butil/strings/latin1_string_conversions.cc \
    src/butil/strings/nullable_string16.cc \
    src/butil/strings/safe_sprintf.cc \
    src/butil/strings/string16.cc \
    src/butil/strings/string_number_conversions.cc \
    src/butil/strings/string_split.cc \
    src/butil/strings/string_piece.cc \
    src/butil/strings/string_util.cc \
    src/butil/strings/string_util_constants.cc \
    src/butil/strings/stringprintf.cc \
    src/butil/strings/utf_offset_string_conversions.cc \
    src/butil/strings/utf_string_conversion_utils.cc \
    src/butil/strings/utf_string_conversions.cc \
    src/butil/synchronization/cancellation_flag.cc \
    src/butil/synchronization/condition_variable_posix.cc \
    src/butil/synchronization/waitable_event_posix.cc \
    src/butil/threading/non_thread_safe_impl.cc \
    src/butil/threading/platform_thread_posix.cc \
    src/butil/threading/simple_thread.cc \
    src/butil/threading/thread_checker_impl.cc \
    src/butil/threading/thread_collision_warner.cc \
    src/butil/threading/thread_id_name_manager.cc \
    src/butil/threading/thread_local_posix.cc \
    src/butil/threading/thread_local_storage.cc \
    src/butil/threading/thread_local_storage_posix.cc \
    src/butil/threading/thread_restrictions.cc \
    src/butil/threading/watchdog.cc \
    src/butil/time/clock.cc \
    src/butil/time/default_clock.cc \
    src/butil/time/default_tick_clock.cc \
    src/butil/time/tick_clock.cc \
    src/butil/time/time.cc \
    src/butil/time/time_posix.cc \
    src/butil/version.cc \
    src/butil/logging.cc \
    src/butil/class_name.cpp \
    src/butil/errno.cpp \
    src/butil/find_cstr.cpp \
    src/butil/status.cpp \
    src/butil/string_printf.cpp \
    src/butil/thread_local.cpp \
    src/butil/unix_socket.cpp \
    src/butil/endpoint.cpp \
    src/butil/fd_utility.cpp \
    src/butil/files/temp_file.cpp \
    src/butil/files/file_watcher.cpp \
    src/butil/time.cpp \
    src/butil/zero_copy_stream_as_streambuf.cpp \
    src/butil/crc32c.cc \
    src/butil/containers/case_ignored_flat_map.cpp \
146
    src/butil/iobuf.cpp \
147
    src/butil/binary_printer.cpp \
148
    src/butil/recordio.cc \
149
    src/butil/popen.cpp
gejun's avatar
gejun committed
150

gejun's avatar
gejun committed
151 152
ifeq ($(SYSTEM), Linux)
    BUTIL_SOURCES += src/butil/file_util_linux.cc \
153 154
        src/butil/threading/platform_thread_linux.cc \
        src/butil/strings/sys_string_conversions_posix.cc
gejun's avatar
gejun committed
155 156 157
endif
ifeq ($(SYSTEM), Darwin)
    BUTIL_SOURCES += src/butil/mac/bundle_locations.mm \
158 159 160 161 162 163
		src/butil/mac/foundation_util.mm \
		src/butil/file_util_mac.mm \
		src/butil/threading/platform_thread_mac.mm \
		src/butil/strings/sys_string_conversions_mac.mm \
		src/butil/time/time_mac.cc \
		src/butil/mac/scoped_mach_port.cc
gejun's avatar
gejun committed
164 165
endif

166
BUTIL_OBJS = $(addsuffix .o, $(basename $(BUTIL_SOURCES)))
gejun's avatar
gejun committed
167

gejun's avatar
gejun committed
168
BVAR_DIRS = src/bvar src/bvar/detail
gejun's avatar
gejun committed
169 170 171
BVAR_SOURCES = $(foreach d,$(BVAR_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BVAR_OBJS = $(addsuffix .o, $(basename $(BVAR_SOURCES))) 

gejun's avatar
gejun committed
172
BTHREAD_DIRS = src/bthread
gejun's avatar
gejun committed
173 174 175
BTHREAD_SOURCES = $(foreach d,$(BTHREAD_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BTHREAD_OBJS = $(addsuffix .o, $(basename $(BTHREAD_SOURCES))) 

gejun's avatar
gejun committed
176
JSON2PB_DIRS = src/json2pb
gejun's avatar
gejun committed
177 178 179
JSON2PB_SOURCES = $(foreach d,$(JSON2PB_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
JSON2PB_OBJS = $(addsuffix .o, $(basename $(JSON2PB_SOURCES))) 

gejun's avatar
gejun committed
180
BRPC_DIRS = src/brpc src/brpc/details src/brpc/builtin src/brpc/policy
181 182 183
THRIFT_SOURCES = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/thrift*,$(SRCEXTS))))
BRPC_SOURCES_ALL = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BRPC_SOURCES = $(filter-out $(THRIFT_SOURCES), $(BRPC_SOURCES_ALL))
gejun's avatar
gejun committed
184
BRPC_PROTOS = $(filter %.proto,$(BRPC_SOURCES))
185
BRPC_CFAMILIES = $(filter-out %.proto %.pb.cc,$(BRPC_SOURCES))
186
BRPC_OBJS = $(BRPC_PROTOS:.proto=.pb.o) $(addsuffix .o, $(basename $(BRPC_CFAMILIES)))
gejun's avatar
gejun committed
187 188

MCPACK2PB_SOURCES = \
gejun's avatar
gejun committed
189 190 191 192 193
	src/mcpack2pb/field_type.cpp \
	src/mcpack2pb/mcpack2pb.cpp \
	src/mcpack2pb/parser.cpp \
	src/mcpack2pb/serializer.cpp
MCPACK2PB_OBJS = src/idl_options.pb.o $(addsuffix .o, $(basename $(MCPACK2PB_SOURCES)))
gejun's avatar
gejun committed
194

195 196 197 198
ifeq (ENABLE_THRIFT_FRAMED_PROTOCOL, $(findstring ENABLE_THRIFT_FRAMED_PROTOCOL, $(CPPFLAGS)))
    THRIFT_OBJS = $(addsuffix .o, $(basename $(THRIFT_SOURCES)))
endif

199
OBJS=$(BUTIL_OBJS) $(BVAR_OBJS) $(BTHREAD_OBJS) $(JSON2PB_OBJS) $(MCPACK2PB_OBJS) $(BRPC_OBJS) $(THRIFT_OBJS)
200 201

BVAR_DEBUG_OBJS=$(BUTIL_OBJS:.o=.dbg.o) $(BVAR_OBJS:.o=.dbg.o)
gejun's avatar
gejun committed
202
DEBUG_OBJS = $(OBJS:.o=.dbg.o)
gejun's avatar
gejun committed
203

204 205
PROTOS=$(BRPC_PROTOS) src/idl_options.proto

gejun's avatar
gejun committed
206
.PHONY:all
207
all:  protoc-gen-mcpack libbrpc.a libbrpc.$(SOEXT) output/include output/lib output/bin
gejun's avatar
gejun committed
208

209
.PHONY:debug
210
debug: test/libbrpc.dbg.$(SOEXT) test/libbvar.dbg.a
211

gejun's avatar
gejun committed
212
.PHONY:clean
213
clean:
gejun's avatar
gejun committed
214
	@echo "Cleaning"
215
	@rm -rf src/mcpack2pb/generator.o protoc-gen-mcpack libbrpc.a libbrpc.$(SOEXT) $(OBJS) output/include output/lib output/bin $(PROTOS:.proto=.pb.h) $(PROTOS:.proto=.pb.cc)
gejun's avatar
gejun committed
216

217 218
.PHONY:clean_debug
clean_debug:
219
	@rm -rf test/libbrpc.dbg.$(SOEXT) test/libbvar.dbg.a $(DEBUG_OBJS)
220 221

.PRECIOUS: %.o
222

chenzhangyi01's avatar
chenzhangyi01 committed
223
protoc-gen-mcpack: src/idl_options.pb.cc src/mcpack2pb/generator.o libbrpc.a
gejun's avatar
gejun committed
224
	@echo "Linking $@"
225
ifeq ($(SYSTEM),Linux)
226
	@$(CXX) -o $@ $(HDRPATHS) $(LIBPATHS) -std=c++0x -Xlinker "-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS)
227
else ifeq ($(SYSTEM),Darwin)
228
	@$(CXX) -o $@ $(HDRPATHS) $(LIBPATHS) -std=c++0x $^ $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
229
endif
gejun's avatar
gejun committed
230

231
# force generation of pb headers before compiling to avoid fail-to-import issues in compiling pb.cc
gejun's avatar
gejun committed
232
libbrpc.a:$(BRPC_PROTOS:.proto=.pb.h) $(OBJS)
233
	@echo "Packing $@"
234
	@ar crs $@ $(filter %.o,$^)
235

236
libbrpc.$(SOEXT):$(BRPC_PROTOS:.proto=.pb.h) $(OBJS)
237
	@echo "Linking $@"
238
ifeq ($(SYSTEM),Linux)
239
	@$(CXX) -shared -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $(filter %.o,$^) -Xlinker "-)" $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
240 241 242
else ifeq ($(SYSTEM),Darwin)
	@$(CXX) -dynamiclib -Wl,-headerpad_max_install_names -o $@ -install_name @rpath/$@ $(LIBPATHS) $(SOPATHS) $(filter %.o,$^) $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
endif
243

244
test/libbvar.dbg.a:$(BVAR_DEBUG_OBJS)
245 246
	@echo "Packing $@"
	@ar crs $@ $^
247

248 249 250 251 252
test/libbrpc.dbg.$(SOEXT):$(BRPC_PROTOS:.proto=.pb.h) $(DEBUG_OBJS)
	@echo "Linking $@"
ifeq ($(SYSTEM),Linux)
	@$(CXX) -shared -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $(filter %.o,$^) -Xlinker "-)" $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
else ifeq ($(SYSTEM),Darwin)
zhujiashun's avatar
zhujiashun committed
253
	@$(CXX) -dynamiclib -Wl,-headerpad_max_install_names -o $@ -install_name @rpath/libbrpc.dbg.$(SOEXT) $(LIBPATHS) $(SOPATHS) $(filter %.o,$^) $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
254
endif
gejun's avatar
gejun committed
255

gejun's avatar
gejun committed
256 257 258
.PHONY:output/include
output/include:
	@echo "Copying to $@"
gejun's avatar
gejun committed
259 260 261
	@for dir in `find src -type f -name "*.h" -exec dirname {} \\; | sed -e 's/^src\///g' -e '/^src$$/d' | sort | uniq`; do mkdir -p $@/$$dir && cp src/$$dir/*.h $@/$$dir/; done
	@for dir in `find src -type f -name "*.hpp" -exec dirname {} \\; | sed -e 's/^src\///g' -e '/^src$$/d' | sort | uniq`; do mkdir -p $@/$$dir && cp src/$$dir/*.hpp $@/$$dir/; done
	@cp src/idl_options.proto src/idl_options.pb.h $@
gejun's avatar
gejun committed
262 263

.PHONY:output/lib
264
output/lib:libbrpc.a libbrpc.$(SOEXT)
gejun's avatar
gejun committed
265 266 267 268 269 270 271 272 273 274
	@echo "Copying to $@"
	@mkdir -p $@
	@cp $^ $@

.PHONY:output/bin
output/bin:protoc-gen-mcpack
	@echo "Copying to $@"
	@mkdir -p $@
	@cp $^ $@

275
%.pb.cc %.pb.h:%.proto
gejun's avatar
gejun committed
276
	@echo "Generating $@"
gejun's avatar
gejun committed
277
	@$(PROTOC) --cpp_out=./src --proto_path=./src --proto_path=$(PROTOBUF_HDR) $<
gejun's avatar
gejun committed
278 279 280

%.o:%.cpp
	@echo "Compiling $@"
281
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
282

zhujiashun's avatar
zhujiashun committed
283 284 285 286 287 288 289 290
%http2_rpc_protocol.dbg.o:%http2_rpc_protocol.cpp
	@echo "Compiling $@ with O2"
	@$(CXX) -c $(HDRPATHS) -O2 $(DEBUG_CXXFLAGS) $< -o $@

%hpack.dbg.o:%hpack.cpp
	@echo "Compiling $@ with O2"
	@$(CXX) -c $(HDRPATHS) -O2 $(DEBUG_CXXFLAGS) $< -o $@

291 292
%.dbg.o:%.cpp
	@echo "Compiling $@"
293
	@$(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@
gejun's avatar
gejun committed
294 295 296

%.o:%.cc
	@echo "Compiling $@"
297
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
298 299 300

%.dbg.o:%.cc
	@echo "Compiling $@"
301
	@$(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@
gejun's avatar
gejun committed
302

gejun's avatar
gejun committed
303 304 305 306 307 308 309 310
%.o:%.mm
	@echo "Compiling $@"
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@

%.dbg.o:%.mm
	@echo "Compiling $@"
	@$(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@

gejun's avatar
gejun committed
311 312
%.o:%.c
	@echo "Compiling $@"
313
	@$(CC) -c $(HDRPATHS) $(CFLAGS) $< -o $@
314 315 316

%.dbg.o:%.c
	@echo "Compiling $@"
317
	@$(CC) -c $(HDRPATHS) $(DEBUG_CFLAGS) $< -o $@