-
Notifications
You must be signed in to change notification settings - Fork 232
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #909 from adcroft/travis-stages
Re-factor of Travis-CI usage
- Loading branch information
Showing
6 changed files
with
543 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# Makefile steps to run on Travis-CI | ||
# e.g. make MEMORY_SHAPE=dynamic_symmetric REPRO=1 OPENMP=1 | ||
|
||
# Versions to use | ||
FMS_COMMIT ?= xanadu | ||
MKMF_COMMIT ?= master | ||
|
||
# Where to clone from | ||
FMS_URL ?= https://github.com/NOAA-GFDL/FMS.git | ||
MKMF_URL ?= https://github.com/NOAA-GFDL/mkmf.git | ||
CONFIGS_URL ?= https://github.com/NOAA-GFDL/MOM6-examples.git | ||
REGRESSIONS_URL ?= https://github.com/adcroft/Gaea-stats-MOM6-examples | ||
|
||
# Experiments to run | ||
ifeq ($(MEMORY_SHAPE),"dynamic_symmetric") | ||
EXPERIMENTS ?= unit_tests double_gyre flow_downslope/z CVmix_SCM_tests/cooling_only/EPBL circle_obcs | ||
else | ||
EXPERIMENTS ?= unit_tests double_gyre flow_downslope/z CVmix_SCM_tests/cooling_only/EPBL | ||
endif | ||
|
||
FMS_PACKAGES ?= platform,include,memutils,constants,mpp,fms,time_manager,diag_manager,data_override,coupler/ensemble_manager.F90,axis_utils,horiz_interp,time_interp,astronomy,mosaic,random_numbers | ||
TEMPLATE ?= .testing/linux-ubuntu-xenial-gnu.mk | ||
MPIRUN ?= mpirun | ||
|
||
# MEMORY_SHAPE must be defined for this Makefile to work | ||
MEMORY_SHAPE ?= dynamic_symmetric | ||
|
||
# Everything above is above is "configurable" with environment variables | ||
SHELL = bash | ||
|
||
# Path where executable will be built | ||
BUILD_PATH = build | ||
###/$(MEMORY_SHAPE)-$(EXEC_MODE) | ||
# Root of configurations (MOM6-examples) | ||
EXPERIMENTS_ROOT = experiments | ||
# Regression results | ||
REGRESSIONS_ROOT = answers | ||
|
||
.PRECIOUS: %/ocean.stats | ||
|
||
run: $(foreach e,$(EXPERIMENTS),$(EXPERIMENTS_ROOT)/ocean_only/$(e)/ocean.stats) | ||
|
||
test: $(foreach e,$(EXPERIMENTS),$(REGRESSIONS_ROOT)/regressions/ocean_only/$(e)/ocean.stats.gnu) | ||
|
||
compile: $(BUILD_PATH)/MOM6 | ||
|
||
$(BUILD_PATH)/MOM6: FMS mkmf | ||
mkdir -p $(@D) | ||
cd $(@D); \ | ||
../mkmf/bin/list_paths -l ../FMS/{$(FMS_PACKAGES)} ../config_src/{$(MEMORY_SHAPE),solo_driver} ../src \ | ||
&& ../mkmf/bin/mkmf -t ../$(TEMPLATE) -c '-Duse_libMPI -Duse_netCDF -DSPMD -DUSE_LOG_DIAG_FIELD_INFO -DMAXFIELDMETHODS_=500' -p $(@F) path_names \ | ||
&& make -j NETCDF=3 $(@F) | ||
|
||
$(EXPERIMENTS_ROOT)/%/ocean.stats: $(EXPERIMENTS_ROOT) | ||
mkdir -p $(@D)/RESTART | ||
cd $(@D) ; $(MPIRUN) -n 1 $(PWD)/$(BUILD_PATH)/MOM6 | ||
|
||
$(REGRESSIONS_ROOT)/regressions/%/ocean.stats.gnu: $(EXPERIMENTS_ROOT)/%/ocean.stats $(REGRESSIONS_ROOT) | ||
cp $< $@ | ||
cd $(@D) ; git status --porcelain $(@F) | ||
|
||
# Targets to clone repositories needed to build | ||
FMS: | ||
git clone -q $(FMS_URL) | ||
cd $@ ; git checkout -q $(FMS_COMMIT) | ||
|
||
mkmf: | ||
git clone -q $(MKMF_URL) | ||
cd $@ ; git checkout -q $(MKMF_COMMIT) | ||
|
||
$(EXPERIMENTS_ROOT): | ||
mkdir -p $(@D) | ||
cd $(@D) ; git clone --depth 1 $(CONFIGS_URL) experiments | ||
|
||
$(REGRESSIONS_ROOT): | ||
mkdir -p $(@D) | ||
cd $(@D) ; git clone --depth 1 $(REGRESSIONS_URL) answers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# .testing | ||
|
||
This directory contains scripts used when evaluating commits on Travis-CI |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/usr/bin/env bash | ||
|
||
echo "Configured!" $MAKEARGS | ||
touch build/test_${MAKEARGS//\ /_} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,273 @@ | ||
# Template for the GNU Compiler Collection on Xenial version of Ubuntu Linux systems (used by Travis-CI) | ||
# | ||
# Typical use with mkmf | ||
# mkmf -t linux-ubuntu-xenial-gnu.mk -c"-Duse_libMPI -Duse_netCDF" path_names /usr/local/include | ||
|
||
############ | ||
# Commands Macors | ||
FC = mpif90 | ||
CC = mpicc | ||
LD = mpif90 $(MAIN_PROGRAM) | ||
|
||
####################### | ||
# Build target macros | ||
# | ||
# Macros that modify compiler flags used in the build. Target | ||
# macrose are usually set on the call to make: | ||
# | ||
# make REPRO=on NETCDF=3 | ||
# | ||
# Most target macros are activated when their value is non-blank. | ||
# Some have a single value that is checked. Others will use the | ||
# value of the macro in the compile command. | ||
|
||
DEBUG = # If non-blank, perform a debug build (Cannot be | ||
# mixed with REPRO or TEST) | ||
|
||
REPRO = # If non-blank, erform a build that guarentees | ||
# reprodicuibilty from run to run. Cannot be used | ||
# with DEBUG or TEST | ||
|
||
TEST = # If non-blank, use the compiler options defined in | ||
# the FFLAGS_TEST and CFLAGS_TEST macros. Cannot be | ||
# use with REPRO or DEBUG | ||
|
||
VERBOSE = # If non-blank, add additional verbosity compiler | ||
# options | ||
|
||
OPENMP = # If non-blank, compile with openmp enabled | ||
|
||
NO_OVERRIDE_LIMITS = # If non-blank, do not use the -qoverride-limits | ||
# compiler option. Default behavior is to compile | ||
# with -qoverride-limits. | ||
|
||
NETCDF = # If value is '3' and CPPDEFS contains | ||
# '-Duse_netCDF', then the additional cpp macro | ||
# '-Duse_LARGEFILE' is added to the CPPDEFS macro. | ||
|
||
INCLUDES = # A list of -I Include directories to be added to the | ||
# the compile command. | ||
|
||
SSE = # The SSE options to be used to compile. If blank, | ||
# than use the default SSE settings for the host. | ||
# Current default is to use SSE2. | ||
|
||
COVERAGE = # Add the code coverage compile options. | ||
|
||
# Need to use at least GNU Make version 3.81 | ||
need := 3.81 | ||
ok := $(filter $(need),$(firstword $(sort $(MAKE_VERSION) $(need)))) | ||
ifneq ($(need),$(ok)) | ||
$(error Need at least make version $(need). Load module gmake/3.81) | ||
endif | ||
|
||
# REPRO, DEBUG and TEST need to be mutually exclusive of each other. | ||
# Make sure the user hasn't supplied two at the same time | ||
ifdef REPRO | ||
ifneq ($(DEBUG),) | ||
$(error Options REPRO and DEBUG cannot be used together) | ||
else ifneq ($(TEST),) | ||
$(error Options REPRO and TEST cannot be used together) | ||
endif | ||
else ifdef DEBUG | ||
ifneq ($(TEST),) | ||
$(error Options DEBUG and TEST cannot be used together) | ||
endif | ||
endif | ||
|
||
MAKEFLAGS += --jobs=$(shell grep '^processor' /proc/cpuinfo | wc -l) | ||
|
||
# Macro for Fortran preprocessor | ||
FPPFLAGS := $(INCLUDES) | ||
# Fortran Compiler flags for the NetCDF library | ||
FPPFLAGS += $(shell nf-config --fflags) | ||
|
||
# Base set of Fortran compiler flags | ||
FFLAGS := -fcray-pointer -fdefault-double-8 -fdefault-real-8 -Waliasing -ffree-line-length-none -fno-range-check | ||
|
||
# Flags based on perforance target (production (OPT), reproduction (REPRO), or debug (DEBUG) | ||
FFLAGS_OPT = -O3 | ||
FFLAGS_REPRO = -O2 -fbounds-check | ||
FFLAGS_DEBUG = -O0 -g -W -fbounds-check -fbacktrace -ffpe-trap=invalid,zero,overflow | ||
|
||
# Flags to add additional build options | ||
FFLAGS_OPENMP = -fopenmp | ||
FFLAGS_VERBOSE = | ||
FFLAGS_COVERAGE = | ||
|
||
# Macro for C preprocessor | ||
CPPFLAGS = $(INCLUDES) | ||
# C Compiler flags for the NetCDF library | ||
CPPFLAGS += $(shell nf-config --cflags) | ||
|
||
# Base set of C compiler flags | ||
CFLAGS := -D__IFC | ||
|
||
# Flags based on perforance target (production (OPT), reproduction (REPRO), or debug (DEBUG) | ||
CFLAGS_OPT = -O2 | ||
CFLAGS_REPRO = -O2 | ||
CFLAGS_DEBUG = -O0 -g | ||
|
||
# Flags to add additional build options | ||
CFLAGS_OPENMP = -fopenmp | ||
CFLAGS_VERBOSE = | ||
CFLAGS_COVERAGE = | ||
|
||
# Optional Testing compile flags. Mutually exclusive from DEBUG, REPRO, and OPT | ||
# *_TEST will match the production if no new option(s) is(are) to be tested. | ||
FFLAGS_TEST = $(FFLAGS_OPT) | ||
CFLAGS_TEST = $(CFLAGS_OPT) | ||
|
||
# Linking flags | ||
LDFLAGS := | ||
LDFLAGS_OPENMP := -fopenmp | ||
LDFLAGS_VERBOSE := | ||
LDFLAGS_COVERAGE := | ||
|
||
# Start with a blank LIBS | ||
LIBS = | ||
# NetCDF library flags | ||
LIBS += $(shell nf-config --flibs) | ||
|
||
# Get compile flags based on target macros. | ||
ifdef REPRO | ||
CFLAGS += $(CFLAGS_REPRO) | ||
FFLAGS += $(FFLAGS_REPRO) | ||
else ifdef DEBUG | ||
CFLAGS += $(CFLAGS_DEBUG) | ||
FFLAGS += $(FFLAGS_DEBUG) | ||
else ifdef TEST | ||
CFLAGS += $(CFLAGS_TEST) | ||
FFLAGS += $(FFLAGS_TEST) | ||
else | ||
CFLAGS += $(CFLAGS_OPT) | ||
FFLAGS += $(FFLAGS_OPT) | ||
endif | ||
|
||
ifdef OPENMP | ||
CFLAGS += $(CFLAGS_OPENMP) | ||
FFLAGS += $(FFLAGS_OPENMP) | ||
LDFLAGS += $(LDFLAGS_OPENMP) | ||
endif | ||
|
||
ifdef SSE | ||
CFLAGS += $(SSE) | ||
FFLAGS += $(SSE) | ||
endif | ||
|
||
ifdef NO_OVERRIDE_LIMITS | ||
FFLAGS += $(FFLAGS_OVERRIDE_LIMITS) | ||
endif | ||
|
||
ifdef VERBOSE | ||
CFLAGS += $(CFLAGS_VERBOSE) | ||
FFLAGS += $(FFLAGS_VERBOSE) | ||
LDFLAGS += $(LDFLAGS_VERBOSE) | ||
endif | ||
|
||
ifeq ($(NETCDF),3) | ||
# add the use_LARGEFILE cppdef | ||
ifneq ($(findstring -Duse_netCDF,$(CPPDEFS)),) | ||
CPPDEFS += -Duse_LARGEFILE | ||
endif | ||
endif | ||
|
||
ifdef COVERAGE | ||
ifdef BUILDROOT | ||
PROF_DIR=-prof-dir=$(BUILDROOT) | ||
endif | ||
CFLAGS += $(CFLAGS_COVERAGE) $(PROF_DIR) | ||
FFLAGS += $(FFLAGS_COVERAGE) $(PROF_DIR) | ||
LDFLAGS += $(LDFLAGS_COVERAGE) $(PROF_DIR) | ||
endif | ||
|
||
LDFLAGS += $(LIBS) | ||
|
||
#--------------------------------------------------------------------------- | ||
# you should never need to change any lines below. | ||
|
||
# see the MIPSPro F90 manual for more details on some of the file extensions | ||
# discussed here. | ||
# this makefile template recognizes fortran sourcefiles with extensions | ||
# .f, .f90, .F, .F90. Given a sourcefile <file>.<ext>, where <ext> is one of | ||
# the above, this provides a number of default actions: | ||
|
||
# make <file>.opt create an optimization report | ||
# make <file>.o create an object file | ||
# make <file>.s create an assembly listing | ||
# make <file>.x create an executable file, assuming standalone | ||
# source | ||
# make <file>.i create a preprocessed file (for .F) | ||
# make <file>.i90 create a preprocessed file (for .F90) | ||
|
||
# The macro TMPFILES is provided to slate files like the above for removal. | ||
|
||
RM = rm -f | ||
TMPFILES = .*.m *.B *.L *.i *.i90 *.l *.s *.mod *.opt | ||
|
||
.SUFFIXES: .F .F90 .H .L .T .f .f90 .h .i .i90 .l .o .s .opt .x | ||
|
||
.f.L: | ||
$(FC) $(FFLAGS) -c -listing $*.f | ||
.f.opt: | ||
$(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f | ||
.f.l: | ||
$(FC) $(FFLAGS) -c $(LIST) $*.f | ||
.f.T: | ||
$(FC) $(FFLAGS) -c -cif $*.f | ||
.f.o: | ||
$(FC) $(FFLAGS) -c $*.f | ||
.f.s: | ||
$(FC) $(FFLAGS) -S $*.f | ||
.f.x: | ||
$(FC) $(FFLAGS) -o $*.x $*.f *.o $(LDFLAGS) | ||
.f90.L: | ||
$(FC) $(FFLAGS) -c -listing $*.f90 | ||
.f90.opt: | ||
$(FC) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.f90 | ||
.f90.l: | ||
$(FC) $(FFLAGS) -c $(LIST) $*.f90 | ||
.f90.T: | ||
$(FC) $(FFLAGS) -c -cif $*.f90 | ||
.f90.o: | ||
$(FC) $(FFLAGS) -c $*.f90 | ||
.f90.s: | ||
$(FC) $(FFLAGS) -c -S $*.f90 | ||
.f90.x: | ||
$(FC) $(FFLAGS) -o $*.x $*.f90 *.o $(LDFLAGS) | ||
.F.L: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F | ||
.F.opt: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F | ||
.F.l: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F | ||
.F.T: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F | ||
.F.f: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F > $*.f | ||
.F.i: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F | ||
.F.o: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F | ||
.F.s: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F | ||
.F.x: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F *.o $(LDFLAGS) | ||
.F90.L: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -listing $*.F90 | ||
.F90.opt: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -opt_report_level max -opt_report_phase all -opt_report_file $*.opt $*.F90 | ||
.F90.l: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $(LIST) $*.F90 | ||
.F90.T: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -cif $*.F90 | ||
.F90.f90: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) -EP $*.F90 > $*.f90 | ||
.F90.i90: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) -P $*.F90 | ||
.F90.o: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c $*.F90 | ||
.F90.s: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -c -S $*.F90 | ||
.F90.x: | ||
$(FC) $(CPPDEFS) $(FPPFLAGS) $(FFLAGS) -o $*.x $*.F90 *.o $(LDFLAGS) |
Oops, something went wrong.