diff --git a/Dockerfile b/Dockerfile index a6a335a2f..3db8d793b 100755 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ RUN mkdir obj bin logs ENV COMPAS_ROOT_DIR /app/COMPAS # Compile COMPAS -RUN cd src && make -f Makefile.docker -j $(nproc) +RUN cd src && make DOCKER_BUILD=1 -j $(nproc) # Run COMPAS # CMD [ "python", "src/pythonSubmitDefault.py" ] diff --git a/src/Makefile b/src/Makefile index 4af5547a6..5df014a36 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,7 +8,29 @@ CPP := g++ -# gsl directories +# Build configuration: DOCKER_BUILD=1 for Docker, otherwise local +ifeq ($(DOCKER_BUILD),1) + # Docker-specific settings + ODIR := ../obj + BDIR := ../bin + OPTFLAGS_SPECIFIC := -O3 + CXXFLAGS_SPECIFIC := + LFLAGS_SPECIFIC := +else + # Local-specific settings + ODIR := obj + BDIR := bin + OPTFLAGS_SPECIFIC := -march=native -O3 + CXXFLAGS_SPECIFIC := -g -fnon-call-exceptions -Woverloaded-virtual + LFLAGS_SPECIFIC := -rdynamic +endif + +# Common variables for both builds +EXE := $(BDIR)/COMPAS +SOURCES := $(wildcard *.cpp) +OBJS := $(patsubst %.cpp,$(ODIR)/%.o,$(SOURCES)) + +# GSL, Boost, and HDF5 directories GSLINCDIR := /include GSLLIBDIR := /lib @@ -20,114 +42,47 @@ BOOSTLIBDIR := /lib HDF5INCDIR := /usr/include/hdf5/serial HDF5LIBDIR := /usr/lib/x86_64-linux-gnu/hdf5/serial -EXE := COMPAS - -# build COMPAS -ifeq ($(filter clean,$(MAKECMDGOALS)),) - $(info Building $(EXE) with $(CPP)) -endif - - +# Define flags OPTFLAGS := -ifneq ($(filter fast,$(MAKECMDGOALS)),) - $(info Adding optimisation flags into the compilation - will take longer to build) - OPTFLAGS += -march=native -O3 +ifneq ($(filter fast staticfast,$(MAKECMDGOALS)),) + $(info Adding optimisation flags into the compilation - will take longer to build) + OPTFLAGS += $(OPTFLAGS_SPECIFIC) endif -ifneq ($(filter staticfast,$(MAKECMDGOALS)),) - $(info Adding optimisation flags into the (static) compilation - will take longer to build) - OPTFLAGS += -march=native -O3 -endif - - -CXXFLAGS := -std=c++17 -g -fnon-call-exceptions -Wall -Woverloaded-virtual -Wno-vla-extension $(OPTFLAGS) +CXXFLAGS := -std=c++17 -Wall $(OPTFLAGS) $(CXXFLAGS_SPECIFIC) ICFLAGS := -I$(GSLINCDIR) -I$(BOOSTINCDIR) -I$(HDF5INCDIR) -I. LIBS := -lm -lz -ldl -lpthread GSLLIBS := -lgsl -lgslcblas BOOSTLIBS := -lboost_filesystem -lboost_program_options -lboost_system HDF5LIBS := -lhdf5_hl_cpp -lhdf5_cpp -lhdf5_hl -lhdf5 -LFLAGS := -L$(GSLLIBDIR) -L$(BOOSTLIBDIR) -L$(HDF5LIBDIR) -Xlinker -rpath -rdynamic -Xlinker $(BOOSTLIBDIR) $(HDF5LIBS) $(LIBS) $(GSLLIBS) $(BOOSTLIBS) - -SOURCES := \ - profiling.cpp \ - utils.cpp \ - yaml.cpp \ - vector3d.cpp \ - \ - Rand.cpp \ - Options.cpp \ - Log.cpp \ - Errors.cpp \ - \ - BaseStar.cpp \ - \ - Star.cpp \ - \ - MainSequence.cpp \ - MS_lte_07.cpp \ - MS_gt_07.cpp \ - \ - CH.cpp \ - \ - GiantBranch.cpp \ - HG.cpp \ - FGB.cpp \ - CHeB.cpp \ - EAGB.cpp \ - TPAGB.cpp \ - \ - HeMS.cpp \ - HeHG.cpp \ - HeGB.cpp \ - \ - Remnants.cpp \ - \ - WhiteDwarfs.cpp \ - HeWD.cpp \ - COWD.cpp \ - ONeWD.cpp \ - \ - NS.cpp \ - BH.cpp \ - MR.cpp \ - \ - BinaryConstituentStar.cpp \ - BaseBinaryStar.cpp \ - BinaryStar.cpp \ - \ - main.cpp - -OBJI := $(SOURCES:.cpp=.o) - -# Create the list of header files, and remove -# main.h from this auto-generated list -INCL := $(SOURCES:.cpp=.h) -INCL := $(filter-out main.h,$(INCL)) +LFLAGS := -L$(GSLLIBDIR) -L$(BOOSTLIBDIR) -L$(HDF5LIBDIR) -Xlinker -rpath -Xlinker $(BOOSTLIBDIR) $(HDF5LIBS) $(LIBS) $(GSLLIBS) $(BOOSTLIBS) $(LFLAGS_SPECIFIC) -all: $(EXE) - @echo $(OBJI) +.PHONY: all static fast staticfast clean -$(EXE): $(OBJI) - @echo $(SOURCES) - @echo $(OBJI) - $(CPP) $(OBJI) $(LFLAGS) -o $@ +# Main targets +all: $(EXE) static: $(EXE)_STATIC - @echo $(OBJI) -$(EXE)_STATIC: $(OBJI) - @echo $(SOURCES) - @echo $(OBJI) - $(CPP) $(OBJI) $(LFLAGS) -static -o $@ +fast: all + +staticfast: static -%.o: %.cpp - $(CPP) $(CXXFLAGS) $(ICFLAGS) -c $? +$(EXE): $(OBJS) + @mkdir -p $(BDIR) + $(CPP) $(OBJS) $(LFLAGS) -o $@ -.phony: clean static fast staticfast +$(EXE)_STATIC: $(OBJS) + @mkdir -p $(BDIR) + $(CPP) $(OBJS) $(LFLAGS) -static -o $@ -fast: $(EXE) -staticfast:$(EXE)_STATIC +# Pattern rule to compile source files into object files +$(ODIR)/%.o: %.cpp + @mkdir -p $(ODIR) + $(CPP) $(CXXFLAGS) $(ICFLAGS) -o $@ -c $< +# Clean-up rule clean: - rm -f $(OBJI) $(EXE) $(EXE)_STATIC + @echo "Removing generated files..." + @rm -rf $(ODIR) $(BDIR) \ No newline at end of file diff --git a/src/Makefile.docker b/src/Makefile.docker deleted file mode 100644 index 687ad7574..000000000 --- a/src/Makefile.docker +++ /dev/null @@ -1,137 +0,0 @@ - -# use GNU C++ compiler by default -# -# can be overridden with CPP parameter -# -# e.g. make CPP=clang will use clang instead of g++ -# (note uppercase 'CPP' and no whitespace around '=') - -CPP := g++ - -# gsl directories -GSLINCDIR := /include -GSLLIBDIR := /lib - -# boost directories -BOOSTINCDIR := /include -BOOSTLIBDIR := /lib - -# hdf5 directories -HDF5INCDIR := /usr/include/hdf5/serial -HDF5LIBDIR := /usr/lib/x86_64-linux-gnu/hdf5/serial - -ODIR := ../obj -BDIR := ../bin - -EXE := $(BDIR)/COMPAS - -# build COMPAS -ifeq ($(filter clean,$(MAKECMDGOALS)),) - $(info Building $(EXE) with $(CPP)) -endif - - -OPTFLAGS := -ifneq ($(filter fast,$(MAKECMDGOALS)),) - $(info Adding optimisation flags into the compilation - will take longer to build) - OPTFLAGS += -O3 -endif - -ifneq ($(filter staticfast,$(MAKECMDGOALS)),) - $(info Adding optimisation flags into the (static) compilation - will take longer to build) - OPTFLAGS += -O3 -endif - - -CXXFLAGS := -std=c++17 -Wall $(OPTFLAGS) -ICFLAGS := -I$(GSLINCDIR) -I$(BOOSTINCDIR) -I$(HDF5INCDIR) -I. - -LIBS := -lm -lz -ldl -lpthread -GSLLIBS := -lgsl -lgslcblas -BOOSTLIBS := -lboost_filesystem -lboost_program_options -lboost_system -HDF5LIBS := -lhdf5_hl_cpp -lhdf5_cpp -lhdf5_hl -lhdf5 -LFLAGS := -L$(GSLLIBDIR) -L$(BOOSTLIBDIR) -L$(HDF5LIBDIR) -Xlinker -rpath -Xlinker $(BOOSTLIBDIR) $(HDF5LIBS) $(LIBS) $(GSLLIBS) $(BOOSTLIBS) - -SOURCES := \ - profiling.cpp \ - utils.cpp \ - yaml.cpp \ - vector3d.cpp \ - \ - Rand.cpp \ - Options.cpp \ - Log.cpp \ - Errors.cpp \ - \ - BaseStar.cpp \ - \ - Star.cpp \ - \ - MainSequence.cpp \ - MS_lte_07.cpp \ - MS_gt_07.cpp \ - \ - CH.cpp \ - \ - GiantBranch.cpp \ - HG.cpp \ - FGB.cpp \ - CHeB.cpp \ - EAGB.cpp \ - TPAGB.cpp \ - \ - HeMS.cpp \ - HeHG.cpp \ - HeGB.cpp \ - \ - Remnants.cpp \ - \ - WhiteDwarfs.cpp \ - HeWD.cpp \ - COWD.cpp \ - ONeWD.cpp \ - \ - NS.cpp \ - BH.cpp \ - MR.cpp \ - \ - BinaryConstituentStar.cpp \ - BaseBinaryStar.cpp \ - BinaryStar.cpp \ - \ - main.cpp - -OBJI := $(SOURCES:.cpp=.o) -OBJS := $(patsubst %,$(ODIR)/%,$(OBJI)) - -# Create the list of header files, and remove -# main.h from this auto-generated list -INCL := $(SOURCES:.cpp=.h) -INCL := $(filter-out main.h,$(INCL)) - -all: $(EXE) - @echo $(OBJS) - -$(EXE): $(OBJS) - @echo $(SOURCES) - @echo $(OBJS) - $(CPP) $(OBJS) $(LFLAGS) -o $@ - -static: $(EXE)_STATIC - @echo $(OBJS) - -$(EXE)_STATIC: $(OBJS) - @echo $(SOURCES) - @echo $(OBJS) - $(CPP) $(OBJS) $(LFLAGS) -static -o $@ - -$(ODIR)/%.o: %.cpp - $(CPP) $(CXXFLAGS) $(ICFLAGS) -o $@ -c $? - -.phony: clean static fast staticfast - -fast: $(EXE) -staticfast:$(EXE)_STATIC - -clean: - rm -f $(OBJS) $(EXE) $(EXE)_STATIC