From 1dbf89780f6ea078cd469cb84e9651198787b2e0 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 19 May 2020 21:33:00 -0600 Subject: [PATCH 1/5] Create directory for cmake build --- bld/cmake_bld/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 bld/cmake_bld/.gitignore diff --git a/bld/cmake_bld/.gitignore b/bld/cmake_bld/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/bld/cmake_bld/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore From 1cb7ba2266f0ab1018170263a1df7b8608bd76c1 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 19 May 2020 21:52:13 -0600 Subject: [PATCH 2/5] Allow reg_tests to use cmake At this point, it's pretty klunky -- no netcdf support, forces compiler to be gfortran. But it should get cmake tested in travis, which is a good start. --- .travis.yml | 1 + reg_tests/common/build.sh | 15 ++++++++++++--- reg_tests/common/parse_inputs.sh | 3 +++ reg_tests/common/run.sh | 7 ++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 60b929f48..cb8f49f7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ python: script: - cd bld; ./cvmix_setup gfortran $(dirname $(dirname $(which nc-config))) - cd ../CVMix_tools; ./run_test_suite.sh --already-ran-setup + - cd ../reg_tests/Bryan-Lewis/; ./Bryan-Lewis-test.sh --cmake branches: only: diff --git a/reg_tests/common/build.sh b/reg_tests/common/build.sh index 200be0e6d..1395a3a66 100644 --- a/reg_tests/common/build.sh +++ b/reg_tests/common/build.sh @@ -2,8 +2,17 @@ build () { if [ -z ${NO_BUILD} ]; then - make -f $CVMix/src/Makefile CVMIX_ROOT=$CVMix ${USE_NETCDF} - if [ $? != 0 ]; then + if [ "${CMAKE_BUILD}" == "TRUE" ]; then + CWD=$PWD + cd $CVMix/bld/cmake_bld + cmake $CVMix -DCVMIX_BUILD_DRIVER=on -DCMAKE_Fortran_COMPILER=gfortran && make + STATUS=$? + cd $CWD + else + make -f $CVMix/src/Makefile CVMIX_ROOT=$CVMix ${USE_NETCDF} + STATUS=$? + fi + if [ $STATUS != 0 ]; then echo "Build error!" exit 2 fi @@ -12,7 +21,7 @@ build () { if [ "`cat ../../bld/.netcdf_info`" == "YES" ]; then USE_NETCDF=netcdf fi - fi + fi fi } diff --git a/reg_tests/common/parse_inputs.sh b/reg_tests/common/parse_inputs.sh index c62a9f0a5..100a6e3d2 100644 --- a/reg_tests/common/parse_inputs.sh +++ b/reg_tests/common/parse_inputs.sh @@ -43,6 +43,9 @@ while [ $# -gt 0 ]; do bad_input $1 fi ;; + -cm|--cmake) + CMAKE_BUILD=TRUE + ;; * ) bad_input $1 ;; diff --git a/reg_tests/common/run.sh b/reg_tests/common/run.sh index ed279dc29..4307868af 100644 --- a/reg_tests/common/run.sh +++ b/reg_tests/common/run.sh @@ -2,7 +2,12 @@ run () { - $CVMix/bin/cvmix < $NAMELIST + if [ "${CMAKE_BUILD}" == "TRUE" ]; then + CVMIX_EXE=$CVMix/bld/cmake_bld/cvmix_driver + else + CVMIX_EXE=$CVMix/bin/cvmix + fi + ${CVMIX_EXE} < $NAMELIST if [ $? != 0 ]; then echo "Error in execution!" From b583d7dfe59825246eb3efc53c5c02ad7ebbac26 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 19 May 2020 22:06:06 -0600 Subject: [PATCH 3/5] Lowering required version Travis CI provides cmake 3.9.2 (we are using an old linux distribution so the apt-get versions of gfortran and libnetcdf-dev play nicely together); hoping there aren't actually features introduced in 3.10 in the system... --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 983ec8336..65d75055e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required( VERSION 3.10 ) +cmake_minimum_required( VERSION 3.9 ) project( cvmix VERSION 4.0.1 LANGUAGES Fortran ) From 4c6147632c8d08e4f6d7b1669a1102dd3a4d087e Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 26 May 2020 11:28:44 -0600 Subject: [PATCH 4/5] Clean up install instructions in README Also modified build.sh and run.sh to follow directions laid out in the README (created cmake_bin/ for build target, build.sh calls "make install" and run.sh runs from cmake_bin/bin/) --- README.md | 33 +++++++++++++++------------------ cmake_bin/.gitignore | 4 ++++ reg_tests/common/build.sh | 5 ++++- reg_tests/common/run.sh | 2 +- 4 files changed, 24 insertions(+), 20 deletions(-) create mode 100644 cmake_bin/.gitignore diff --git a/README.md b/README.md index e6e2370cd..ba5fe1287 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ INSTALLATION NOTES ------------------ CVMix can be installed using two different methods. The original uses Make -and a set of Makefiles. The new method uses CMake and two CMakelists.txt +and a set of Makefiles. The new method uses CMake and two CMakelists.txt files. #### Building/installing using Make @@ -72,42 +72,39 @@ to configure and compile CVMix. Note that CVMix has been build on Windows using VisualStudio and the Intel Fortran compiler but NetCDF support has not been tested. -In this recipe CVMIX\_BASE s a convinience environmental variable pointing to -the CVMix source directory. It is possible to execute the following commands -providing the full path. - - -1. mkdir ~/build/cvmix - * [CMake](https://cmake.org/) promotes out of source compilation -2. cd ~/build/cvmix -3. cmake $CVMIX\_BASE +1. cd $CVMix/bld/cmake_bld + * [CMake](https://cmake.org/) promotes out of source compilation, + any such directory will do. +2. cmake $CVMix * The simplest configuration - using default Fortran compiler -4. cmake $CVMIX\_BASE -DCMAKE\_Fortran\_COMPILER=ifort +3. cmake $CVMix -DCMAKE\_Fortran\_COMPILER=ifort * Specifying a Fortran compiler -5. cmake $CVMIX\_BASE -DCVMIX\_BUILD\_DRIVER=on +4. cmake $CVMix -DCVMIX\_BUILD\_DRIVER=on * Build the CVMix driver program - off by default -6. cmake $CVMIX\_BASE -DCVMIX\_BUILD\_DRIVER=on CVMIX\_USE\_NetCDF=on +5. cmake $CVMix -DCVMIX\_BUILD\_DRIVER=on CVMIX\_USE\_NetCDF=on * Include support for NetCDF in the driver model(1) * Note that this requires proper configuration of the installed NetCDF library. * Setting NetCDF\_INCLUDE and NetCDF\_LIBRARIES might help. -7. cmake $CVMIX\_BASE -DCMAKE\_INSTALL\_PREFIX=~/local - * Providing an installation folder +6. cmake $CVMix -DCMAKE\_INSTALL\_PREFIX=$CVMix/bin + * Providing an installation folder (again, any such directory will do) Combination of the above commands is possible. After configuration has been done compilation is as simple as: + ``` make ``` and instllation by: + ``` make install ``` After installation the build directory can be removed. -The support for CMake builds provides sufficient infrastructure for CVMix +The support for CMake builds provides sufficient infrastructure for CVMix being included in ocean models using the GIT submodule feature. This has been used in the [GOTM](https:/gotm.net) inclusion of the CVMix mixing models as a supplement to the original turbulence models in GOTM. @@ -120,7 +117,7 @@ DIRECTORY STRUCTURE bin/ -- Default location for the cvmix executable. bld/ -- Contains auxiliary files needed by the build system. CompileFlags.mak - has default compile flags for 5 different compilers -- gfortran, + has default compile flags for 5 different compilers -- gfortran, pgf90, ifort, xlf90, and nagfor, as well as ftn (the Cray wrapper for pgf90). At this time, no other compilers are supported on Cray systems. cvmix_setup is a python script that saves information about what @@ -234,7 +231,7 @@ src/ -- Contains the source code, organized as follows. The top directory src/drivers/ -- Subroutines called by the driver (one per test). - src/shared/ -- Where all the modules that are needed to use CVMix with an + src/shared/ -- Where all the modules that are needed to use CVMix with an outside model are stored. Also contains the Makefile used to build the libcvmix.a library. diff --git a/cmake_bin/.gitignore b/cmake_bin/.gitignore new file mode 100644 index 000000000..01319b51b --- /dev/null +++ b/cmake_bin/.gitignore @@ -0,0 +1,4 @@ +bin +include +lib +cmake diff --git a/reg_tests/common/build.sh b/reg_tests/common/build.sh index 1395a3a66..32e5896fb 100644 --- a/reg_tests/common/build.sh +++ b/reg_tests/common/build.sh @@ -5,7 +5,10 @@ build () { if [ "${CMAKE_BUILD}" == "TRUE" ]; then CWD=$PWD cd $CVMix/bld/cmake_bld - cmake $CVMix -DCVMIX_BUILD_DRIVER=on -DCMAKE_Fortran_COMPILER=gfortran && make + cmake $CVMix -DCVMIX_BUILD_DRIVER=on \ + -DCMAKE_Fortran_COMPILER=gfortran \ + -DCMAKE_INSTALL_PREFIX=$CVMix/cmake_bin \ + && make && make install STATUS=$? cd $CWD else diff --git a/reg_tests/common/run.sh b/reg_tests/common/run.sh index 4307868af..db0e89ee5 100644 --- a/reg_tests/common/run.sh +++ b/reg_tests/common/run.sh @@ -3,7 +3,7 @@ run () { if [ "${CMAKE_BUILD}" == "TRUE" ]; then - CVMIX_EXE=$CVMix/bld/cmake_bld/cvmix_driver + CVMIX_EXE=$CVMix/cmake_bin/bin/cvmix_driver else CVMIX_EXE=$CVMix/bin/cvmix fi From 04cc49f10e08e1d8c6b2d8c8c69130c169a158ee Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 19 Jun 2020 10:38:36 -0600 Subject: [PATCH 5/5] Clean up more trailing whitespace --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 65d75055e..ee9a1e8a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,8 +42,8 @@ add_subdirectory( src ) # Note - KB: # Building static and shared libs require an ugly construct to build on both # Windows and Linux. Windows will not create the libraries unless a Fortran -# file is explicitly given - and Linux complains (I think due to a race -# condition) if it is. Therefor the construct below - a proper solution is +# file is explicitly given - and Linux complains (I think due to a race +# condition) if it is. Therefor the construct below - a proper solution is # most welcome. # Add static lib target