From ff4fa3117f9fd9509874400f6355722d8533f440 Mon Sep 17 00:00:00 2001 From: Joe Zuntz Date: Thu, 14 Dec 2017 16:31:16 +0000 Subject: [PATCH] Working version with nicer makefiles --- Makefile | 27 ++++++++++------- bin/cosmosis-new-module | 2 +- config/vars.mk | 2 +- cosmosis/Makefile | 9 ++++-- cosmosis/compilers.mk | 2 +- cosmosis/configure.py | 4 +++ cosmosis/datablock/Makefile | 2 +- cosmosis/dev/grid_test_modules/c/Makefile | 2 +- cosmosis/dev/grid_test_modules/f90/Makefile | 2 +- cosmosis/runtime/Makefile | 2 +- cosmosis/samplers/Makefile | 4 +-- cosmosis/samplers/minuit/Makefile | 4 ++- cosmosis/samplers/multinest/Makefile | 4 +-- .../samplers/multinest/multinest_src/Makefile | 2 +- cosmosis/tools/Makefile.template | 4 +-- example-modules/Makefile | 4 +-- example-modules/c-module/Makefile | 2 +- modules/Makefile | 4 +-- setup.py | 29 +++++++++++++++++-- 19 files changed, 76 insertions(+), 35 deletions(-) diff --git a/Makefile b/Makefile index 810748d0..e3f8ed75 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,18 @@ -include config/compilers.mk -include config/subdirs.mk +ifneq (clean,$(MAKECMDGOALS)) +include cosmosis/compilers.mk +else +ifeq (${COSMOSIS_SRC_DIR},) +COSMOSIS_SRC_DIR=${PWD} +$(info here we are) +export COSMOSIS_SRC_DIR +else +COSMOSIS_SRC_DIR=${COSMOSIS_SRC_DIR} +endif +endif + +include cosmosis/subdirs.mk + + all:: config/first @@ -11,12 +24,4 @@ config/first: @echo @touch config/first -SUBDIRS=cosmosis example-modules cosmosis-standard-library modules - - -ifneq ($(wildcard cosmosis-des-library/*),) -SUBDIRS+=cosmosis-des-library -$(info ) -$(info Compiling DES code in cosmosis-des-library) -$(info ) -endif +SUBDIRS=cosmosis diff --git a/bin/cosmosis-new-module b/bin/cosmosis-new-module index 862e2208..b3af3b56 100755 --- a/bin/cosmosis-new-module +++ b/bin/cosmosis-new-module @@ -17,7 +17,7 @@ module_makefile_text = """ # If you already have your own Makefile you can # replace all of this, but you need to keep this line # at the top: -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk #For python, leave this as is. For C/C++/Fortran, diff --git a/config/vars.mk b/config/vars.mk index c37560af..ef0f149e 100644 --- a/config/vars.mk +++ b/config/vars.mk @@ -57,7 +57,7 @@ MODULES = $(patsubst %.o,%.so,$(OBJ_MODULES)) TESTS = $(basename $(OBJ_TESTS)) EXE_TARGETS = $(basename $(OBJ_TARGETS)) -include $(COSMOSIS_DIR)/config/compilers.mk +include $(COSMOSIS_DIR)/cosmosis/compilers.mk LDLIBS=$(USER_LDLIBS) -l$(LIBNAME) diff --git a/cosmosis/Makefile b/cosmosis/Makefile index 290e3ee6..2357c4d0 100644 --- a/cosmosis/Makefile +++ b/cosmosis/Makefile @@ -1,4 +1,9 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +ifneq (clean,$(MAKECMDGOALS)) +include cosmosis/compilers.mk +endif + +$(info ${COSMOSIS_SRC_DIR}) + +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk SUBDIRS=datablock samplers runtime diff --git a/cosmosis/compilers.mk b/cosmosis/compilers.mk index 0a6f71bc..48fac306 100644 --- a/cosmosis/compilers.mk +++ b/cosmosis/compilers.mk @@ -22,7 +22,7 @@ PEDANTIC_C_FLAGS=-Wall -Wextra -pedantic CXXFLAGS=$(COMMON_C_FLAGS) $(USER_CXXFLAGS) -std=c++1y CFLAGS=$(COMMON_C_FLAGS) $(USER_CFLAGS) -std=c99 FFLAGS=$(COMMON_FLAGS) -I${COSMOSIS_SRC_DIR}/cosmosis/datablock $(USER_FFLAGS) -std=gnu -ffree-line-length-none -LDFLAGS=$(USER_LDFLAGS) -L${COSMOSIS_SRC_DIR}/cosmosis/datablock +LDFLAGS=$(USER_LDFLAGS) -L${COSMOSIS_SRC_DIR}/cosmosis/datablock -Wl,-rpath,"${COSMOSIS_SRC_DIR}/cosmosis/datablock" PYTHON=python MAKEFLAGS += --print-directory diff --git a/cosmosis/configure.py b/cosmosis/configure.py index f0789e94..773dbe9d 100644 --- a/cosmosis/configure.py +++ b/cosmosis/configure.py @@ -1,5 +1,6 @@ import os import sys +from . import compilers if '--debug' in sys.argv: common_flags = "-O3 -g -fPIC" @@ -16,8 +17,11 @@ export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH:{cosmosis_src_dir}/cosmosis/datablock export LIBRARY_PATH=$LIBRARY_PATH:{cosmosis_src_dir}/cosmosis/datablock export COSMOSIS_ALT_COMPILERS=1 +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{cosmosis_src_dir}/cosmosis/datablock +export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:{cosmosis_src_dir}/cosmosis/datablock """.format(**locals()) +commands += compilers.compilers if __name__ == '__main__': print(commands) diff --git a/cosmosis/datablock/Makefile b/cosmosis/datablock/Makefile index daf4604a..b93b4bf3 100644 --- a/cosmosis/datablock/Makefile +++ b/cosmosis/datablock/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk USER_CFLAGS=$(PEDANTIC_C_FLAGS) -Werror USER_CXXFLAGS=$(PEDANTIC_C_FLAGS) diff --git a/cosmosis/dev/grid_test_modules/c/Makefile b/cosmosis/dev/grid_test_modules/c/Makefile index 96df88ea..f40d93f6 100644 --- a/cosmosis/dev/grid_test_modules/c/Makefile +++ b/cosmosis/dev/grid_test_modules/c/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk USER_LDFLAGS= -lcosmosis diff --git a/cosmosis/dev/grid_test_modules/f90/Makefile b/cosmosis/dev/grid_test_modules/f90/Makefile index 76955d78..928237c3 100644 --- a/cosmosis/dev/grid_test_modules/f90/Makefile +++ b/cosmosis/dev/grid_test_modules/f90/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk USER_LDFLAGS= -lcosmosis_fortran -lcosmosis diff --git a/cosmosis/runtime/Makefile b/cosmosis/runtime/Makefile index 7dea51f0..3beb34cf 100644 --- a/cosmosis/runtime/Makefile +++ b/cosmosis/runtime/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk USER_CFLAGS=$(PEDANTIC_C_FLAGS) -Werror USER_CXXFLAGS=$(PEDANTIC_C_FLAGS) diff --git a/cosmosis/samplers/Makefile b/cosmosis/samplers/Makefile index 2ad204ff..96af1047 100644 --- a/cosmosis/samplers/Makefile +++ b/cosmosis/samplers/Makefile @@ -1,5 +1,5 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk # SUBDIRS=multinest diff --git a/cosmosis/samplers/minuit/Makefile b/cosmosis/samplers/minuit/Makefile index 49c77ec9..1e5c248c 100644 --- a/cosmosis/samplers/minuit/Makefile +++ b/cosmosis/samplers/minuit/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk define newline @@ -8,9 +8,11 @@ endef ifeq (${MINUIT2_LIB},) +ifneq (clean,$(MAKECMDGOALS)) $(warning) $(warning ${newline} ${newline}Not building the minuit sampler as the you need the Minuit2 library ${newline}(And to set the MINUIT2_LIB and MINUIT2_INC environment variables.) ${newline}This is not generally a problem.${newline}${newline}) $(warning) +endif ALL= else ALL=minuit_wrapper.so diff --git a/cosmosis/samplers/multinest/Makefile b/cosmosis/samplers/multinest/Makefile index 6774792b..cf38ee78 100644 --- a/cosmosis/samplers/multinest/Makefile +++ b/cosmosis/samplers/multinest/Makefile @@ -1,5 +1,5 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk SUBDIRS=multinest_src diff --git a/cosmosis/samplers/multinest/multinest_src/Makefile b/cosmosis/samplers/multinest/multinest_src/Makefile index 9532e8ad..30960f36 100644 --- a/cosmosis/samplers/multinest/multinest_src/Makefile +++ b/cosmosis/samplers/multinest/multinest_src/Makefile @@ -1,4 +1,4 @@ -include ../../../../config/compilers.mk +include ../../../../cosmosis/compilers.mk MPI = $(shell which $(MPIFC) 2> /dev/null) diff --git a/cosmosis/tools/Makefile.template b/cosmosis/tools/Makefile.template index 706176ce..6aa98868 100644 --- a/cosmosis/tools/Makefile.template +++ b/cosmosis/tools/Makefile.template @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk SUBDIRS = diff --git a/example-modules/Makefile b/example-modules/Makefile index d9544960..4407b71d 100644 --- a/example-modules/Makefile +++ b/example-modules/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk SUBDIRS = c-module diff --git a/example-modules/c-module/Makefile b/example-modules/c-module/Makefile index 8a063aad..f11b4b71 100644 --- a/example-modules/c-module/Makefile +++ b/example-modules/c-module/Makefile @@ -1,4 +1,4 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk all: example_c_module.so diff --git a/modules/Makefile b/modules/Makefile index 73c6e6c1..a7460503 100644 --- a/modules/Makefile +++ b/modules/Makefile @@ -1,5 +1,5 @@ -include ${COSMOSIS_SRC_DIR}/config/compilers.mk -include ${COSMOSIS_SRC_DIR}/config/subdirs.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/compilers.mk +include ${COSMOSIS_SRC_DIR}/cosmosis/subdirs.mk SUBDIRS = diff --git a/setup.py b/setup.py index 4f461c0d..39e51ab0 100644 --- a/setup.py +++ b/setup.py @@ -61,17 +61,41 @@ f90_headers = [f[:-4]+".mod" for f in f90_files] def compile_library(): + cosmosis_src_dir = os.getcwd() os.chdir('cosmosis/datablock/') try: - os.system("make") + status = os.system("COSMOSIS_ALT_COMPILERS=1 COSMOSIS_SRC_DIR={} make".format(cosmosis_src_dir)) finally: os.chdir('../../') + if status: + raise RuntimeError("Failed to compile cosmosis core") - +def setup_compilers(): + try: + cc = os.environ['CC'] + fc = os.environ['FC'] + cxx = os.environ['CXX'] + except KeyError: + sys.stderr.write("For the avoidance of confusion you need to set\n") + sys.stderr.write("These environment variables before installing cosmosis:\n") + sys.stderr.write("CC, FC, CXX for the C compiler, fortran compiler, and C++ compiler.\n\n") + sys.exit(1) + f = open("./cosmosis/compilers.py", "w") + f.write("compilers = '''\n".format(cc)) + f.write("export CC={}\n".format(cc)) + f.write("export FC={}\n".format(fc)) + f.write("export CXX={}\n".format(cxx)) + f.write("export COSMOSIS_ALT_COMPILERS=1\n") + f.write("'''\n") + f.close() + +setup_compilers() compile_library() + + if __name__ == "__main__": setup(name = 'cosmosis', description = "Joe Test", @@ -80,5 +104,6 @@ def compile_library(): packages = find_packages(), include_package_data = True, scripts = scripts, + install_requires = ['pyyaml', 'future', 'configparser', 'emcee', 'numpy', 'scipy'] )