# /*@@ # @file make.config.rules.in # @date Sun Jan 17 22:31:16 1999 # @author Tom Goodale # @desc # Rules to generate object files from source files in another directory. # # Note that, due to the (IMHO) rather bizarre way in which Make # deals with directories in the target names, this will # not work if the target is in a subdirectory. # # In order to accomodate Fortran 90 modules, the working directory # for each compilation is set to a scratch directory, so that # all module files end up there. # # @enddesc # @@*/ # Dividers to make the screen output slightly nicer DIVEL = __________________ DIVIDER = $(DIVEL)$(DIVEL)$(DIVEL)$(DIVEL) ##################################################################### # Define how to do dependencies define C_DEPENDENCIES $(C_DEPEND) $< $(INC_DIRS:%=-I%) $(SYS_INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE $(C_DEPEND_OUT) endef define CXX_DEPENDENCIES $(CXX_DEPEND) $< $(INC_DIRS:%=-I%) $(SYS_INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE $(CXX_DEPEND_OUT) endef define F77_DEPENDENCIES $(F77_DEPEND) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE $< $(F77_DEPEND_OUT) endef define F_DEPENDENCIES $(F_DEPEND) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE $< $(F_DEPEND_OUT) endef ##################################################################### # Define how to do a C compilation define PREPROCESS_C cat $< | $(PERL) $(C_FILE_PROCESSOR) $(CONFIG) > $(notdir $<) endef define COMPILE_C current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(CC) $(DEBUG_C) $(CFLAGS) $(CCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(notdir $<) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE endef define POSTPROCESS_C endef # Define how to do a C++ compilation define PREPROCESS_CXX cat $< | $(PERL) $(C_FILE_PROCESSOR) $(CONFIG) > $(notdir $<) endef define COMPILE_CXX current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(CXX) $(DEBUG_CXX) $(CXXFLAGS) $(CCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(notdir $<) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DCCODE endef define POSTPROCESS_CXX endef # Define how to do a F77 compilation define PREPROCESS_F77 cat $< | sed 's.//.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.g' | $(CPP) $(CPPFLAGS) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE - | sed 's/__FORTRANFILE__/"$(basename $(notdir $<)).F"/g' | sed 's.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.//.g' | $(PERL) $(F_FILE_PROCESSOR) > $(basename $(notdir $<)).f endef define COMPILE_F77 current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(F77) $(DEBUG_F77) $(F77FLAGS) $(FCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(basename $(notdir $<)).f endef define POSTPROCESS_F77 endef # Define how to do a F90 compilation define PREPROCESS_F90 cat $< | sed 's.//.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.g' | $(CPP) $(CPPFLAGS) $(INC_DIRS:%=-I%) $(EXTRA_DEFINES:%=-D%) -DFCODE - | sed 's/__FORTRANFILE__/"$(basename $(notdir $<)).F"/g' | sed 's.AUTOMATICALLY_GENERATED_CONCATONATION_PROTECTION_STRING.//.g' | $(PERL) $(F_FILE_PROCESSOR) > $(basename $(notdir $<)).f endef define COMPILE_F90 current_wd=`$(GET_WD)` ; cd $(SCRATCH_BUILD) ; $(F90) $(DEBUG_F90) $(F90FLAGS) $(FCOMPILEONLY)$(OPTIONSEP)$$current_wd$(DIRSEP)$@ $$current_wd$(DIRSEP)$(basename $(notdir $<)).f endef define POSTPROCESS_F90 endef # Define how to do a f compilation define PREPROCESS_f cat $< > $(basename $(notdir $<)).f endef # Define how to do a f77 compilation define PREPROCESS_f77 cat $< > $(basename $(notdir $<)).f endef # Build rules for C %.o: $(SRCDIR)/%.c @echo $(DIVIDER) @echo Preprocessing $< $(PREPROCESS_C) @echo Compiling $(DEBUG_C) $< $(COMPILE_C) @echo Postprocessing $< $(POSTPROCESS_C) %.d: $(SRCDIR)/%.c $(C_DEPENDENCIES) # Build rules for C++ %.o: $(SRCDIR)/%.cc @echo $(DIVIDER) @echo Preprocessing $< $(PREPROCESS_CXX) @echo Compiling $(DEBUG_CXX) $< $(COMPILE_CXX) @echo Postprocessing $< $(POSTPROCESS_CXX) %.o: $(SRCDIR)/%.C @echo $(DIVIDER) @echo Preprocessing $< $(PREPROCESS_CXX) @echo Compiling $(DEBUG_CXX) $< $(COMPILE_CXX) @echo Postprocessing $< $(POSTPROCESS_CXX) %.d: $(SRCDIR)/%.cc $(CXX_DEPENDENCIES) %.d: $(SRCDIR)/%.C $(CXX_DEPENDENCIES) # Build rules for F77 %.o: $(SRCDIR)/%.F77 @echo $(DIVIDER) @echo Preprocessing $< $(PREPROCESS_F77) @echo Compiling $(DEBUG_F77) $< $(COMPILE_F77) @echo Postprocessing $< $(POSTPROCESS_F77) %.o: $(SRCDIR)/%.f77 @echo $(DIVIDER) @echo Copying $< $(PREPROCESS_f77) @echo Compiling $(DEBUG_F77) $< $(COMPILE_F77) @echo Postprocessing $< $(POSTPROCESS_F77) %.d: $(SRCDIR)/%.F77 $(F77_DEPENDENCIES) %.d: $(SRCDIR)/%.f77 $(F77_DEPENDENCIES) # Build rules for F90 %.o: $(SRCDIR)/%.F @echo $(DIVIDER) @echo Preprocessing $< $(PREPROCESS_F90) @echo Compiling $(DEBUG_F90) $< $(COMPILE_F90) @echo Postprocessing $< $(POSTPROCESS_F90) %.o: $(SRCDIR)/%.f @echo $(DIVIDER) @echo Copying $< $(PREPROCESS_f) @echo Compiling $(DEBUG_F90) $< $(COMPILE_F90) @echo Postprocessing $< $(POSTPROCESS_F90) %.d: $(SRCDIR)/%.F $(F_DEPENDENCIES) %.d: $(SRCDIR)/%.f $(F_DEPENDENCIES)