|
|
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) |
|
|
|
|
|
|