| 1 | # $Id: makefile 76 2007-06-11 22:52:45Z arango $ | 
|---|
| 2 | #::::::::::::::::::::::::::::::::::::::::::::::::::::: Hernan G. Arango ::: | 
|---|
| 3 | # Copyright (c) 2002-2007 The ROMS/TOMS Group             Kate Hedstrom ::: | 
|---|
| 4 | #   Licensed under a MIT/X style license                                ::: | 
|---|
| 5 | #   See License_ROMS.txt                                                ::: | 
|---|
| 6 | #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | 
|---|
| 7 | #                                                                       ::: | 
|---|
| 8 | #  ROMS/TOMS Framework Master Makefile                                  ::: | 
|---|
| 9 | #                                                                       ::: | 
|---|
| 10 | #  This makefile is designed to work only with GNU Make version 3.80 or ::: | 
|---|
| 11 | #  higher. It can be used in any architecture provided that there is a  ::: | 
|---|
| 12 | #  machine/compiler rules file in the  "Compilers"  subdirectory.  You  ::: | 
|---|
| 13 | #  may need to modify the rules file to specify the  correct path  for  ::: | 
|---|
| 14 | #  the NetCDF and ARPACK libraries. The ARPACK library is only used in  ::: | 
|---|
| 15 | #  the Generalized Stability Theory analysis and Laczos algorithm.      ::: | 
|---|
| 16 | #                                                                       ::: | 
|---|
| 17 | #  If appropriate,  the USER needs to modify the  macro definitions in  ::: | 
|---|
| 18 | #  in user-defined section below.  To activate an option set the macro  ::: | 
|---|
| 19 | #  to "on". For example, if you want to compile with debugging options  ::: | 
|---|
| 20 | #  set:                                                                 ::: | 
|---|
| 21 | #                                                                       ::: | 
|---|
| 22 | #      USE_DEBUG := on                                                  ::: | 
|---|
| 23 | #                                                                       ::: | 
|---|
| 24 | #  Otherwise, leave macro definition blank.                             ::: | 
|---|
| 25 | #                                                                       ::: | 
|---|
| 26 | #  The USER needs to provide a value for the  macro FORT.  Choose  the  ::: | 
|---|
| 27 | #  appropriate value from the list below.                               ::: | 
|---|
| 28 | #                                                                       ::: | 
|---|
| 29 | #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | 
|---|
| 30 |  | 
|---|
| 31 | NEED_VERSION := 3.80 3.81 | 
|---|
| 32 | $(if $(filter $(MAKE_VERSION),$(NEED_VERSION)),,        \ | 
|---|
| 33 | $(error This makefile requires one of GNU make version $(NEED_VERSION).)) | 
|---|
| 34 |  | 
|---|
| 35 | #-------------------------------------------------------------------------- | 
|---|
| 36 | #  Initialize some things. | 
|---|
| 37 | #-------------------------------------------------------------------------- | 
|---|
| 38 |  | 
|---|
| 39 | sources    := | 
|---|
| 40 | libraries  := | 
|---|
| 41 |  | 
|---|
| 42 | #========================================================================== | 
|---|
| 43 | #  Start of user-defined options. In some macro definitions below: "on" or | 
|---|
| 44 | #  any other string means TRUE while blank (or spaces) is FALSE. | 
|---|
| 45 | #========================================================================== | 
|---|
| 46 | # | 
|---|
| 47 | #  The CPP option defining a particular application is specified below. | 
|---|
| 48 | #  See header file "ROMS/Include/cppdefs.h" for all available idealized | 
|---|
| 49 | #  and realistic applications CPP flags. For example, to activate the | 
|---|
| 50 | #  upwelling test case (UPWELLING) set: | 
|---|
| 51 | # | 
|---|
| 52 | #    ROMS_APPLICATION ?= UPWELLING | 
|---|
| 53 | # | 
|---|
| 54 | #  Notice that this makefile will include the associated application header | 
|---|
| 55 | #  file, which is located either in the "ROMS/Include" or MY_HEADER_DIR | 
|---|
| 56 | #  directory.  This makefile is designed to search in both directories. | 
|---|
| 57 | #  The only constrain is that the application CPP option must be unique | 
|---|
| 58 | #  and header file name is the lowercase value of ROMS_APPLICATION with | 
|---|
| 59 | #  the .h extension. For example, the upwelling application includes the | 
|---|
| 60 | #  "upwelling.h" header file. | 
|---|
| 61 |  | 
|---|
| 62 | ROMS_APPLICATION ?= UPWELLING | 
|---|
| 63 |  | 
|---|
| 64 | #  If application header files is not located in "ROMS/Include", | 
|---|
| 65 | #  provide an alternate directory FULL PATH. | 
|---|
| 66 |  | 
|---|
| 67 | MY_HEADER_DIR ?= | 
|---|
| 68 |  | 
|---|
| 69 | #  If your application requires analytical expressions and they are not | 
|---|
| 70 | #  located in "ROMS/Functionals", provide an alternate directory. | 
|---|
| 71 | #  Notice that a set analytical expressions templates can be found in | 
|---|
| 72 | #  "User/Functionals". | 
|---|
| 73 |  | 
|---|
| 74 | MY_ANALYTICAL_DIR ?= | 
|---|
| 75 |  | 
|---|
| 76 | #  Sometimes it is desirable to activate one or more CPP options to | 
|---|
| 77 | #  run different variants of the same application without modifying | 
|---|
| 78 | #  its header file. If this is the case, specify such options here | 
|---|
| 79 | #  using the -D syntax.  For example, to write time-averaged fields | 
|---|
| 80 | #  set: | 
|---|
| 81 | # | 
|---|
| 82 | #    MY_CPP_FLAGS ?= -DAVERAGES | 
|---|
| 83 | # | 
|---|
| 84 |  | 
|---|
| 85 | MY_CPP_FLAGS ?= | 
|---|
| 86 |  | 
|---|
| 87 | #  Set number of ROMS nested and/or composed grid.  Currently, only | 
|---|
| 88 | #  one grid is supported.  This option will be available in the near | 
|---|
| 89 | #  future. | 
|---|
| 90 |  | 
|---|
| 91 | NestedGrids ?= 1 | 
|---|
| 92 |  | 
|---|
| 93 | #  Activate debugging compiler options: | 
|---|
| 94 |  | 
|---|
| 95 | USE_DEBUG ?= | 
|---|
| 96 |  | 
|---|
| 97 | #  If parallel applications, use at most one of these definitions | 
|---|
| 98 | #  (leave both definitions blank in serial applications): | 
|---|
| 99 |  | 
|---|
| 100 | USE_MPI ?= | 
|---|
| 101 | USE_OpenMP ?= | 
|---|
| 102 |  | 
|---|
| 103 | #  If distributed-memory, turn on compilation via the script "mpif90". | 
|---|
| 104 | #  This is needed in some Linux operating systems. In some systems with | 
|---|
| 105 | #  native MPI libraries the compilation does not require MPICH type | 
|---|
| 106 | #  scripts. This macro is also convient when there are several fortran | 
|---|
| 107 | #  compiliers (ifort, pgf90, pathf90) in the system that use mpif90. | 
|---|
| 108 | #  In this, case the user need to select the desired compiler below and | 
|---|
| 109 | #  turn on both USE_MPI and USE_MPIF90 macros. | 
|---|
| 110 |  | 
|---|
| 111 | USE_MPIF90 ?= | 
|---|
| 112 |  | 
|---|
| 113 | #  If applicable, compile with the ARPACK library (GST analysis): | 
|---|
| 114 |  | 
|---|
| 115 | USE_ARPACK ?= | 
|---|
| 116 |  | 
|---|
| 117 | #  If applicable, activate 64-bit compilation: | 
|---|
| 118 |  | 
|---|
| 119 | USE_LARGE ?= on | 
|---|
| 120 |  | 
|---|
| 121 | #  If applicable, activate Coupling to SWAN wave model. | 
|---|
| 122 |  | 
|---|
| 123 | SWAN_COUPLE ?= | 
|---|
| 124 |  | 
|---|
| 125 | #-------------------------------------------------------------------------- | 
|---|
| 126 | #  We are going to include a file with all the settings that depend on | 
|---|
| 127 | #  the system and the compiler. We are going to build up the name of the | 
|---|
| 128 | #  include file using information on both. Set your compiler here from | 
|---|
| 129 | #  the following list: | 
|---|
| 130 | # | 
|---|
| 131 | #  Operating System        Compiler(s) | 
|---|
| 132 | # | 
|---|
| 133 | #     AIX:                    xlf | 
|---|
| 134 | #     ALPHA:                  f90 | 
|---|
| 135 | #     CYGWIN:                 g95, df, ifort | 
|---|
| 136 | #     Darwin:                 f90, xlf | 
|---|
| 137 | #     IRIX:                   f90 | 
|---|
| 138 | #     Linux:                  ftn, ifc, ifort, pgi, path, g95, gfortran | 
|---|
| 139 | #     SunOS:                  f95 | 
|---|
| 140 | #     UNICOS-mp:              ftn | 
|---|
| 141 | #     SunOS/Linux:            ftn (Cray cross-compiler) | 
|---|
| 142 | # | 
|---|
| 143 | #  Feel free to send us additional rule files to include! Also, be sure | 
|---|
| 144 | #  to check the appropriate file to make sure it has the right paths to | 
|---|
| 145 | #  NetCDF and so on. | 
|---|
| 146 | #-------------------------------------------------------------------------- | 
|---|
| 147 |  | 
|---|
| 148 | FORT ?= pgi | 
|---|
| 149 |  | 
|---|
| 150 | #-------------------------------------------------------------------------- | 
|---|
| 151 | #  Set directory for executable. | 
|---|
| 152 | #-------------------------------------------------------------------------- | 
|---|
| 153 |  | 
|---|
| 154 | BINDIR ?= . | 
|---|
| 155 |  | 
|---|
| 156 | #========================================================================== | 
|---|
| 157 | #  End of user-defined options. See also the machine-dependent include | 
|---|
| 158 | #  file being used above. | 
|---|
| 159 | #========================================================================== | 
|---|
| 160 |  | 
|---|
| 161 | #-------------------------------------------------------------------------- | 
|---|
| 162 | #  Set directory for temporary objects. | 
|---|
| 163 | #-------------------------------------------------------------------------- | 
|---|
| 164 |  | 
|---|
| 165 | SCRATCH_DIR ?= Build | 
|---|
| 166 | clean_list := core $(SCRATCH_DIR) | 
|---|
| 167 |  | 
|---|
| 168 | ifeq "$(strip $(SCRATCH_DIR))" "." | 
|---|
| 169 | clean_list := core *.o *.oo *.mod *.f90 lib*.a *.bak | 
|---|
| 170 | endif | 
|---|
| 171 | ifeq "$(strip $(SCRATCH_DIR))" "./" | 
|---|
| 172 | clean_list := core *.o *.oo *.mod *.f90 lib*.a *.bak | 
|---|
| 173 | endif | 
|---|
| 174 |  | 
|---|
| 175 | #-------------------------------------------------------------------------- | 
|---|
| 176 | #  Set Pattern rules. | 
|---|
| 177 | #-------------------------------------------------------------------------- | 
|---|
| 178 |  | 
|---|
| 179 | %.o: %.F | 
|---|
| 180 |  | 
|---|
| 181 | %.o: %.f90 | 
|---|
| 182 | cd $(SCRATCH_DIR); $(FC) -c $(FFLAGS) $(notdir $<) | 
|---|
| 183 |  | 
|---|
| 184 | %.f90: %.F | 
|---|
| 185 | $(CPP) $(CPPFLAGS) $(MY_CPP_FLAGS) $< > $*.f90 | 
|---|
| 186 | $(CLEAN) $*.f90 | 
|---|
| 187 |  | 
|---|
| 188 | CLEAN := ROMS/Bin/cpp_clean | 
|---|
| 189 |  | 
|---|
| 190 | #-------------------------------------------------------------------------- | 
|---|
| 191 | #  Make functions for putting the temporary files in $(SCRATCH_DIR) | 
|---|
| 192 | #  DO NOT modify this section; spaces and blank lineas are needed. | 
|---|
| 193 | #-------------------------------------------------------------------------- | 
|---|
| 194 |  | 
|---|
| 195 | # $(call source-dir-to-binary-dir, directory-list) | 
|---|
| 196 | source-dir-to-binary-dir = $(addprefix $(SCRATCH_DIR)/, $(notdir $1)) | 
|---|
| 197 |  | 
|---|
| 198 | # $(call source-to-object, source-file-list) | 
|---|
| 199 | source-to-object = $(call source-dir-to-bindary-dir,   \ | 
|---|
| 200 | $(subst .F,.o,$1)) | 
|---|
| 201 |  | 
|---|
| 202 | # $(call make-library, library-name, source-file-list) | 
|---|
| 203 | define make-library | 
|---|
| 204 | libraries += $(SCRATCH_DIR)/$1 | 
|---|
| 205 | sources   += $2 | 
|---|
| 206 |  | 
|---|
| 207 | $(SCRATCH_DIR)/$1: $(call source-dir-to-binary-dir,    \ | 
|---|
| 208 | $(subst .F,.o,$2)) | 
|---|
| 209 | $(AR) $(ARFLAGS) $$@ $$^ | 
|---|
| 210 | $(RANLIB) $$@ | 
|---|
| 211 | endef | 
|---|
| 212 |  | 
|---|
| 213 | # $(call f90-source, source-file-list) | 
|---|
| 214 | f90-source = $(call source-dir-to-binary-dir,     \ | 
|---|
| 215 | $(subst .F,.f90,$1)) | 
|---|
| 216 |  | 
|---|
| 217 | # $(compile-rules) | 
|---|
| 218 | define compile-rules | 
|---|
| 219 | $(foreach f, $(local_src),       \ | 
|---|
| 220 | $(call one-compile-rule,$(call source-to-object,$f), \ | 
|---|
| 221 | $(call f90-source,$f),$f)) | 
|---|
| 222 | endef | 
|---|
| 223 |  | 
|---|
| 224 | # $(call one-compile-rule, binary-file, f90-file, source-files) | 
|---|
| 225 | define one-compile-rule | 
|---|
| 226 | $1: $2 $3 | 
|---|
| 227 | cd $$(SCRATCH_DIR); $$(FC) -c $$(FFLAGS) $(notdir $2) | 
|---|
| 228 |  | 
|---|
| 229 | $2: $3 | 
|---|
| 230 | $$(CPP) $$(CPPFLAGS) $$(MY_CPP_FLAGS) $$< > $$@ | 
|---|
| 231 | $$(CLEAN) $$@ | 
|---|
| 232 |  | 
|---|
| 233 | endef | 
|---|
| 234 |  | 
|---|
| 235 | #-------------------------------------------------------------------------- | 
|---|
| 236 | #  Set ROMS/TOMS executable file name. | 
|---|
| 237 | #-------------------------------------------------------------------------- | 
|---|
| 238 |  | 
|---|
| 239 | BIN := $(BINDIR)/oceanS | 
|---|
| 240 | ifdef USE_DEBUG | 
|---|
| 241 | BIN := $(BINDIR)/oceanG | 
|---|
| 242 | else | 
|---|
| 243 | ifdef USE_MPI | 
|---|
| 244 | BIN := $(BINDIR)/oceanM | 
|---|
| 245 | endif | 
|---|
| 246 | ifdef USE_OpenMP | 
|---|
| 247 | BIN := $(BINDIR)/oceanO | 
|---|
| 248 | endif | 
|---|
| 249 | endif | 
|---|
| 250 |  | 
|---|
| 251 | #-------------------------------------------------------------------------- | 
|---|
| 252 | #  Set name of module files for netCDF F90 interface. On some platforms | 
|---|
| 253 | #  these will need to be overridden in the machine-dependent include file. | 
|---|
| 254 | #-------------------------------------------------------------------------- | 
|---|
| 255 |  | 
|---|
| 256 | NETCDF_MODFILE := netcdf.mod | 
|---|
| 257 | TYPESIZES_MODFILE := typesizes.mod | 
|---|
| 258 |  | 
|---|
| 259 | #-------------------------------------------------------------------------- | 
|---|
| 260 | #  "uname -s" should return the OS or kernel name and "uname -m" should | 
|---|
| 261 | #  return the CPU or hardware name. In practice the results can be pretty | 
|---|
| 262 | #  flaky. Run the results through sed to convert "/" and " " to "-", | 
|---|
| 263 | #  then apply platform-specific conversions. | 
|---|
| 264 | #-------------------------------------------------------------------------- | 
|---|
| 265 |  | 
|---|
| 266 | OS := $(shell uname -s | sed 's/[\/ ]/-/g') | 
|---|
| 267 | OS := $(patsubst CYGWIN_%,CYGWIN,$(OS)) | 
|---|
| 268 | OS := $(patsubst MINGW%,MINGW,$(OS)) | 
|---|
| 269 | OS := $(patsubst sn%,UNICOS-sn,$(OS)) | 
|---|
| 270 |  | 
|---|
| 271 | CPU := $(shell uname -m | sed 's/[\/ ]/-/g') | 
|---|
| 272 |  | 
|---|
| 273 | SVNREV := $(shell svnversion -n .) | 
|---|
| 274 |  | 
|---|
| 275 | ROOTDIR := $(shell pwd) | 
|---|
| 276 |  | 
|---|
| 277 | COMPILERS := ./Compilers | 
|---|
| 278 |  | 
|---|
| 279 | ifndef FORT | 
|---|
| 280 | $(error Variable FORT not set) | 
|---|
| 281 | endif | 
|---|
| 282 |  | 
|---|
| 283 | ifneq "$(MAKECMDGOALS)" "clean" | 
|---|
| 284 | include $(COMPILERS)/$(OS)-$(strip $(FORT)).mk | 
|---|
| 285 | endif | 
|---|
| 286 |  | 
|---|
| 287 | #-------------------------------------------------------------------------- | 
|---|
| 288 | #  Pass the platform variables to the preprocessor as macros. Convert to | 
|---|
| 289 | #  valid, upper-case identifiers. If applicable, attach ROMS application | 
|---|
| 290 | #  CPP option. | 
|---|
| 291 | #-------------------------------------------------------------------------- | 
|---|
| 292 |  | 
|---|
| 293 | CPPFLAGS += -D$(shell echo ${OS} | tr "-" "_" | tr [a-z] [A-Z]) | 
|---|
| 294 | CPPFLAGS += -D$(shell echo ${CPU} | tr "-" "_" | tr [a-z] [A-Z]) | 
|---|
| 295 | CPPFLAGS += -D$(shell echo ${FORT} | tr "-" "_" | tr [a-z] [A-Z]) | 
|---|
| 296 |  | 
|---|
| 297 | CPPFLAGS += -D'ROOT_DIR="$(ROOTDIR)"' | 
|---|
| 298 | ifdef ROMS_APPLICATION | 
|---|
| 299 | HEADER := $(addsuffix .h,$(shell echo ${ROMS_APPLICATION} | tr [A-Z] [a-z])) | 
|---|
| 300 | CPPFLAGS += -D$(ROMS_APPLICATION) | 
|---|
| 301 | CPPFLAGS += -D'HEADER="$(HEADER)"' | 
|---|
| 302 | ifdef MY_HEADER_DIR | 
|---|
| 303 | CPPFLAGS += -D'ROMS_HEADER="$(MY_HEADER_DIR)/$(HEADER)"' | 
|---|
| 304 | else | 
|---|
| 305 | CPPFLAGS += -D'ROMS_HEADER="$(HEADER)"' | 
|---|
| 306 | endif | 
|---|
| 307 | MDEPFLAGS += -DROMS_HEADER="$(HEADER)" | 
|---|
| 308 | CPPFLAGS += -DNestedGrids=$(NestedGrids) | 
|---|
| 309 | endif | 
|---|
| 310 |  | 
|---|
| 311 | ifndef MY_ANALYTICAL_DIR | 
|---|
| 312 | MY_ANALYTICAL_DIR := $(ROOTDIR)/ROMS/Functionals | 
|---|
| 313 | endif | 
|---|
| 314 | ifeq (,$(findstring ROMS/Functionals,$(MY_ANALYTICAL_DIR))) | 
|---|
| 315 | MY_ANALYTICAL := on | 
|---|
| 316 | endif | 
|---|
| 317 | CPPFLAGS += -D'ANALYTICAL_DIR="$(MY_ANALYTICAL_DIR)"' | 
|---|
| 318 |  | 
|---|
| 319 | ifdef MY_ANALYTICAL | 
|---|
| 320 | CPPFLAGS += -D'MY_ANALYTICAL="$(MY_ANALYTICAL)"' | 
|---|
| 321 | endif | 
|---|
| 322 |  | 
|---|
| 323 | ifdef SVNREV | 
|---|
| 324 | CPPFLAGS += -D'SVN_REV="$(SVNREV)"' | 
|---|
| 325 | else | 
|---|
| 326 | SVNREV := $(shell grep Revision ./ROMS/Version | sed 's/.* \([0-9]*\) .*/\1/') | 
|---|
| 327 | CPPFLAGS += -D'SVN_REV="$(SVNREV)"' | 
|---|
| 328 | endif | 
|---|
| 329 |  | 
|---|
| 330 | ifdef MY_CPPP_FLAGS | 
|---|
| 331 | CPPFLAGS += $(MY_CPP_FLAGS) | 
|---|
| 332 | endif | 
|---|
| 333 |  | 
|---|
| 334 | #-------------------------------------------------------------------------- | 
|---|
| 335 | #  Build target directories. | 
|---|
| 336 | #-------------------------------------------------------------------------- | 
|---|
| 337 |  | 
|---|
| 338 | .PHONY: all | 
|---|
| 339 |  | 
|---|
| 340 | all: $(SCRATCH_DIR) $(SCRATCH_DIR)/MakeDepend $(BIN) | 
|---|
| 341 |  | 
|---|
| 342 | modules   :=    ROMS/Adjoint \ | 
|---|
| 343 | ROMS/Representer \ | 
|---|
| 344 | ROMS/Tangent \ | 
|---|
| 345 | ROMS/Nonlinear \ | 
|---|
| 346 | ROMS/Functionals \ | 
|---|
| 347 | ROMS/SeaIce \ | 
|---|
| 348 | ROMS/Utility \ | 
|---|
| 349 | ROMS/Modules | 
|---|
| 350 |  | 
|---|
| 351 | includes  :=    ROMS/Include \ | 
|---|
| 352 | ROMS/Adjoint \ | 
|---|
| 353 | ROMS/Nonlinear \ | 
|---|
| 354 | ROMS/Representer \ | 
|---|
| 355 | ROMS/Tangent \ | 
|---|
| 356 | ROMS/SeaIce \ | 
|---|
| 357 | ROMS/Utility \ | 
|---|
| 358 | ROMS/Drivers | 
|---|
| 359 |  | 
|---|
| 360 | ifdef MY_ANALYTICAL | 
|---|
| 361 | includes +=    $(MY_ANALYTICAL_DIR) | 
|---|
| 362 | endif | 
|---|
| 363 | includes +=    ROMS/Functionals | 
|---|
| 364 |  | 
|---|
| 365 | ifdef MY_HEADER_DIR | 
|---|
| 366 | includes +=    $(MY_HEADER_DIR) | 
|---|
| 367 | endif | 
|---|
| 368 |  | 
|---|
| 369 | ifdef SWAN_COUPLE | 
|---|
| 370 | modules  +=    Waves/SWAN/Src | 
|---|
| 371 | includes +=    Waves/SWAN/Src | 
|---|
| 372 | endif | 
|---|
| 373 |  | 
|---|
| 374 | modules   +=    Master | 
|---|
| 375 | includes  +=    Master | 
|---|
| 376 |  | 
|---|
| 377 | vpath %.F $(modules) | 
|---|
| 378 | vpath %.h $(includes) | 
|---|
| 379 | vpath %.f90 $(SCRATCH_DIR) | 
|---|
| 380 | vpath %.o $(SCRATCH_DIR) | 
|---|
| 381 |  | 
|---|
| 382 | include $(addsuffix /Module.mk,$(modules)) | 
|---|
| 383 |  | 
|---|
| 384 | MDEPFLAGS += $(patsubst %,-I %,$(includes)) --silent --moddir $(SCRATCH_DIR) | 
|---|
| 385 |  | 
|---|
| 386 | CPPFLAGS += $(patsubst %,-I%,$(includes)) | 
|---|
| 387 |  | 
|---|
| 388 | ifdef MY_HEADER_DIR | 
|---|
| 389 | CPPFLAGS += -D'HEADER_DIR="$(MY_HEADER_DIR)"' | 
|---|
| 390 | else | 
|---|
| 391 | CPPFLAGS += -D'HEADER_DIR="./ROMS/Include"' | 
|---|
| 392 | endif | 
|---|
| 393 |  | 
|---|
| 394 | $(SCRATCH_DIR): | 
|---|
| 395 | $(shell $(TEST) -d $(SCRATCH_DIR) || $(MKDIR) $(SCRATCH_DIR) ) | 
|---|
| 396 |  | 
|---|
| 397 | #-------------------------------------------------------------------------- | 
|---|
| 398 | #  Add profiling. | 
|---|
| 399 | #-------------------------------------------------------------------------- | 
|---|
| 400 |  | 
|---|
| 401 | # FFLAGS += -check bounds                 # ifort | 
|---|
| 402 | # FFLAGS += -C                            # pgi | 
|---|
| 403 | # FFLAGS += -xpg                          # Sun | 
|---|
| 404 | # FFLAGS += -pg                           # g95 | 
|---|
| 405 | # FFLAGS += -qp                           # ifort | 
|---|
| 406 | # FFLAGS += -Mprof=func,lines             # pgi | 
|---|
| 407 | # FFLAGS += -Mprof=mpi,lines              # pgi | 
|---|
| 408 | # FFLAGS += -Mprof=mpi,hwcts              # pgi | 
|---|
| 409 | # FFLAGS += -Mprof=func                   # pgi | 
|---|
| 410 |  | 
|---|
| 411 | #-------------------------------------------------------------------------- | 
|---|
| 412 | #  Special CPP macros for mod_strings.F | 
|---|
| 413 | #-------------------------------------------------------------------------- | 
|---|
| 414 |  | 
|---|
| 415 | $(SCRATCH_DIR)/mod_strings.f90: CPPFLAGS += -DMY_OS='"$(OS)"' \ | 
|---|
| 416 | -DMY_CPU='"$(CPU)"' -DMY_FORT='"$(FORT)"' \ | 
|---|
| 417 | -DMY_FC='"$(FC)"' -DMY_FFLAGS='"$(FFLAGS)"' | 
|---|
| 418 |  | 
|---|
| 419 | #-------------------------------------------------------------------------- | 
|---|
| 420 | #  ROMS/TOMS libraries. | 
|---|
| 421 | #-------------------------------------------------------------------------- | 
|---|
| 422 |  | 
|---|
| 423 | MYLIB := libocean.a | 
|---|
| 424 |  | 
|---|
| 425 | .PHONY: libraries | 
|---|
| 426 |  | 
|---|
| 427 | libraries: $(libraries) | 
|---|
| 428 |  | 
|---|
| 429 | #-------------------------------------------------------------------------- | 
|---|
| 430 | #  Target to create ROMS/TOMS dependecies. | 
|---|
| 431 | #-------------------------------------------------------------------------- | 
|---|
| 432 |  | 
|---|
| 433 | $(SCRATCH_DIR)/$(NETCDF_MODFILE): | $(SCRATCH_DIR) | 
|---|
| 434 | cp -f $(NETCDF_INCDIR)/$(NETCDF_MODFILE) $(SCRATCH_DIR) | 
|---|
| 435 |  | 
|---|
| 436 | $(SCRATCH_DIR)/$(TYPESIZES_MODFILE): | $(SCRATCH_DIR) | 
|---|
| 437 | cp -f $(NETCDF_INCDIR)/$(TYPESIZES_MODFILE) $(SCRATCH_DIR) | 
|---|
| 438 |  | 
|---|
| 439 | $(SCRATCH_DIR)/MakeDepend: makefile \ | 
|---|
| 440 | $(SCRATCH_DIR)/$(NETCDF_MODFILE) \ | 
|---|
| 441 | $(SCRATCH_DIR)/$(TYPESIZES_MODFILE) \ | 
|---|
| 442 | | $(SCRATCH_DIR) | 
|---|
| 443 | $(SFMAKEDEPEND) $(MDEPFLAGS) $(sources) > $(SCRATCH_DIR)/MakeDepend | 
|---|
| 444 |  | 
|---|
| 445 | .PHONY: depend | 
|---|
| 446 |  | 
|---|
| 447 | SFMAKEDEPEND := ./ROMS/Bin/sfmakedepend | 
|---|
| 448 |  | 
|---|
| 449 | depend: $(SCRATCH_DIR) | 
|---|
| 450 | $(SFMAKEDEPEND) $(MDEPFLAGS) $(sources) > $(SCRATCH_DIR)/MakeDepend | 
|---|
| 451 |  | 
|---|
| 452 | ifneq "$(MAKECMDGOALS)" "clean" | 
|---|
| 453 | -include $(SCRATCH_DIR)/MakeDepend | 
|---|
| 454 | endif | 
|---|
| 455 |  | 
|---|
| 456 | #-------------------------------------------------------------------------- | 
|---|
| 457 | #  Target to create ROMS/TOMS tar file. | 
|---|
| 458 | #-------------------------------------------------------------------------- | 
|---|
| 459 |  | 
|---|
| 460 | .PHONY: tarfile | 
|---|
| 461 |  | 
|---|
| 462 | tarfile: | 
|---|
| 463 | tar --exclude=".svn" -cvf roms-3_0.tar * | 
|---|
| 464 |  | 
|---|
| 465 | .PHONY: zipfile | 
|---|
| 466 |  | 
|---|
| 467 | zipfile: | 
|---|
| 468 | zip -r roms-3_0.zip * | 
|---|
| 469 |  | 
|---|
| 470 | .PHONY: gzipfile | 
|---|
| 471 |  | 
|---|
| 472 | gzipfile: | 
|---|
| 473 | gzip -v roms-3_0.gzip * | 
|---|
| 474 |  | 
|---|
| 475 | #-------------------------------------------------------------------------- | 
|---|
| 476 | #  Cleaning targets. | 
|---|
| 477 | #-------------------------------------------------------------------------- | 
|---|
| 478 |  | 
|---|
| 479 | .PHONY: clean | 
|---|
| 480 |  | 
|---|
| 481 | clean: | 
|---|
| 482 | $(RM) -r $(clean_list) | 
|---|
| 483 |  | 
|---|
| 484 | #-------------------------------------------------------------------------- | 
|---|
| 485 | #  A handy debugging target. This will allow to print the value of any | 
|---|
| 486 | #  makefile defined macro (see http://tinyurl.com/8ax3j). For example, | 
|---|
| 487 | #  to find the value of CPPFLAGS execute: | 
|---|
| 488 | # | 
|---|
| 489 | #        gmake print-CPPFLAGS | 
|---|
| 490 | #  or | 
|---|
| 491 | #        make print-CPPFLAGS | 
|---|
| 492 | #-------------------------------------------------------------------------- | 
|---|
| 493 |  | 
|---|
| 494 | .PHONY: print-% | 
|---|
| 495 |  | 
|---|
| 496 | print-%: | 
|---|
| 497 | @echo $* = $($*) | 
|---|