Makefile 10.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 17
COMMA = ,
SOPATHS = $(addprefix -Wl$(COMMA)-rpath=, $(LIBS))
gejun's avatar
gejun committed
18
SRCEXTS = .c .cc .cpp .proto
19

20
#required by butil/crc32.cc to boost performance for 10x
21 22 23 24 25
ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0)
	CXXFLAGS+=-msse4 -msse4.2
endif
#not solved yet
ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0)
gejun's avatar
gejun committed
26
	CXXFLAGS+=-Wno-aligned-new
27
endif
gejun's avatar
gejun committed
28

29 30 31 32 33 34 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 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
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 \
    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/sys_string_conversions_posix.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 \
140 141
    src/butil/iobuf.cpp \
    src/butil/popen.cpp
gejun's avatar
gejun committed
142

gejun's avatar
gejun committed
143 144 145 146 147 148 149 150 151
ifeq ($(SYSTEM), Linux)
    BUTIL_SOURCES += src/butil/file_util_linux.cc \
		src/butil/threading/platform_thread_linux.cc
endif
ifeq ($(SYSTEM), Darwin)
    BUTIL_SOURCES += src/butil/mac/bundle_locations.mm \
		src/butil/mac/foundation_util.mm
endif

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

gejun's avatar
gejun committed
154
BVAR_DIRS = src/bvar src/bvar/detail
gejun's avatar
gejun committed
155 156 157
BVAR_SOURCES = $(foreach d,$(BVAR_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BVAR_OBJS = $(addsuffix .o, $(basename $(BVAR_SOURCES))) 

gejun's avatar
gejun committed
158
BTHREAD_DIRS = src/bthread
gejun's avatar
gejun committed
159 160 161
BTHREAD_SOURCES = $(foreach d,$(BTHREAD_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BTHREAD_OBJS = $(addsuffix .o, $(basename $(BTHREAD_SOURCES))) 

gejun's avatar
gejun committed
162
JSON2PB_DIRS = src/json2pb
gejun's avatar
gejun committed
163 164 165
JSON2PB_SOURCES = $(foreach d,$(JSON2PB_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
JSON2PB_OBJS = $(addsuffix .o, $(basename $(JSON2PB_SOURCES))) 

gejun's avatar
gejun committed
166
BRPC_DIRS = src/brpc src/brpc/details src/brpc/builtin src/brpc/policy
gejun's avatar
gejun committed
167 168
BRPC_SOURCES = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
BRPC_PROTOS = $(filter %.proto,$(BRPC_SOURCES))
169
BRPC_CFAMILIES = $(filter-out %.proto %.pb.cc,$(BRPC_SOURCES))
170
BRPC_OBJS = $(BRPC_PROTOS:.proto=.pb.o) $(addsuffix .o, $(basename $(BRPC_CFAMILIES)))
gejun's avatar
gejun committed
171 172

MCPACK2PB_SOURCES = \
gejun's avatar
gejun committed
173 174 175 176 177
	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
178

179
OBJS=$(BUTIL_OBJS) $(BVAR_OBJS) $(BTHREAD_OBJS) $(JSON2PB_OBJS) $(MCPACK2PB_OBJS) $(BRPC_OBJS)
180 181

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

184 185
PROTOS=$(BRPC_PROTOS) src/idl_options.proto

gejun's avatar
gejun committed
186
.PHONY:all
187
all:  protoc-gen-mcpack libbrpc.a libbrpc.so output/include output/lib output/bin
gejun's avatar
gejun committed
188

189
.PHONY:debug
190
debug: test/libbrpc.dbg.a test/libbvar.dbg.a
191

gejun's avatar
gejun committed
192
.PHONY:clean
193
clean:
gejun's avatar
gejun committed
194
	@echo "Cleaning"
195
	@rm -rf src/mcpack2pb/generator.o protoc-gen-mcpack libbrpc.a libbrpc.so $(OBJS) output/include output/lib output/bin $(PROTOS:.proto=.pb.h) $(PROTOS:.proto=.pb.cc)
gejun's avatar
gejun committed
196

197 198
.PHONY:clean_debug
clean_debug:
199
	@rm -rf test/libbrpc.dbg.a test/libbvar.dbg.a $(DEBUG_OBJS)
200 201

.PRECIOUS: %.o
202

chenzhangyi01's avatar
chenzhangyi01 committed
203
protoc-gen-mcpack: src/idl_options.pb.cc src/mcpack2pb/generator.o libbrpc.a
gejun's avatar
gejun committed
204
	@echo "Linking $@"
chenzhangyi01's avatar
chenzhangyi01 committed
205
	@$(CXX) -o $@ $(HDRPATHS) $(LIBPATHS) -Xlinker "-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS)
gejun's avatar
gejun committed
206

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

212 213
libbrpc.so:$(BRPC_PROTOS:.proto=.pb.h) $(OBJS)
	@echo "Linking $@"
214
	@$(CXX) -shared -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $(filter %.o,$^) -Xlinker "-)" $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS)
215

216
test/libbvar.dbg.a:$(BVAR_DEBUG_OBJS)
217 218
	@echo "Packing $@"
	@ar crs $@ $^
219

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

gejun's avatar
gejun committed
224 225 226
.PHONY:output/include
output/include:
	@echo "Copying to $@"
gejun's avatar
gejun committed
227 228 229
	@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
230 231

.PHONY:output/lib
232
output/lib:libbrpc.a libbrpc.so
gejun's avatar
gejun committed
233 234 235 236 237 238 239 240 241 242
	@echo "Copying to $@"
	@mkdir -p $@
	@cp $^ $@

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

243
%.pb.cc %.pb.h:%.proto
gejun's avatar
gejun committed
244
	@echo "Generating $@"
gejun's avatar
gejun committed
245
	@$(PROTOC) --cpp_out=./src --proto_path=./src --proto_path=$(PROTOBUF_HDR) $<
gejun's avatar
gejun committed
246 247 248

%.o:%.cpp
	@echo "Compiling $@"
249
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
250 251 252

%.dbg.o:%.cpp
	@echo "Compiling $@"
253
	@$(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@
gejun's avatar
gejun committed
254 255 256

%.o:%.cc
	@echo "Compiling $@"
257
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@
258 259 260

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

gejun's avatar
gejun committed
263 264 265 266 267 268 269 270
%.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
271 272
%.o:%.c
	@echo "Compiling $@"
273
	@$(CC) -c $(HDRPATHS) $(CFLAGS) $< -o $@
274 275 276

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