| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| NEED_LIBPROTOC=1 | |
| include config.mk | |
| # Notes on the flags: | |
| # 1. Added -fno-omit-frame-pointer: perf/tcmalloc-profiler use frame pointers by default | |
| # 2. 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, config `config_brpc.sh -werror'. | |
| CPPFLAGS+=-DBTHREAD_USE_FAST_PTHREAD_MUTEX -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -DBRPC_REVISION=\"$(shell ./tools/get_brpc_revision.sh .)\" | |
| CXXFLAGS+=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer -Wno-deprecated-declarations -Wno-unused-but-set-variable | |
| CFLAGS=$(CPPFLAGS) -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer -Wno-deprecated-declarations -Wno-unused-but-set-variable | |
| DEBUG_CXXFLAGS = $(filter-out -DNDEBUG,$(CXXFLAGS)) -DUNIT_TEST -DBVAR_NOT_LINK_DEFAULT_VARIABLES | |
| DEBUG_CFLAGS = $(filter-out -DNDEBUG,$(CFLAGS)) -DUNIT_TEST | |
| HDRPATHS=-I./src $(addprefix -I, $(HDRS)) | |
| LIBPATHS = $(addprefix -L, $(LIBS)) | |
| COMMA = , | |
| SOPATHS = $(addprefix -Wl$(COMMA)-rpath$(COMMA), $(LIBS)) | |
| SRCEXTS = .c .cc .cpp .proto | |
| SOEXT = so | |
| ifeq ($(SYSTEM),Darwin) | |
| SOEXT = dylib | |
| endif | |
| #required by butil/crc32.cc to boost performance for 10x | |
| ifeq ($(shell test $(GCC_VERSION) -ge 40400; echo $$?),0) | |
| ifeq ($(shell uname -p),i386) #note: i386 is processor family type, not the 32-bit x86 arch | |
| CXXFLAGS+=-msse4 -msse4.2 | |
| endif | |
| endif | |
| # RISC-V specific optimizations | |
| ifeq ($(shell uname -m),riscv64) | |
| CXXFLAGS+=-march=rv64gc | |
| endif | |
| #not solved yet | |
| ifeq ($(CC),gcc) | |
| ifeq ($(shell test $(GCC_VERSION) -ge 70000; echo $$?),0) | |
| CXXFLAGS+=-Wno-aligned-new | |
| endif | |
| endif | |
| 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/base64url.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/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/process_util.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/string_compare_rvv.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/thread_key.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 \ | |
| src/butil/iobuf.cpp \ | |
| src/butil/single_iobuf.cpp \ | |
| src/butil/iobuf_profiler.cpp \ | |
| src/butil/binary_printer.cpp \ | |
| src/butil/recordio.cc \ | |
| src/butil/popen.cpp | |
| ifeq ($(SYSTEM), Linux) | |
| BUTIL_SOURCES += src/butil/file_util_linux.cc \ | |
| src/butil/threading/platform_thread_linux.cc \ | |
| src/butil/strings/sys_string_conversions_posix.cc | |
| endif | |
| ifeq ($(SYSTEM), Darwin) | |
| BUTIL_SOURCES += src/butil/mac/bundle_locations.mm \ | |
| 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 | |
| endif | |
| BUTIL_OBJS = $(addsuffix .o, $(basename $(BUTIL_SOURCES))) | |
| BVAR_DIRS = src/bvar src/bvar/detail | |
| BVAR_SOURCES = $(foreach d,$(BVAR_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) | |
| BVAR_OBJS = $(addsuffix .o, $(basename $(BVAR_SOURCES))) | |
| BTHREAD_DIRS = src/bthread | |
| BTHREAD_SOURCES = $(foreach d,$(BTHREAD_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) | |
| BTHREAD_OBJS = $(addsuffix .o, $(basename $(BTHREAD_SOURCES))) | |
| JSON2PB_DIRS = src/json2pb | |
| JSON2PB_SOURCES = $(foreach d,$(JSON2PB_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) | |
| JSON2PB_OBJS = $(addsuffix .o, $(basename $(JSON2PB_SOURCES))) | |
| BRPC_DIRS = src/brpc src/brpc/details src/brpc/builtin src/brpc/policy src/brpc/policy/mysql src/brpc/rdma | |
| ifeq ($(WITH_FLATBUFFERS),1) | |
| BRPC_DIRS += src/brpc/flatbuffers | |
| endif | |
| ifeq ($(WITH_URMA),1) | |
| BRPC_DIRS += src/brpc/urma | |
| endif | |
| THRIFT_SOURCES = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/thrift*,$(SRCEXTS)))) | |
| EXCLUDE_SOURCES = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/event_dispatcher_*,$(SRCEXTS)))) | |
| BRPC_SOURCES_ALL = $(foreach d,$(BRPC_DIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) | |
| ifeq ($(URMA_USE_MOCK),0) | |
| BRPC_SOURCES_ALL := $(filter-out src/brpc/urma/mock_urma.cpp,$(BRPC_SOURCES_ALL)) | |
| endif | |
| ifneq ($(WITH_FLATBUFFERS),1) | |
| BRPC_SOURCES_ALL := $(filter-out src/brpc/policy/flatbuffers_protocol.cpp,$(BRPC_SOURCES_ALL)) | |
| endif | |
| BRPC_SOURCES = $(filter-out $(THRIFT_SOURCES) $(EXCLUDE_SOURCES), $(BRPC_SOURCES_ALL)) | |
| BRPC_PROTOS = $(filter %.proto,$(BRPC_SOURCES)) | |
| BRPC_CFAMILIES = $(filter-out %.proto %.pb.cc,$(BRPC_SOURCES)) | |
| BRPC_OBJS = $(BRPC_PROTOS:.proto=.pb.o) $(addsuffix .o, $(basename $(BRPC_CFAMILIES))) | |
| MCPACK2PB_SOURCES = \ | |
| 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))) | |
| ifeq (ENABLE_THRIFT_FRAMED_PROTOCOL, $(findstring ENABLE_THRIFT_FRAMED_PROTOCOL, $(CPPFLAGS))) | |
| THRIFT_OBJS = $(addsuffix .o, $(basename $(THRIFT_SOURCES))) | |
| endif | |
| OBJS=$(BUTIL_OBJS) $(BVAR_OBJS) $(BTHREAD_OBJS) $(JSON2PB_OBJS) $(MCPACK2PB_OBJS) $(BRPC_OBJS) $(THRIFT_OBJS) | |
| BVAR_DEBUG_OBJS=$(BUTIL_OBJS:.o=.dbg.o) $(BVAR_OBJS:.o=.dbg.o) | |
| DEBUG_OBJS = $(OBJS:.o=.dbg.o) | |
| PROTOS=$(BRPC_PROTOS) src/idl_options.proto | |
| .PHONY:all | |
| all: protoc-gen-mcpack libbrpc.a libbrpc.$(SOEXT) output/include output/lib output/bin | |
| .PHONY:debug | |
| debug: test/libbrpc.dbg.$(SOEXT) test/libbvar.dbg.a | |
| .PHONY:clean | |
| clean: | |
| @echo "> Cleaning" | |
| 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) | |
| .PHONY:clean_debug | |
| clean_debug: | |
| rm -rf test/libbrpc.dbg.$(SOEXT) test/libbvar.dbg.a $(DEBUG_OBJS) | |
| .PRECIOUS: %.o | |
| protoc-gen-mcpack: src/idl_options.pb.cc src/mcpack2pb/generator.o libbrpc.a | |
| @echo "> Linking $@" | |
| ifeq ($(SYSTEM),Linux) | |
| $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) -Xlinker "-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS) | |
| else ifeq ($(SYSTEM),Darwin) | |
| $(CXX) -o $@ $(CXXFLAGS) $(HDRPATHS) $(LIBPATHS) $^ $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS) | |
| endif | |
| # force generation of pb headers before compiling to avoid fail-to-import issues in compiling pb.cc | |
| libbrpc.a:$(BRPC_PROTOS:.proto=.pb.h) $(OBJS) | |
| @echo "> Packing $@" | |
| ar crs $@ $(filter %.o,$^) | |
| libbrpc.$(SOEXT):$(BRPC_PROTOS:.proto=.pb.h) $(OBJS) | |
| @echo "> Linking $@" | |
| ifeq ($(SYSTEM),Linux) | |
| $(CXX) -shared -o $@ $(LIBPATHS) $(SOPATHS) -Xlinker "-(" $(filter %.o,$^) -Xlinker "-)" $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS) | |
| else ifeq ($(SYSTEM),Darwin) | |
| $(CXX) -dynamiclib -Wl,-headerpad_max_install_names -o $@ -install_name @rpath/$@ $(LIBPATHS) $(SOPATHS) $(filter %.o,$^) $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS) | |
| endif | |
| test/libbvar.dbg.a:$(BVAR_DEBUG_OBJS) | |
| @echo "> Packing $@" | |
| @ar crs $@ $^ | |
| 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) | |
| $(CXX) -dynamiclib -Wl,-headerpad_max_install_names -o $@ -install_name @rpath/libbrpc.dbg.$(SOEXT) $(LIBPATHS) $(SOPATHS) $(filter %.o,$^) $(STATIC_LINKINGS) $(DYNAMIC_LINKINGS) | |
| endif | |
| .PHONY:output/include | |
| output/include: | |
| @echo "> Copying to $@" | |
| @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 $@ | |
| .PHONY:output/lib | |
| output/lib:libbrpc.a libbrpc.$(SOEXT) | |
| @echo "> Copying to $@" | |
| @mkdir -p $@ | |
| @cp $^ $@ | |
| .PHONY:output/bin | |
| output/bin:protoc-gen-mcpack | |
| @echo "> Copying to $@" | |
| @mkdir -p $@ | |
| @cp $^ $@ | |
| %.pb.cc %.pb.h:%.proto | |
| @echo "> Generating $@" | |
| $(PROTOC) --cpp_out=./src --proto_path=./src --proto_path=$(PROTOBUF_HDR) $< | |
| src/mcpack2pb/generator.o:src/mcpack2pb/generator.cpp src/idl_options.pb.h | |
| $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@ | |
| %.o:%.cpp | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@ | |
| %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 $@ | |
| %.dbg.o:%.cpp | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@ | |
| %.o:%.cc | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@ | |
| %.dbg.o:%.cc | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@ | |
| %.o:%.mm | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@ | |
| %.dbg.o:%.mm | |
| @echo "> Compiling $@" | |
| $(CXX) -c $(HDRPATHS) $(DEBUG_CXXFLAGS) $< -o $@ | |
| %.o:%.c | |
| @echo "> Compiling $@" | |
| $(CC) -c $(HDRPATHS) $(CFLAGS) $< -o $@ | |
| %.dbg.o:%.c | |
| @echo "> Compiling $@" | |
| $(CC) -c $(HDRPATHS) $(DEBUG_CFLAGS) $< -o $@ |