|
1 | 1 | # The name of our project is "SW4". CMakeLists files in this project can |
2 | 2 | # refer to the root source directory of the project as ${SW4_SOURCE_DIR} and |
3 | 3 | # to the root binary directory of the project as ${SW4_BINARY_DIR}. |
4 | | -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) |
| 4 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.12) |
5 | 5 | PROJECT(SW4 C CXX Fortran) |
6 | 6 | ENABLE_LANGUAGE(Fortran) |
| 7 | +CMAKE_POLICY(SET CMP0028 NEW) # Double colon in target name means ALIAS or IMPORTED target. |
| 8 | +CMAKE_POLICY(SET CMP0074 NEW) |
7 | 9 |
|
8 | 10 | # Add extra CMake module path (is it still neeed?) |
9 | 11 | SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/configs/") |
@@ -44,33 +46,71 @@ FIND_PACKAGE(MPI REQUIRED) |
44 | 46 | ADD_DEFINITIONS(${MPI_C_COMPILE_FLAGS}) |
45 | 47 | INCLUDE_DIRECTORIES(${MPI_C_INCLUDE_PATH}) |
46 | 48 |
|
47 | | -# Allow a shorter version of the PROJ4 directory definition |
48 | | -IF (NOT PROJ4_OSGEO4W_HOME) |
49 | | - SET(PROJ4_OSGEO4W_HOME ${PROJ4_HOME}) |
50 | | -ENDIF (NOT PROJ4_OSGEO4W_HOME) |
51 | | - |
52 | | -# Find proj4 installation |
53 | | -FIND_PACKAGE(Proj4) |
54 | | -IF (PROJ4_FOUND) |
55 | | - ADD_DEFINITIONS(-DENABLE_PROJ4) |
56 | | - INCLUDE_DIRECTORIES(${PROJ4_INCLUDE_DIR}) |
57 | | - # If proj4 is installed, we can also look for cencalvm |
58 | | - FIND_PACKAGE(CENCALVM) |
59 | | - IF (CENCALVM_FOUND) |
60 | | - ADD_DEFINITIONS(-DENABLE_ETREE) |
61 | | - INCLUDE_DIRECTORIES(${CENCALVM_INCLUDE_DIR}) |
62 | | - ENDIF (CENCALVM_FOUND) |
63 | | -ENDIF (PROJ4_FOUND) |
| 49 | +# Allow a shorter version of the PROJ directory definition |
| 50 | +IF (NOT PROJ_OSGEO4W_HOME) |
| 51 | + SET(PROJ_OSGEO4W_HOME ${PROJ_HOME}) |
| 52 | +ENDIF (NOT PROJ_OSGEO4W_HOME) |
| 53 | + |
| 54 | +OPTION(USE_PROJ "Use PROJ." OFF) |
| 55 | +IF(USE_PROJ) |
| 56 | + FIND_PACKAGE(PROJ REQUIRED) |
| 57 | + IF (PROJ_FOUND) |
| 58 | + INCLUDE_DIRECTORIES(${PROJ_INCLUDE_DIR}) |
| 59 | + if(PROJ_VERSION VERSION_LESS "6.0.0") |
| 60 | + MESSAGE(SEND_ERROR "PROJ library must be version 6 or higher") |
| 61 | + else() |
| 62 | + ADD_DEFINITIONS(-DENABLE_PROJ) |
| 63 | + endif() |
| 64 | + ENDIF (PROJ_FOUND) |
| 65 | +ENDIF (USE_PROJ) |
| 66 | + |
| 67 | +OPTION(USE_HDF5 "Use HDF5." OFF) |
| 68 | +IF(USE_HDF5) |
| 69 | + FIND_PACKAGE(HDF5 REQUIRED) |
| 70 | + IF (HDF5_FOUND) |
| 71 | + ADD_DEFINITIONS(-DUSE_HDF5) |
| 72 | + INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR}) |
| 73 | + ENDIF (HDF5_FOUND) |
| 74 | +ENDIF (USE_HDF5) |
| 75 | + |
| 76 | +OPTION(USE_ZFP "Use ZFP compression." OFF) |
| 77 | +IF(USE_ZFP) |
| 78 | + SET(H5Z_ZFP_USE_STATIC_LIBS ON) |
| 79 | + FIND_PACKAGE(ZFP REQUIRED CONFIG) |
| 80 | + FIND_PACKAGE(H5Z_ZFP 1.1.0 REQUIRED CONFIG) |
| 81 | + ADD_DEFINITIONS(-DUSE_ZFP) |
| 82 | +ENDIF (USE_ZFP) |
| 83 | + |
| 84 | +OPTION(USE_SZ "Use SZ compression." OFF) |
| 85 | +IF(USE_SZ) |
| 86 | + FIND_PACKAGE(SZ REQUIRED) |
| 87 | + IF (SZ_FOUND) |
| 88 | + ADD_DEFINITIONS(-DUSE_SZ) |
| 89 | + INCLUDE_DIRECTORIES(${SZ_INCLUDE_DIR}) |
| 90 | + ENDIF (SZ_FOUND) |
| 91 | +ENDIF (USE_SZ) |
| 92 | + |
| 93 | +OPTION(USE_FFTW3 "Use FFTW3." OFF) |
| 94 | +IF(USE_FFTW3) |
| 95 | + FIND_PACKAGE(FFTW3 REQUIRED) |
| 96 | + IF (FFTW3_FOUND) |
| 97 | + ADD_DEFINITIONS(-DUSE_FFTW) |
| 98 | + INCLUDE_DIRECTORIES(${FFTW3_INCLUDE_DIR}) |
| 99 | + ENDIF (FFTW3_FOUND) |
| 100 | +ENDIF (USE_FFTW3) |
64 | 101 |
|
65 | 102 | # Find BLAS and LAPACK installation |
66 | 103 | FIND_PACKAGE(BLAS REQUIRED) |
67 | 104 | FIND_PACKAGE(LAPACK REQUIRED) |
| 105 | +FIND_PACKAGE(OpenMP) |
68 | 106 |
|
69 | 107 | # Determine how to mangle names between Fortran and C |
70 | 108 | INCLUDE(FortranCInterface) |
71 | 109 | FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_") |
72 | 110 | INCLUDE_DIRECTORIES(${SW4_BINARY_DIR}) |
73 | 111 | ADD_DEFINITIONS(-DCMAKE_FC_FUNC="1") |
| 112 | +INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src/double) |
| 113 | +INCLUDE_DIRECTORIES(${SW4_SOURCE_DIR}/src) |
74 | 114 |
|
75 | 115 | # Check validity of different flags |
76 | 116 | INCLUDE(CheckCXXCompilerFlag) |
@@ -100,35 +140,52 @@ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${RELWITHDEBINFO_FLAGS}) |
100 | 140 | # Define source files |
101 | 141 | FILE(GLOB SW4_QUADPACK_SRC_FILES src/quadpack/*.f) |
102 | 142 |
|
103 | | -SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C |
104 | | - src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C |
105 | | - src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C |
| 143 | +SET(SW4_SRC_C_FILES src/main.C src/EW.C src/Sarray.C src/version.C src/parseInputFile.C |
| 144 | + src/ForcingTwilight.C src/curvilinearGrid.C src/parallelStuff.C src/Source.C |
| 145 | + src/MaterialProperty.C src/MaterialData.C src/material.C src/setupRun.C |
106 | 146 | src/solve.C src/Parallel_IO.C src/Image.C src/GridPointSource.C src/MaterialBlock.C |
107 | | - src/TimeSeries.C src/sacsubc.C src/SuperGrid.C |
108 | | - src/TestRayleighWave.C src/MaterialPfile.C src/Filter.C src/Polynomial.C |
109 | | - src/SecondOrderSection.C src/time_functions.C src/Qspline.C |
110 | | - src/EtreeFile.C src/MaterialIfile.C src/GeographicProjection.C |
111 | | - src/Image3D.C src/MaterialVolimagefile.C src/SfileOutput.C |
112 | | - src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C src/sacutils.C |
113 | | - src/consintp.C src/addmemvarforcing2.C src/ESSI3D.C src/ESSI3DHDF5.C src/sachdf5.C src/readhdf5.C) |
114 | | - |
115 | | -SET(SW4_SRC_F_FILES src/addsgd.f src/bcfort.f |
116 | | - src/randomfield3d.f src/testsrc.f src/twilightfort.f |
117 | | - src/boundaryOp.f src/bndryOpNoGhost.f90 src/rayleighfort.f src/twilightsgfort.f |
118 | | - src/curvilinear4.f src/curvilinear4sg.f |
119 | | - src/innerloop-ani-sgstr-vc.f src/checkanisomtrl.f src/computedtaniso.f |
120 | | - src/rhs4curvilinear.f src/velsum.f src/gradients.f |
121 | | - src/rhs4curvilinearsg.f src/energy4.f |
122 | | - src/rhs4th3fort.f src/lamb_exact_numquad.f src/solerr3.f |
123 | | - src/bcfortanisg.f src/ilanisocurv.f |
124 | | - src/anisomtrltocurvilinear.f src/bcfreesurfcurvani.f |
125 | | - src/tw_aniso_force_tt.f src/tw_aniso_force.f src/tw_ani_stiff.f90 |
126 | | - src/rhs4th3fortwind.f src/scalar_prod.f90 src/addsg4wind.f90 src/updatememvar.f90) |
| 147 | + src/TimeSeries.C src/sacsubc.C src/SuperGrid.C src/TestRayleighWave.C src/MaterialPfile.C |
| 148 | + src/Filter.C src/Polynomial.C src/SecondOrderSection.C src/time_functions.C src/Qspline.C |
| 149 | + src/MaterialIfile.C src/GeographicProjection.C src/Image3D.C src/ESSI3D.C src/ESSI3DHDF5.C |
| 150 | + src/MaterialVolimagefile.C src/MaterialRfile.C src/MaterialSfile.C src/AnisotropicMaterialBlock.C |
| 151 | + src/sacutils.C src/DataPatches.C src/addmemvarforcing2.C src/consintp.C src/oddIoddJinterp.C |
| 152 | + src/evenIoddJinterp.C src/oddIevenJinterp.C src/evenIevenJinterp.C src/CheckPoint.C src/geodyn.C |
| 153 | + src/AllDims.C src/Patch.C src/RandomizedMaterial.C src/MaterialInvtest.C src/sw4-prof.C |
| 154 | + src/sachdf5.C src/readhdf5.C src/TestTwilight.C src/TestPointSource.C src/curvilinear4sgwind.C |
| 155 | + src/TestEcons.C src/GridGenerator.C src/GridGeneratorGeneral.C src/GridGeneratorGaussianHill.C |
| 156 | + src/CurvilinearInterface2.C src/SfileOutput.C src/pseudohess.C src/fastmarching.C src/solveTT.C |
| 157 | + src/rhs4th3point.C src/MaterialGMG.C src/addsgdc.C src/bcfortc.C src/bcfortanisgc.C |
| 158 | + src/bcfreesurfcurvanic.C src/boundaryOpc.C src/energy4c.C src/checkanisomtrlc.C src/computedtanisoc.C |
| 159 | + src/curvilinear4sgc.C src/gradientsc.C src/randomfield3dc.C src/innerloop-ani-sgstr-vcc.C |
| 160 | + src/ilanisocurvc.C src/rhs4curvilinearc.C src/rhs4curvilinearsgc.C src/rhs4th3fortc.C src/solerr3c.C |
| 161 | + src/testsrcc.C src/rhs4th3windc.C src/tw_aniso_forcec.C src/tw_aniso_force_ttc.C src/velsumc.C |
| 162 | + src/twilightfortc.C src/twilightsgfortc.C src/tw_ani_stiffc.C src/anisomtrltocurvilinearc.C |
| 163 | + src/scalar_prodc.C src/updatememvarc.C src/addsg4windc.C src/bndryOpNoGhostc.C src/rhs4th3windc2.C |
| 164 | + src/Sarray.h src/double/sw4.h) |
| 165 | + |
| 166 | + |
| 167 | +SET(SW4_SRC_F_FILES src/rayleighfort.f src/lamb_exact_numquad.f) |
127 | 168 |
|
128 | 169 | ADD_EXECUTABLE(sw4 ${SW4_SRC_C_FILES} ${SW4_SRC_F_FILES} ${SW4_QUADPACK_SRC_FILES}) |
129 | | -TARGET_LINK_LIBRARIES(sw4 ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} |
| 170 | +TARGET_LINK_LIBRARIES(sw4 PUBLIC ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} |
130 | 171 | ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} |
131 | | - ${PROJ4_LIBRARIES} ${CENCALVM_LIBRARIES}) |
| 172 | + ${PROJ_LIBRARIES} ${HDF5_LIBRARIES}) |
| 173 | + |
| 174 | +IF(OpenMP_FOUND) |
| 175 | + TARGET_LINK_LIBRARIES(sw4 PRIVATE OpenMP::OpenMP_CXX) |
| 176 | +ENDIF (OpenMP_FOUND) |
| 177 | + |
| 178 | +IF (USE_FFTW3) |
| 179 | + TARGET_LINK_LIBRARIES(sw4 PRIVATE fftw3) |
| 180 | +ENDIF (USE_FFTW3) |
| 181 | + |
| 182 | +IF (USE_PROJ) |
| 183 | + TARGET_LINK_LIBRARIES(sw4 PRIVATE PROJ::proj) |
| 184 | +ENDIF (USE_PROJ) |
| 185 | + |
| 186 | +IF(USE_ZFP) |
| 187 | + TARGET_LINK_LIBRARIES(sw4 PRIVATE h5z_zfp::h5z_zfp) |
| 188 | +ENDIF (USE_ZFP) |
132 | 189 |
|
133 | 190 | # Show the banner once sw4 is built |
134 | 191 | ADD_CUSTOM_COMMAND(TARGET sw4 POST_BUILD COMMAND cat ${SW4_SOURCE_DIR}/wave.txt) |
|
0 commit comments