From: <bpe...@us...> - 2016-02-09 23:35:38
|
Revision: 5008 http://sourceforge.net/p/simupop/code/5008 Author: bpeng2000 Date: 2016-02-09 23:35:36 +0000 (Tue, 09 Feb 2016) Log Message: ----------- Use pre-compiled header and static library to suppress compiling warnings from boost and reduce build time Modified Paths: -------------- trunk/MANIFEST.in trunk/setup.py trunk/simuPOP_version.py trunk/src/genoStru.cpp trunk/src/genoStru.h trunk/src/migrator.cpp trunk/src/migrator.h trunk/src/pedigree.h trunk/src/penetrance.h trunk/src/population.cpp trunk/src/population.h trunk/src/qtrait.h trunk/src/selector.h trunk/src/simuPOP_cfg.h trunk/src/utility.cpp Modified: trunk/MANIFEST.in =================================================================== --- trunk/MANIFEST.in 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/MANIFEST.in 2016-02-09 23:35:36 UTC (rev 5008) @@ -18,6 +18,7 @@ include config_linux.h include config_mac.h include src/simuPOP_cfg.h +include src/boost_pch.h include src/mutant_vector.h include src/utility.h include src/genoStru.h Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/setup.py 2016-02-09 23:35:36 UTC (rev 5008) @@ -41,6 +41,7 @@ """ import os, sys, platform, shutil, glob, re, tempfile, subprocess import distutils.sysconfig +from distutils.ccompiler import new_compiler from distutils.errors import CompileError from distutils.errors import DistutilsExecError @@ -186,6 +187,9 @@ if distutils.sysconfig.get_config_var('CC') is not None: USE_ICC = 'icc' in distutils.sysconfig.get_config_var('CC') +if not USE_ICC and USE_OPENMP: + COMMON_MACROS.append(('_GLIBCXX_PARALLEL', None)) + # simuPOP works with these boost versions. Newer versions will be used if these # versions are not available, and will most likely work just fine. boost_versions = ['1_35_0', '1_36_0', '1_37_0', '1_38_0', '1_39_0', '1_40_0', @@ -385,7 +389,7 @@ # since it is troublesome to link to external gsl library, # I embed some GSL files with simuPOP. -LIB_FILES = [ +GSL_LIB_FILES = [ 'gsl/sys/infnan.c', 'gsl/sys/coerce.c', 'gsl/sys/fdiv.c', @@ -470,7 +474,9 @@ 'gsl/cdf/gamma.c', 'gsl/cdf/poisson.c', 'gsl/error.c' -] + [x for x in glob.glob(os.path.join(boost_serialization_dir, '*.cpp')) if 'xml' not in x and 'binary' not in x]\ +] + +LIB_FILES = [x for x in glob.glob(os.path.join(boost_serialization_dir, '*.cpp')) if 'xml' not in x and 'binary' not in x]\ + [x for x in glob.glob(os.path.join(boost_iostreams_dir, '*.cpp')) if 'bzip' not in x]\ + glob.glob(os.path.join(boost_regex_dir, '*.cpp')) @@ -551,32 +557,39 @@ if not os.path.isdir('build'): os.mkdir('build') +COMMON_MACROS = [ + ('BOOST_UBLAS_NDEBUG', None), + ('_HAS_ITERATOR_DEBUGGING', 0) + ] + +if os.name == 'nt': + COMMON_MACROS.extend([('BOOST_ALL_NO_LIB', None), + ('NO_ZLIB', 0), ('NO_BZIP' , 1), + # this one disables a lot of warnings about VC Checked iterators. + #('_SCL_SECURE_NO_WARNINGS', None) + ]) + MACROS = { 'std': [('SIMUPOP_MODULE', 'simuPOP_std'), - ('_SECURE_SCL', 1), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('_SECURE_SCL', 1)], 'op': [('SIMUPOP_MODULE', 'simuPOP_op'), ('OPTIMIZED', None), - ('NDEBUG', None), ('BOOST_UBLAS_NDEBUG', None), - ('_SECURE_SCL', 0), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('NDEBUG', None), ('_SECURE_SCL', 0)], 'la': [('SIMUPOP_MODULE', 'simuPOP_la'), ('LONGALLELE', None), - ('_SECURE_SCL', 1), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('_SECURE_SCL', 1)], 'laop': [('SIMUPOP_MODULE', 'simuPOP_laop'), ('LONGALLELE', None), - ('OPTIMIZED', None),('NDEBUG', None), ('BOOST_UBLAS_NDEBUG', None), - ('_SECURE_SCL', 0), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('OPTIMIZED', None),('NDEBUG', None), ('_SECURE_SCL', 0)], 'ba': [('SIMUPOP_MODULE', 'simuPOP_ba'), ('BINARYALLELE', None), - ('_SECURE_SCL', 1), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('_SECURE_SCL', 1)], 'baop': [('SIMUPOP_MODULE', 'simuPOP_baop'), ('BINARYALLELE', None), - ('OPTIMIZED', None),('NDEBUG', None), ('BOOST_UBLAS_NDEBUG', None), - ('_SECURE_SCL', 0), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('OPTIMIZED', None),('NDEBUG', None), ('_SECURE_SCL', 0)], 'mu': [('SIMUPOP_MODULE', 'simuPOP_mu'), ('MUTANTALLELE', None), - ('_SECURE_SCL', 1), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('_SECURE_SCL', 1)], 'muop': [('SIMUPOP_MODULE', 'simuPOP_muop'), ('MUTANTALLELE', None), - ('OPTIMIZED', None),('NDEBUG', None), ('BOOST_UBLAS_NDEBUG', None), - ('_SECURE_SCL', 0), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('OPTIMIZED', None),('NDEBUG', None), ('_SECURE_SCL', 0)], 'lin': [('SIMUPOP_MODULE', 'simuPOP_lin'), ('LINEAGE', None), - ('_SECURE_SCL', 1), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('_SECURE_SCL', 1)], 'linop': [('SIMUPOP_MODULE', 'simuPOP_linop'), ('LINEAGE', None), - ('OPTIMIZED', None),('NDEBUG', None), ('BOOST_UBLAS_NDEBUG', None), - ('_SECURE_SCL', 0), ('_HAS_ITERATOR_DEBUGGING', 0)], + ('OPTIMIZED', None),('NDEBUG', None), ('_SECURE_SCL', 0)], } @@ -640,7 +653,8 @@ if is_maverick(): common_extra_link_args = ['-stdlib=libstdc++'] common_extra_include_dirs = ['/usr/include/c++/4.2.1'] - common_extra_compile_args = ['-Wno-error=unused-command-line-argument-hard-error-in-future'] + #common_extra_compile_args = ['-Wno-error=unused-command-line-argument-hard-error-in-future'] + common_extra_compile_args = ['-Wno-error=unused-command-line-argument'] elif os.name == 'nt': common_extra_link_args = [] common_extra_include_dirs = [] @@ -660,12 +674,18 @@ res['src'] = ['src/simuPOP_' + modu + '_wrap.cpp'] for src in SOURCE_FILES: res['src'].append('build/%s/%s' % (modu, src)) - res['src'].extend(LIB_FILES) + # + # For some reason that I have not got a change to investigate, including GSL_LIB_FILES + # to LIB_FILES would lead to symbol not found and some error like that. I suspect + # that this is related to the order the library is linked, or some MACRO that is only + # used when the GSL files are compiled with simuPOP modules. + # + res['src'].extend(GSL_LIB_FILES) # lib if os.name == 'nt': # Windows, build zlib from source - res['libraries'] = [] + res['libraries'] = ['simuPOP_shared'] else: - res['libraries'] = ['z'] + res['libraries'] = ['z', 'simuPOP_shared'] if USE_OPENMP: if USE_ICC: res['libraries'].append('iomp5') @@ -711,18 +731,8 @@ if USE_ICC: res['extra_compile_args'].extend(['-wd981', '-wd191']) # define_macros (deep copy) - res['define_macros'] = [x for x in MACROS[modu]] - res['define_macros'].extend([('SIMUPOP_VER', SIMUPOP_VER), ('SIMUPOP_REV', SIMUPOP_REV)]) - if os.name == 'nt': - res['define_macros'].extend([('BOOST_ALL_NO_LIB', None), - ('NO_ZLIB', 0), ('NO_BZIP' , 1), - # this one disables a lot of warnings about VC Checked iterators. - #('_SCL_SECURE_NO_WARNINGS', None) - ]) - else: - if not USE_ICC: - if USE_OPENMP: - res['define_macros'].append(('_GLIBCXX_PARALLEL', None)) + res['define_macros'] = COMMON_MACROS + MACROS[modu] + res['undef_macros'] = [] return res @@ -746,7 +756,40 @@ SIMUPOP_VER, SIMUPOP_REV = simuPOP_version() # create source file for each module MODULES = ['std', 'op', 'la', 'laop', 'ba', 'baop', 'mu', 'muop', 'lin', 'linop'] - + COMMON_MACROS.extend([ + ('SIMUPOP_VER', SIMUPOP_VER), + ('SIMUPOP_REV', SIMUPOP_REV) + ]) + + try: + if os.name != 'nt' and (not os.path.isfile('src/boost_pch.h.pch') or \ + os.path.getmtime('src/boost_pch.h.pch') > os.path.getmtime('src/boost_pch.h')): + c = new_compiler(verbose=1) + # allow compiling .h file + c.src_extensions.append('.hpp') + c.compile(['src/boost_pch.hpp'], output_dir='src', + include_dirs=['.', 'gsr', boost_include_dir] + common_extra_include_dirs, + extra_preargs = common_extra_compile_args, + macros=COMMON_MACROS) + except Exception as e: + # it is ok if boost_pch cannot be precompiled. + print('Failed to pre-compile boost headers: {}'.format(e)) + + try: + # try to get + print('Building a static library') + c = new_compiler(verbose=1) + # -w suppress all warnings caused by the use of boost libraries + objects = c.compile(LIB_FILES, extra_postargs=['-w', '-unknownnn'], + include_dirs=['gsl', 'gsl/specfunc', 'build', '.', boost_include_dir] + common_extra_include_dirs, + output_dir='build', + extra_preargs = common_extra_compile_args, + macros = COMMON_MACROS + ) + c.create_static_lib(objects, "simuPOP_shared", output_dir='build') + except Exception as e: + sys.exit("Failed to build a shared supporting library: {}".format(e)) + # # Generate Wrapping files # @@ -803,7 +846,7 @@ Extension('simuPOP._gsl', sources = GSL_FILES + ['src/gsl_wrap.c'], include_dirs = ['gsl', 'gsl/specfunc', 'build', '.'] + common_extra_include_dirs, - extra_compile_args = common_extra_compile_args, + extra_compile_args = common_extra_compile_args + ['-w'], extra_link_args = common_extra_link_args, ) ] Modified: trunk/simuPOP_version.py =================================================================== --- trunk/simuPOP_version.py 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/simuPOP_version.py 2016-02-09 23:35:36 UTC (rev 5008) @@ -1,2 +1,2 @@ -SIMUPOP_VER="1.1.8svn" +SIMUPOP_VER="1.1.8" SIMUPOP_REV="5003" Modified: trunk/src/genoStru.cpp =================================================================== --- trunk/src/genoStru.cpp 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/genoStru.cpp 2016-02-09 23:35:36 UTC (rev 5008) @@ -25,7 +25,7 @@ #include "genoStru.h" -#include "boost/lambda/lambda.hpp" +#include "boost_pch.hpp" using namespace boost::lambda; Modified: trunk/src/genoStru.h =================================================================== --- trunk/src/genoStru.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/genoStru.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -34,11 +34,7 @@ #include "utility.h" #include "simuPOP_cfg.h" -#include <boost/serialization/vector.hpp> -#include <boost/serialization/version.hpp> -#include <boost/serialization/split_member.hpp> -#include <boost/serialization/split_free.hpp> - +#include "boost_pch.hpp" #include <iterator> using std::ostream; using std::ostream_iterator; Modified: trunk/src/migrator.cpp =================================================================== --- trunk/src/migrator.cpp 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/migrator.cpp 2016-02-09 23:35:36 UTC (rev 5008) @@ -26,9 +26,7 @@ #include "virtualSubPop.h" #include "migrator.h" -#include <boost/numeric/ublas/lu.hpp> -#include <boost/numeric/ublas/io.hpp> - +#include "boost_pch.hpp" namespace simuPOP { Migrator::Migrator(const floatMatrix & rate, int mode, const uintList & toSubPops, Modified: trunk/src/migrator.h =================================================================== --- trunk/src/migrator.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/migrator.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -33,8 +33,9 @@ #include <list> using std::list; -#include <boost/numeric/ublas/matrix.hpp> +#include "boost_pch.hpp" + #include <iostream> using std::cout; using std::endl; Modified: trunk/src/pedigree.h =================================================================== --- trunk/src/pedigree.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/pedigree.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -31,13 +31,7 @@ */ #include "population.h" -#if TR1_SUPPORT == 0 -# include <map> -#elif TR1_SUPPORT == 1 -# include <unordered_map> -#else -# include <tr1/unordered_map> -#endif +#include "boost_pch.hpp" namespace simuPOP { Modified: trunk/src/penetrance.h =================================================================== --- trunk/src/penetrance.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/penetrance.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -32,7 +32,7 @@ #include "utility.h" #include "operator.h" -#include "boost/tuple/tuple.hpp" +#include "boost_pch.hpp" #include <numeric> using std::min; Modified: trunk/src/population.cpp =================================================================== --- trunk/src/population.cpp 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/population.cpp 2016-02-09 23:35:36 UTC (rev 5008) @@ -27,9 +27,7 @@ #include "virtualSubPop.h" // for file compression -#include <boost/iostreams/filtering_stream.hpp> -#include <boost/iostreams/filter/gzip.hpp> -#include <boost/iostreams/device/file.hpp> +#include "boost_pch.hpp" #if PY_VERSION_HEX >= 0x03000000 # define PyInt_FromLong(x) PyLong_FromLong(x) Modified: trunk/src/population.h =================================================================== --- trunk/src/population.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/population.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -46,14 +46,7 @@ #include <deque> using std::deque; -#include <boost/archive/text_iarchive.hpp> -#include <boost/archive/text_oarchive.hpp> -#include <boost/serialization/utility.hpp> -#include <boost/serialization/vector.hpp> -#include <boost/serialization/split_member.hpp> -#include <boost/serialization/split_free.hpp> -#include <boost/serialization/version.hpp> - +#include "boost_pch.hpp" #include "individual.h" #include "virtualSubPop.h" Modified: trunk/src/qtrait.h =================================================================== --- trunk/src/qtrait.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/qtrait.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -32,7 +32,7 @@ #include "utility.h" #include "operator.h" -#include "boost/tuple/tuple.hpp" +#include "boost_pch.hpp" #include <numeric> using std::min; Modified: trunk/src/selector.h =================================================================== --- trunk/src/selector.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/selector.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -32,7 +32,7 @@ #include "utility.h" #include "operator.h" -#include "boost/tuple/tuple.hpp" +#include "boost_pch.hpp" #include <numeric> using std::min; Modified: trunk/src/simuPOP_cfg.h =================================================================== --- trunk/src/simuPOP_cfg.h 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/simuPOP_cfg.h 2016-02-09 23:35:36 UTC (rev 5008) @@ -498,8 +498,9 @@ } #pragma GCC system_header -#include <boost/format.hpp> +#include "boost_pch.hpp" + namespace simuPOP { // standard library Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2016-01-27 15:00:33 UTC (rev 5007) +++ trunk/src/utility.cpp 2016-02-09 23:35:36 UTC (rev 5008) @@ -52,7 +52,7 @@ using std::ifstream; using std::ofstream; -#include "boost/lexical_cast.hpp" +#include "boost_pch.hpp" // for data type lociList #include "genoStru.h" @@ -105,7 +105,7 @@ #include "boost/pending/lowest_bit.hpp" using boost::lowest_bit; -#include "boost/regex.hpp" + using boost::regex; using boost::regex_match; using boost::cmatch; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |