Makefile 11.2 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 21 22 23 24
TARGET_LIB_DY = libbrpc.so
ifeq ($(SYSTEM),Darwin)
    TARGET_LIB_DY = libbrpc.dylib
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 90
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/nspr/prtime.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 \
91
    src/butil/process_util.cc \
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 146
    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 \
147 148
    src/butil/iobuf.cpp \
    src/butil/popen.cpp
gejun's avatar
gejun committed
149

gejun's avatar
gejun committed
150 151
ifeq ($(SYSTEM), Linux)
    BUTIL_SOURCES += src/butil/file_util_linux.cc \
152 153
        src/butil/threading/platform_thread_linux.cc \
        src/butil/strings/sys_string_conversions_posix.cc
gejun's avatar
gejun committed
154 155 156
endif
ifeq ($(SYSTEM), Darwin)
    BUTIL_SOURCES += src/butil/mac/bundle_locations.mm \
157 158 159 160 161 162
		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
163 164
endif

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

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

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

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

gejun's avatar
gejun committed
179
BRPC_DIRS = src/brpc src/brpc/details src/brpc/builtin src/brpc/policy
180 181 182
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
183
BRPC_PROTOS = $(filter %.proto,$(BRPC_SOURCES))
184
BRPC_CFAMILIES = $(filter-out %.proto %.pb.cc,$(BRPC_SOURCES))
185
BRPC_OBJS = $(BRPC_PROTOS:.proto=.pb.o) $(addsuffix .o, $(basename $(BRPC_CFAMILIES)))
gejun's avatar
gejun committed
186 187

MCPACK2PB_SOURCES = \
gejun's avatar
gejun committed
188 189 190 191 192
	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
193

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

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

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

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

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

208
.PHONY:debug
209
debug: test/libbrpc.dbg.a test/libbvar.dbg.a
210

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

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

.PRECIOUS: %.o
221

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

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

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

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

247
test/libbrpc.dbg.a:$(BRPC_PROTOS:.proto=.pb.h) $(DEBUG_OBJS)
248
	@echo "Packing $@"
249
	@ar crs $@ $(filter %.o,$^)
gejun's avatar
gejun committed
250

gejun's avatar
gejun committed
251 252 253
.PHONY:output/include
output/include:
	@echo "Copying to $@"
gejun's avatar
gejun committed
254 255 256
	@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
257 258

.PHONY:output/lib
259
output/lib:libbrpc.a $(TARGET_LIB_DY)
gejun's avatar
gejun committed
260 261 262 263 264 265 266 267 268 269
	@echo "Copying to $@"
	@mkdir -p $@
	@cp $^ $@

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

270
%.pb.cc %.pb.h:%.proto
gejun's avatar
gejun committed
271
	@echo "Generating $@"
gejun's avatar
gejun committed
272
	@$(PROTOC) --cpp_out=./src --proto_path=./src --proto_path=$(PROTOBUF_HDR) $<
gejun's avatar
gejun committed
273 274 275

%.o:%.cpp
	@echo "Compiling $@"
276
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
277 278 279

%.dbg.o:%.cpp
	@echo "Compiling $@"
280
	@$(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@
gejun's avatar
gejun committed
281 282 283

%.o:%.cc
	@echo "Compiling $@"
284
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
285 286 287

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

gejun's avatar
gejun committed
290 291 292 293 294 295 296 297
%.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
298 299
%.o:%.c
	@echo "Compiling $@"
300
	@$(CC) -c $(HDRPATHS) $(CFLAGS) $< -o $@
301 302 303

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