#BUILDING MOSES #PACKAGES #Language models (optional): #--with-irstlm=/path/to/irstlm #--with-srilm=/path/to/srilm See moses/LM/Jamfile for more options. #--with-maxent-srilm=true (requires a maxent-enabled version of SRILM to be specified via --with-srilm) #--with-nplm=/path/to/nplm #--with-randlm=/path/to/randlm #KenLM is always compiled. # #--with-boost=/path/to/boost #If Boost is in a non-standard location, specify it here. This directory is #expected to contain include and lib or lib64. # #--with-xmlrpc-c=/path/to/xmlrpc-c for libxmlrpc-c (used by server) #Note that, like language models, this is the --prefix where the library was #installed, not some executable within the library. # #--no-xmlrpc-c # Don't use xmlrpc-c library, even if it exists. Don't build moses server # #Compact phrase table and compact lexical reordering table #--with-cmph=/path/to/cmph # #Thread-caching malloc (if present, used for multi-threaded builds by default) #--without-tcmalloc does not compile with tcmalloc even if present #--full-tcmalloc links against the full version (useful for memory profiling) # #REGRESSION TESTING #--with-regtest=/path/to/moses-reg-test-data # #INSTALLATION #--prefix=/path/to/prefix sets the install prefix [default is source root]. #--bindir=/path/to/prefix/bin sets the bin directory [PREFIX/bin] #--libdir=/path/to/prefix/lib sets the lib directory [PREFIX/lib] #--includedir=/path/to/prefix/include installs headers. # Does not install if missing. No argument defaults to PREFIX/include . #--install-scripts=/path/to/scripts copies scripts into a directory. # Does not install if missing. No argument defaults to PREFIX/scripts . #--git appends the git revision to the prefix directory. # # #BUILD OPTIONS # By default, the build is multi-threaded, optimized, and statically linked. # Pass these to change the build: # # threading=single|multi controls threading (default multi) # # variant=release|debug|profile builds optimized (default), for debug, or for # profiling # # link=static|shared controls preferred linking (default static) # --static forces static linking (the default will fall # back to shared) # # debug-symbols=on|off include or exclude (default) debugging # information also known as -g # --notrace compiles without TRACE macros # # --enable-boost-pool uses Boost pools for the memory SCFG tabgle # # --enable-mpi switch on mpi # --without-libsegfault does not link with libSegFault # # --max-kenlm-order maximum ngram order that kenlm can process (default 6) # # --max-factors maximum number of factors (default 4) # # --unlabelled-source ignore source labels (redundant in hiero or string-to-tree system) # for better performance #CONTROLLING THE BUILD #-a to build from scratch #-j$NCPUS to compile in parallel #--clean to clean #--debug-build to build with Og. Only available with gcc 4.8+ import os ; import option ; import modules ; import path ; path-constant TOP : . ; include $(TOP)/jam-files/sanity.jam ; home = [ os.environ "HOME" ] ; if [ path.exists $(home)/moses-environment.jam ] { # for those of use who don't like typing in command line bjam options all day long include $(home)/moses-environment.jam ; } include $(TOP)/jam-files/check-environment.jam ; # get resource locations # from environment variables include $(TOP)/jam-files/xmlrpc-c.jam ; # xmlrpc-c stuff for the server # include $(TOP)/jam-files/curlpp.jam ; # curlpp stuff for bias lookup (MMT only) # exit "done" : 0 ; max-order = [ option.get "max-kenlm-order" : 6 : 6 ] ; if ! [ option.get "max-kenlm-order" ] { # some classes in Moses pull in header files from KenLM, so this needs to be # defined here, not in moses/lm/Jamfile option.set "max-kenlm-order" : 6 ; requirements += KENLM_MAX_ORDER=$(max-order) ; } # exit "all done" : 0 ; boost 104400 ; external-lib z ; #lib dl : : static:static shared:shared ; #requirements += dl ; requirements += -std=c++0x ; # Allow moses to report the git commit hash of the version used for compilation moses_githash = [ _shell "git describe --dirty" ] ; requirements += MOSES_VERSION_ID=\\\"$(moses_githash)\\\" ; if ! [ option.get "without-tcmalloc" : : "yes" ] && [ test_library "tcmalloc_minimal" ] { if [ option.get "full-tcmalloc" : : "yes" ] { external-lib unwind ; external-lib tcmalloc_and_profiler : : unwind ; requirements += tcmalloc_and_profiler unwind -fno-omit-frame-pointer -fno-omit-frame-pointer ; } else { external-lib tcmalloc_minimal ; requirements += multi:tcmalloc_minimal ; } } else { echo "Tip: install tcmalloc for faster threading. See BUILD-INSTRUCTIONS.txt for more information." ; } if [ option.get "filter-warnings" : : "yes" ] { # given the low coding standards in Moses, we may want to filter out # warnings about poor coding practice that no-one is ever going to fix # anyway ... requirements += -Wno-deprecated ; requirements += -Wno-reorder ; requirements += -Wno-sign-compare ; requirements += -Wno-unused-but-set-variable ; requirements += -Wno-unused-result ; requirements += -Wno-unused-variable ; requirements += -Wno-comment ; requirements += -Wno-strict-aliasing ; requirements += -Wno-overloaded-virtual ; } if [ option.get "debug-build" : : "yes" ] { requirements += -Og ; echo "Building with -Og to enable easier profiling and debugging. Only available on gcc 4.8+." ; } if [ option.get "with-address-sanitizer" : : "yes" ] { requirements += -fsanitize=address ; requirements += -fno-omit-frame-pointer ; requirements += -fsanitize=address ; echo "Building with AddressSanitizer to enable debugging of memory errors. Only available on gcc 4.8+." ; } if [ option.get "enable-mpi" : : "yes" ] { import mpi ; using mpi ; external-lib boost_mpi ; external-lib boost_serialization ; requirements += MPI_ENABLE ; requirements += mpi ; requirements += boost_mpi ; requirements += boost_serialization ; } mmt = [ option.get "mmt" ] ; if $(mmt) { requirements += MMT ; requirements += $(mmt) ; mmt_githash = [ _shell "cd $(mmt) && git describe --dirty" ] ; requirements += MMT_VERSION_ID=\\\"$(mmt_githash)\\\" ; } requirements += [ option.get "notrace" : TRACE_ENABLE=1 ] ; requirements += [ option.get "enable-boost-pool" : : USE_BOOST_POOL ] ; requirements += [ option.get "with-mm" : : PT_UG ] ; requirements += [ option.get "with-mm" : : MAX_NUM_FACTORS=4 ] ; requirements += [ option.get "unlabelled-source" : : UNLABELLED_SOURCE ] ; if [ option.get "with-oxlm" ] { external-lib gomp ; requirements += boost_serialization ; requirements += gomp ; } if [ option.get "with-cmph" : : "yes" ] { requirements += HAVE_CMPH ; } if [ option.get "with-icu" : : "yes" ] { external-lib icuuc ; external-lib icuio ; external-lib icui18n ; requirements += icuuc/shared ; requirements += icuio/shared ; requirements += icui18n/shared ; requirements += -fPIC ; requirements += 64 ; # requirements += shared ; } # for probing pt external-lib boost_serialization ; requirements += boost_serialization/static ; if [ option.get "with-vw" ] { requirements += HAVE_VW ; } project : default-build multi on off release static ; #Apparently OS X likes to link against iconv for fgetsUTF8. lib iconv ; requirements += MACOSX:iconv ; project : requirements multi:WITH_THREADS multi:boost_thread boost_system boost_program_options _FILE_OFFSET_BITS=64 _LARGE_FILES $(requirements) . ; #Add directories here if you want their incidental targets too (i.e. tests). build-projects lm util phrase-extract phrase-extract/syntax-common search moses moses/LM mert moses-cmd scripts regression-testing ; # contrib/mira if [ option.get "with-mm-extras" : : "yes" ] { alias mm-extras : moses/TranslationModel/UG//bitext-find moses/TranslationModel/UG//ptable-describe-features moses/TranslationModel/UG//count-ptable-features moses/TranslationModel/UG//ptable-sigtest-filter moses/TranslationModel/UG//ptable-lookup moses/TranslationModel/UG//ptable-lookup-corpus moses/TranslationModel/UG//check-coverage moses/TranslationModel/UG/mm//mtt-demo1 moses/TranslationModel/UG/mm//mtt-dump moses/TranslationModel/UG/mm//mam2symal moses/TranslationModel/UG/mm//mam_verify moses/TranslationModel/UG/mm//mmlex-lookup moses/TranslationModel/UG/mm//mtt-count-words moses/TranslationModel/UG/mm//calc-coverage moses/TranslationModel/UG//try-align ; } else { alias mm-extras ; } if [ option.get "with-mm" : : "yes" ] { alias mm : moses/TranslationModel/UG/mm//mtt-build moses/TranslationModel/UG/mm//symal2mam moses/TranslationModel/UG/mm//mmlex-build ; } else { alias mm ; } if [ option.get "with-rephraser" : : "yes" ] { alias rephraser : contrib/rephraser//paraphrase ; } else { alias rephraser ; } alias programs : lm//programs moses-cmd//programs OnDiskPt//CreateOnDiskPt OnDiskPt//queryOnDiskPt mert//programs misc//programs symal phrase-extract phrase-extract//lexical-reordering phrase-extract//extract-ghkm phrase-extract//pcfg-extract phrase-extract//pcfg-score phrase-extract//extract-mixed-syntax phrase-extract//score-stsg phrase-extract//filter-rule-table phrase-extract//postprocess-egret-forests biconcor # contrib/mira//mira contrib/server//mosesserver mm mm-extras rephraser contrib/c++tokenizer//tokenizer contrib/expected-bleu-training//train-expected-bleu contrib/expected-bleu-training//prepare-expected-bleu-training probingpt//programs moses2//programs ; install-bin-libs programs ; install-headers headers-base : [ path.glob-tree biconcor contrib lm mert misc moses-cmd OnDiskPt phrase-extract symal util : *.hh *.h ] : . ; install-headers headers-moses : moses//headers-to-install : moses ; alias install : prefix-bin prefix-lib headers-base headers-moses ; if ! [ option.get "includedir" : : $(prefix)/include ] { explicit install headers-base headers-moses ; } if [ path.exists $(TOP)/dist ] && $(prefix) != dist { echo "You have a $(TOP)/dist directory, but the build system now places files directly in the root i.e. $(TOP)/bin ." ; echo "To disable this message, delete $(TOP)/dist ." ; echo ; } #local temp = [ _shell "bash source ./s.sh" ] ; local temp = [ _shell "mkdir -p $(PREFIX)/bin" ] ; local temp = [ _shell "rm -f $(PREFIX)/bin/moses_chart" ] ; local temp = [ _shell "cd $(PREFIX)/bin && ln -sf moses moses_chart" ] ; local temp = [ _shell "cd $(PREFIX)/bin && ln -sf CreateProbingPT CreateProbingPT2" ] ;