| SHELL = bash |
| MAKEFLAGS += --warn-undefined-variables |
| .DEFAULT_GOAL = all |
| .SUFFIXES: |
|
|
| |
| |
| |
|
|
| |
| define find_moses_root |
| d=$$(pwd); |
| while [[ ! -e $$d/Jamroot && $$d != "/" ]] ; do |
| d=$$(dirname $$d); |
| done; |
| echo $$d |
| endef |
|
|
| MOSES_ROOT := $(shell $(find_moses_root)) |
| $(info MOSES_ROOT=${MOSES_ROOT}) |
| |
| |
| |
| |
| |
| |
|
|
| |
| compiler ?= g++ |
| variant ?= runtime |
| link ?= static |
|
|
| CXX = $(shell which ccache) $(compiler) |
| CXXFLAGS += -DMAX_NUM_FACTORS=4 |
| CXXFLAGS += -DKENLM_MAX_ORDER=5 |
| CXXFLAGS += -DWITH_THREADS |
| CXXFLAGS += -DNO_MOSES |
| |
| CXXFLAGS += -I$(dir ${MOSES_ROOT})mmt-only |
| CXXFLAGS += -I${MOSES_ROOT} -I. -I${MOSES_ROOT}/opt/include |
|
|
| ifeq ($(variant),debug) |
| CXXFLAGS += -ggdb -O0 |
| else ifeq ($(variant),profile) |
| CXXFLAGS += -g -pg -O3 |
| else ifeq ($(variant),syntax) |
| CXXFLAGS += -fsyntax-only |
| endif |
|
|
| LDFLAGS = -L${MOSES_ROOT}/opt/lib -L./lib/ |
|
|
| |
| WDIR = build/$(variant) |
|
|
| |
| |
| HOST ?= $(shell hostname) |
| HOSTTYPE ?= $(shell uname -m) |
| KERNEL = $(shell uname -r) |
|
|
| nil: |
|
|
| |
|
|
| BOOSTLIBS := program_options iostreams thread system filesystem |
| BOOSTLIBS := $(addprefix -lboost_,${BOOSTLIBS}) |
| ifeq ($(BOOSTLIBTAG),"") |
| BOOSTLIBS := $(addsuffix ${BOOSTLIBTAG},${BOOSTLIBS}) |
| endif |
|
|
| STATIC_LIBS = m bz2 z dl rt |
| DYNAMIC_LIBS = pthread |
| |
|
|
| LIBS = -Wl,-B$(link) |
| LIBS += -L${MOSES_ROOT}/opt/lib ${BOOSTLIBS} |
| LIBS += $(addprefix -l,${STATIC_LIBS}) |
| LIBS += -Wl,-Bdynamic |
| LIBS += $(addprefix -l,${DYNAMIC_LIBS}) |
|
|
| cc2obj = $(addsuffix .o,$(patsubst ${MOSES_ROOT}%,$(WDIR)%,\ |
| $(patsubst .%,$(WDIR)%,$(basename $1)))) |
| cc2exe = $(addprefix ./bin/$(variant)/,$(basename $(notdir $1))) |
| cc2trg = $(basename $(notdir $1)) |
|
|
| define compile |
|
|
| DEP += $(basename $(call cc2obj,$1)).d |
| $(call cc2obj,$1): $1 |
| @echo -e "COMPILING $1" |
| @mkdir -p $$(@D) |
| ${CXX} ${CXXFLAGS} -MD -MP -c $$< -o $$@ |
|
|
| endef |
|
|
| define build |
|
|
| $(call cc2trg,$1): $(call cc2exe,$1) |
| $(call cc2exe,$1): $(call cc2obj,$1) $(LIBOBJ) |
| ifneq ($(variant),syntax) |
| @echo -e "LINKING $$@" |
| @mkdir -p $${@D} |
| ${CXX} ${CXXFLAGS} -o $$@ $$< $(LIBOBJ) ${LIBS} |
| endif |
|
|
| endef |
|
|
| |
| skip = sim-pe.cc |
| skip += mtt.count.cc |
| skip += try-align2.cc |
| skip += spe-check-coverage3.cc |
| skip += mmsapt.cpp |
| skip += ug_stringdist.cc |
| skip += ug_splice_arglist.cc |
| |
|
|
| |
| extra = ${MOSES_ROOT}/util/exception.cc |
| extra += ${MOSES_ROOT}/util/integer_to_string.cc |
|
|
| $(foreach f,$(skip),$(eval broken+=$(shell find -name $f))) |
| broken += $(wildcard ./mm/stashed/*) |
|
|
| $(info SCANNING DIRECTORY TREE FOR FILES) |
| find_cfiles = find -name '*.cc' -or -name '*.cpp' |
| CFILES = $(filter-out $(broken), $(shell $(find_cfiles))) |
| PROGRAMS := $(shell $(find_cfiles) | xargs grep -lP '^(int +)?main') |
| PROGRAMS := $(filter-out $(broken),$(PROGRAMS)) |
|
|
| ALLOBJ = $(call cc2obj,$(CFILES) $(extra)) |
| LIBOBJ = $(call cc2obj,$(filter-out $(PROGRAMS),$(CFILES) $(extra))) |
|
|
| $(foreach f,$(CFILES) $(extra),$(eval $(call compile,$f))) |
| $(foreach p,$(PROGRAMS),$(eval $(call build,$p))) |
|
|
| ifeq ($(filter relink,$(MAKECMDGOALS)),relink) |
| .PHONY: relink |
| $(foreach p,$(PROGRAMS),$(eval .PHONY: $(call cc2exe,$p))) |
| relink: $(filter-out relink,$(MAKECMDGOALS)) |
| endif |
|
|
| -include $(DEP) |
|
|
|
|