| |
| CXX ?= g++ |
| CC ?= gcc |
| LINK ?= $(CXX) |
| SHARED_LINK ?= $(CXX) |
| AR ?= ar |
| STRIP ?= strip |
| |
| # The following macro will turn on combined |
| # compilation and dependency generation |
| COMBINED_COMPILE_AND_DEPEND:=1 |
| |
| override SYSLIBS = -lc -lm -ldl -lstdc++ -lpthread |
| |
| SHARED_CFLAGS ?= -fPIC |
| SHARED_CXXFLAGS ?= -fPIC |
| SHARED_PRE_LDFLAGS ?= -shared -Wl,-Bsymbolic -Wl,--allow-multiple-definition -Wl,--whole-archive |
| SHARED_POST_LDFLAGS ?= -Wl,-no-whole-archive -Wl,--no-undefined $(SYSLIBS) |
| SONAME_ARG := -Wl,-h, |
| |
| STRIP_FLAGS := --strip-unneeded |
| AR_ARGS := rl # make sure to leave a space at the end |
| |
| |
| OUTLINKFLAG := -o |
| CO := -c -o # make sure to leave a space at the end |
| |
| |
| #Make all warnings into errors. |
| FLAG_COMPILE_WARNINGS_AS_ERRORS := -Werror |
| |
| STAT_LIB_EXT:=a |
| SHARED_LIB_EXT:=so |
| SHARED_ARCHIVE_LIB_EXT:=sa |
| OBJ_EXT := o |
| LIBCOMPFLAG:=-L |
| DEBUG_CXXFLAGS?=-g |
| RELEASE_CPPFLAGS?=-DNDEBUG |
| OPT_CXXFLAG?=-O3 |
| INCDIRS += -I$(BUILD_ROOT)/installed_include |
| CXXFLAGS?=-Wall -Wno-non-virtual-dtor |
| |
| ######################################################### |
| # $(call make-depend,source-file,object-file,depend-file,xflags) |
| define make-depend |
| $(quiet) $(CXX) $4 $(CPPFLAGS) $(INCDIRS) $(CXXFLAGS) -MM $1 | \ |
| $(SED) -e 's,\($(notdir $2)\) *:,$2: ,' -e 's,$(BUILD_ROOT),$$(BUILD_ROOT),' -e 's,$(SRC_ROOT),$$(SRC_ROOT),' > $3.tmp |
| $(quiet) $(CP) $3.tmp $3 |
| $(quiet) $(SED) -e 's/#.*//' \ |
| -e 's/^[^:]*: *//' \ |
| -e 's/ *\\$$//' \ |
| -e '/^$$/ d' \ |
| -e 's/$$/ :/' $3.tmp >> $3 |
| $(quiet) $(RM) $3.tmp |
| endef |
| ######################################################### |
| |
| |
| ifneq ($(strip $(COMBINED_COMPILE_AND_DEPEND)),) |
| ######################################################### |
| # $(call combined-cxx-compile-depend,source-file,object-file,depend-file,xflags) |
| define combined-cxx-compile-depend |
| $(quiet) $(CXX) $4 $(CPPFLAGS) $(INCDIRS) $(CXXFLAGS) -MMD $(CO)$2 $1 |
| $(quiet) $(SED) -e '/^ *\\ *$$/ d' -e 's,$(BUILD_ROOT),$$(BUILD_ROOT),' -e 's,$(SRC_ROOT),$$(SRC_ROOT),' $3 > $3.tmp |
| $(quiet) $(CP) $3.tmp $3 |
| $(quiet) $(SED) -e 's/#.*//' \ |
| -e 's/^[^:]*: *//' \ |
| -e 's/ *\\$$//' \ |
| -e '/^$$/ d' \ |
| -e 's/$$/ :/' $3.tmp >> $3 |
| $(quiet) $(RM) $3.tmp |
| endef |
| ######################################################### |
| |
| # $(call combined-cc-compile-depend,source-file,object-file,depend-file,xflags) |
| define combined-cc-compile-depend |
| $(quiet) $(CC) $4 $(CPPFLAGS) $(INCDIRS) $(CXXFLAGS) -MMD $(CO)$2 $1 |
| $(quiet) $(SED) -e '/^ *\\ *$$/ d' -e 's,$(BUILD_ROOT),$$(BUILD_ROOT),' -e 's,$(SRC_ROOT),$$(SRC_ROOT),' $3 > $3.tmp |
| $(quiet) $(CP) $3.tmp $3 |
| $(quiet) $(SED) -e 's/#.*//' \ |
| -e 's/^[^:]*: *//' \ |
| -e 's/ *\\$$//' \ |
| -e '/^$$/ d' \ |
| -e 's/$$/ :/' $3.tmp >> $3 |
| $(quiet) $(RM) $3.tmp |
| endef |
| ######################################################### |
| |
| define assembly-compile |
| $(quiet) $(CXX) $4 $(CPPFLAGS) $(INCDIRS) $(CXXFLAGS) -MD $(CO)$2 $1 |
| endef |
| ######################################################### |
| endif |
| |
| |
| ######################################################### |
| |
| define generate_prog |
| $(quiet) $(LINK) $(BINDING) $(OUTLINKFLAG)$1 $($2_compiled_objs) $(filter $(LIBCOMPFLAG)%,$($2_LDFLAGS)) \ |
| $(PRE_LDFLAGS) $(XOBJECTS) $(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS)) $(POST_LDFLAGS) $(SYSLIBS) |
| $(if $(filter release,$(strip $(DEFAULT_LIBMODE))),$(call strip_binary,$1)) |
| endef |
| |
| ######################################################### |
| |
| define generate_static_lib |
| $(quiet) $(AR) $(AR_ARGS)$1 $2 |
| endef |
| |
| ######################################################### |
| |
| define generate_shared-archive_lib |
| $(quiet) $(AR) $(AR_ARGS)$1 $2 |
| endef |
| |
| |
| ######################################################### |
| |
| define generate_shared_lib |
| $(quiet) $(SHARED_LINK) $(SHARED_PRE_LDFLAGS) $(SONAME_ARG)$(notdir $1) -o $1 $2 $(SHARED_POST_LDFLAGS) |
| $(if $(filter release,$(strip $(DEFAULT_LIBMODE))),$(call strip_binary,$1)) |
| endef |
| |
| define strip_binary |
| $(quiet) $(STRIP) $(STRIP_FLAGS) $1 |
| endef |