11cmake_minimum_required (VERSION 3.10)
22
3+ # Set policy CMP0135 to NEW to avoid timestamp warnings
4+ if (POLICY CMP0135)
5+ cmake_policy (SET CMP0135 NEW)
6+ endif ()
7+
38# Set default build type to Release if not specified
49if (NOT CMAKE_BUILD_TYPE )
510 set (CMAKE_BUILD_TYPE Release)
@@ -16,16 +21,11 @@ endif()
1621set (GCC_LIB_DIR "${GCC_HOME} /lib64" )
1722set (GCC_LIB32_DIR "${GCC_HOME} /lib" )
1823
19- # Set GCC compilers (can be overridden by PETSc if enabled)
24+ # Set GCC compilers
2025set (CMAKE_C_COMPILER "${GCC_HOME} /bin/gcc" CACHE STRING "Set C compiler" )
2126set (CMAKE_CXX_COMPILER "${GCC_HOME} /bin/g++" CACHE STRING "Set C++ compiler" )
2227set (CMAKE_Fortran_COMPILER "${GCC_HOME} /bin/gfortran" CACHE STRING "Set Fortran compiler" )
2328
24- # Find MPI (uncomment if needed)
25- # find_package(MPI REQUIRED)
26- # set(CMAKE_C_COMPILER ${MPI_C_COMPILER})
27- # set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
28-
2929# Find OpenMP
3030find_package (OpenMP REQUIRED)
3131
@@ -50,13 +50,16 @@ else()
5050 message (STATUS "Using single core for building" )
5151endif ()
5252
53+ # Limit cores for Boost build to avoid issues
54+ set (BOOST_BUILD_CORES 16)
55+
5356# Set compiler flags
54- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 ${MPI_CXX_COMPILE_FLAGS} -Wall -Wno-unused-function -Wno-unused-variable " )
55- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_COMPILE_FLAGS} " )
57+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wno-unused-function" )
58+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} " )
5659set (CMAKE_CXX_FLAGS_DEBUG "-g" )
5760set (CMAKE_CXX_FLAGS_RELEASE "-O3" )
5861set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -cpp -fPIC -fdefault-real-8 -ffree-line-length-0" )
59- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_CXX_LINK_FLAGS} " )
62+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
6063
6164# Add OpenMP flags
6265if (OpenMP_CXX_FOUND)
@@ -68,154 +71,74 @@ if(OpenMP_Fortran_FOUND)
6871endif ()
6972
7073# Set RPATH usage
74+ set (CMAKE_INSTALL_RPATH "${DEP_INSTALL_DIR} /lib;${GCC_LIB_DIR} ;${GCC_LIB32_DIR} " )
7175set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
7276
7377add_definitions (-DRTE_USE_CBOOL)
7478
75- # HDF5
76- find_library (HDF5_LIB NAMES hdf5 hdf5_serial HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
77- find_library (HDF5_HL_LIB NAMES hdf5_hl HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
78- if (NOT HDF5_LIB OR NOT HDF5_HL_LIB)
79- message (STATUS "HDF5 or HDF5 high-level library not found in ${DEP_INSTALL_DIR} , installing..." )
80- ExternalProject_Add(
81- hdf5_ext
82- URL https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz
83- PREFIX ${CMAKE_SOURCE_DIR} /_deps/hdf5
84- CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env
85- CC=${CMAKE_C_COMPILER}
86- CXX=${CMAKE_CXX_COMPILER}
87- <SOURCE_DIR>/configure
88- --prefix =${DEP_INSTALL_DIR}
89- --enable-cxx
90- --enable-hl
91- --disable-shared
92- --enable-static
93- --with-zlib=/usr
94- BUILD_COMMAND make -j${N_CORES}
95- INSTALL_COMMAND make install
96- UPDATE_COMMAND ""
97- BUILD_IN_SOURCE 1
98- BUILD_ALWAYS FALSE
99- )
100- set (HDF5_NEEDS_INSTALL TRUE )
101- set (HDF5_LIB ${DEP_INSTALL_DIR} /lib/libhdf5.a)
102- set (HDF5_HL_LIB ${DEP_INSTALL_DIR} /lib/libhdf5_hl.a)
103- else ()
104- message (STATUS "HDF5 found: ${HDF5_LIB} " )
105- message (STATUS "HDF5 high-level library found: ${HDF5_HL_LIB} " )
106- endif ()
107-
108- # NetCDF-C (depends on HDF5)
109- find_library (NETCDF_LIB NAMES netcdf HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
110- if (NOT NETCDF_LIB)
111- message (STATUS "NetCDF-C not found in ${DEP_INSTALL_DIR} , installing..." )
112- ExternalProject_Add(
113- netcdf-c_ext
114- URL https://github.com/Unidata/netcdf-c/archive/v4.3.3.1.tar.gz
115- PREFIX ${CMAKE_SOURCE_DIR} /_deps/netcdf-c
116- CONFIGURE_COMMAND <SOURCE_DIR>/configure
117- --prefix =${DEP_INSTALL_DIR}
118- CC=${CMAKE_C_COMPILER}
119- CXX=${CMAKE_CXX_COMPILER}
120- FC=${CMAKE_Fortran_COMPILER}
121- --disable-dap
122- --disable-byterange
123- --with-hdf5=${DEP_INSTALL_DIR}
124- BUILD_COMMAND make -j${N_CORES}
125- INSTALL_COMMAND make install
126- DEPENDS hdf5_ext
127- UPDATE_COMMAND ""
128- BUILD_ALWAYS FALSE
129- )
130- set (NETCDF_C_NEEDS_INSTALL TRUE )
131- set (NETCDF_LIB ${DEP_INSTALL_DIR} /lib/libnetcdf.a)
132- else ()
133- message (STATUS "NetCDF-C found in ${DEP_INSTALL_DIR} /lib" )
134- endif ()
135-
136- # NetCDF-C++ (depends on NetCDF-C and HDF5)
137- find_library (NETCDF_CXX_LIB NAMES netcdf_c++4 HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
138- if (NOT NETCDF_CXX_LIB)
139- message (STATUS "NetCDF-C++ not found in ${DEP_INSTALL_DIR} , installing..." )
140- ExternalProject_Add(
141- netcdf-cxx_ext
142- URL https://github.com/Unidata/netcdf-cxx4/archive/v4.3.0.tar.gz
143- PREFIX ${CMAKE_SOURCE_DIR} /_deps/netcdf-cxx
144- CONFIGURE_COMMAND <SOURCE_DIR>/configure
145- --prefix =${DEP_INSTALL_DIR}
146- CC=${CMAKE_C_COMPILER}
147- CXX=${CMAKE_CXX_COMPILER}
148- CPPFLAGS=-I${DEP_INSTALL_DIR} /include
149- LDFLAGS=-L${DEP_INSTALL_DIR} /lib
150- BUILD_COMMAND make -j${N_CORES}
151- INSTALL_COMMAND make install
152- DEPENDS netcdf-c_ext hdf5_ext
153- UPDATE_COMMAND ""
154- BUILD_ALWAYS FALSE
155- )
156- set (NETCDF_CXX_NEEDS_INSTALL TRUE )
157- set (NETCDF_CXX_LIB ${DEP_INSTALL_DIR} /lib/libnetcdf_c++4.a)
158- else ()
159- message (STATUS "NetCDF-C++ found in ${DEP_INSTALL_DIR} /lib" )
160- endif ()
161-
162- # Boost
163- find_library (BOOST_SYSTEM_LIB NAMES boost_system HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
164- find_library (BOOST_FILESYSTEM_LIB NAMES boost_filesystem HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
165- if (NOT BOOST_SYSTEM_LIB OR NOT BOOST_FILESYSTEM_LIB)
166- message (STATUS "Boost not found in ${DEP_INSTALL_DIR} , installing..." )
167- ExternalProject_Add(
168- boost_ext
169- URL https://archives.boost.io/release/1.87.0/source /boost_1_87_0.tar.bz2
170- PREFIX ${CMAKE_SOURCE_DIR} /_deps/boost
171- CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh
172- --prefix =${DEP_INSTALL_DIR}
173- --with-libraries=system ,filesystem
174- BUILD_COMMAND <SOURCE_DIR>/b2
175- -j${N_CORES}
176- install
177- --prefix =${DEP_INSTALL_DIR}
178- link=static
179- threading=multi
180- INSTALL_COMMAND ""
181- UPDATE_COMMAND ""
182- BUILD_IN_SOURCE 1
183- BUILD_ALWAYS FALSE
184- )
185- set (BOOST_NEEDS_INSTALL TRUE )
186- set (Boost_INCLUDE_DIRS ${DEP_INSTALL_DIR} /include )
187- set (Boost_LIBRARIES ${DEP_INSTALL_DIR} /lib/libboost_system.a ${DEP_INSTALL_DIR} /lib/libboost_filesystem.a)
188- else ()
189- message (STATUS "Boost found in ${DEP_INSTALL_DIR} /lib" )
190- set (Boost_INCLUDE_DIRS ${DEP_INSTALL_DIR} /include )
191- set (Boost_LIBRARIES ${BOOST_SYSTEM_LIB} ${BOOST_FILESYSTEM_LIB} )
192- endif ()
193-
194- # Find system libraries
195- find_library (DL_LIB NAMES dl)
196- if (NOT DL_LIB)
197- message (FATAL_ERROR "libdl not found. Please install the dynamic linking library." )
198- else ()
199- message (STATUS "libdl found: ${DL_LIB} " )
200- endif ()
201-
202- find_library (Z_LIB NAMES z)
203- if (NOT Z_LIB)
204- message (FATAL_ERROR "zlib not found. Please install zlib." )
205- else ()
206- message (STATUS "zlib found: ${Z_LIB} " )
207- endif ()
208-
20979# Include directories
21080include_directories (
21181 include
21282 ${DEP_INSTALL_DIR} /include
213- ${MPI_INCLUDE_PATH}
214- ${Boost_INCLUDE_DIRS}
21583 ${CMAKE_SOURCE_DIR} /external/rte-rrtmgp-cpp/include
21684 ${CMAKE_SOURCE_DIR} /external/rte-rrtmgp-cpp/include_test
21785)
21886
87+ # ExternalProject for HDF5
88+ ExternalProject_Add(
89+ hdf5_ext
90+ URL https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.1/src/hdf5-1.10.1.tar.gz
91+ PREFIX ${CMAKE_SOURCE_DIR} /_deps/hdf5
92+ CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix =${DEP_INSTALL_DIR} --enable-cxx --enable-fortran --enable-shared --with-pic CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} FC=${CMAKE_Fortran_COMPILER}
93+ BUILD_COMMAND make -j${N_CORES}
94+ INSTALL_COMMAND make install
95+ UPDATE_COMMAND ""
96+ BUILD_ALWAYS FALSE
97+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
98+ )
99+
100+ # ExternalProject for NetCDF-C (depends on HDF5)
101+ ExternalProject_Add(
102+ netcdf-c_ext
103+ URL https://github.com/Unidata/netcdf-c/archive/v4.3.3.1.tar.gz
104+ PREFIX ${CMAKE_SOURCE_DIR} /_deps/netcdf-c
105+ CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix =${DEP_INSTALL_DIR} --enable-netcdf-4 --enable-shared --with-pic --disable-dap CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} FC=${CMAKE_Fortran_COMPILER} CPPFLAGS=-I${DEP_INSTALL_DIR} /include LDFLAGS=-L${DEP_INSTALL_DIR} /lib
106+ BUILD_COMMAND make -j${N_CORES}
107+ INSTALL_COMMAND make install
108+ UPDATE_COMMAND ""
109+ BUILD_ALWAYS FALSE
110+ DEPENDS hdf5_ext
111+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
112+ )
113+
114+ # ExternalProject for NetCDF-CXX (depends on NetCDF-C)
115+ ExternalProject_Add(
116+ netcdf-cxx4_ext
117+ URL https://github.com/Unidata/netcdf-cxx4/archive/v4.3.0.tar.gz
118+ PREFIX ${CMAKE_SOURCE_DIR} /_deps/netcdf-cxx4
119+ CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix =${DEP_INSTALL_DIR} --enable-shared --with-pic CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CPPFLAGS=-I${DEP_INSTALL_DIR} /include LDFLAGS=-L${DEP_INSTALL_DIR} /lib
120+ BUILD_COMMAND make -j${N_CORES}
121+ INSTALL_COMMAND make install
122+ UPDATE_COMMAND ""
123+ BUILD_ALWAYS FALSE
124+ DEPENDS netcdf-c_ext
125+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
126+ )
127+
128+ # ExternalProject for Boost
129+ ExternalProject_Add(
130+ boost_ext
131+ URL https://archives.boost.io/release/1.87.0/source /boost_1_87_0.tar.gz
132+ PREFIX ${CMAKE_SOURCE_DIR} /_deps/boost
133+ CONFIGURE_COMMAND <SOURCE_DIR>/bootstrap.sh --prefix =${DEP_INSTALL_DIR}
134+ BUILD_COMMAND <SOURCE_DIR>/b2 -j${BOOST_BUILD_CORES} install --prefix =${DEP_INSTALL_DIR}
135+ BUILD_IN_SOURCE TRUE
136+ INSTALL_COMMAND ""
137+ UPDATE_COMMAND ""
138+ BUILD_ALWAYS FALSE
139+ DOWNLOAD_EXTRACT_TIMESTAMP TRUE
140+ )
141+
219142# Add rte-rrtmgp-cpp as a subdirectory
220143add_subdirectory (external/rte-rrtmgp-cpp)
221144
@@ -241,79 +164,37 @@ add_executable(vvm2d ${SRC})
241164# Link Fortran library and runtime to the executable
242165target_link_libraries (vvm2d PRIVATE p3 gfortran)
243166
244- # Link MPI libraries (uncomment if MPI is enabled)
245- # target_link_libraries(vvm2d PRIVATE ${MPI_CXX_LIBRARIES})
246-
247167# Link OpenMP libraries
248168if (OpenMP_CXX_FOUND)
249169 target_link_libraries (vvm2d PRIVATE OpenMP::OpenMP_CXX)
250170endif ()
251171
172+ # Specify expected library paths (will be built by ExternalProject)
173+ set (HDF5_LIB ${DEP_INSTALL_DIR} /lib/libhdf5.so)
174+ set (HDF5_CXX_LIB ${DEP_INSTALL_DIR} /lib/libhdf5_cpp.so)
175+ set (NETCDF_C_LIB ${DEP_INSTALL_DIR} /lib/libnetcdf.so)
176+ set (NETCDF_CXX_LIB ${DEP_INSTALL_DIR} /lib/libnetcdf_c++4.so)
177+ set (BOOST_SYSTEM_LIB ${DEP_INSTALL_DIR} /lib/libboost_system.so)
178+ set (BOOST_FILESYSTEM_LIB ${DEP_INSTALL_DIR} /lib/libboost_filesystem.so)
179+
252180# Link libraries
253181target_link_libraries (vvm2d PRIVATE
254182 rte_rrtmgp
255- ${NETCDF_LIB}
256- ${NETCDF_CXX_LIB}
257- ${HDF5_HL_LIB}
258183 ${HDF5_LIB}
259- ${Boost_LIBRARIES}
260- ${DL_LIB}
261- ${Z_LIB}
184+ ${HDF5_CXX_LIB}
185+ ${NETCDF_C_LIB}
186+ ${NETCDF_CXX_LIB}
187+ ${BOOST_SYSTEM_LIB}
188+ ${BOOST_FILESYSTEM_LIB}
262189 stdc++
263190)
264191
265- # Link PETSc if enabled
266- option (USE_PETSC "Enable PETSc support" OFF )
267- if (USE_PETSC)
268- message (STATUS "PETSc support enabled" )
269- find_library (PETSC_LIB NAMES petsc HINTS ${DEP_INSTALL_DIR} /lib NO_DEFAULT_PATH)
270- if (NOT PETSC_LIB)
271- message (STATUS "PETSc not found in ${DEP_INSTALL_DIR} , installing..." )
272- ExternalProject_Add(
273- petsc_ext
274- GIT_REPOSITORY https://gitlab.com/petsc/petsc.git
275- GIT_TAG v3.20.5
276- GIT_SHALLOW TRUE
277- PREFIX ${CMAKE_SOURCE_DIR} /_deps/petsc
278- CONFIGURE_COMMAND <SOURCE_DIR>/configure
279- --prefix =${DEP_INSTALL_DIR}
280- --with-cc=${CMAKE_C_COMPILER}
281- --with-cxx=${CMAKE_CXX_COMPILER}
282- --with-fc=${CMAKE_Fortran_COMPILER}
283- --with-mpi=1
284- BUILD_COMMAND make -j${N_CORES}
285- INSTALL_COMMAND make install
286- UPDATE_COMMAND ""
287- BUILD_ALWAYS FALSE
288- )
289- set (PETSC_NEEDS_INSTALL TRUE )
290- set (PETSC_LIB ${DEP_INSTALL_DIR} /lib/libpetsc.so)
291- else ()
292- message (STATUS "PETSc found in ${DEP_INSTALL_DIR} /lib" )
293- endif ()
294- target_link_libraries (vvm2d PRIVATE ${PETSC_LIB} )
295- endif ()
296-
297- # Add dependencies if needed
298- if (HDF5_NEEDS_INSTALL)
299- add_dependencies (vvm2d hdf5_ext)
300- endif ()
301- if (NETCDF_C_NEEDS_INSTALL)
302- add_dependencies (vvm2d netcdf-c_ext)
303- endif ()
304- if (NETCDF_CXX_NEEDS_INSTALL)
305- add_dependencies (vvm2d netcdf-cxx_ext)
306- endif ()
307- if (BOOST_NEEDS_INSTALL)
308- add_dependencies (vvm2d boost_ext)
309- endif ()
310- if (USE_PETSC AND PETSC_NEEDS_INSTALL)
311- add_dependencies (vvm2d petsc_ext)
312- endif ()
192+ # Add dependencies
193+ add_dependencies (vvm2d hdf5_ext netcdf-c_ext netcdf-cxx4_ext boost_ext)
313194
314195# Set runtime library paths (-rpath)
315196set_target_properties (vvm2d PROPERTIES
316- LINK_FLAGS "-Wl,-rpath,${GCC_LIB_DIR} -Wl,-rpath,${GCC_LIB32_DIR } -Wl,-rpath,${DEP_INSTALL_DIR} /lib "
197+ LINK_FLAGS "-Wl,-rpath,${DEP_INSTALL_DIR} /lib -Wl,-rpath,${GCC_LIB_DIR } -Wl,-rpath,${GCC_LIB32_DIR} "
317198)
318199
319200# CPack settings
@@ -327,7 +208,6 @@ message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
327208message (STATUS " C Compiler: ${CMAKE_C_COMPILER} " )
328209message (STATUS " C++ Compiler: ${CMAKE_CXX_COMPILER} " )
329210message (STATUS " Fortran Compiler: ${CMAKE_Fortran_COMPILER} " )
330- message (STATUS " PETSc support: ${USE_PETSC} " )
331211message (STATUS " OpenMP support: ${OpenMP_CXX_FOUND} " )
332212if (OpenMP_CXX_FOUND)
333213 message (STATUS " OpenMP CXX flags: ${OpenMP_CXX_FLAGS} " )
0 commit comments