diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..63f69e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ + +# Build folder +build/ diff --git a/common.mk b/common.mk index 61e27fc..20b1100 100644 --- a/common.mk +++ b/common.mk @@ -5,123 +5,18 @@ # Program name PROGNAME = OceanWave3D -LIBNAME = libOceanWave3D_botp.so +LIBNAME = libOceanWave3D.so # Installation directory -INSTALLDIR = $(HOME)/bin -LIBINSTALLDIR = $(HOME)/lib +INSTALLDIR ?= install/bin # Build directory where object files are stored -BUILDDIR = $(PWD)/build +BUILDDIR = build -# The build environment is set either by the choice of a compiler -# flag, or by creating a block for a specific $USER. -# Choose the Fortran compiler on this system -# E.g. pathf90, f90, gfortran, gf90, ifort -#FC = gfortran -#FC = gfortran44 -#FC = gfortran-4.4 -#FC = gf90 +FC = gfortran +LIBDIRS ?= -Llib +LINLIB ?= -llapack -lskit -lblas -lharwell +DBFLAGS ?= -pg -g -O0 -fPIC -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none +OPTFLAGS ?= -O3 -fPIC -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -fstack-protector-all +SHLIBFLAGS ?= -shared -O2 -fPIC -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -fstack-protector-all -USER = hbb - -# First the blocks based on compiler name: - -ifeq ($(FC),gfortran44) - # gbar linux machines - LIBDIRS = -L $(HOME)/lib/ - LINLIB = -lharwell -lskit -llapack -lblas - DBFLAGS = -pg -g -O0 -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none - OPTFLAGS = -O3 -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -endif - -ifeq ($(FC),ifort) - # hbb work machine with intel compiler - LIBDIRS = -L/usr/local/lib/ - LINLIB = -lharwell_intel -lskit_intel -llapack_intel -lblas_intel - DBFLAGS = -g -CB -fpe0 -fpstkchk -traceback - OPTFLAGS = -O3 -tpp7 -# OPTFLAGS = -g -fast -endif - - -ifeq ($(FC),gfortran) - # MacOS, apek - LIBDIRS = -L $(HOME)/lib/ -# -L/Users/apek/Documents/Fortran/Harwell/lib -L/usr/local/atlas/lib -L/Users/apek/Documents/Fortran/SPARSKIT2 -# LINLIB = -lharwell -lskit -latlas -llapack -l_VTK_IO -# LINLIB = -lharwell -lskit -latlas -l_VTK_IO -framework veclib - LINLIB = -lharwell -lskit -latlas -framework veclib - DBFLAGS = -pg -g -O -fcheck=all -ffpe-trap=invalid,zero,overflow - OPTFLAGS = -O2 -endif - -ifeq ($(FC),pathf90) - # Niflheim cluster, DTU, apek - LIBDIRS = -L/opt/acml3.5.0/pathscale64/lib -L$(HOME)/lib - LINLIB = -lharwellFPATH90 -lskitPATHF90 -llinpackPATHF90 -lacml - DBFLAGS = -pg -g -O -static -woffoptions - OPTFLAGS = -O2 -static -woffoptions -ffortran-bounds-check -endif - -ifeq ($(FC),f90) - # gbar, DTU, apek - LIBDIRS = -L$(HOME)/lib/ - LINLIB = -lharwell -lskit -xlic_lib=sunperf - DBFLAGS = -pg -g -O0 # -static -woffoptions - OPTFLAGS = -O -fast -# OPTFLAGS = -g -fast -endif - -# Then the blocks for specific users (this clobbers the above info.) -ifeq ($(USER),hbb) - # hbb machine, gfortran - FC=gfortran - LIBDIRS = -L $(HOME)/lib/ - LINLIB = -lharwell -lskit -llapack -lblas - DBFLAGS = -pg -g -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -fno-automatic - OPTFLAGS = -pg -O3 -ffree-line-length-none -fno-automatic -ffpe-trap=invalid,zero,overflow -# OPTFLAGS = -g -fast -endif - -ifeq ($(USER),botp-dev) - # botp kubuntu, 10.04-64bit - FC = gfortran - LIBDIRS = -L$(HOME)/lib/ - LINLIB = -lharwell_gfortran -ltmglib_gfortran -llapack_gfortran -lblas -lskit_gfortran - DBFLAGS = -pg -g -O0 -fPIC -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none - OPTFLAGS = -O3 -fPIC -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -fstack-protector-all - SHLIBFLAGS = -shared -O2 -fPIC -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -fstack-protector-all -endif - - -ifeq ($(USER),olli) - # olli linux machine - FC = gfortran - LIBDIRS = -L$(HOME)/lib/ -Ldep/SPARSKIT2/ -Ldep/Harwell/ - LINLIB = -lharwell -lskit -llapack -lblas - DBFLAGS = -pg -g -O0 -fbounds-check -ffpe-trap=invalid,zero,overflow -ffree-line-length-none - OPTFLAGS = -O3 -ffpe-trap=invalid,zero,overflow -ffree-line-length-none -endif - - -ifeq ($(USER),gudu) - # gudu linux machine - FC = ifort - LIBDIRS = -L$(HOME)/lib/ - LINLIB = -lharwell -lskit -llapack -lblas - DBFLAGS = -O0 -traceback -check all -warn all - OPTFLAGS = -O3 -xHOST -ipo -ip -endif - -ifeq ($(USER),apek) - # MacOS, apek - FC = gfortran - LIBDIRS = -L $(HOME)/lib/ -# -L/Users/apek/Documents/Fortran/Harwell/lib -L/usr/local/atlas/lib -L/Users/apek/Documents/Fortran/SPARSKIT2 -# LINLIB = -lharwell -lskit -latlas -llapack -l_VTK_IO -# LINLIB = -lharwell -lskit -latlas -l_VTK_IO -framework veclib - LINLIB = -lharwell -lskit -latlas -framework veclib - DBFLAGS = -pg -g -O -fcheck=all -ffpe-trap=invalid,zero,overflow - OPTFLAGS = -O2 -endif diff --git a/makefile b/makefile index ce0083b..6ef97f9 100644 --- a/makefile +++ b/makefile @@ -60,38 +60,34 @@ OBJECTS := $(OBJECTS:.f90=.o) OBJECTSNODIR = $(notdir $(OBJECTS)) OBJECTSBUILDDIR = $(addprefix $(BUILDDIR)/,$(OBJECTSNODIR)) -# -#test: $(OBJECTSBUILDDIR) -# @echo $(OBJECTSBUILDDIR) - # default target creates directory default: - -@mkdir -p -v $(BUILDDIR) @echo "To install OceanWave3D type 'make Debug|Release'" # Targets for linking +.PHONY: Release Release: FFLAGS = $(OPTFLAGS) -Release: $(OBJECTSBUILDDIR) +Release: MODE = "Release" +Release: $(INSTALLDIR)/$(PROGNAME) + +.PHONY: Debug +Debug: FFLAGS = $(DBFLAGS) +Debug: MODE = "Debug" +Debug: $(INSTALLDIR)/$(PROGNAME) + +$(INSTALLDIR)/$(PROGNAME): $(OBJECTSBUILDDIR) $(INSTALLDIR) @if ls *.mod &> /dev/null; then \ mv -v ./*.mod $(BUILDDIR); \ cp -v ./thirdpartylibs/LIB_VTK_IO/static/lib_vtk_io.mod $(BUILDDIR); \ fi - @echo "*** Starting linking of files for OceanWave3D (Release)... ***" + @echo "*** Starting linking of files for OceanWave3D ($(MODE))... ***" @$(FC) $(FFLAGS) -o $(INSTALLDIR)/$(PROGNAME) $(OBJECTSBUILDDIR) $(LIBDIRS) $(LINLIB) $(INCLUDEDIRS) - @echo "OceanWave3D has been built successfully." - -Debug: FFLAGS = $(DBFLAGS) -Debug: $(OBJECTSBUILDDIR) - @if ls *.mod &> /dev/null; then \ - mv -v *.mod $(BUILDDIR); \ - cp -v thirdpartylibs/LIB_VTK_IO/static/lib_vtk_io.mod $(BUILDDIR); \ - fi - @echo "*** Starting linking of files for OceanWave3D (Debug)... ***" - $(FC) $(FFLAGS) -o $(INSTALLDIR)/$(PROGNAME) $(OBJECTSBUILDDIR) $(LIBDIRS) $(LINLIB) $(INCLUDEDIRS) + @echo "OceanWave3D ($(MODE)) has been built successfully." +.PHONY: all all: Release - +.PHONY: sharedLlib sharedLib: FFLAGS = $(SHLIBFLAGS) sharedLib: $(OBJECTSBUILDDIR) @if ls *.mod &> /dev/null; then \ @@ -103,14 +99,14 @@ sharedLib: $(OBJECTSBUILDDIR) @echo "Shared library for OceanWave3D has been built successfully." - # Compile only - compile all source file to build directory +.PHONY: compile compile: $(OBJECTSBUILDDIR) +.PHONY: clean clean: - rm -f $(BUILDDIR)/*.o - rm -f $(BUILDDIR)/*.mod - rm -f $(INSTALLDIR)/$(PROGNAME) + -rm -r $(BUILDDIR) + -rm $(INSTALLDIR)/$(PROGNAME) # # Special source dependencies @@ -124,18 +120,24 @@ clean: # $< - A single changed dependency of the current target. # Generic compilation rules -$(BUILDDIR)/%.o: %.f +$(BUILDDIR)/%.o: %.f $(BUILDDIR) $(FC) $(FFLAGS) -c $< -o $@ $(INCLUDEDIRS) -$(BUILDDIR)/%.o: %.f90 +$(BUILDDIR)/%.o: %.f90 $(BUILDDIR) @if ls *.mod &> /dev/null; then \ mv -v *.mod $(BUILDDIR); \ cp -v thirdpartylibs/LIB_VTK_IO/static/lib_vtk_io.mod $(BUILDDIR); \ fi $(FC) $(FFLAGS) -c $< -o $@ $(INCLUDEDIRS) -$(BUILDDIR)/%.mod: %.f +$(BUILDDIR)/%.mod: %.f $(BUILDDIR) $(FC) $(FFLAGS) -c $< -o $@ $(INCLUDEDIRS) -$(BUILDDIR)/%.mod: %.f90 +$(BUILDDIR)/%.mod: %.f90 $(BUILDDIR) $(FC) $(FFLAGS) -c $< -o $@ $(INCLUDEDIRS) + +$(BUILDDIR): + @mkdir -p $@ + +$(INSTALLDIR): + @mkdir -p $@