diff --git a/matlab/dynare.m b/matlab/dynare.m index a8323cffab032aba1ad167a7fb9e4f2bc0fd538a..85151e2ed1affef6ca7bbf0de31c1ccb4274bdc5 100644 --- a/matlab/dynare.m +++ b/matlab/dynare.m @@ -70,6 +70,11 @@ dynareroot = dynare_config('', preprocessoroutput); warning_config() +% For OpenMP on Mac +if ismac + setenv('KMP_DUPLICATE_LIB_OK', 'TRUE'); +end + if isoctave % The supported_octave_version.m file is not in git nor in the source % package, it is manually added in binary packages distributed on dynare.org diff --git a/mex/build/block_kalman_filter.am b/mex/build/block_kalman_filter.am index 9379db00603697d5957b613be3d874d1bf9b485d..e827f04e44eacc103e3048cda6fecbccf46e557a 100644 --- a/mex/build/block_kalman_filter.am +++ b/mex/build/block_kalman_filter.am @@ -3,7 +3,13 @@ mex_PROGRAMS = block_kalman_filter TOPDIR = $(top_srcdir)/../../sources/block_kalman_filter block_kalman_filter_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR) + +if MACOS +block_kalman_filter_CXXFLAGS = $(AM_CXXFLAGS) -Xpreprocessor -fopenmp +block_kalman_filter_LDADD = -lomp +else block_kalman_filter_CXXFLAGS = $(AM_CXXFLAGS) -fopenmp +endif nodist_block_kalman_filter_SOURCES = block_kalman_filter.cc diff --git a/mex/build/kronecker.am b/mex/build/kronecker.am index bb2c138bfd8fcca1be01ab9581bc7c16408ceec1..78bff8047c5317142836a6def972e7015e363ab2 100644 --- a/mex/build/kronecker.am +++ b/mex/build/kronecker.am @@ -3,7 +3,12 @@ mex_PROGRAMS = sparse_hessian_times_B_kronecker_C A_times_B_kronecker_C nodist_sparse_hessian_times_B_kronecker_C_SOURCES = sparse_hessian_times_B_kronecker_C.cc nodist_A_times_B_kronecker_C_SOURCES = A_times_B_kronecker_C.cc +if MACOS +sparse_hessian_times_B_kronecker_C_CXXFLAGS = $(AM_CXXFLAGS) -Xpreprocessor -fopenmp +sparse_hessian_times_B_kronecker_C_LDADD = -lomp +else sparse_hessian_times_B_kronecker_C_CXXFLAGS = $(AM_CXXFLAGS) -fopenmp +endif BUILT_SOURCES = $(nodist_sparse_hessian_times_B_kronecker_C_SOURCES) $(nodist_A_times_B_kronecker_C_SOURCES) CLEANFILES = $(nodist_sparse_hessian_times_B_kronecker_C_SOURCES) $(nodist_A_times_B_kronecker_C_SOURCES) diff --git a/mex/build/local_state_space_iterations.am b/mex/build/local_state_space_iterations.am index 59054b76d71a3b275fd0f8626739f4b39f461f01..5d4ecc658e55372adc7eb369e80d7be761a19bba 100644 --- a/mex/build/local_state_space_iterations.am +++ b/mex/build/local_state_space_iterations.am @@ -2,7 +2,12 @@ mex_PROGRAMS = local_state_space_iteration_2 nodist_local_state_space_iteration_2_SOURCES = local_state_space_iteration_2.cc +if MACOS +local_state_space_iteration_2_CXXFLAGS = $(AM_CXXFLAGS) -Xpreprocessor -fopenmp +local_state_space_iteration_2_LDADD = -lomp +else local_state_space_iteration_2_CXXFLAGS = $(AM_CXXFLAGS) -fopenmp +endif BUILT_SOURCES = $(nodist_local_state_space_iteration_2_SOURCES) CLEANFILES = $(nodist_local_state_space_iteration_2_SOURCES) diff --git a/mex/build/matlab/configure.ac b/mex/build/matlab/configure.ac index 2cf2d0f69ec5c3b6a75e44db45dd4109e381e022..6daa2ee8dac0d913ca509885881bbbb62a17bb11 100644 --- a/mex/build/matlab/configure.ac +++ b/mex/build/matlab/configure.ac @@ -64,8 +64,10 @@ AX_PROG_LN_S AC_PROG_MKDIR_P AM_PROG_AR +build_mac=no case ${host_os} in *darwin*) + build_mac=yes string=$($CXX --version) if test "${string#*clang}" != "$string"; then CXXFLAGS="$CXXFLAGS -stdlib=libc++" @@ -79,6 +81,8 @@ esac AX_CXX11_THREAD +AM_CONDITIONAL([MACOS], [test "$build_mac" = "yes"]) + # Check for dlopen(), needed by k_order_perturbation DLL AC_CHECK_LIB([dl], [dlopen], [LIBADD_DLOPEN="-ldl"], []) AC_SUBST([LIBADD_DLOPEN]) diff --git a/mex/build/octave/configure.ac b/mex/build/octave/configure.ac index fc12ba4e0d45724740d4c76c86c7bc14881bc6f7..a02ece5f9b48c9be8a556a745a66377bdad6b2df 100644 --- a/mex/build/octave/configure.ac +++ b/mex/build/octave/configure.ac @@ -70,13 +70,17 @@ AM_CONDITIONAL([HAVE_SLICOT], [test "$has_slicot" = yes]) AC_CHECK_LIB([umfpack], [umfpack_dl_defaults], [LIBADD_UMFPACK="-lumfpack"], [AC_MSG_ERROR([Can't find UMFPACK])]) # For OS X, explicitly add libraries that libumfpack depends on as Homebrew # doesn't support the creation of shared libraries for suite-sparse 3.7.0 +build_mac=no case ${host_os} in darwin*) + build_mac=yes LIBADD_UMFPACK="-lumfpack -lcholmod -lcolamd -lamd" ;; esac AC_SUBST([LIBADD_UMFPACK]) +AM_CONDITIONAL([MACOS], [test "$build_mac" = "yes"]) + AM_CONDITIONAL([DO_SOMETHING], [test -n "$MKOCTFILE"]) if test -n "$MKOCTFILE"; then diff --git a/mex/build/perfect_foresight_problem.am b/mex/build/perfect_foresight_problem.am index e295c7e25257115040eca56a1c8541512a57d522..087f694e86baa6f9ffb9f7698aa557f8811e2344 100644 --- a/mex/build/perfect_foresight_problem.am +++ b/mex/build/perfect_foresight_problem.am @@ -5,8 +5,13 @@ TOPDIR = $(top_srcdir)/../../sources/perfect_foresight_problem nodist_perfect_foresight_problem_SOURCES = perfect_foresight_problem.cc DynamicModelCaller.cc perfect_foresight_problem_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR) +if MACOS +perfect_foresight_problem_CXXFLAGS = $(AM_CXXFLAGS) -Xpreprocessor -fopenmp +perfect_foresight_problem_LDADD = $(LIBADD_DLOPEN) -lomp +else perfect_foresight_problem_CXXFLAGS = $(AM_CXXFLAGS) -fopenmp perfect_foresight_problem_LDADD = $(LIBADD_DLOPEN) +endif BUILT_SOURCES = $(nodist_perfect_foresight_problem_SOURCES) CLEANFILES = $(nodist_perfect_foresight_problem_SOURCES) diff --git a/mex/build/qmc_sequence.am b/mex/build/qmc_sequence.am index 05084ec4d071ac76d045ab106ce4bf27cd4858ba..c8b7fac11ed806c4105966d115836e221babaf73 100644 --- a/mex/build/qmc_sequence.am +++ b/mex/build/qmc_sequence.am @@ -3,7 +3,12 @@ mex_PROGRAMS = qmc_sequence TOPDIR = $(top_srcdir)/../../sources/sobol qmc_sequence_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR) +if MACOS +qmc_sequence_CXXFLAGS = $(AM_CXXFLAGS) -Xpreprocessor -fopenmp +qmc_sequence_LDADD = -lomp +else qmc_sequence_CXXFLAGS = $(AM_CXXFLAGS) -fopenmp +endif nodist_qmc_sequence_SOURCES = qmc_sequence.cc